Skip to content

sipe-team/3-1_spurt

Repository files navigation

SIPE 3기 1차 미션: 스프링 퍼포먼스 트랙

📌 주제

스프링 기반 애플리케이션의 성능 측정 및 케이스에 기반한 성능 개선 실습


👥 구성원

허정화 조상준 장준환 유지예
서영학 문준용 김희동 김우재

📝 진행 방식

저장소에 매주 월요일 오후 6시까지 주차 별 학습 내용을 정리하여 PR 생성

  • 불이행 시 벌금 3만원

주차 별로 생성된 PR을 스터디 진행 전까지 확인 또는 의견 작성 진행

스터디 진행 시에는 매주 호스트를 선정하여 한 주간 내용에 대한 간단한 정리와 함께 추가 내용 논의


📚 진행 일정과 커리큘럼

시간: 매주 화요일 오후 9시

장소: 온라인 진행

주차 일정 학습 주제 스터디 진행 시 TODO
1 10.29 ~ 11.5 • 성능의 개념과 주요 병목 지점
• 성능/병목을 측정하는 도구의 종류
• 측정 도구 선정
• 실습 케이스 수렴
2 11.5 ~ 11.12 • 선택한 도구에 대한 학습 및 실습 • 실습 케이스 수렴
3~5 11.12 ~ 11.19
11.19 ~ 11.25
11.25 ~ 12.3
주문 API 설계와 성능 병목 분석 thx to 준용❤️
6 12.3 ~ 12.6 • 회고

🏃🏻‍♂️ 학습 및 회고

허정화 🌊

주차별 학습

1주차

  • 성능 테스트 종류
  • 주요 지표(메트릭) 및 성능 병목지점
  • 성능 테스트 도구 학습

2주차

  • k6 학습 및 실습 환경 구축(k6 + influxDB + Grafana)
  • OOM 어플리케이션 부하 테스트 및 개선 수행

3~4주차

  • 이커머스 주문 조회 API 개발(싱글 모듈)
  • 동기 vs 비동기 성능 비교
  • 비동기 vs 로컬캐싱 성능 비교

5주차

  • 이커머스 상품 조회 API 개발(멀티 모듈)
  • 하이브리드 캐싱 적용 및 성능 비교
기대한 점 & 후기

기대한 점

성능 테스트는 이전에도 토이프로젝트로 진행한 적이 있지만 제대로 공부해본적이 없어 기본적인 개념들을 알고싶었습니다. 또한 다른 회사에서는 어떻게 테스트를 진행하는지 궁금했습니다.

후기

가장 좋았던 점은 멋진분들의 인사이트를 얻을 수 있었다는 점입니다. 같은 주제를 놓고 공부하는 내용이 다양했는데 그 덕분에 더 넓게 지식을 습득할 수 있었다는 점이 좋았습니다.

특히 동기/비동기, Blocking/Non-Blocking을 깊게 공부해보고 싶다는 생각이 들었으며 스터디 중 나온 다양한 아키텍처 또한 직접 구현해보고 실무에 적용해봐야겠다는 의지가 생겼습니다.


조상준 🔥

주차별 학습

1주차

  • 웹 전체적인 범위의 성능에 대해 공부하였습니다.
  • JVM 어플리케이션의 성능에 국한하여, 내부적으로 발생할 수 있는 병목지점에 대해 이론적으로 학습한 뒤, 소프트웨어 성능테스트에 대해 이론 학습하였습니다.

2주차

  • 부하테스트 툴로 K6를 선정하고, K6의 장단점과 사용 가능 옵션에 대해 학습하였습니다.
  • 이후 개인별로 스프링 어플리케이션의 성능 메트릭 수집기를 설정 및 저장하고, 시각화 하는 과정을 거쳤습니다.
  • 환경설정 이후 OOM 발생 가능 어플리케이션을 테스트하여 병목지점을 파악하는 실습을 진행하였습니다.

3~5주차

  • “주문 상세 조회 API” 의 성능을 개선하기 위한 실습을 진행하였습니다.
  • 저는 JAVA와 Spring의 비동기 메소드를 사용하여, 데이터베이스 접근 시의 동시성 처리를 진행하였습니다.
  • 성능 테스트 결과 지연시간 측면의 성능 개선은 확인 되었지만, 이론과 다르게 시스템 리소스 관련된 성능은 크게 개선되지 않았음을 파악하였습니다.
