미리보기
기본 정보

자기 주도적 공부, 긍정적인 사고, 동료등과의 화합 세 가지를 핵심 가치로 생각합니다. 개발 중 마주한 문제에 대한 해결 과정을 작성하는 것을 좋아하고 도움이 필요한 동료에게 문서를 공유하여 같이 문제 해결하는 것을 좋아합니다. 어려운 상황이나 복잡한 프로젝트도 긍정적인 마인드와 협업을 통해 제한된 시간 안에 성공적으로 마무리하는 것을 목표로 합니다.
기술 스택
Java, Spring Boot, JPA, MySQL, Kafka, Docker, AWS
프로젝트
MiniBlog (Monolithic)
팀 (3인)
2024.06. ~ 2024.07.
GitHub: https://github.com/ghtjr410/MiniBlog
REST API 설계, JWT 인증 인가 구현, 비즈니스 로직 구현을 담당하였습니다.
프로젝트가 끝난후 2025.01 ~ 2025.02 기간동안 리팩토링을 하였습니다.
아래는 리팩토링 내용입니다.
1. 조회수 배치 업데이트 - 스케쥴링과 임시 테이블 조인 업데이트 활용
객체 내부 수정 ➜ 낙관적 락 ➜ Atomic 연산
➜ 최종: Redis 임시저장 + 스케쥴링 + 임시 테이블 JOIN 업데이트 적용10,000건 조회수 증가 요청
1,279 증가 (성공률 12.7%) ➜ 10,000건 증가 (성공률 100%) 개선업데이트 쿼리 최적화
쿼리 10,000건 ➜ 최소 5건으로 감소 (쿼리 수 99.95% 감소)
2. QueryDSL 동적 쿼리와 무한 스크롤 성능 최적화 전략
QueryDSL을 활용해 24개 조합을 하나의 동적 쿼리로 통합
➜ 코드량 50% 감소Page와 Slice 방식의 적용 기준을 명확히 정리
➜ 불필요한 Count제거로 쿼리성능 최적화
3. JWT 블랙리스트 조회 성능 개선
기본 흐름: 로그아웃 시 토큰 블랙리스트 등록 ➜ filterChain에서 블랙리스트 여부 확인
➜ 블랙리스트 조회 속도 최적화로 인증 요청 성능 향상 기대MySQL 인덱스 적용 후 Redis 성능 비교 ➜ Redis 선택
10만개 데이터 1만 회 조회 테스트 결과
➜ 평균 응답시간 50% 감소, 처리량 17.35% 증가추가로 TTL기능을 활용하여 만료된 토큰 자동정리
Miniblog (MSA)
개인
2024.08. ~ 2024.12.
GitHub: https://github.com/ghtjr410/Miniblog-K8s-Microservices-Stack
해당 개인 프로젝트는 분산 시스템에서 발생할 수 있는 다양한 문제를 직접 경험하고 해결하며 서버 간 비동기 통신을 안정적으로 처리하는 아키텍처 설계에 중점을 두었습니다.
1. Kafka 기반 이벤트 발행 전략
이벤트 발행 신뢰성 보장 ➜
@Retryable
재시도, Outbox패턴, Avro중복 발행 방지(멱등성)
➜processed
필드 +SagaStatus
원자적 업데이트, 트랜잭션 분리(Propagation.REQUIRES_NEW
)
2. Kafka 이벤트 발행 병목 현상 해결: Virtual Thread 기반 병렬처리
이벤트 처리량 3배 증가, 성능 67% 향상
3. API Gateway 인증 통합: 커스텀 헤더 및 스푸핑 방지로 신뢰성 강화
하위 서버 중복 인증 제거: 평균 응답 속도 26.32% 개선
4. 이미지 업로드 최적화: Base64 ➜ URL방식 (S3, CloudFront) 전환 성능 개선
데이터 전송 속도 93.4% 향상, 저장 크기 99.97% 감소, 로딩 속도 89.2% 향상
5. MSA 분산 추적 및 모니터링: 9개 서버 비동기 통신 TraceId 공유로 작업 흐름 통합
Tempo와 Zipkin활용: TraceId 공유 및 비동기 이벤트 경로 추적
AOP 관찰: Repository JPA 커스텀 메서드까지 추적, 주요 데이터 로직 상세히 파악가능
Grafana 기반 로그, 트레이싱, 매트릭 통합 시각화: 평균 오류 감지 시간 약 70% 단축 10분 ➜ 3분
6. Docker 기반 개발환경 구축 및 최적화
멀티 스테이징 빌드로 이미지 크기 44.4%감소
Docker Compose 활용: 9개의 오픈소스 컨테이너 통합 및 네트워크 통신 구성
7. AWS EKS 기반 Kubernetes 환경 구성 및 최적화
NLB(5개 IP = 월간 18USD) ➜ ALB + Route53(1개 IP, 월간 3.60USD) 전환: 월 비용 80% 절감
Certification Manager: 100% HTTPS 환경 구현 (HTTP요청도 HTTPS로 리디렉션)
React 앱 2개, Spring 서버 9개, 인프라 11개 구성, 배포, 관리 YAML 작성
8. 9개 서버 배포 자동화: Jenkins와 Helm 활용
Kubectl 수작업 실수 방지, 배포속도 10분 ➜ 3분 개선
MusicalSpot
팀 (4인)
2024.07. ~ 2024.08.
GitHub: http://github.com/ghtjr410/MusicalSPot
배포: https://musical.ghtjr.com/
REST API 설계와 JWT 인증 인가 구현, Azure 클라우드 환경 구성, GitHub Actions를 통한 배포자동화를 담당하였습니다.
1. Azure 클라우드 환경 구축 GitHub Actions로 배포 자동화
Azure, GitHub Actions 직접 작성한 사용법 개발문서 공유
모든 팀, 학생 16명 전원 100% 배포 성공 사례 달성
2. 병합 전 팀원들과 코드 리뷰 문화 구성
메인 브랜치 1인, 3개의 서브 브랜치 분리로 팀원들과 코드 변경 충돌 최소화
SourceTree 도입: 터미널에서 변경 내역 확인이 어려움을 시각화된 변경 내역으로 해결
1:1로 팀원과 병합 전 코드 의도 파악: 충돌 가능성 점검으로 병합 오류 감소
자세한 모든 내용은 포트폴리오에서 확인할 수 있습니다.
이력서에는 핵심 내용만 간략히 정리했습니다.
포트폴리오에는 아래와 같은 상세한 과정이 정리되어 있습니다.
아키텍처 설계 과정
성능 최적화 과정과 기술 선택 이유
문제 정의와 해결과정
포트폴리오
자기소개
< 개발자 된 이유: 문제를 해결하는 즐거움 >
"내가 상상하는 것을 직접 만들어볼 수 있다면?"
이러한 호기심이 개발자로서의 첫걸음이었습니다.
G-STAR에서 첫 경험
연세게임교육원에서 Unity와 C#을 활용해 2D 플랫포머 게임을 개발하여
2017 G-STAR 메인 부스에 전시한 경험이 있습니다.
4일 동안 수많은 관람객이 제 작품을 플레이하며 웃는 모습을 보았고
고민하며 개발한 것이 사용자에게 즐거움을 줄 수 있다는 점이 뿌듯했습니다.
특히, 한 초등학생이 스테이지를 확장해 달라고 요청했을 때 즉시 반영하여 제공했고
이를 즐기는 모습을 보며 유저와 실시간으로 소통하는 즐거움을 깨닫게 되었습니다.
문제를 발견하고 해결하는 개발의 가치
군 복무 중에는 장병들이 실시간으로 주식 동향 확인과 모의투자를 연습하기 어렵다는 문제를 발견했습니다.
이 문제를 해결하고자 Windows Forms(GUI App), C#과 키움 OpenAPI를 활용하여 주식 시뮬레이션 프로그램을 개발하였고, 장병들이 직접 사이버 지식 정보 방에서 연습 매매를 할 수 있도록 환경을 구축했습니다.
하지만, 매일 제한된 시간과 군대 내 네트워크 간의 프로그램과 데이터 이동을 할 수 없는 문제가 있었습니다.
이 경험을 통해, 웹 서비스처럼 언제 어디서든 접근할 수 있는 환경이라면 더 많은 가치를 만들어낼 수 있겠다고 생각하였고, 이를 계기로 본격적으로 웹 개발자가 되기 위한 준비를 시작했습니다.
< 끊임없이 "왜?"라는 질문을 던지는 개발자 >
개발을 할 때, 단순히 기능을 구현하는 것이 아니라 "왜 이렇게 해야 하는가?"를 끊임없이 고민합니다.
데이터 정합성은 어떻게 보장할 것인가?
동시성 문제는 어떻게 해결할 것인가?
트랜잭션은 문제 없이 관리되고 있는가??
성능 최적화는 어떤 방식이 현재 가장 효율적인가?
예를 들어, Kafka 기반의 이벤트 발행 시스템을 설계할 때
단순히 클론 코딩하는 것이 아닌 다음과 같은 개선 과정을 거쳤습니다.
이벤트 발행 신뢰성 확보 필요 ➜ 재시도 로직 도입
재시도로 인해 응답지연 + 트랜잭션 유지 시간 증가 ➜ Outbox 패턴 도입
이벤트 중복 발행 발생 (단일 스레드 환경) ➜ 가상 스레드 기반 병렬 처리
다시 이벤트 중복 발행 발생 (다중 스레드 환경) ➜ SagaStatus 필드 도입, 원자적 업데이트
이벤트 발행 실패 시 SagaStatus 롤백 문제 ➜ Progation.REQUIRES_NEW 적용, 트랜잭션 분리
이러한 문제들을 고민하고 개선해 나가며
단순한 기능 구현을 넘어 "문제를 정의하고 해결하는 개발자"로 성장하기 위해 노력하고 있습니다.
제가 구현한 방식이 Best Practice는 아닐 수 있습니다.
하지만 끊임없이 "왜?"라는 질문을 던지며, 구현 방식의 의도를 명확히 하고 지속적으로 개선해 나가고자 합니다.
결국, 현재 상황에서 최선의 해결책에 도달하는 것이 진정한 개발자의 역할이라고 생각합니다.
< 지식을 공유하고 협업을 즐기는 개발자 >
저는 팀원들과 친밀감을 형성하며 협업하는 과정에서 보람을 느낍니다.
어색한 상황에서도 대화를 통해 벽을 허물 수 있다고 믿기에, 스몰토크를 적극 활용합니다.
사소한 대화 하나가 팀의 분위기를 긍정적으로 바꾸는 데 큰 역할을 한다고 생각합니다.
또한 저는 지식 공유를 통해 동료의 성장을 돕는 것을 좋아합니다.
예전에 팀 프로젝트가 끝날 무렵, 같은 반 학생들이 구현은 거의 마쳤지만 배포 과정에서 어려움을 겪고 있었습니다.
당시 Azure를 사용해 React, Spring를 배포하고 Redis와 MySQL을 연동한 경험이 있었습니다.
뿐만 아니라, Azure 회원가입부터 FreeTier설정, GitHub Actions로 자동 배포까지 모든 과정을 문서화해 두었기에 이 지식을 공유하면 도움이 될 것이라고 생각했습니다.
즉시 12명의 학생에게 Notion 문서를 공유했고, 자습실에서 직접 설정 과정을 함께 진행했습니다.
서로의 설정을 점검하며 배포 환경을 한 단계씩 구성하는 동안, 학생들은 점차 배포 과정을 이해하고 자신감을 얻었습니다.
몇몇 학생들은 "문서가 추상적이고 설치 흐름이 직관적이지 않다" 는 피드백을 주었고, 이를 계기로 설치 과정의 흐름을 명확히 정리하여 문서를 수정했습니다.
결과적으로, 반 전원이 배포에 성공하여 프로젝트 발표 날, 모두가 웃고 박수를 치며 기쁨을 나눌 수 있었습니다.
이 후 전원 회식을 하며 동료애와 협력의 의미를 다시 한번 느낄 수 있었습니다.
< 빠른 적응과 주도적인 자세 >
마지막으로 저는 문제 해결에 대한 끊임없는 탐구심과 동료와 함께 성장하고자 하는 의지를 가진 사람입니다.
열린 마음과 배움의 자세를 가지고 항상 밝은 웃음으로 동료에게 먼저 다가가 대화를 통해 팀 분위기에 녹아들겠습니다.
더 나아가 주도적인 학습과 피드백을 적극적으로 수용하며 전문성을 쌓아가는 과정에서 팀과 협업하여 성과를 더욱 발전시키는데 이바지하겠습니다.
자격증
정보처리산업기사
산업기사 | 한국산업인력공단
2024.09.
SQLD
Developer | 한국데이터산업진흥원
2024.06.
리눅스마스터 2급
2급 | 한국정보통신진흥협회
2024.06.
네트워크 관리사 2급
2급 | 한국정보통신자격협회
2019.10.
CostPro 2급
2급 | (주) 와이비엠
2024.04.
교육
코리아 IT 아카데미
사설 교육 | 스프링 응용 개발자
2024.04. ~ 2024.08. | 수료
코리아 IT 아카데미
사설 교육 | Java 백엔드 개발 과정
2023.10. ~ 2024.07. | 수료
평생교육원 (학점은행제) 108/140학점
대학교(학사) | 컴퓨터공학 (학사)
2024.12. ~ 현재 | 재학 중
연세게임교육원 (학점은행제)
대학교(학사) | 게임프로그래밍 (멀티미디어학)
2016.03. ~ 2018.12. | 중퇴