우아한테크캠프 PRO/우아한테크캠프 회고록

[우아한테크캠프 Pro] 8주차 미션 후기 (안정적인 서비스 만들기)

PI.314 2023. 1. 3. 00:15

우아한테크캠프 Pro 8주차 안정적인 서비스 만들기 미션을 진행한 내용과 후기를 정리해보았습니다.

 

미션 저장소

https://github.com/Gyeom/infra-subway-performance

 

GitHub - Gyeom/infra-subway-performance

Contribute to Gyeom/infra-subway-performance development by creating an account on GitHub.

github.com

 

학습 내용

  • HTTP 개선에 따른 차이를 이해하고 Reverse Proxy 성능 개선을 해봅니다.
  • HTTP Cache 전략을 이해하여 적절한 정책을 설정해봅니다.
  • 쿼리를 최적화하여 조회 성능을 개선해봅니다.
  • 인덱스를 설정하여 조회 성능을 개선해봅니다.

단계별 요구사항 및 PR 리뷰

🚀 1단계 - 화면 응답 개선하기

  • Reverse Proxy 개선하기
  • WAS 성능 개선하기
  • 부하테스트 각 시나리오의 요청시간을 목푯값 이하로 개선 개선 전 / 후를 직접 계측하여 확인

https://github.com/next-step/infra-subway-performance/pull/410

 

[김대겸] Step1 PR by Gyeom · Pull Request #410 · next-step/infra-subway-performance

안녕하세요 리뷰어님, Step1 화면 응답 개선하기 미션 리뷰 요청드립니다~! revers proxy 및 redis 캐싱적용을 했지만 개선 효과를 비교하기 좀 어려운 상황인데, 자문을 구해도 될까요~? 감사합니다.

github.com

 

  • Reverse Proxy와 WAS에 캐싱을 적용했는데 생각보다 개선효과과 미미했다.
  • 부하테스트를 진행할 때는 일정 간격을 두고 점진적으로 VUser가 증가 되도록 시나리오를 구성해보자.

🚀 2단계 - 스케일 아웃 (with ASG)

  • springboot에 HTTP Cache, gzip 설정하기
  • Launch Template 작성하기
  • Auto Scaling Group 생성하기
  • Smoke, Load, Stress 테스트 후 결과를 기록

https://github.com/next-step/infra-subway-performance/pull/459

 

[김대겸] Step2 PR by Gyeom · Pull Request #459 · next-step/infra-subway-performance

안녕하세요 리뷰어님, 2단계 - 스케일 아웃 (with ASG) 리뷰 요청 드립니다. 일단 저번에 healthy 힌트를 주셔서, 가장 먼저 helathy 포트를 8080으로 변경하여 정상 상태로 만들었습니다. 그래도 똑같은

github.com

  • Auto Scaling은 warm up이 있어서 구간을 보다 길게 갖고 가자.

  • 시작템플릿에 redis를 띄우는 스크립트까지 포함 했다. 이렇게 되면 매 인스턴스마다 불필요하게 redis가 새로 만들어진다.

  • Controller에서 HttpServletResponse 를 받은 후 직접 `Cache-Controle`을 할당하여 설정할 수도 있고, WebContentInterceptor를 활용할 수 도 있다.
  • 로그인용 사용자 이름, 비밀번호 및 기타 민감한 정보들을 보호하기 위해 SSL 을 로그인 페이지나 회원 정보 페이지등은 SSL로 암호화하는 경우가 많다. SSL 을 사용해서 민감한 정보들을 보호한다고 해도 브라우저에 이 정보가 캐싱되면 문제가 발생할 수 있기 때문에 `Cache-Control: no-cache, no-store, must-revalidate` 와 같이 사용하면 브라우저 캐싱을 방지할 수 있다. 단 캐싱을 하지 않으면 성능 저하가 발생할 수 있으므로 로그인 페이지등에 제한적으로 사용해야 한다.

