미리보기
기본 정보
코드로 사회에 가치를 더하는 개발자 김재윤 입니다.
기술 스택
HTML, JavaScript, React, Java, Spring boot, JPA, QueryDSL, Spring batch, MySQL, Redis, AWS EC2, Docker, Docker Compose, Github Actions, Git
프로젝트
그대가 기다리던 가을이 왔네요
내일배움캠프 자바/스프링 심화 캠프 1기 최종 프로젝트 (최우수상 수상)
2024.09. ~ 2024.10.
MSA 타임세일 및 쿠폰 이커머스 서비스
기술 :
Java 21 / Spring Boot 3.3.4 / JPA / QueryDSL / Spring Batch 5 / JWT / Eureka / Gateway / OpenFeign / Circuit Breaker
PostgreSQL 16.4 / Kafka 2.6.3 / Redis 7.4 / Prometheus / Grafana
Ubuntu 24.04 / AWS EC2 / RDS
인원 : BE : 4명
본인 역할
팀장 및 발표
토스페이먼츠 PG 연동 / 스프링 배치 5 정산 / Redis / 모니터링&알림 시스템
인프라 구축 / CI&CD(Github Actions + Docker Compose)
Github Flow 브랜칭 전략 / 멀티모듈 / PR&이슈 템플릿 / 스타일 가이드 / 아키텍처 설계
트러블 슈팅
Spring Batch에서 Jpa로 배치처리 시 더티체킹되어 엔티티 마다 쿼리 요청
기존에는 Jpa 엔티티를 이용하고자 JpaPagingItemReader로 배치 조회를 했지만, 더티체킹으로 인해 엔티티마다 쿼리가 요청되어 성능 하락
5만건을 500개씩 배치 처리 시, 100건 + 5만건의 쿼리 발생
JdbcPagingItemReader로 변경하여 처리시간 4.6배 개선
동일 조건으로 4분 46초 → 60초
멀티 DataSourace에서 불필요한 커넥션 점유
멀티 DataSource 환경에서, 스프링은 트랜잭션 진입 시 커넥션을 점유하고 이후 DataSource를 결정하여 실제로 이용하지 않아도 커넥션 점유
LazyConnectionDataSourceProxy로 DataSource를 감싸서 실제 DB 요청 시 커넥션 점유
쿠폰 발급 시 느린 분산락을 LuaScript와 Kafka로 해결
단 한 스레드에서만 처리하여 250 TPS/ 평균 응답속도 5,000ms로 비관락 및 낙관락 대비 성능 저하
레퍼런스 삼았던 쿠폰 발급 이벤트 당시, TPS 3,600+ 트래픽이 발생함을 확인하고 이를 기준으로 개선
쿠폰 발급 요청만 Redis LuaScript로 원자적으로 처리하고, 실제 DB 요청은 Kafka로 처리
TPS : 250 → 5,000 (20배 개선)
평균 응답속도 : 5,000ms → 225ms (22배 개선)
기술 의사결정
프로메테우스, 그라파나, 슬랙으로 모니터링 및 알림 시스템 구축
여러 서비스로 구성됨에 따라 한 곳에서 관리하고 알림을 자동화할 필요 발생
프로메테우스로 각 서비스 별 메트릭 수집 후, 이를 그라파나로 시각화
각 서비스 별 평균 5분 CPU 사용량이 50% 초과 시 슬랙 알림 발송
Saga 패턴을 이용한 주문 로직 롤백 처리문제
MSA 환경에서는 각 서비스가 독립적인 DB를 사용하기 때문에 하나의 트랜잭션으로 데이터의 원자성과 일관성을 유지하기 어려움
트랜잭션 실패 시 성공한 트랜잭션의 롤백이 복잡해짐
이에 코레오그래피 사가 패턴 사용
주문 로직에 연관된 각 서비스 별 DB 데이터의 정합성과 일관성을 유지할 수 있게 됨
Graceful shutdown 도입
CD로 기존의 도커 컨테이너가 강제종료되어 주문 처리 중 감소된 재고가 롤백되지 않던 문제 발생
스프링 설정에 아래와 같이 설정하여 종료 전 충분한 시간을 확보
server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=10s
도커 컴포즈를 아래와 같이 설정하여 종료 전 시간 확보
stop_grace_period: 15s
관련 링크
Gream(그림)
내일배움캠프 자바/스프링 3기 최종 프로젝트
2024.01. ~ 2024.02.
고가용성 기프티콘 입찰 거래 서비스
기술 :
Java 17 / Spring Boot 3.1.7 / JPA / QueryDSL / Spring Batch 5 / JWT
MySQL 8.0.35 / Redis 7.1 / Prometheus / Grafana
Ubuntu 22.04 / AWS EC2 / RDS / S3 / ElastiCache / ECR / LB
Vite 5.0 / React 18.2 / MUI / Zustand 4.4 / Axios 1.6 / React Query 5.17
인원 : BE : 4명
본인 역할
팀장 및 발표
인증 및 인가 / 소셜 로그인 / JWT(Refresh token) / Redis
프론트 / S3 & CloudFront 배포 / CD(Github Actions)
Github Flow 브랜칭 전략 / PR&이슈 템플릿 / 스타일 가이드 / 아키텍처 설계
트러블 슈팅
SPOF 제거를 위한 다중 EC2 인스턴스 구성
최소 2개의 오토스케일링 및 로드 밸런싱 적용으로 부하 분산
부하 테스트 시 CPU 사용률 87.9% → 43.9% 개선
부하 테스트 시 처리율 676.7/sec → 1,107.3/sec 개선
무중단 블루/그린 배포로 고가용성 확보
SPOF 제거를 위한 MySQL Replication 구성
@Transactional의 readOnly 유무로 Primary, Replica DB 요청을 구분
읽기 지연 4 us → 2 us, 쓰기 지연 2 us → 0.5 us 개선
CPU 사용률 8% → 6% 개선
SPOF 제거를 위한 Redis Replication 구성
고가용성 확보 및 자동 페일오버를 위해 1개의 복제본과 3개의 센티널, 1샤드로 구성
이후 관리 지점 제거를 위한 ElastiCache for Redis 채택
EC2 t2.micro 3개의 비용(USD 0.0432/h)과, ElastiCache 비용(USD 0.048/h)이 비슷
월 3달러의 추가 비용으로 관리를 위임하고, 아낀 생산성을 서비스 코드 작성에 투자함
프리티어 계정의 VPC Peering 연결로 비용 절감
기존의 AWS 계정에 EC2 구축된 상황에서 프리티어 계정의 ElastiCache 연결 시도
서로 다른 VPC는 연결이 불가능하여, VPC Peering으로 가능함을 확인
Peering 연결 시 서울 리전 내에선 100GB 까지 무료임을 확인하고 도입
관련 링크
적정주가 계산앱
개인 프로젝트
2021.07. ~ 2021.08.
재무제표 기반 적정주가 추정 공식을 이용하여 10개 이상의 항목을 크롤링하여 5초 이내로 계산하는 어플
2,000 다운로드 수 기록했으며, 안드로이드 버전이 낮아 스토어에서는 게시 중지되었지만 이용은 가능
기술 : React native / AWS Lambda, DynamoDB
인원 : 개인 프로젝트
본인 역할
기획, 디자인, 개발, 출시, 운영, 고객응대, 마케팅
트러블 슈팅
사용자 피드백으로 5초 → 2.3초로 2.17배 개선
2만건의 로그 분석 후 전체 상장사의 20%가 요청의 66%를 차지함을 도출
고정적으로 5초가 소요되던 재무제표 및 주가를 크롤링하는 작업을 일 단위로 변하는 주가의 특성을 이용하여 캐싱을 적용해 평균 2.3초로 개선
기술 의사 결정
AWS Lambda / DynamoDB 채택
재무제표 크롤링에 Lambda를 이용하여 요청한 만큼만 과금하여 비용 절감
로그를 DynamoDB로 기록하여 비용 절감
일정 사용량까지는 무료임을 이용하여 현재까지 비용 0원
교육
내일배움캠프 자바/스프링 심화 1기
사설 교육
2024.07. ~ 2024.10. | 졸업
내일배움캠프 자바/스프링 3기
사설 교육
2023.10. ~ 2024.02. | 졸업
인하대학교
대학교(학사) | 전기공학과
2018.03. ~ 2024.02. | 졸업
순천금당고등학교
고등학교 | 이공계
2015.03. ~ 2018.02. | 졸업
대외활동
INHA SW NET-Zero 공동해커톤 - 장려상 수상
인하대학교 소프트웨어중심대학 사업단
20개 팀 중 장려상 수상
공공데이터 OpenAPI를 이용한 채식 레시피 추천 및 챗GPT를 이용한 레시피 생성, 식물 성장일기 서비스
기획서 : https://bit.ly/4hNO2pp
자격증
정보처리기사
한국산업인력공단
2024.09.
TOEIC
775 | ETC
2023.09.
ADsP (데이터분석 준전문가)
한국데이터산업진흥원
2023.06.
SQLD (SQL 개발자)
한국데이터산업진흥원
2023.04.
매경TEST
최우수 | 매일경제
2021.01.
컴퓨터 활용능력
1급 | 대한상공회의소
2019.05.
자기소개
코드로 사회에 가치를 더하는 개발자 김재윤 입니다.
지식을 쌓고 문서화하여 공유하는 것을 즐깁니다. 2년간 4,500 커밋을 하고 210건의 글을 적어서 3,400회의 누적 조회수를 기록했습니다.
3개의 프로젝트에서 앱기획/개발/출시/운영/마케팅/고객응대까지 전 과정을 경험하면서 총 5,000건의 다운로드로 시간을 아껴드렸습니다.
2건의 교육 프로그램에서 총 8회 팀장을 맡았고, 10회 발표를 진행하면서 성공적으로 프로젝트를 끝냈습니다.
이를 위해 코드 리뷰, 1데이/1이슈/1PR 스크럼, 문서화를 도입하여 체계적으로 프로젝트가 진행되도록 했습니다.