기대한 점 & 후기

후기

학부생 수준의 API 서버 구현만 하다가 성능테스트를 진행하니 무수한 병목지점이 파악함을 알 수 있었습니다.

왜 객체 생성을 최소화 하고, 리소스 관리를 해야하는지 들어만 왔던 터라, 이번 실습을 통해 직접 경험할 수 있어 좋았습니다. 또한, 실제 시스템에서 병목의 발생지점을 이론과 실습을 통해 비교해볼 수 있어 좋았습니다!


장준환 🧑🏽‍🦲

주차별 학습

1주차

  • 성능의 개념과 주요 병목 지점
  • 성능/병목을 측정하는 도구의 종류

2주차

  • k6 병목 지점 모니터링 분석 및 파악 방법 추가
  • OOM 어플리케이션 부하 테스트 및 개선 수행

3주차

  • 이커머스 주문 조회 API 개발
  • 캐시를 활용한 성능 개선

4~5주차

  • MSA Aggregation을 위한 전략 분석 및 학습
  • Redis를 통한 샤딩 분산 관리 기능 개발 및 샤딩 테이블을 활용한 조회/저장 성능 개선
기대한 점 & 후기

기대한 점

항상 근거 없이 "되겠지"라는 안일함 마음으로 개발에 임했습니다. 실무에서 모니터링을 진행했어도 구성된 지표만 확인하였지 그 지표들에 의문을 품은 적이 없었습니다. 이번 미션을 통해 다양한 상황에 있어 어떠한 방식으로 모니터링을 진행할 수 있는지에 대해 배우고 싶었습니다.

후기

다양한 분들과 성능 측정 관점을 나누면서 사고 확장에 도움이 되었습니다. 하나의 주제에 있어 개인마다 구성한 대시보드가 다른 것을 보며 많은 것을 배울 수 있었습니다.

이번 미션을 통해서 근거를 통한 필연성의 중요성에 대해 느낄 수 있었습니다.


유지예 🚗

주차별 학습

1주차

  • 성능의 개념 / 병목 현상
  • 성능 테스트의 기본 용어 및 지표 / 성능 테스트 과정 / 성능 테스트 도구 종류 학습

2주차

  • k6 학습 및 실습 환경 구축
  • 성능 테스트 시니리오 작성 및 실행

3~4주차

  • 이커머스 주문 조회 API 개발
  • 비동기(CompletableFuture) 처리 및 트러블 슈팅
  • 로컬 캐시 적용 (Caffeine)

5주차

  • 로컬 캐시 성능 비교 (ehcache vs caffeine)
기대한 점 & 후기

기대한 점

성능이 중요하다는 건 알고 있었지만 그에 관련한 방법들을 하나도 모른 채 있었습니다. 이 미션을 통해 학습하는 방법을 알고 싶었고 다른 사람들의 견해를 듣고 싶었습니다!

후기

엄청난 실력자분들과 이야기 나누고 공부할 수 있어서 많은 인사이트와 자극을 받을 수 있었습니다. 아직 성능 지표를 보고 분석하는 게 익숙하지 않지만 혼자서는 어려워서 시도하지 못했던 성능 개선 경험을 해볼 수 있어서 너무 좋았습니다.

함께 스터디한 팀원분들 너무 다 감사합니다!!!


서영학 💸

주차별 학습

1주차

  • 성능 테스트의 목적과 정의
  • 지표 선정 및 해석 방법 / 성능 최적화 및 대응 방안
  • 모니터링 시각화

2주차

  • k6 학습 및 실습 환경 구축
  • k6를 활용한 JDBC와 R2DBC 성능 비교

3주차

  • 모놀리식 아키텍처 성능 개선 방안 구현
  • 비동기(R2DBC) 처리를 통한 성능 개선

4~5주차

  • fetch, async, join 등을 활용한 추가 성능 개선
  • 데이터 세팅 및 테스트 시나리오에 따른 성능 비교
기대한 점 & 후기

기대한 점

