미리보기
기본 정보

"'혼자 개발하는 협력'이 아닌 '문제를 공유하고 함께 해결하는 진정한 협업'을 실천하는 백엔드 개발자입니다. 처음 도입하는 기술도 보일러플레이트 코드를 제작해 공유하며 팀 전체의 성장을 이끌어왔습니다. 새로운 기술을 빠르게 습득하고 지식을 나누는 과정에서 협업의 가치를 체득해왔습니다.
기술 스택
Java, Spring Boot, spring-jpa, MariaDB, Redis, Kafka, Kubernetes, Git, CI/CD, argocd, ubuntu
프로젝트
COCONOTE
개인
2024.09. ~ 2024.11.
통합 협업 플랫폼 (노션 + 채팅 + 드라이브)
사용기술
Backend: Java, Spring Boot
Frontend: JavaScript, Vue3
Database: MariaDB, Redis, AWS S3, OpenSearch
Infrastructure: Kubernetes, Docker, Nginx
Cloud Services: AWS EKS, AWS MSK, Route53, CloudFront, Google Maps
CI/CD: GitHub Actions, JIB, Argo CD
주요 역할
BE
백엔드 개발 리드
팀원들의 Kafka, STOMP 개발을 위해 보일러 플레이트를 작성하여 설명 및 예제 제공
데이터베이스 설계 및 최적화
데이터베이스 링크드리스트 기반의 설계를 통해 캔버스(노션 블록) 의 순서를 유지한체로 조회하도록 설계
대용량 파일 시스템 개발
AWS S3 + Presigned URL 적용으로 서버 부하 감소 및 대용량 파일 업로드 속도 개선
실시간 알림 시스템 구축
SSE(Server-Sent Events) 적용으로 폴링 방식 대비 네트워크 트래픽 절감 예상
Redis Pub/Sub 기반 메시지 브로드캐스트로 다중 서버 환경에서도 안정적 실시간 알림 유지
검색 기능 최적화 (OpenSearch 도입)
기존
LIKE
검색 → OpenSearch 기반 역색인 검색으로 속도 10배 향상 (3초 → 0.3초)Nori 형태소 분석기 적용으로 한국어 검색 정확도 개선
CI/CD 파이프라인 구축
GitHub Actions + ArgoCD 기반 CI/CD 구축 GitOps 구축 및 쿠버네티스 환경 시각화
JIB을 활용한 Docker 이미지 최적화로 빌드 시간 약 40% 감소
스케줄링 및 데이터 관리 자동화
Spring Batch + Redisson 분산 락 적용으로 중복실행 문제 해결
트러블 슈팅 및 고민
분산환경에서의 문제
🛑 문제:
분산환경에서 알림이 간혈적으로 누락되는 경우가 발생
✅ 해결:
Redis Pub/Sub 도입 → 다중 서버 간 알림 및 데이터 동기화 구현
Drag & Drop 시 순서를 유지하는 방법
🛑 문제:
ORDER BY + 인덱스 방식을 사용할 경우, 순서 변경이 빈번하면 인덱스 재정렬로 성능 저하
Linked List 기반 구현 시, 삭제 시 prev/next 갱신 문제 발생
✅ 해결:
Linked List 기반 순서 관리 적용 →
prev_id
,next_id
를 활용하여 순서 변경 시 최소한의 연산만 수행삭제 시 정합성 유지 → 삭제 시 prev/next를 갱신하는 로직을 트랜잭션 내에서 처리하여 데이터 무결성 유지
배치 스케줄링 시 페이지 시작점 문제
🛑 문제:
Chunk 방식 사용 시, Hard Delete 후 OFFSET 변동으로 중복 삭제 또는 누락 발생
다중 서버 환경에서 동일한 배치가 중복 실행될 가능성 존재
✅ 해결:
Chunk 방식 대신 Tasklet 방식 적용 → 삭제 후 OFFSET이 변하지 않도록 PK 기반 삭제 로직으로 전환
배포 속도 저하 및 테스트 비효율 문제
🛑 문제:
Dockerfile 기반 빌드 시 빌드 시간이 오래 걸림
ArgoCD가 ECR의
latest
태그를 인식하지 못해 배포 시 변경된 이미지가 반영되지 않음배포 실패 시 원인을 빠르게 파악하기 어려움
✅ 해결:
JIB(JVM 기반 빌드 도구) 적용 → 레이어 캐싱 최적화로 빌드 시간 단축
버전 태그를 명시적으로 관리 →
latest
대신 버전을 명시한 형태로 태그를 생성하여 ArgoCD가 인식하도록 변경ArgoCD 알림 시스템 연동 → 배포 실패 시 디스코드 알림 발송하여 실시간 대응 가능
WANT
개인
2025.07. ~ 2025.09.
사용 기술
Backend: Java, Spring Boot
Frontend: Vue3
Database: MariaDB, Redis
Infrastructure: Kubernetes, Docker, Nginx
Cloud Services: EKS, Route53, CloudFront, Google Maps
CI/CD: GitHub Actions, JIB
주요 역할 (Backend Lead)
1. 소셜 로그인 및 리프레시 토큰 관리
Google OAuth 기반 소셜 로그인 기능 구현
JWT 기반 인증 적용 (액세스 토큰 + 리프레시 토큰)
Redis를 활용한 리프레시 토큰 저장 및 자동 만료 처리
2. CI/CD 파이프라인 구축
GitHub Actions + JIB 기반 빌드 및 배포 자동화
운영/개발 서버 분리하여 환경별 배포 프로세스 적용
블루-그린 배포 및 Health Check 도입으로 무중단 배포 구현
3. HPA를 활용한 자동 스케일링
Kubernetes HPA(Horizontal Pod Autoscaler) 적용
CPU 사용률 기반 자동 확장 및 리소스 최적화
4. 실시간 블록 이동 및 알림 시스템 구축
SSE 기반 실시간 이벤트 처리
Redis Pub/Sub을 활용한 블록 이동 및 그룹 초대 알림 기능 구현
트러블슈팅 및 해결 방법
1. HikariCP Connection Pool 고갈 문제
🛑 문제:
SSE 요청 증가로 인해 HikariCP Connection Pool이 고갈되는 문제 발생
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available
오류 발생spring.jpa.open-in-view=true
설정으로 인해 트랜잭션이 View까지 유지되면서 Connection 반환이 지연됨
✅ 해결:
SSE API에서 불필요한 JPA 트랜잭션 제거
spring.jpa.open-in-view=false
설정하여 트랜잭션 종료 시 Connection 반환SSE 요청 처리 시 DB 접근을 최소화하고 별도 API에서 데이터 조회하도록 개선
GET 요청에
@Transactional(readOnly = true)
추가하여 Lazy Loading 문제 방지
2. 블록 이동 및 알림 시스템 최적화
🛑 문제:
일정 블록을 달력으로 이동 시 모든 사용자에게 새로고침 요청을 전달해야 했음
그룹 초대 시 알림이 사용자에게 제대로 전달되지 않는 문제 발생
✅ 해결:
SSE(Server-Sent Events) 기반 실시간 블록 이동 이벤트 전송
Redis Pub/Sub을 활용하여 모든 사용자에게 동기화된 알림 전송
사용자 그룹 초대 시 알림 시스템 개선
3. 배포 속도 및 테스트 비효율 문제
🛑 문제:
기존 Dockerfile 기반 빌드 시간이 오래 걸림
ArgoCD가 ECR의
latest
태그를 인식하지 못해 변경된 이미지가 반영되지 않음배포 실패 시 원인을 빠르게 파악하기 어려움
✅ 해결:
JIB 적용하여 Docker 이미지 빌드 최적화 (레이어 캐싱 활용)
버전 태그를 명시적으로
release-{timestamp}
형태로 관리하여 ArgoCD 인식 문제 해결ArgoCD와 Discord 알림 연동하여 배포 실패 시 실시간 알림 전송
4. 무중단 배포 및 블루-그린 배포 문제
🛑 문제:
블루-그린 배포 적용 시 Gradle 실행 시간이 있어 완벽한 무중단 배포가 어려웠음
배포 중 서비스 중단이 발생하는 문제 발생
✅ 해결:
GitHub Actions을 활용한 CI 자동화 (코드 변경 시 자동 빌드 및 테스트 수행)
JIB을 활용한 빠른 컨테이너 이미지 빌드 (Dockerfile 불필요)
운영 서버와 개발 서버를 분리하여 환경별 배포 프로세스 구축
개발 서버에서 Docker Compose와 쉘 스크립트를 활용한 블루-그린 배포 적용
배포 전 Health Check를 추가하여 안정적인 전환 보장
5. HPA 적용 및 서버 자동 확장 문제
🛑 문제:
트래픽 증가 시 서버 부하를 효과적으로 분산할 방법이 필요했음
실시간 알림 기능에서 재연결 시 메모리 해제 문제가 발생
✅ 해결:
Kubernetes HPA(Horizontal Pod Autoscaler) 적용하여 CPU 사용률에 따라 자동 확장 설정
최소/최대 Pod 개수를 설정하여 비효율적인 리소스 낭비 방지
메모리 누수 발생 시 HPA를 통해 자동으로 재시작하여 문제 해결
자격증
정보처리기사
기사 | 한국산업인력공단
2024.06.
SQLD
Developer | 한국데이터산업진흥원
2024.04.
대외활동
구글 연합 동아리
GDSC(GoogleDevelop ersStudentClub)
2024
GDSC 주최 뉴이어 해커톤 참여
백엔드 리드
정기세션을 통한 테코톡 주최
동아리 서버 관리
구글 연합 동아리
GDSC(GoogleDevelop ersStudentClub)
2023
blended 주류쉐어 플랫폼 개발
서울 경제진흥원 주최 새싹톤 Top 10 진출
구글 연합 동아리
GDSC(GoogleDevelop ersStudentClub)
2022
Spring Boot를 이용한 ToDoList 프로젝트
Google Solution Challenge 참여
구글 연합 동아리
GDSC(GoogleDevelop ersStudentClub)
2021
java 스터디
Spring 스터디
교육
대진대학교
대학교(학사) | 컴퓨터공학과 전공, 산업경영공학과 복수전공
2018.03. ~ 2024.08. | 졸업
자기소개
자기소개서
안녕하세요, 백엔드 개발자 상민입니다.
"협업을 지향하는 개발자, 끊임없이 성장하는 프로그래머"라는 모토로 꾸준히 발전하며, 문제 해결에 집중하는 개발자로 성장해왔습니다.
성장 과정과 핵심 역량
제 개발자 여정은 의외의 순간에 시작되었습니다. 대학교 수업에서 반복적인 이자율 계산 과제를 Python의 반복문으로 해결하면서 프로그래밍의 매력에 빠졌고, 더 복잡한 시스템을 직접 만들어보고 싶다는 열망이 생겼습니다.
관심을 실천으로 옮기기 위해 GDSC(Google Developers Student Club)에 가입했고, 첫 프로젝트로 ToDoList 애플리케이션을 개발했습니다. 각자 맡은 기능을 개발한 뒤 병합하는 과정에서 충돌이 잦았지만, 팀원들과의 소통을 통해 문제를 조율하며 협업의 중요성을 체감했습니다. 이후 총 7건의 팀 프로젝트중 4건의 프로젝트를 주도적으로 이끌며 협업 능력을 체계적으로 쌓았습니다.
특히 두 번째 프로젝트에서는 로그인 기능 구현에 어려움을 겪었고, 6주간 진전이 없던 문제를 혼자 고민하는 대신 동료들에게 도움을 요청해 단 하루 만에 해결한 경험이 있습니다. 이 경험을 통해 ‘각자 개발하는 협력’이 아닌, 문제를 공유하고 함께 해결하는 진정한 협업의 의미를 배웠습니다.
이후 서버 구축과 배포 과정에서 어려움을 겪으며 인프라와 백엔드 시스템의 본질적인 매력을 느꼈고, 직접 홈서버를 구성해보며 백엔드 개발자로서의 방향을 확립하게 되었습니다.
기술 및 학습 역량
Java와 Spring Boot를 중심으로 한 백엔드 개발에 전문성을 가지고 있으며, Redis, Kafka, Kubernetes 등 분산 환경에서의 실시간 데이터 처리와 시스템 확장성 확보를 고려하고자 합니다.
정보처리기사, SQLD 자격증을 취득하여 기초 이론도 탄탄히 다졌으며,
HW BEYOND SW CAMP에서는 짧은 기간 내에 Kafka, WebSocket, Redis 등 생소한 기술 스택을 빠르게 습득하고 실전 프로젝트에 적용하여 우수 수료생으로 선발되었습니다.
낯선 기술도 실전에서 빠르게 습득하고 적용할 수 있는 학습 속도와 응용력이 저의 강점입니다.
프로젝트 경험 및 성과
동아리 및 해커톤, 부트캠프를 진행하면서 다양한 프로젝트를 경험하였습니다.
최근 진행한 COCONOTE 프로젝트에서는 백엔드 개발 리드로서 통합 협업 플랫폼을 구축했습니다. 이 프로젝트는 약 6주간 진행된 팀 프로젝트로, 총 5인의 팀원과 협업하며 백엔드 전반을 책임졌습니다.
Kafka, STOMP 등의 기술 도입에 앞장서며, 팀원들이 쉽게 이해하고 사용할 수 있도록 보일러플레이트 코드를 제작 및 공유했습니다.
실시간 알림 누락 문제를 Redis Pub/Sub을 통해 해결하고, Drag & Drop 이슈는 Linked List 기반 정렬 로직을 도입하여 개선했습니다.
CI/CD 파이프라인 구축을 통해 배포 속도를 약 30% 단축시켰고, JIB 기반 무중단 배포 환경을 구성했습니다.
대용량 파일 업로드 시스템을 구축하며 Redisson 기반 분산 락을 적용해 데이터 일관성과 안정성을 확보했습니다.
이처럼 프로젝트 전반에서 기술 리더로서 기여했을 뿐 아니라, 실질적인 성능 개선과 문제 해결을 이끌었습니다.
또한, GDSC에서는 여러 프로젝트에서 팀장 및 백엔드 리드 역할을 수행했습니다. 기술적 결정을 내리는 동시에 팀원 간의 원활한 커뮤니케이션을 유도해 프로젝트 완성도를 높였고, 이를 통해 협업과 리더십 역량을 체계적으로 키울 수 있었습니다.
협업과 문제 해결 방식
저는 개인의 성과보다는 팀 전체의 성공을 중시하는 개발자입니다. 문제에 직면했을 때 혼자서 끌어안기보다는, 빠르게 공유하고 함께 해결해 나가는 것을 우선시합니다. 실제로 프로젝트 중 발생한 트러블 상황에서도, 문제 해결을 위한 팀 내 기술 세션을 자주 열어 함께 고민하며 최적의 방향을 도출해왔습니다.
뿐만 아니라, 모든 문제는 단순한 해결에 그치지 않고 팀원들과 지식을 공유하고, 유사 상황에서 반복되지 않도록 체계적인 문제 해결 문화를 만드는 데 기여하고자 노력합니다.