on the water
close
프로필 사진

on the water

github: @sinwoo-kim

  • 분류 전체보기 (20)
    • Dev (7)
    • 회고 (2)
    • CCPM (10)
    • Thinking (1)
  • 홈
  • GitHub
  • 방명록
  • TIL
항공편 예매 서비스 - 진척도(100%) Done

항공편 예매 서비스 - 진척도(100%) Done

마지막 5주차: 쓰레기통에서 부활한 문서들관점을 바꿔서 개선보다 분석에 초점을 두기로 했다. 서버의 성능 한계를 시험하고, 병목을 분석하는 과정을 담는 것으로 유종의 미를 거두고자 프로젝트 종료 이틀 전까지 부하 테스트를 진행했다. 다행인 것은 4주차에 쓰래기통으로 직행했던 학습 자료들이 의미있는 자료들로 변신했고, 그 결과 문서를 제한 시간 안에 마무리할 수 있었다.https://onthewater.tistory.com/23 항공권 예매 서비스 - 내부 최적화로 중규모 트래픽 처리하기들어가며클라우드 서비스 회사와 ORM 도구들은 우리가 지불해야 될 비용에 대해서 걱정해주지 않는다.출처: Real MySQL 1권 p.10이 테스트는 외부 자원 활용보다는 내부 개선에 집중합니다.무분별한onthewater...

  • format_list_bulleted 회고
  • · 2025. 3. 17.
항공권 예매 서비스 - 내부 최적화로 중규모 트래픽 처리하기

항공권 예매 서비스 - 내부 최적화로 중규모 트래픽 처리하기

들어가며클라우드 서비스 회사와 ORM 도구들은 우리가 지불해야 될 비용에 대해서 걱정해주지 않는다.출처: Real MySQL 1권 p.10이 테스트는 외부 자원 활용보다는 내부 개선에 집중합니다.무분별한 캐싱이 불필요한 인프라 비용을 증가시킬 수 있고, 극단적으로 오버 엔지니어링으로 캐싱 인프라를 제외시킬 경우 트래픽을 어떻게 얼마나 대응할 수 있는지 알 수 없습니다.꼭 필요한 부분만 캐싱을 도입하자는 마인드로 캐싱이 없는 상태에서 소프트웨어 최적화로 얼마나 개선할 수 있는지 확인하고, 한계 지점을 파악해 정확한 시점에 필요한 만큼만 인프라 확장을 하기 위한 테스트를 진행했습니다.목표: VUser 500 동시 처리, 99% 응답 1초 이내, 에러율 0%Setting테스트 환경로컬 환경프로세서: Intel..

  • format_list_bulleted Dev
  • · 2025. 3. 12.
항공편 예매 서비스 - 진척도(96.71%) 치명적인 삽질

항공편 예매 서비스 - 진척도(96.71%) 치명적인 삽질

부하 테스트 시작너무 바쁜 나머지 3주 차를 기록하지 못했다. 회고하자면 그 사이 인덱싱 문서화를 끝내고 대용량 테스트를 진행했다. Jmeter를 통해 VUser 350를 생성하여 3분 간 부하를 주는 테스트를 진행했는데 결과 쓰레드의 어마무시한 Context Switching이 발견되었고, thread poll size, HikariCP connection size를 조절해 가며 적정 값을 찾으려고 시도한 끝에 RPS 50 상승, 평균 응답 속도 1024 (ms) -> 952 (ms) 라는 아주 근사한 개선을 이뤄냈다.그런데 부하 테스트에 대해 학습하며, 내가 만든 시나리오가 비현실적인 테스트 시나리오라는 걸 깨달았고, 다음과 같이 warm-up 및 기능과 기능 사이에 사용자 Think TIme 2초를..

  • format_list_bulleted CCPM
  • · 2025. 3. 8.
항공편 예매 서비스 - 진척도(35%) 복합 인덱스 적용기

항공편 예매 서비스 - 진척도(35%) 복합 인덱스 적용기

사전준비전체 항공사의 1년 치 항공편을 종합했을 때 3,000만 건이 넘어가므로, 비슷한 조건을 위해 1,000만 건의 더미 데이터를 삽입했습니다.테스트 케이스인천(ICN)에서 제주(CJU)로 운항하는 항공편의 1년간 스케줄을 조회HTTP GET 요청Connection Timeout: 10,000 ms로컬 서버 실행 환경- OS: Window 10- IDE: IntelliJ v24.2.4- DB: MySQL v8.0- Java: JDK 17BaseLine Test결과를 보면 Response Time 평균값이 약 9.3초로 최적화가 필요한 상황입니다.실행 계획 분석landing_at 칼럼을 제외하고는 null 값을 허용하지 않으므로, 우선 departure, arrival, boarding_at 3가지 컬..

  • format_list_bulleted CCPM
  • · 2025. 2. 24.
항공편 예매 서비스 - 진척도(26%) ZonedDateTime로 인한 대참사

항공편 예매 서비스 - 진척도(26%) ZonedDateTime로 인한 대참사

대참사의 시작항공권 예약 시스템에서는 항공편이 여러 시간대를 오가기 때문에 ZonedDateTime이 더 적합하지 않냐는 의견이 제시됐다. 아차 싶었다. 예를 들어 인천에서 오후 3시 출발해 12시간 비행 후 뉴욕에 현지 시간 오후 2시에 도착하는 경우, 시간대 정보가 없으면 이 상황을 정확히 표현하기 어렵다.결국 LocalDateTime보다는 ZonedDateTime이 적합하다는 결론이 났다. 문제는 기존 LocalDateTime으로 작성된 코드들을 ZonedDateTime으로 바꾸면서 테스트 코드가 다 터져 버렸다. 타입을 바꾸면 되는 문제라고 생각했는데 그게 아니었다.😱사실 RequestBody로 받은 문자열을 @JsonFormat 어노테이션에다가 timezone만 추가해 주면 간단하게 끝나는 문..

  • format_list_bulleted CCPM
  • · 2025. 2. 22.
항공편 예매 서비스 - 진척도(11.59%) API v1 완료

항공편 예매 서비스 - 진척도(11.59%) API v1 완료

변동사항Task 1.1 (API v1) 리드타임 1.5일 -> 5일로 변경Task 1.4 (API v1 통합) 추가Critical Chain처음 1.1 (API v1)을 만만하게 보고 작업 리드타임을 1.5일로 잡았는데, 생전 모르던 분들과 처음 팀으로 진행하는 것이기에 스타일도 다르고, 일의 속도도 다르고, Task 별로 의존 관계도 얽히고, 근본적으로 내가 병목이고... 완료 시기가 늦어질 수 밖에 없었다. 왜 캠프 매니저님께서 MVP 기능 CRUD를 1주 ~ 2주로 넉넉하게 가이드라인을 던진 것인지 이해가 되는 순간이었다.우리 팀은 예상대로 금요일에 1.1(API v1)이 마무리 되었다. 팀에서 정한 기한 내에 마무리할 수 있어서 정말 다행이었다. 일정에 새로운 Task 1.4(API v1 통합)이..

  • format_list_bulleted CCPM
  • · 2025. 2. 14.
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • navigate_next
전체 카테고리
  • 분류 전체보기 (20)
    • Dev (7)
    • 회고 (2)
    • CCPM (10)
    • Thinking (1)
인기 글
전체 방문자
오늘
어제
Copyright © onthewater 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바