미리보기
기본 정보
요구사항을 빠르게 코드로 구현하여 동작하는 결과를 만드는 개발자와, 프로젝트의 아키텍처를 깊이 고민하며 완벽한 코드를 지향하는 개발자가 있다면, 저는 어느 한쪽에 치우치지 않고 상황에 맞게 두 스타일을 조화롭게 활용하려고 노력하는 개발자입니다.
기술 스택
Java, Spring Boot, querydsl, JPA, MySQL, Redis, MongoDB, aws-ec2, aws-rds, aws-s3
교육
순천향대학교
대학교(학사) | 정보보호학과
2019.03. ~ 2024.12. | 졸업
프로젝트
수능 문제 마켓 플랫폼 - 개인 프로젝트
개인
2024.08. ~ 진행 중
프로젝트 개요
본 프로젝트는 고등학교 수학, 생명과학, 지구과학, 화학, 물리 문제를 크리에이터가 직접 제작하고 판매할 수 있는 교육 콘텐츠 마켓플레이스입니다.
사용자는 포인트를 이용해 원하는 문제를 구매할 수 있으며, 포인트는 현금 결제를 통해 충전하는 방식으로 운영됩니다.
이커머스의 비즈니스 모델을 기반으로 한 교육 콘텐츠 거래 플랫폼으로 정교한 결제 시스템을 구축하는 것이 목표입니다.
기술적 도전 및 구현 사항
멀티 모듈 및 프로젝트 구조 설계
공통 모듈 도입: 유저 및 백오피스 서버에서 공통적으로 사용하는 도메인 클래스, 엔티티, 레포지토리를 모듈화하여 중복을 제거하고 유지보수성을 향상.
3-레이어드 아키텍처 개선: 서비스 레이어를 비즈니스 로직 중심으로 설계하고, 세부 구현 로직은 별도
Implement
레이어에 분리하여 가독성과 확장성을 강화.
결제 프로세스 설계 및 개선
초기 설계
결제 안정성을 보장하기 위해 결제 관련 메서드를 단일 트랜잭션으로 처리, 예외 발생 시 롤백 보장.
개선점:
외부 API 요청과 트랜잭션 분리.
결제 프로세스를 단계별로 나누고, 예외 처리 로직을 강화하여 효율성과 안정성을 동시에 확보.
MongoDB를 활용한 조회용 모델 설계
기존 방식:
결제 내역 조회 시 8개 테이블 조인을 포함한 복잡한 Querydsl 코드 사용.개선점:
결제 내역 데이터를 문서형 모델로 전환하여 MongoDB에 저장.
조회 시 단순한 쿼리만으로 데이터를 효율적으로 검색 가능.
MongoDB 조회 성능 최적화
프로파일링
및 QueryExplain
을 통한 병목 지점 추적.복합 인덱스를 활용해 불필요한
Sort
단계 제거 및 성능 개선.데이터 100만 건 기준 집계 성능이 더 우수한 Maria DB를 이용하여 결제 내역 개수 Count 처리.
Spring Data Mongo의 기본 매핑 Converter 병목 현상을 확인 후
Custom Converter
로 개선.
리뷰 평점 통계 성능 개선
초기 방식:
DB의SUM
및COUNT
함수를 사용하여 통계 데이터를 실시간 계산했으나, 데이터 증가에 따른 성능 저하 발생.개선점:
리뷰 평점 통계를 별도 테이블에 저장.
API 호출 시 리뷰 데이터 증가와 관계없이 빠른 응답 속도를 제공.
PSAT 인터넷 강의 플랫폼 - 아웃소싱 프로젝트
개인
2022.07. ~ 2022.11.
프로젝트 개요
PSAT(공직적격성평가) 인터넷 강의 플랫폼 프로젝트에 백엔드 개발자로 참여했습니다.
기술적 도전 및 구현 사항
결제 시스템 설계
결제 솔루션 Portone을 사용하여 Webhook 수신 시 애플리케이션 내부에서 결제 처리, 강의 시청 권한 부여, 교재 배송 준비와 같은 후속 작업을 자동화했습니다.
쿠폰 중복 등록 방지
쿠폰 등록 과정에서 발생할 수 있는 동시성 이슈를 해결하기 위해 Lock 대신
DB unique key
(userId + couponId)를 활용하였습니다.데이터베이스 수준에서 중복 등록을 방지하여 성능 저하 없이 안정성을 확보했습니다.
정기 결제 구현
결제 솔루션 Portone을 사용해
빌링키 발급 및 예약 결제
를 처리하여 30일 주기의 정기 결제 기능을 구현했습니다.발급된 빌링키는 DB에 저장하며, 이를 통해 구독 취소 및 환불 요청을 효율적으로 처리할 수 있도록 설계했습니다.
Batch Update를 통한 운송장 상태 변경
기존 수동 운송장 입력의 한계를 극복하기 위해
CSV 파일 업로드 방식
을 도입하였습니다.업로드된 csv 파일을 파싱하여 결제 번호와 운송장 번호를 매핑하고, jdbcTemplate의
batchUpdate
를 사용하여 운송장 상태를 일괄적으로 업데이트했습니다.이 방식은 판매량 증가에 따라 작업 효율을 대폭 개선했습니다.
폐기물 수거 서비스 - 아웃소싱 프로젝트
개인
2023.10. ~ 2024.02.
프로젝트 개요
소상공인을 대상으로 식당 및 가게에서 발생하는 폐기물을 수거하고, 이를 통해 리워드를 제공하는 앱 플랫폼의 백엔드 개발자로 참여했습니다.
주요 기능: 소상공인과 수거기사를 매칭하는 시스템.
소상공인은 폐기물 수거량에 따라 리워드를 받고, 리워드로 다양한 물건을 구매할 수 있는 상점 기능을 제공합니다.
기술적 도전 및 구현 사항
소상공인과 수거기사 매칭 기능 설계
소상공인의 수거 요청과 수거기사의 승인 요청을 연결하는
비즈니스 로직
을 설계하였습니다.
APP Push 알림 기능
수거 상태 변경 시 소상공인에게 알림을 전송하기 위해
Firebase FCM
을 활용한 APP Push 알림 기능을 구현하였습니다.
관리자 백오피스 API 개발
소상공인 및 수거기사 정보 조회, 서비스 통계 및 정산, 리워드 상점 관리 API를 개발하였습니다.
소상공인 리워드 상점
카카오 선물하기(Kakao Biz) API를 연동하여 소상공인이 리워드 포인트로 기프티콘을 구매하고 전송받을 수 있는 기능을 구현하였습니다.
구매 과정에서 발생할 수 있는 리워드 포인트 차감 및 상품 재고 관리 동시성 이슈를 방지하기 위해 DB의
비관적 락(Pessimistic Lock)
을 활용하였습니다.
대외활동
순천향대학교 정보보호학과 학술동아리 SecurityFirst
SecurityFirst
순천향대학교 정보보호학과 학술동아리 SecurityFirst
2019.06.~ 2020.12 : 리버싱 엔지니어링 팀원 활동
2021.03 ~ 2021.12 : 개발팀장 활동
- 2021.04 ~ 2021.06 : 순천향대학교 청소년 정보보호 페스티벌 (YISF) 웹 사이트 개발
- 2021.11 ~ 2021.12: 교내 보안 대회 웹 사이트 개발
자기소개
속도와 완벽함 사이, 나의 개발 철학
개발자로서 저는 상황에 따라 두 가지 개발 스타일을 조화롭게 활용하는 것을 지향합니다.
빠르게 요구사항을 코드로 구현하여 동작하는 결과를 만드는 접근과,
프로젝트의 아키텍처를 깊이 고민하며 완벽한 코드를 작성하는 접근 모두 중요하다고 생각합니다.
과거 아웃소싱 프로젝트에서는 주어진 요구사항을 기한 내에 문제없이 코드로 구현하는 데 집중했습니다.
그러나 현재 진행 중인 개인 프로젝트에서는 아키텍처 설계, 확장성, 유지보수성을 중점적으로 고려하고 있습니다.
다양한 레퍼런스를 참고하며, 이를 제 프로젝트에 맞게 수정하고 적용하는 과정을 거치고 있습니다.
단순한 요구사항이라도 깊이 고민하며 코드를 작성하고, 지속적으로 리팩터링하여 품질을 개선해 나가고 있습니다.