미리보기
기본 정보

자기소개
# 현재 여행사 서비스 이용자를 위한 백엔드 개발자로 일하고 있습니다. 😁
• 새로운 기술을 배우는 것을 좋아하며, 회사에서 사용하는 기술뿐만 아니라 관심 있는 기술을 직접 공부하고 프로젝트로 적용해보며 성장하고 있습니다.
• 객체의 역할과 책임을 고민하며 작은 단위로 나누고 분리하여 개선하는 과정을 즐깁니다.
• 단위 및 통합 테스트를 꼼꼼하게 작성해 코드의 안정성을 높이는 것을 중요하게 생각합니다.
• 기록하고 문서화하는 것을 좋아해요. Markdown 문서 작성에 익숙하며, 팀원들과 적극적으로 문서를 공유하고 소통해요.
• 2023년부터 1일 1커밋과 블로그 활동을 꾸준히 이어오며 배운 내용을 기록하고 공유하고 있습니다.
ㅤ
# 성장을 위한 1년간의 공백기를 보냈습니다. 🙋
• 더 깊이 있는 개발 역량을 쌓기 위해 퇴사 후 Java, Spring, DB를 집중적으로 학습하며 프로젝트를 진행했습니다.
• F-lab 멘토링을 통해 체계적인 학습 방법을 익히고, 코드 리뷰를 받으며 객체지향 설계와 클린 코드 작성 역량을 향상시켰습니다.
• 이 과정에서 스스로 기술적 문제를 해결하는 힘을 기를 수 있었고, 더 나은 개발자가 되기 위해 지금도 꾸준히 성장하고 있습니다.
이력서를 확인해주시고, 기재된 포트폴리오도 꼭 한번 봐주시면 감사하겠습니다. 😊
기술 스택
경력
(주)교원투어
매니저 • 여행IT개발팀
사용기술
• Java 11, SpringBoot 2, MyBatis, Jenkins, Git, JSP, Oracle, JUnit5, Mockito
담당 업무
• 메인 업무: B2C 여행이지 서버, admin 서버 개발
• ERP, B2B, 배치 서버 등 개발
(5개월 | 정규직)
(주)엘지씨엔에스
사원 • 스마트 팩토리 버츄얼 팩토리팀
사용기술
• Java 11, SpringBoot 2, JPA, MyBatis, Jenkins, Git, Vue.js, MariaDB, Apache NIFI, K8S, Apache Kafka, Docker
담당 업무
• 스마트 팩토리 플랫폼 개발 및 프로젝트 이행
• Apache NIFI를 이용한 데이터 파이프라인 구축, Kafka 동기화
• Spring API 서버 개발
(1년 | 프리랜서)
주식회사큐브에이
선임 • 개발팀
사용기술
• Java 1.8, Spirng, MyBatis, SVN, JSP, Oracle, MariaDB
담당 업무
• 르노삼성, 르노 홈페이지 개발 및 운영
• 공공기관 SI 프로젝트 수행
• 이벤트 페이지 개발
(2년 3개월 | 정규직)
프로젝트
교원 투어
서비스 개선 작업 및 리팩토링
# 코드 리팩토링 및 개선
• 컨트롤러에 집중된 비즈니스 로직을 구체적인 Service 클래스를 만들어 관심사를 명확히 하고, 단위 테스트 코드 작성으로 시스템 안정성 강화
• HashMap으로 관리되던 데이터를 VO, DTO 객체로 캡슐화하여 타입 안정성 확보 및 유지보수성 개선
• 테스트 코드 부재로 인한 운영 및 리팩토링 리스크를 해결하기 위해, 코드를 작은 단위로 분리하고 단위 테스트, 통합 테스트를 단계적으로 도입
• 매직 넘버 리팩토링: 클래스 상단에 선언 또는 퍼져있는 상수값들을 ENUM으로 전환하여 하드코딩된 코드값을 제거하고 타입 안정성 및 가독성 향상
• GlobalExceptionHandler 도입 및 패키지별 세분화된 Handler 구현으로 예외 전파 체계와 시스템 로깅 메커니즘을 강화, 신규 개발 및 유지보수 코드부터 점진적으로 적용
• WebClient 에러처리 표준화: 반복적인 copy/paste 패턴으로 구현되던 WebClient 에러처리 로직을 Config에 통합하여 일관된 예외처리 로직 구현 및 코드 중복 제거
• Jenkins CI/CD 파이프라인 구축: FTP 수동 업로드 방식에서 GitLab 연동 Jenkins 파이프라인으로 전환하여 Maven 빌드부터 배치 스크립트 실행까지 전 과정을 자동화함으로써 배포 효율성과 안정성을 높였습니다.
# 시스템에 70% 발생하는 에러 로그 분석 및 개선
• Jennifer APM의 SQL Too Many Fetch 에러 로그 개선
> 원인 분석: 10,039건의 데이터를 조회하는 쿼리 식별
> 공식문서와 APM agent 설정 파일 검토 결과, fetch size 1만 건 초과 시 에러 로그 발생 확인
> 해결 방안: 1회에 여러 테이블을 조인하는 쿼리를 분리 시켜 쿼리를 수행하도록 최적화, 에러 로그 완전 제거
교원투어
재구매 유도 리텐션 TF팀 참여 개발
# 기존 쿠폰 정책을 포함할 수 있는 신규 쿠폰 개발
• 기존 쿠폰 시스템과의 호환성을 보장하는 확장 가능한 데이터 모델링 및 테이블 설계
• 다양한 할인 정책(정액/정률)을 지원하는 유연한 구조 설계
# 50개 이상의 테스트 코드 작성
• JUnit, Mockito 기반 Controller, Service, Domain 계층별 단위 테스트 코드 작성
• WireMock을 활용한 외부 API 의존성 격리 및 시나리오별 테스트 케이스 코드 작성
• MyBatis 환경에서 test.sql 스크립트와 @Sql 어노테이션을 활용한 DB 통합 테스트 구현
• 경계값, 예외 케이스를 포함한 철저한 테스트 커버리지 확보
# 에러처리, WebClient 예외처리 표준화, 리팩토링
• 중복된 에러처리 로직을 Config 레벨에서 통합하여 일관성 확보 및 코드 중복 제거
• HTTP 상태코드(400, 500)에 따른 맞춤형 예외처리와 Connection/Read timeout에 대한 공통 필터 구현
• GlobalExceptionHandler와 패키지별 세분화된 ExceptionHandler로 예외 전파 체계 강화
• couponCode/couponId에 대한 OR 조건 검증이 가능한 Validation 커스텀 어노테이션 개발
• 매직 넘버를 의미있는 ENUM으로 리팩토링하여 코드 가독성 및 타입 안정성 향상 - CQR 패턴 적용으로 객체 책임 분리 및 유지보수성 개선
교원 투어
간편 링크 API 개발
# 세부 구현 사항
• 요청 URL을 SHA256으로 해싱 후 Apache Base64의 encodeBase64URLSafe() 메서드를 사용하여 안전한 URL 인코딩
• 요청 URL + CurrentMilliSeconds + 현재 Thread 번호를 SHA256으로 해싱 후 URL을 인코딩을 통해 동시성을 고려하여 개발
• 계층별 (Controller, Service, Component) 단위, 통합 테스트 코드 작성 및 CountDownLatch를 활용한 100,000개의 쓰레드로 동시성 테스트 코드 작성
• ConstraintValidator 상속받아 검증 로직 재정의, @ValidUrl 커스텀 어노테이션 만들어 유효성 검증 로직 관심사 분리
• ExceptionHandler를 통해 예외 처리에 대한 로그를 DB에 적재
개인 프로젝트
JoyMall 이커머스 백엔드 서비스
[프로젝트 설명]
알리익스프레스, 쿠팡 등을 모티브로, 대규모 트래픽에도 견고한 이커머스 서비스를 개발함으로써 기술적 문제 해결과 대응 능력 향상을 위해 프로젝트를 시작하였습니다.
GitHub: joy-mall, joy-mall-kafka
Sprint: JoyMall Jira
Wiki: JoyMall Wiki
# DDD 기반의 이커머스 서비스 설계 및 구현
• 도메인 모델 시각화와 유비쿼터스 언어 정립을 통해 주문 관리, 상품 관리, 고객 관리 등의 바운디드 컨텍스트 식별 및 컨텍스트 매핑 수행
• 주문, 결제, 배송, 상품, 리뷰, 위시리스트 등의 애그리게이트 그룹을 설계하고 Spring Data JDBC를 활용한 엔티티 구현
• 커뮤니케이션/클래스 다이어그램 작성으로 객체 간 의존 관계 파악 및 순환 참조 방지 설계
• 단일 책임 원칙 중심의 설계로 도메인별 유효성 검증 로직을 별도의 Validator 클래스로 분리
# 전략 패턴을 활용한 확장 가능한 결제 시스템 구현
• PayClient 인터페이스 정의와 구체적인 결제 클라이언트 구현으로 새로운 결제 방식 추가 용이성 확보
• 주문부터 결제까지의 비즈니스 프로세스 모듈화로 유연한 구조 구현
• 의존성 주입을 통한 컴포넌트 간 결합도 감소로 결제 클라이언트 교체 용이성 향상
# 동시성 이슈 해결을 위한 분산 아키텍처 구현
• 초기 비관적 락 적용 후, 다중 서버 환경에서의 한계를 인식하고 Redis 분산락으로 개선
• Redisson 라이브러리를 이용한 분산락 구현 및 TTL 설정으로 데드락 위험 감소
• Kafka를 활용한 비동기 재고 처리로 평균 TPS 246, 최고 TPS 464, 평균 응답시간 0.95초 달성
• Redis Atomic 연산과 1분 주기 RDB 동기화로 안정적인 재고 수량 관리 구현
• 성능 테스트 및 모니터링 체계 구축
• nGrinder를 활용해 400명 동시 사용자 환경에서 단일 서버와 4개 서버 성능 비교 테스트 수행
• Pinpoint APM을 통한 분산락 병목 현상 발견 및 Kafka 도입으로 성능 개선
• 쿠버네티스 기반 4개 파드 구성과 로드밸런서 연동으로 트래픽 분산 및 시스템 안정성 확보
# VPC 기반의 보안 아키텍처 및 CI/CD 구축
• Public/Private 서브넷 분리로 DB, 백엔드 서버 등 핵심 자원 보호
• GitHub Actions와 Docker를 결합한 자동화된 CI/CD 파이프라인 구축
• Rolling Update 전략으로 다운타임 없는 서버 업데이트 구현
개인 프로젝트
Mini Blog 백엔드 서비스
[프로젝트 설명]
이 프로젝트는 SpringBoot와 JPA를 기반으로 한 블로그 백엔드 서비스입니다. 실제 서비스 구현에 필요한 다양한 기술들을 학습하고 적용하는 것을 목표로 하였습니다. 기본적인 CRUD 기능뿐만 아니라, Spring Security를 이용한 인증 및 인가, JWT를 활용한 토큰 기반 인증, OAuth2를 통한 소셜 로그인 등 보안 관련 기능을 구현하였습니다.
RESTful API 설계 원칙을 따라 API를 구현하고, Swagger UI를 통해 API 문서화를 자동화하였습니다. 주 데이터베이스로는 MariaDB를 사용하였습니다.
배포 환경은 Jenkins를 이용한 CI/CD 파이프라인을 구성하고, Docker를 활용하여 애플리케이션을 컨테이너화하였습니다. AWS의 다양한 서비스(EC2, RDS, ElastiCache, S3, SES)를 활용하여 클라우드 환경에서의 서비스 운영 경험을 쌓았습니다.
GitHub: toy-mini-blog-back
# 분산 환경의 세션 관리와 보안 강화
- JWT와 Redis를 결합하여 분산 서버 환경에서의 세션 동기화 문제 해결 및 일관된 사용자 인증 상태 유지
- Spring Security와 커스텀 CorsFilter를 구현하여 엔드포인트별 접근 제어 및 CORS 이슈 해결
- OAuth2를 활용한 Google, Kakao, Naver 소셜 로그인을 구현하고 자동 회원가입 및 정보 업데이트 처리
# JPA 성능 최적화 및 예외 처리 체계화
- JPA N+1 문제를 해결하기 위해 페이징된 주 엔티티 조회 후 연관 엔티티를 조회하는 2단계 쿼리 방식 적용
- 커스텀 예외 클래스와 글로벌 예외 핸들러를 구현하여 다양한 에러 상황에 대한 체계적인 처리와 로깅 전략 수립
- RuntimeException을 상속한 세분화된 예외 클래스로 신속한 문제 원인 파악 및 효과적인 대응 가능
# AWS 기반의 인프라 구축 및 자동화
- S3를 활용한 사용자 프로필 이미지 업로드 기능 구현 및 대용량 파일 관리
- AWS SES와 Redis를 활용한 이메일 인증 시스템 구축으로 시스템 응답 속도 개선
- Route 53을 통한 도메인 관리 및 DNS 서비스 구성
# Jenkins와 Docker를 활용한 CI/CD 환경 구축
- GitHub webhook으로 코드 변경을 감지하고 Jenkins를 통한 자동 빌드 및 배포 파이프라인 구축
- Docker를 활용한 애플리케이션 컨테이너화 및 DockerHub를 통한 이미지 관리
- 프론트엔드(React)와 백엔드 모두에 동일한 CI/CD 파이프라인을 적용하여 일관된 배포 환경 구성
LG CNS
LG 화학 석유 공장 설비 모니터링 프로젝트
[프로젝트 설명]
• LG 화학 공장의 석유를 정제하는 설비 데이터들에 대한 대시보드 제공
• 이상 수치 알람, 대시 보드, 설비의 이상 유무, 타 시스템들에 대한 통합적인 데이터 조회 플랫폼 제공
[주요 성과]
# 1분 간격으로 3,000개의 설비 데이터를 안정적으로 수신하는 데이터 파이프라인 구축
• Apache NIFI를 이용한 실시간 데이터 파이프라인 구축 (ERP, MES, WMS 시스템)
• 데이터 전처리 유지보수성 향상을 위해 Javascript를 채택 (Execute Script 프로세서 활용)
• 최종적으로 kafka 토픽으로 데이터 발행
ㅤ
# Vue.js 기반 Web Builder 서비스 컴포넌트 개발 및 화면 구현
• 신규 개발할 컴포넌트들을 정의하고, 공유 (MultiLine, Gauge 컴포넌트)
• HighChart 라이브러리를 커스텀하는 신규 컴포넌트를 개발 (Stacker, Donut 차트 등)
• mounted 훅을 사용하여 변경된 DOM을 수정하는 버전업 시 마이그레이션 코드 개발 참여
• 테스트 케이스, 통합, 회귀 테스트 시나리오 작성 및 진행
• 튜토리얼, 컴포넌트 별 가이드라인, Practice 과제 등을 wiki에 작성 후 공유
LG CNS
LG 화학 물류 상황 가시화 프로젝트
[프로젝트 설명]
• LG 화학 물류 창고 모니터링 시스템을 구축
• WebGL 기반 3D 시각화로 스태커 크레인과 랙의 물류 상태를 실시간 표현, 과거 데이터 조회 기능을 제공
ㅤ
[주요 성과]
# 300만 건의 집계 데이터 조회 API 성능 최적화
• 스태커 크레인별 월간 작업 실적 집계 API 개발 중 10초의 높은 레이턴시 발생
• 1차 최적화
ㅤ- 조회 조건 컬럼들에 대한 복합 인덱스 생성
ㅤ- Native Query와 커버링 인덱스를 활용하여 필요한 데이터만 조회
ㅤ- 결과: 레이턴시 10초 > 3초로 개선
• 2차 최적화:
ㅤ- ForkJoinPool 프레임워크 기반의 Parallel Stream 적용
ㅤ- 스태커 크레인 데이터를 병렬로 필터링 및 집계 처리
ㅤ- 결과: 최종 레이턴시 3초 > 1초 미만으로 개선
ㅤ
# 데이터 배치 시스템 아키텍처 개선
• 설비 데이터를 1분 주기로 집계하는 배치 프로세스 개발 요구사항 발생
• 문제 상황
ㅤ- 유일하게 사용 가능한 API 서버의 CPU 사용률이 이미 70~80% 수준
ㅤ- 해당 서버에 배치 프로세스 추가 시 리소스 부족 및 서비스 장애 위험 예상
ㅤ- @Scheduled를 사용한 배치 처리는 기존 API 서비스의 안정성을 해칠 것으로 판단
• 해결 방안
ㅤ- Apache NIFI를 이용하여 배치 프로세스를 독립적인 파이프라인으로 구축
ㅤ- API 서버와 배치 처리를 완전히 분리하여 서비스 안정성 확보
• 결과
ㅤ- 핵심 API 서비스의 안정성 유지
ㅤ- 배치 프로세스의 독립적인 모니터링 및 리소스 관리 가능
큐브에이
KIET 산업연구원 홈페이지 리뉴얼 프로젝트 및 유지보수
[프로젝트 설명]
• Spring 리뉴얼 프로젝트
• Oracle DB에서 MariaDB로 데이터를 마이그레이션
ㅤ
[주요 성과]
# DAO가 JAR로 구성된 레거시 서비스 코드 분석 후 Spring + MyBatis로 전환
• JAR 파일을 Decompile 하여 서비스 DAO 계층에 대한 이해
• 기존 테이블 정규화, 데이터 성질에 맞는 테이블을 새롭게 설계
• 테이블 구조 일관화, 공통 DAO 설계를 통한 MyBatis 쿼리 작성 용이성 향상
ㅤ
# Oracle DB에서 MariaDB로의 100만 건의 데이터 마이그레이션
• Oracle Client와 DBeaver를 활용한 CSV 기반 데이터 추출 및 Import
• Spring 기반의 마이그레이션 로직 개발, Linux crontab을 활용한 일일 배치 시스템 구축
ㅤ
# 인사정보 시스템, 관련 기사 API 데이터화 배치 로직 개발
• 매일 1번 업데이트 되는 인사정보 시스템을 update할 수 있는 배치 로직 개발
• 타 시스템의 API 조회를 통해 운영되던 페이지, pageSize가 정상 작동하지 않았음
ㅤ- API를 배치로 update되는 데이터들을 새롭게 설계한 테이블에 저장
ㅤ
# 조회 쿼리 성능 개선
• 10개의 테이블 데이터를 단일 페이지에서 조회하는 요구사항
• 테이블들을 1개의 View 테이블로 만들어서 조회, 5초의 응답시간 발생
ㅤ- 실행 계획 결과, 테이블들이 파일 테이블과 조인, 조건문 실행 시 풀 스캔 조인 발생
ㅤ- 조건문에 대한 인덱스 설정, 커버링 인덱스 적용, 서브 쿼리 삭제
• 응답시간 5초 > 1초
큐브에이
르노삼성 쿠폰 발급 시스템 고도화 및 운영
[프로젝트 설명]
르노삼성 서비스 센터 정비 쿠폰 관리 시스템 개발 및 운영
ㅤ
[주요 성과]
# 10만건 쿠폰 일괄 발급 프로세스 개선
• 기존 단일 1,000건 발급되던 쿠폰을 이벤트를 위한 50만 건 발급 필요
• 쿠폰 대상 차량 조회 쿼리 성능 개선
ㅤ- 조회 컬럼 최적화: 조회 시 불필요한 컬럼 제거 및 필수 컬럼만 SELECT
ㅤ- 서브쿼리를 INNER JOIN으로 전환하여 실행 계획 최적화
ㅤ- 실행 계획 분석을 통해 불필요한 테이블 풀스캔 발생 구간 식별
ㅤ- WHERE 절 조건 순서 최적화 및 복합 인덱스 설계
• 대량 발급 처리 로직 개선
ㅤ- MyBatis foreach를 활용한 bulk INSERT 처리 구현
ㅤ- 메모리 사용량을 고려하여 5,000건 단위로 배치 사이즈 설정
• 최종 결과: 발급 소요 시간 5분 > 1분으로 단축 (80% 성능 개선)
큐브에이
르노삼성, 르노 도메인 운영
[프로젝트 설명]
르노삼성 자동차 홈페이지 운영, 이벤트 설계 및 개발, 백오피스 개발
ㅤ
[주요 성과]
# 코드 리팩토링
• 공통으로 관리할 수 있는 java, javascript, html 코드를 공통화하여 유지보수성 향상
ㅤ
# 핵심 서비스 운영 및 유지보수
• 시승 신청, 내 차 만들기, 메인 페이지 배너 관리 등 핵심 기능 개발 및 개선
• 정기 배포 및 시스템 안정성 확보
ㅤ- 월간 정기 배포 진행 (dump를 이용한 DB 백업 및 변경사항 적용)
ㅤ- Scouter를 통한 서비스 모니터링 및 장애대응
ㅤ
# 다양한 유저 참여형 이벤트 시스템 설계 및 개발
• 선착순 이벤트 동시성 제어 시스템 구축
ㅤ- 오라클 시퀀스를 활용한 선착순 번호 발급으로 동시성 문제 해결
ㅤ- 시퀀스의 NOCACHE, NOCYCLE 옵션 적용으로 번호 중복 발급 방지
ㅤ
• 다양한 이벤트 유형별 시스템 구현
ㅤ- 차량 원격 제어 연동 이벤트: 외부 제어 API 연동 및 사용자 인증 보안 강화
ㅤ- 실시간 룰렛 이벤트: 당첨 확률 조정 및 실시간 당첨 결과 노출
ㅤ
• 이벤트 모니터링 및 관리 시스템 구축
ㅤ- 이벤트 진행 상황 실시간 모니터링 대시보드 개발
ㅤ- 부정 참여 방지를 위한 IP 기반 접근 제한 및 Device ID 검증
ㅤ- 이벤트 참여 데이터 분석을 통한 사용자 패턴 파악
교육
인하공업전문대학교
대학교(전문학사) | 정보통신학과
2015.03. ~ 2020.02.
졸업
서울 양정고등학교
고등학교 | 이과
2012.03. ~ 2015.02.
졸업
F-lab
사설 교육 | 자바 백엔드 딥다이브
2024.02. ~ 2024.06.
졸업
인천 ICIA 교육원
사설 교육 | Java, Spring, Mybatis를 활용한 웹 서비스 구축 및 개발
2019.06. ~ 2020.02.
졸업
자격증
정보처리기사
합격 | 한국산업인력공단
2024.06.
SQLD
합격 | 한국데이터산업진흥원
2022.03.