일을 처음 시작했을 때 기능 개발은 어찌할 수 있었는데 막상 프로젝트가 끝나고 다른 분들께 나와 팀의 성과를 이야기하기 힘들었던 기억이 있습니다. 이때 소프트웨어를 관리하기 위해서 측정을 해 지표화하는 것의 중요성을 알게되었습니다.

매번 다른 사람이 쓴 글만 읽고 그렇구나라고 넘어가다보니 실제로 내가 검증해보는 엔지니어적인 관점이 없이 인스턴트식 공부만 한 것 같아 미션에 도전하게 되었습니다

후기

성능 측정이란 단어는 생각보다 추상적인 단어라는 걸 느꼈습니다. grafana 대시보드를 import하고 운영팀에 넘기는 게 끝이었는데 내가 지표를 보는 입장이 되어서 문제가 있는 코드는 어떻게 대시보드에 찍히는지 보고 해석하는 과정에서 공부가 많이 되었습니다.

중간 이후 실습 위주로 진행되어 준비 시간은 많이 들었지만 공부가 정말 많이 되었습니다.

스터디에 무언가 더할 수 있었다면?

스프링 성능 개선에 초점을 맞춰서 여러 이슈를 정의하고 각자 해결하는 식으로 진행해도 좋았을 것 같아요. 아니면 아키텍처 관점으로 더 나아가 SRE를 주제로 할지 둘 다 재밌을 것 같습니다.


문준용 ✍🏻

주차별 학습

1주차

  • 성능 테스트를 공부하게 된 이유
  • 성능 최적화에 다양한 기법들
  • 병목 현상 원인과 해결책
  • 성능 테스트 도구 - 간단히 알아보기(ngrinder, k6)

2주차

  • 성능 테스트 도구(k6) 학습: 기본 구조, 메트릭, 시나리오
  • 성능 테스트 관련 예제 OOM 병목 지점 파악 및 트러블 슈팅

3~5주차

  • 주문 상세 조회 API 설계
  • 스냅샷 기반의 데이터 설계: MongoDB 활용
  • k6, grafana 도구 활용하여 MySQL과의 성능 비교
  • 부하테스트 시 발생한 문제와 해결 방안
기대한 점 & 후기

기대한 점

성능 테스트에 대한 밑바닥 개념부터 실제와 비슷한 예제에 성능 테스트 도구를 활용해보면서 경험하고 싶었습니다.

성능 테스트에 대해 자유롭게 토론하면서 각자만의 관점과 의견을 통해 새로운 인사이트 발굴 및 발견하고 싶었고, 해당 스터디를 하면서 성능 테스트에 대한 나의 철학 혹은 견해가 전/후로 바뀌는지 궁금했습니다.

후기

실력과 노력, 두 가지를 가진 분들과 만나서 덕분에 성능 테스트의 개념부터 적용하기까지의 경험을 알게 되어서 감사했습니다! 👏🏻

제가 미처 알지 못했던 성능 테스트 도구부터 모니터링에 대한 중요성, 그리고 시스템 설계까지 다방면으로 좋은 소스를 많이 얻어갔습니다.

만약 2차 미션을 한다면?

1차 때에서 아쉬웠던 점과 부족했던 것을 파악한 후, 해당 부분을 보완해 나가면서 효율적으로 지식과 경험을 쌓을 것입니다. 1차 때는 각자 했다면, 2차 때는 페어프로그래밍 혹은 하나의 프로젝트에 2명 만들어 나가는 것도 좋을 것 같습니다.


김희동 🐷

주차별 학습

1주차

  • 성능의 주요 지표 / 지표 간 상관관계 / 성능의 병목 지점
  • 성능 측정 도구의 종류
  • 서비스 별 특성에 따른 성능 테스트

2주차

  • k6 학습 및 실습 환경 구축
  • IntelliJ Profiler / VisualVM를 활용한 지표 측정
  • OOM 어플리케이션 부하 테스트 및 트러블 슈팅

3~5주차

  • 이커머스 주문 조회 API 개발
  • 비동기 처리 및 글로벌 캐시 적용을 통한 성능 개선
  • 로컬 캐시 및 Hibernate Cache 적용을 통한 성능 개선
기대한 점 & 후기

기대한 점

