서론 회사에서 만 2년 동안 격무에 시달리다가 비로소 최근에 여유가 생겨서 토이 프로젝트를 만들어보게 되었습니다. 업무에서 해보지 못한 것들이 항상 아쉬운 느낌으로 남아있어서 제 맘대로 해보고 싶은거 다 해볼 수 있는 놀이터 같은 곳이 있으면 좋겠다는 생각에 시작하게 되었습니다. 저는 서비스가 만들어지기에 앞서서 가장 먼저 개발 환경을 만들어두고 싶었습니다. 그래야 간단한 기능 구현들도 모두 프런트 개발자와 같이 확인하면서 만들 수 있기 때문이죠. 그래서 간단한 회원가입이랑 로그인 서비스만 만들어두고 바로 클라우드 인프라를 구성하기로 마음을 먹어버렸습니다. 당면한 많은 문제들 먼저 제가 당면한 문제들은 아래와 같습니다 보안까지 신경쓰면서 클라우드에 배포해본적이 없다 aws에 어떤 서비스들을 띄어야 하는지..
안녕하세요, 저는 flab에서 1월에서 7월까지 멘토링을 수강하고 두나무의 자회사인 futurewiz라는 회사에 서버 개발자로 취업하였습니다. 제가 맡은 업무는 upbit에서 발생하는 자금세탁을 방지하는 것입니다. 모두가 알만한 서비스에서 제가 꿈꾸던 개발자로서 업무를 해나간다는게 보람차고 만족스럽습니다. 지금부터 제가 1. 어떤 상황에서 flab을 수강하게 되었는지, 2. 왜 flab을 선택했는지, 3. 들으면서 어떤 과정이 있었는지 그리고 4. 제가 느낀 장단점에 대해서 알려드리겠습니다. 멘토링을 들었을 때의 상황 저는 서울 4년제 대학에서 IT학과의 학생이었습니다. 하지만 저의 과 특성상 개발자를 양성하는게 아니라 기획자를 양성하는 것에 정체성이 있었고, 저 또한 개발이 참 어렵기만한 학생이었습니다..
개요 Helparty를 클라우드에 배포하고 다른 클라우드 서버에 띄어놓은 여러 어플리케이션들을 연결시켜 대략적인 서비스를 제공하기 위한 기반을 완성했습니다. 네이버 클라우드에서 크레딧을 지급해줘서 비용 문제로 부터 자유로울 수 있었습니다. 이제 ngrinder를 통해 서버에 부하를 걸어보고 난뒤 pinpoint와 어플리케이션들의 cpu 사용률을 보고 모니터링을 진행한 뒤 프로그램을 개선시킬 여지가 있는지 확인해보겠습니다. WAS 서버 증설에 따른 성능 비교 먼저, WAS 서버 1개를 사용할 때와 WAS 서버 2개를 사용할 때를 비교하여 WAS 서버를 Scale Out 방식으로 증설하는 Helparty에서 WAS를 하나씩 늘릴 때마다 얼마나 큰 성능 향상이 있는지 확인해보겠습니다. WAS 1대를 사용하는 ..
개요 제가 만들고 있는 Helparty는 대용량 트래픽이 요청되는 상황에서도 안정적인 운영을 보이도록 설계하고 있습니다. 그러기 위해서는 프로그램에서 성능 이슈에 밀접하게 연관된 데이터베이스 영역을 눈여겨 봐야합니다. 지금의 데이터베이스는 하나의 하드웨어에서 모든 쿼리 연산을 책임지고 있습니다. 하나의 하드웨어만 잘못되도 프로그램 전체가 멈추게 되는 불안정한 구조이고 성능적인 면에서도 이곳에서 문제가 발생하면 프로그램 전체가 느려지는 병목 지점이 됩니다. 따라서 저는 데이터베이스 Replication을 만들어서 쿼리의 성격에 따라 분기를 하여 두대의 데이터베이스로 쿼리를 보내려고 합니다. 이렇게 함으로써 하나의 데이터베이스에서 모든 쿼리의 작업을 도맡아 했던 걸 2개의 데이터베이스가 나눠서 작업을 처리하..
개요 Helparty를 클라우드에 배포하고 다른 클라우드 서버에 띄어놓은 DataBase에 연결시켜서 대략적인 서비스를 제공하기 위한 기반을 완성했습니다. 이제 ngrinder를 통해 서버에 부하를 걸어보고 난 뒤 pinpoint를 was 서버에 붙혀서 서버의 성능을 분석하고 문제를 진단해보겠습니다. ngrinder 서버 환경 저는 처음에 스팩이 '[SSD] mysql-ngrinder 의 기본 스토리지 50 GB'인 A 서버만을 사용하였습니다. 그 서버만을 사용해서 가상 사용자가 300인 요청을 보내도록 테스트를 진행했더니 ngrinder서버에 메모리 릭 현상이 발생했습니다. 그래서 다른 성능이 더 좋은 B 서버를 만들고 두 곳에서 부하를 나눠서 요청을 보내도록 테스트를 진행했습니다. 서로 같은 요청을 ..
프로젝트 'Helparty'를 진행하면서 여러방식의 성능 튜닝 방법들이 있다는 걸 알게되었습니다. 그리고 이번에 진행해볼 방법은 데이터베이스와 소통하는 언어를 튜닝해서 MySql이 일하는 방식을 효율적으로 안내하여 성능을 향상 시키는 '쿼리 성능 튜닝'을 진행하겠습니다. 저의 웹 서비스 'Helparty'에서 사용하는 쿼리 중에 3개의 테이블을 조인 하는 쿼리의 수행시간을 확인하고 실행계획을 토대로 튜닝을 해보겠습니다. 튜닝할 코드 SELECT gb.id id, gb.title title, gb.content content, gb.created_at create_at, gb.modified_at modified_at, g.gym_name gym_name, g.phone_number phone_number..
저는 프로젝트 Helparty를 만들어가면서 수많은 오류들을 만났고 그 오류들은 저의 사소한 오류인 것 부터 시작해 중요한 구조적인 문제까지 다양한 것들이었습니다. 이러한 오류들을 해결하기 위해서는 실행된 코드의 흔적을 알려주는 Log가 필요합니다. 그리고 코드를 훗날 유지보수 할 때 개발자의 시간을 절약해주고 편하게 작업하는데 Log는 필수적입니다. 하지만 이러한 목적을 위해서라면 System.out.println() [이하 sysout]을 사용해도 충분합니다. 그럼 왜 sysout을 사용하지 않고 로그 라이브러리를 사용해야 하는 지 알아보겠습니다. System.out.println을 사용하지 않고 로그 라이브러리를 사용하는 이유 sysout을 사용하면 자바를 처음 배울 때 모두가 알게되는 log를 남..
정황 소개 저는 운동 동행 구하기 웹 어플리케이션 'Helparty'를 만드는 중 입니다. 잘 만들고 있던 중에 게시물 작성 기능과, 수정 기능 그리고 삭제 기능을 만들던 과정에서 로그인 되어 있는 유저의 정보를 확인하기 위해 반복적으로 컨트롤러 클래스에서 session을 통해 로그인 되어 있는 이메일을 가져오는 로직이 반복된다는 것을 알았습니다. 그리고 이런 로그인을 통한 유저 확인 로직은 계속해서 반복되어 나타날 것임을 알고 있습니다. 따라서 저는 이 로그인 정보를 가져오는 로직을 핵심로직의 앞에 반복적으로 나타나는 중복적인 부가로직을 판단하고 분리하기로 했습니다. 1. AOP를 통한 분리 먼저, 메서드 단위로 중복적인 로직을 분리하는 AOP를 통해 구분하였습니다. AOP에는 CGlib, Java P..
- Total
- Today
- Yesterday
- scale in
- 선언적 트랜잭션
- 성능 테스트
- Filter
- memcached
- logback
- log4j2
- redis
- nGrinder
- devops
- Declarative Transaction
- interceptor
- 로그
- 쿼리 튜닝
- UTIL
- scale Out
- AWS
- AOP
- MySQL
- 성능 향상
- 유틸클래스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |