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

Mais conteúdo relacionado

Mais procurados

『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기복연 이
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자Young Min Shin
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry RunnerServerDevCamp
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께지수 윤
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP FrameworkInseok Lee
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
[114]파파고 서비스 2년의 경험
[114]파파고 서비스 2년의 경험[114]파파고 서비스 2년의 경험
[114]파파고 서비스 2년의 경험NAVER D2
 
112 deview
112 deview112 deview
112 deviewNAVER D2
 

Mais procurados (8)

『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
[114]파파고 서비스 2년의 경험
[114]파파고 서비스 2년의 경험[114]파파고 서비스 2년의 경험
[114]파파고 서비스 2년의 경험
 
112 deview
112 deview112 deview
112 deview
 

Semelhante a 스마일게이트 서버개발캠프 - HGHSS - 합격하소서

하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 iFunFactory Inc.
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개Hyoungjun Kim
 
DevOps는 원격근무를 추구하면 안되는 걸까?
DevOps는 원격근무를 추구하면 안되는 걸까?DevOps는 원격근무를 추구하면 안되는 걸까?
DevOps는 원격근무를 추구하면 안되는 걸까?Jesang Yoon
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
테스팅을위한선행조건 명세
테스팅을위한선행조건 명세테스팅을위한선행조건 명세
테스팅을위한선행조건 명세규동 최규동
 
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습 가이드 :: 윤석찬 (AWS 테크에반젤...
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습  가이드 ::  윤석찬 (AWS 테크에반젤...서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습  가이드 ::  윤석찬 (AWS 테크에반젤...
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습 가이드 :: 윤석찬 (AWS 테크에반젤...Amazon Web Services Korea
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
개발자 리서치 활동강화 방안 180109
개발자 리서치 활동강화 방안 180109개발자 리서치 활동강화 방안 180109
개발자 리서치 활동강화 방안 180109한 경만
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기Minyoung Jeong
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 

Semelhante a 스마일게이트 서버개발캠프 - HGHSS - 합격하소서 (20)

하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
 
DevOps는 원격근무를 추구하면 안되는 걸까?
DevOps는 원격근무를 추구하면 안되는 걸까?DevOps는 원격근무를 추구하면 안되는 걸까?
DevOps는 원격근무를 추구하면 안되는 걸까?
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
테스팅을위한선행조건 명세
테스팅을위한선행조건 명세테스팅을위한선행조건 명세
테스팅을위한선행조건 명세
 
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습 가이드 :: 윤석찬 (AWS 테크에반젤...
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습  가이드 ::  윤석찬 (AWS 테크에반젤...서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습  가이드 ::  윤석찬 (AWS 테크에반젤...
서버리스(Serverless)를 위한 Zombie Microservices Workshop 실습 가이드 :: 윤석찬 (AWS 테크에반젤...
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
개발자 리서치 활동강화 방안 180109
개발자 리서치 활동강화 방안 180109개발자 리서치 활동강화 방안 180109
개발자 리서치 활동강화 방안 180109
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 

스마일게이트 서버개발캠프 - HGHSS - 합격하소서

  • 1. 자소설닷컴 클론 코딩 프로젝트 HGHSS 스마일게이트 서버개발캠프 합격하소서(HGHSS)
  • 2. 팀원 소개 채윤병명다연김나영 - vue.js를 이용한 프론트엔드 - Django channels 기반의 채팅 서버 - 데이터 클롤링을 통한 DB 데이터 구축 - Spring boot 기반의 채용 공고 서버 - redis를 이용한 실시간 랭킹 - HAproxy를 이용한 API Gateway 구축 - Spring security 기반의 인증 서버 - Spring boot를 이용한 자기소개서 서버 - OAuth를 활용한 소셜 로그인
  • 3. 목표1 기획 및 설계2 주요 기능 및 시연 영상3 개인 발표 및 소감4 목차
  • 5. “클론 코딩의 장점을 최대한 흡수한다.”
  • 6. 클론코딩의 장점 기획 및 디자인에 들어가는 시간을 최소화 할 수 있다. 평소 많이 사용하고, 잘 만들어졌다고 생각한 서비스를 클론 코딩해보 며 해당 서비스의 작동방식을 스스로 생각해볼 수 있다. 타겟 서비스에서 일어날 만한 문제를 예상해보고 그 문제를 어떻게 대 처했고, 또 어떻게 해결할 수 있는지 스스로 고민해보고 경험해 볼 수 있다.
  • 7. 서비스 목적이 분명 소비자의 Needs 파악 안정적인 사이트 잘 만들어진 서비스란?
  • 9. 소비자의 needs 파악 & 서비스 목적이 분명&
  • 10. 안정적인 사이트 최대 동시 접속자 수 채팅방 최대 인원 100,000명 1000명 자기소개서 작성 수 채용 공고 수 810,272 593,876 62,749 523 610 301 3월 9월 12월 2018년 9월 기준 트래픽 급변화에도 정상적인 서비스를 제공하는 사이트
  • 12. 구현 기능 사용자가 증가했을 때 문제가 생길만한 기능 위주로 구현! 채용공고 조회 / 자소서 저장 / 구직자 채팅이 가장 활발한 사용을 보였다.
  • 14. ERD
  • 16. 홈 & 로그인, 회원가입 실시간 랭킹 로그인, 회원가입
  • 18. 채용 공고 상세 조회 자기소개서 문항 및 글자수 조회 채용 공고 상세
  • 19. 자기소개서 목록 조회 카드 이동 자기소개서 작성 맞춤법 검사 자기소개서 목록 및 작성
  • 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 변경
  • 28. A. 채팅 서버 개선 1 ­ 개선 후 TPS : 251 Error : 0%
  • 29. B. 채팅 서버 개선 2 ­ 개선 과정 1. 소켓 개수 제한이 프로세스 별 제한이라면, 소켓 프로세스를 여러 개 돌리자! nginx daphne : 8001포트 daphne : 8002포트 daphne : 8003포트 • nginx에서 제공하는 round robbin 방식으로 요청을 동일하게 분산 시킨다.
  • 30. B. 채팅 서버 개선 2 ­ 개선 과정 2. nginx 설정 변경, 포트 열기, daphne 서비스 등록 3. 포트 열기 및 daphne 서비스 등록
  • 31. B. 채팅 서버 개선 2 ­ 개선 후 TPS : 580 Error : 0%
  • 33. 테스트 환경 및 목표 목표 : 총 실행 횟수 약 20만에서 에러율 0% EC2 t2.micro RDS db.t2.micro Elasticache t2.micro 개발 환경 유저 : 99명 쓰레드 당 실행 횟수 : 2,000번 총 실행 횟수 : 198,000번 테스트 설정
  • 34. A. 캘린더 API 개선 ­ 개선 전 중단 발생
  • 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 발생 • 예외처리
  • 38. A. 캘린더 API 개선 ­ 개선 후
  • 39. B. 상세페이지 API 개선 ­ 개선 전 낮은 TPS와 높은 에러율
  • 40. B. 상세페이지 API 개선­ 원인과 해결 1. 느린 API 속도 • 중복 데이터 캐시 사용하여 메모리 상주
  • 41. B. 상세페이지 API 개선­ 원인과 해결 2. AWS t2.micro Redis 메모리 부족 문제 • REDIS connection 최대 수 설정 • 각 캐시별 만료 시간 설정
  • 42. B. 상세페이지 API 개선 ­ 개선 후
  • 44. 테스트 환경 및 목표 목표 : 로그인 API의 TPS를 200까지 높이기 EC2 t2.micro RDS db.t2.micro 개발 환경 유저 : 99명 쓰레드 당 실행 횟수 : 1,000번 총 실행 횟수 : 99,000번 테스트 설정
  • 45. A. 로그인 API 개선 ­ 개선 전 너무 낮은 TPS
  • 46. A. 로그인 API 개선 ­ 원인과 해결 원인 : 낮은 AWS EC2 t2.micro 성능 • 비밀번호 암호화를 위해 Spring Security에서 제공하는 BCryptPasswordEncoder를 사용했는데, 로그인시에 비밀번호 일치여부 확인을 위해 매번 해쉬함수를 돌리는 과정을 서버가 감당하지 못했다. • default
  • 47. A. 로그인 API 개선 ­ 원인과 해결 해결 • 결국 비밀번호의 암호화와 로그인 속도의 트레이드 오프 문제였다. 따라서 서버의 하드웨어 성능과 우리가 목표로하는 성능(TPS)을 고려하여, 암호화 강도(strength) 를 디폴트 값인 8에서 4로 낮추었다.
  • 48. A. 로그인 API 개선 ­ 개선 후
  • 49. B. 소셜 로그인 ­ 개선 전 문제 : 토큰 전달 시, 외부에 노출 가능성이 존재 • 리다이렉트 시, 토큰이 query string으로 전달되므로 노출 가능하다.
  • 50. B. 소셜 로그인 ­ 개선 후 해결 : 클라이언트에서 인증 서버로 토큰을 요청하는 방식으로 로직 변경
  • 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. 팀의 목표 : 클론 코딩의 장점을 최대한 흡수한다 평소 많이 사용하고, 잘 만들어졌다고 생각한 서비스를 클론 코딩해보며 해당 서비스 의 작동방식을 스스로 생각해볼 수 있다. 타겟 서비스에서 일어날 만한 문제를 예상해보고 그 문제를 어떻게 대처했고, 또 어떻게 해결할 수 있는지 스스로 고민해보고 경험해 볼 수 있다. 부하 분산을 예측한 아키텍처 설계 타겟 서비스를 기준으로 테스트 목표 설정과 개선