일반적으로 '성능 개선' 역량이 중요하다는 것은 누구나 알고 있습니다. 하지만 성능이라는 개념에 대해 관심있게 고민해봤다면 단어가 주는 모호함과 동시에 매우 포괄적인 의미를 가지고 있다는 것을 알 수 있습니다. 실제로 서비스 및 애플리케이션의 특성에 따라 주요 지표 및 측정 방법이 달라질 수 있습니다.

그래서 이번 스터디를 통해 최소한의 기반이 되는 주요 지표 및 측정 방법을 익힌 후 특정 상황에서 어떤 것을 더 중요하게 생각해야 하고, 개선할 수 있는지 고민해보고 싶었습니다!

또한 실무 상황에서 접할 수 있는 케이스를 미리 구현해봄으로써 유사한 상황에 참고할 수 있는 저만의 best practice를 미리 고민해보고 작성해보고 싶었습니다.

후기

앞서 기대한 점에서 언급했던 것처럼 '성능 개선'이라는 포괄적인 주제를 스터디의 핵심 요소로 가져가다보니 각자가 생각하는 영역이 상이했고, 이에 따라 고민하는 방향이나 범위가 매우 팽창됐던 것 같습니다.

다양한 관점 및 고민을 다룰 수 있다는 점에서 저는 개인적으로 좋았지만, 시/공간적인 제약을 감안했을 때 각자가 생각한 방향을 더 깊게 공유하고 나누기에는 어려움이 있었던 것 같기도 합니다.

그래도 이번 스터디를 통해 성능 개선에 대한 기본적인 지식을 익히고, 평소 관심있던 주제 중 하나인 캐시에 대해서도 다양한 고민 및 시도를 경험해볼 수 있어서 좋았습니다.

끝으로 이번 스터디의 경우 가이드라인이 거의 없고, 각자의 주도적인 학습이 중요했습니다. 근데 정말 운이 좋은건지... 함께 해주셨던 팀원분들이 모두 다 능력자면서도 적극적으로 참여해주셔서 스터디가 종료되는 시점까지 동력을 잃지 않고 함께 배우고 성장할 수 있었던 것 같습니다. 모두들 너무너무 감사했습니다!! 👍🏻👍🏻👍🏻

마지막으로 제 버킷리스트 남기며 후기 마무리하겠습니다! 👋🏻

  • 버킷리스트 1. 삼쩜삼 스낵바
  • 버킷리스트 2. 퇴직금을 이용한 회식
  • 버킷리스트 3. 엑셀 프로그래밍 배우기

김우재 🤴🏻

주차별 학습

1주차

  • JVM 애플리케이션 성능
  • 성능 테스트란 무엇인가
  • 성능 테스트 도구 비교

2주차

  • 성능 테스트 도구 k6 학습
  • 성능 테스트 실습과 OOM 파악

3~5주차

  • 이커머스 쇼핑몰 전시 도메인 개발
  • 모니터링 툴 및 성능 테스트 도구 활용
기대한 점 & 후기

기대한 점

‘우리는 성능을 생각하는 개발자인가?’

과거 면접 질문 중 하나가 기억에 남았습니다. ‘클린 코드와 성능 중에 어느 것이 비중이 높을까요?’

정답은 둘 다 입니다. 우리는 소프트웨어 장인 정신으로 고 퀄리티의 코드를 작성할 줄 알아야 합니다. 클린 코드는 널리 퍼진 개념이라 생각합니다. 성능은 각 비즈니스 환경, 아키텍처 구조, 인프라, 애플리케이션단 로직등 다양한 상황을 고려할 필요가 있습니다.

모두가 같은 주제를 기반으로 서로의 고민을 공유하고 함께 성장할 수 있는 미션이 되기를 기대했습니다

후기

역시나 범위가 넓기 때문에 오는 장단점이 있던 것 같아요. 생각하지 못했던 범위를 파고 드시는 분도 계셨고 저처럼 아키텍처 관점으로 생각하시는 분도 계셨던 것 같아요.

장점으로는 인사이트를 넓힐 수 있었지만 단점으로는 생각이 달라서 보다 같은 이야기를 나누지 못해서 아쉽습니다. 그래도 제가 구현하고자 했던 부분을 실제로 구현해서 좋았고 사이프하면서 가장 몰입했던 미션이었던 것 같아요.


👏🏻 지식 및 코드 기여자

About

'스'프링 '퍼'포먼스 '트'랙

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published