🚀 3단계 - 쿼리 최적화

  • 활동중인(Active) 부서의 현재 부서관리자(manager) 중 연봉 상위 5위안에 드는 사람들이 최근에 각 지역별로 언제 퇴실(O)했는지 조회해보세요.
    (사원번호, 이름, 연봉, 직급명, 지역, 입출입구분, 입출입시간)
  • 인덱스 설정을 추가하지 않고 200ms 이하로 반환합니다.
    • M1의 경우엔 시간 제약사항을 달성하기 어렵습니다. 2s를 기준으로 해보시고 어렵다면, 일단 리뷰요청 부탁드려요
  • 급여 테이블의 사용여부 필드는 사용하지 않습니다. 현재 근무중인지 여부는 종료일자 필드로 판단해주세요.

https://github.com/next-step/infra-subway-performance/pull/485

 

[김대겸] Step3 PR by Gyeom · Pull Request #485 · next-step/infra-subway-performance

안녕하세요 리뷰어님 :) 3단계 쿼리최적화 리뷰 요청드립니다. 이번 미션은 성능 효율이 중요했기 때문에, query condition부분에 신경을 써서 작성했습니다. 감사합니다.

github.com

 


🚀 4단계 - 인덱스 설계

  • 주어진 데이터셋을 활용하여 아래 조회 결과를 100ms 이하로 반환
    • M1의 경우엔 시간 제약사항을 달성하기 어렵습니다. 2배를 기준으로 해보시고 어렵다면, 일단 리뷰요청 부탁드려요
    • Coding as a Hobby 와 같은 결과를 반환하세요.
    • 프로그래머별로 해당하는 병원 이름을 반환하세요. (covid.id, hospital.name)
    • 프로그래밍이 취미인 학생 혹은 주니어(0-2년)들이 다닌 병원 이름을 반환하고 user.id 기준으로 정렬하세요. (covid.id, hospital.name, user.Hobby, user.DevType, user.YearsCoding)
    • 서울대병원에 다닌 20대 India 환자들을 병원에 머문 기간별로 집계하세요. (covid.Stay)
    • 서울대병원에 다닌 30대 환자들을 운동 횟수별로 집계하세요. (user.Exercise)

https://github.com/next-step/infra-subway-performance/pull/513

 

[김대겸] Step4 PR by Gyeom · Pull Request #513 · next-step/infra-subway-performance

안녕하세요 리뷰어님 4단계 - 인덱스 설계 리뷰 요청드립니다. 이번 리뷰도 잘 부탁드립니다 ~!

github.com

 


🚀 [추가] 페이징, Replication

  • 페이징 쿼리 작성
  • MySQL Replication with JPA

https://github.com/next-step/infra-subway-performance/pull/542

 

[김대겸] Step5 PR by Gyeom · Pull Request #542 · next-step/infra-subway-performance

안녕하세요 리뷰어님, [추가] 페이징, Replication 단계 리뷰 요청드립니다. 처음에 제가 설정을 잘못했는지 위와 같이 Slave_IO_Running이 NO로 나오더라구요.. 현재는 정상적으로 나오도록 조치했습니

github.com

미션 회고

 이번 미션에서 Auto Scaling Group을 구성하는 실습을 진행하면서 삽질을 좀 많이했다. 502 Bad Gateway가 발생해서 보니 서버가 아예 구동되지 않았고 시작템플릿의 문제임을 짐작할 수 있었다. 원인은 mac에서 업로드한 배포스크립트의 행간 문제였던것으로 파악되었다. 그 외에도 인증 관련 이슈 때문에 시간을 많이 날려먹었는데 알고보니 chain.pem을 잘못 복사해서 alb에 적용해서 발생한 이슈였다. 

 

8주차까지 우아한테크캠프 PRO 미션을 모두 완료했다. 8주 전 보다 많은 양의 학습 지식을 습득 한 것은 분명하다. 밑 빠진 독이 되지 않기 위해서 지금까지 배운 내용들을 복습하자.

 

늘 초심의 마음으로.