1. 자소설닷컴 클론 코딩 프로젝트
HGHSS
스마일게이트
서버개발캠프
합격하소서(HGHSS)
2. 팀원 소개
채윤병명다연김나영
- vue.js를 이용한 프론트엔드
- Django channels 기반의 채팅 서버
- 데이터 클롤링을 통한 DB 데이터 구축
- Spring boot 기반의 채용 공고 서버
- redis를 이용한 실시간 랭킹
- HAproxy를 이용한 API Gateway 구축
- Spring security 기반의 인증 서버
- Spring boot를 이용한 자기소개서 서버
- OAuth를 활용한 소셜 로그인
6. 클론코딩의 장점
기획 및 디자인에 들어가는 시간을 최소화 할 수 있다.
평소 많이 사용하고, 잘 만들어졌다고 생각한 서비스를 클론 코딩해보
며 해당 서비스의 작동방식을 스스로 생각해볼 수 있다.
타겟 서비스에서 일어날 만한 문제를 예상해보고 그 문제를 어떻게 대
처했고, 또 어떻게 해결할 수 있는지 스스로 고민해보고 경험해 볼 수
있다.
10. 안정적인 사이트
최대 동시 접속자 수 채팅방 최대 인원
100,000명 1000명
자기소개서 작성 수
채용 공고 수
810,272
593,876
62,749
523
610
301
3월 9월 12월
2018년 9월 기준
트래픽 급변화에도 정상적인 서비스를 제공하는 사이트
22. 김나영
채팅 서버 개선 1A
채팅 서버 개선 2B
- open files limits 변경
- nginx reverse proxy 이용
23. 테스트 환경 및 목표
목표 : 1000명 이상이 동시 접속 가능한 채팅 서버 구현
EC2 t2.micro
Elasticache t2.micro
개발 환경
유저 : 1,000명
쓰레드 당 실행 횟수 : 1번
총 실행 횟수 : 1,000번
테스트 설정
24. A. 채팅 서버 개선 1 개선 전
특정 소켓 개수 이상부터 에러 발생
Error : 62.9%
25. 1. 소켓 개수 제한
• 특정 개수 이상으로 생성되고나면 더이상 생성되지 않고, 기존의 소켓을 종료시키는
모습을 볼 수 있었다.
A. 채팅 서버 개선 원인과 해결
• 500개까진 에러 없이 소켓이 열린다.
user 700으로 테스트 했을 때,
618개 이상부턴 늘어나지 않음을 확인
26. A. 채팅 서버 개선 원인과 해결
2. open file limit 확인 및 변경
• linux의 경우, 프로세스 당 동시에 열 수 있는 파일 수의 제한이 있다. 소켓 또한 열린 파일로 처리한다.
• 생성 가능한 소켓의 수 = open file limit - 현재 열린 파일
<- default open file limit
<- maximum open file limit
• 시스템 전체 파일 개수 제한
• 파일 limit 50000번으로 변경
27. A. 채팅 서버 개선 원인과 해결
3. 시스템에 등록한 채팅 서비스(daphne)의 open file limit 변경
29. B. 채팅 서버 개선 2 개선 과정
1. 소켓 개수 제한이 프로세스 별 제한이라면, 소켓 프로세스를 여러 개 돌리자!
nginx
daphne : 8001포트
daphne : 8002포트
daphne : 8003포트
• nginx에서 제공하는 round robbin 방식으로 요청을 동일하게 분산 시킨다.
30. B. 채팅 서버 개선 2 개선 과정
2. nginx 설정 변경, 포트 열기, daphne 서비스 등록 3. 포트 열기 및 daphne 서비스 등록
33. 테스트 환경 및 목표
목표 : 총 실행 횟수 약 20만에서 에러율 0%
EC2 t2.micro
RDS db.t2.micro
Elasticache t2.micro
개발 환경
유저 : 99명
쓰레드 당 실행 횟수 : 2,000번
총 실행 횟수 : 198,000번
테스트 설정
35. A. 캘린더 API 개선 원인과 해결
1.Database와 Connection을 생성하는 과정에서 병목이 발생
• Connection Pool 지원 라이브러리 hikariCP 사용
• RDS t2.micro 사양에 맞춘 max_connection_pool_size 설정
36. A. 캘린더 API 개선 원인과 해결
1.Database와 Connection을 생성하는 과정에서 병목이 발생
• Connection Pool 지원 라이브러리 hikariCP 사용
• RDS t2.micro 사양에 맞춘 max_connection_pool_size 설정
37. A. 캘린더 API 개선 원인과 해결
2. broken pipe 발생
• 예외처리
46. A. 로그인 API 개선 원인과 해결
원인 : 낮은 AWS EC2 t2.micro 성능
• 비밀번호 암호화를 위해 Spring Security에서 제공하는 BCryptPasswordEncoder를
사용했는데, 로그인시에 비밀번호 일치여부 확인을 위해 매번 해쉬함수를 돌리는
과정을 서버가 감당하지 못했다.
• default
47. A. 로그인 API 개선 원인과 해결
해결
• 결국 비밀번호의 암호화와 로그인 속도의 트레이드 오프 문제였다. 따라서 서버의
하드웨어 성능과 우리가 목표로하는 성능(TPS)을 고려하여, 암호화 강도(strength)
를 디폴트 값인 8에서 4로 낮추었다.
52. 김나영
- 지원 동기 및 목표 :
- how :
• 1차 : 캠프 기간 동안 매일 간단한 일지를 작성한다. ( 좋았던 점, 싫었던 점 한 개 포함)
• 2차 : 생각보다 매일이 똑같아서, 좋았던 점과 싫었던 점을 꼽는 것이 힘들었다. 그래서 간단한 소감과
하루를 점수화하기로 했다.
• 3차 : 서버개발캠프 종료 후, 일지를 다시 읽어보며 좋은 점과 싫은 점의 공통점을 찾아본다.
그동안 프로젝트/개발 경험의 좋았던 점과 싫었던 점이 있었을 텐데, 그럼에도 왜 나는 개발이 하고 싶은
지 알고 싶다. 그래서 좋아하는 것이 정말 개발인지 아니면 개발의 일부인지를 파악해보고, 싫은 점은 감
수할 수 있을지 고민하는 시간을 갖는다.
53. 김나영
개발의 좋은 점
1. 다른 일들보다 덜 힘들게 몰입할 수 있다.
2. 문제를 해결했을 때 성취감이 크다.
3. 눈에 보이는 결과물이 있다.(=2)
- 결과 : 달성도 75%
면접 때부터 개발에 대한 동기, 진로 등 많은 고민을 해볼 수 있는 시간이었다. 그동안은 프로젝트의 결과를 만들어야 했
기에 개발을 진행했다면, 이번에는 프로젝트를 통해 나 자신에게 집중 할 수 있는 시간이었다고 생각한다. 개발하는 것에
조금 지쳐있었던 이전과 비교했을 때, 재충전의 시간이었다.
개발의 싫은 점
1. 계속해서 공부해야한다.
2. 깊게 들어가면 들어갈수록 부족한 부분이 더 크게 느껴져 허무할 때가 있다.
54. - 목표 :
- how :
지금까지는 바로 코드를 구현해왔지만 코드 구현
전에 시스템의 로직을 분명히 하고, 예외의 상황을
파악하고자 흐름도를 작성한다. 그리고 이를 바탕
으로 클래스를 구현하여 클래스를 모듈화하여 코드
를 관리한다. 이후에 예외의 상황이 생길 경우, 이를
에러로그로 작성하여 내가 놓쳤던 부분이 무엇이고,
문제의 원인이 무엇인지 확인하고 문제를 해결한다.
그리고 나의 문제점은 무엇인지 기록한다. 그리고
이를 해결하기 위해 노력하는 과정을 기록한다.
예전에는 코드를 구현할 때 유지보수, 예외처리를 생각하지 않고 코드를 구현하였다.(단지 눈속
임..) 그래서 캠프동안에는 나의 어떤 점이 이러한 행동을 하는 것인지 나의 문제점을 파악하고
이를 해결하기 위해 노력한다.
명다연
55. - 결과 : 달성도 70%
나의 문제점 = 침착하지 못하다
1. 결과를 빨리 보려는 욕심이 과해 예외 처리나 수행 루틴을 간과함
2. 문제 찾으려 코드를 살펴 봐도 당황하여 문제를 찾지 못함
3. 너무 긴 영어 오류 메시지에 당황하여 제대로 문제를 찾지 못함
이번 캠프를 통해 나도 잘 알지 못했던 나의 성격을 알게 되었고, 이를 벗어나기 위해 앞으로도 반복적으로 노력해야 함을
알았다. 앞으로도 기록을 생활하하여 어떤 실수든 한 번에서 그치도록 노력하고 항상 침착한 마음가짐을 가지도록 하겠다.
명다연
"침착하지 못한 점"을 해결하기 위해
• 이전에 기록한 흐름도를 읽으며 흐름에 맞춘 코드인지 확인
• 오류가 발생하면 덮어놓고 복사해서 구글 검색부터 할 것이 아니라, 메시지를 읽어보고 트레이스를
분석하고, 필요하면 예외 클래스를 API 문서에서 찾아 정확한 의미를 이해하기
56. - 지원 동기 및 목표 :
- how :
프로젝트를 진행하며 개발한 내용을 블로그에 포스팅하며, 아는 내용은 정리하고 어려운 부분을
앞으로 어떻게 보완할 지 고민한다.
개발자로서 할 줄 아는 것과 부족한 점을 정리하고, 이를 통해 앞으로의 방향을 설정하고 싶다.
채윤병
57. 채윤병
서버개발캠프를 통해 얻은 것
1. Springboot 기반의 RESTful API
2. JWT 기반의 인증시스템
3. 소셜로그인
4. 서버 부하 테스트
부족한 점
• 운영체제와 네트워크에 대한 이해 부족
• 비동기에 대한 이해 부족
- 결과 : 달성도 80%
• 프로젝트를 통해 Springboot 기반의 RESTful API를 개발하고 블로그에 포스팅하며, 그동안 공부했던 내용을 정리할 수
있었다.
• 평소 개발해보고 싶었던 인증서버를 개발하며 스프링 시큐리티나 토큰 기반의 인증 시스템 등, 많은 부분을 얻을 수 있었
다. 또한 내가 개발한 서버의 성능을 테스트해보고, 성능 개선에 대해 고민 할 수 있는 시간을 가질 수 있어서 좋았다.
• 반면에 컴퓨터 사이언스에 대한 기초가 많이 부족하다고 느꼈다. 개발에 기초가 되는 운영체제나 네트워크에 대한 공부
가 필요다는 생각이 들었다.
58. 팀의 목표 : 클론 코딩의 장점을 최대한 흡수한다!
기획 및 디자인에 들어가는 시간을 최소화 할 수 있다.
기획 시간 최소화
59. 팀의 목표 : 클론 코딩의 장점을 최대한 흡수한다
평소 많이 사용하고, 잘 만들어졌다고 생각한 서비스를 클론 코딩해보며 해당 서비스
의 작동방식을 스스로 생각해볼 수 있다.
타겟 서비스에서 일어날 만한 문제를 예상해보고 그 문제를 어떻게 대처했고, 또 어떻게
해결할 수 있는지 스스로 고민해보고 경험해 볼 수 있다.
부하 분산을 예측한 아키텍처 설계 타겟 서비스를 기준으로 테스트 목표 설정과 개선