채용공고 올리기

김재윤님을 응원해보세요!

이직/구직 중이에요
책임감
협업 지향
꼼꼼함
전략적
리더십

미리보기

기본 정보

이름
김재윤
직업
서버/백엔드 개발자
간단 소개

코드로 사회에 가치를 더하는 개발자 김재윤 입니다.

기술 스택

기술 스택

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&이슈 템플릿 / 스타일 가이드 / 아키텍처 설계

트러블 슈팅

  1. Spring Batch에서 Jpa로 배치처리 시 더티체킹되어 엔티티 마다 쿼리 요청

    • 기존에는 Jpa 엔티티를 이용하고자 JpaPagingItemReader로 배치 조회를 했지만, 더티체킹으로 인해 엔티티마다 쿼리가 요청되어 성능 하락

      • 5만건을 500개씩 배치 처리 시, 100건 + 5만건의 쿼리 발생

    • JdbcPagingItemReader로 변경하여 처리시간 4.6배 개선

      • 동일 조건으로 4분 46초 → 60초

  2. 멀티 DataSourace에서 불필요한 커넥션 점유

    • 멀티 DataSource 환경에서, 스프링은 트랜잭션 진입 시 커넥션을 점유하고 이후 DataSource를 결정하여 실제로 이용하지 않아도 커넥션 점유

    • LazyConnectionDataSourceProxy로 DataSource를 감싸서 실제 DB 요청 시 커넥션 점유

  3. 쿠폰 발급 시 느린 분산락을 LuaScript와 Kafka로 해결

    • 단 한 스레드에서만 처리하여 250 TPS/ 평균 응답속도 5,000ms로 비관락 및 낙관락 대비 성능 저하

    • 레퍼런스 삼았던 쿠폰 발급 이벤트 당시, TPS 3,600+ 트래픽이 발생함을 확인하고 이를 기준으로 개선

    • 쿠폰 발급 요청만 Redis LuaScript로 원자적으로 처리하고, 실제 DB 요청은 Kafka로 처리

      • TPS : 250 → 5,000 (20배 개선)

      • 평균 응답속도 : 5,000ms → 225ms (22배 개선)

기술 의사결정

  1. 프로메테우스, 그라파나, 슬랙으로 모니터링 및 알림 시스템 구축

    • 여러 서비스로 구성됨에 따라 한 곳에서 관리하고 알림을 자동화할 필요 발생

    • 프로메테우스로 각 서비스 별 메트릭 수집 후, 이를 그라파나로 시각화

    • 각 서비스 별 평균 5분 CPU 사용량이 50% 초과 시 슬랙 알림 발송

  2. Saga 패턴을 이용한 주문 로직 롤백 처리문제

    • MSA 환경에서는 각 서비스가 독립적인 DB를 사용하기 때문에 하나의 트랜잭션으로 데이터의 원자성과 일관성을 유지하기 어려움

    • 트랜잭션 실패 시 성공한 트랜잭션의 롤백이 복잡해짐

    • 이에 코레오그래피 사가 패턴 사용

    • 주문 로직에 연관된 각 서비스 별 DB 데이터의 정합성과 일관성을 유지할 수 있게 됨

  3. 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&이슈 템플릿 / 스타일 가이드 / 아키텍처 설계

트러블 슈팅

  1. SPOF 제거를 위한 다중 EC2 인스턴스 구성

    • 최소 2개의 오토스케일링 및 로드 밸런싱 적용으로 부하 분산

      • 부하 테스트 시 CPU 사용률 87.9% → 43.9% 개선

      • 부하 테스트 시 처리율 676.7/sec → 1,107.3/sec 개선

    • 무중단 블루/그린 배포로 고가용성 확보

  2. SPOF 제거를 위한 MySQL Replication 구성

    • @Transactional의 readOnly 유무로 Primary, Replica DB 요청을 구분

    • 읽기 지연 4 us → 2 us, 쓰기 지연 2 us → 0.5 us 개선

    • CPU 사용률 8% → 6% 개선

  3. SPOF 제거를 위한 Redis Replication 구성

    • 고가용성 확보 및 자동 페일오버를 위해 1개의 복제본과 3개의 센티널, 1샤드로 구성

    • 이후 관리 지점 제거를 위한 ElastiCache for Redis 채택

      • EC2 t2.micro 3개의 비용(USD 0.0432/h)과, ElastiCache 비용(USD 0.048/h)이 비슷

        • 월 3달러의 추가 비용으로 관리를 위임하고, 아낀 생산성을 서비스 코드 작성에 투자함

  4. 프리티어 계정의 VPC Peering 연결로 비용 절감

    • 기존의 AWS 계정에 EC2 구축된 상황에서 프리티어 계정의 ElastiCache 연결 시도

    • 서로 다른 VPC는 연결이 불가능하여, VPC Peering으로 가능함을 확인

    • Peering 연결 시 서울 리전 내에선 100GB 까지 무료임을 확인하고 도입

관련 링크

프로젝트명

적정주가 계산앱

소속/기관명

개인 프로젝트

프로젝트 기간

2021.07. ~ 2021.08.

프로젝트 내용

재무제표 기반 적정주가 추정 공식을 이용하여 10개 이상의 항목을 크롤링하여 5초 이내로 계산하는 어플

2,000 다운로드 수 기록했으며, 안드로이드 버전이 낮아 스토어에서는 게시 중지되었지만 이용은 가능

기술 : React native / AWS Lambda, DynamoDB

인원 : 개인 프로젝트

본인 역할

  • 기획, 디자인, 개발, 출시, 운영, 고객응대, 마케팅

트러블 슈팅

  1. 사용자 피드백으로 5초 → 2.3초로 2.17배 개선

    • 2만건의 로그 분석 후 전체 상장사의 20%가 요청의 66%를 차지함을 도출

    • 고정적으로 5초가 소요되던 재무제표 및 주가를 크롤링하는 작업을 일 단위로 변하는 주가의 특성을 이용하여 캐싱을 적용해 평균 2.3초로 개선

기술 의사 결정

  1. 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 공동해커톤 - 장려상 수상

소속/기관명

인하대학교 소프트웨어중심대학 사업단

연도

내용

자격증

자격증명

정보처리기사

점수 | 발급기관

한국산업인력공단

취득연월

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 스크럼, 문서화를 도입하여 체계적으로 프로젝트가 진행되도록 했습니다.

댓글