백엔드 개발자
- Email: biuea3866@gmail.com
- GitHub: github.com/biuea3866
- Portfolio: 포트폴리오
- Blog: dpdpdndn.pages.dev
소개
3,000+ 기업이 사용하는 채용 관리 시스템(ATS)의 핵심 기능을 설계하고 개발한 5년차 백엔드 개발자입니다.
“동작하는 코드”가 아닌 “유지보수 가능한 시스템”을 만들고, 문제 해결 과정에서 발견한 인사이트를 팀에 공유하고, 함께 더 나은 방법을 찾아가는 것을 좋아합니다.
경력 (4년 3개월)
주식회사 두들린
2022.04 - 재직중 (4년 3개월) · 정규직
알림 자동화 시스템 개편
2026.06 ~ (진행 중)
백엔드 모노레포 전환
2026.05
Claude 설정 도입을 위한 멀티 레포 → 모노 레포 전환
- 문제: 코드베이스가 여러 레포에 흩어져, 팀원들이 동일한 Claude 설정(컨벤션·리뷰·자동화)을 일관되게 적용하기 어려웠음
- 해결: 19개 모듈을 단일 모노레포로 통합하고, 팀 공용
.claude하네스(agents·skills·rules·hooks)를 저장소에 내장해 clone만으로 동일 환경 확보 - 결과: PR 형식·코드 컨벤션·테스트 작성이 훅·규칙·에이전트로 강제되어 팀원 산출물 균일화
- 📎 상세 포트폴리오: 보기
AI 협업 레거시 시스템(NodeJS) → 신규 시스템(Spring) 포팅
2026.04
플랜 다운그레이드 워커 포팅
- 문제: 트랜잭션 경계가 없는 쿼리 순차 실행, 중간 실패 시 재처리 어려움, 유지 보수 어려움
- 해결: 도메인별 다운그레이드 서비스 클래스 분리(트랜잭션 경계 설정), 실패 서비스 클래스만 재시도, 피처 플래그를 이용한 무중단 전환
- 결과: 테스트 커버리지 80%+, 실패 step만 선택적 재시도 처리, 일정 20md → 10md로 단축
- 📎 상세 포트폴리오: 보기
지원서 데이터 정규화, 시스템 개편
2025.11 - 2026.03
Node 엑셀 시스템 → Spring POI 포팅
- 문제: Node 서버에 도메인 로직 이중 관리, 유지 보수 어려움
- 해결: Apache POI + 템플릿 메서드 패턴 적용, SXSSFWorkbook 스트리밍 처리
- 결과: 시트 유지 보수 공수 평균 2~3일 → 0.5일, 멀티스레드 환경으로 동시 처리 성능 향상
- 📎 상세 포트폴리오: 보기
수험번호 배정 동시성 제어
- 문제: 공채 시즌 동시 지원 시 수험번호 중복 배정 위험
- 해결: Redis 분산락(SET NX) + INCR 원자적 연산으로 유니크 번호 보장
- 결과: 동시 요청 100건/초에서도 100% 유니크 배정
- 📎 상세 포트폴리오: 보기
AI 서류 평가
2025.09 - 2025.10
백엔드 아키텍처, 플로우 구성
- 문제: 여러 엔드포인트에서 발생하는 평가 트리거를 누락 없이 처리해야 함
- 해결: 기존 내부 이벤트를 활용한 평가 트리거 이벤트 아키텍처 + 콜백 endpoint + 재처리 배치
- 결과: 누락 없이 모든 평가를 요청하고, 결과 완료 상태로 서빙, 장애 상황까지 대비
- 📎 상세 포트폴리오: 보기
벌크성 서류 평가 요청 처리
- 문제: 수백 명 지원자 단건 처리 시 트랜잭션 시간 증가, 외부 데이터 팀 부하 발생
- 해결: No Offset 슬라이스 + JdbcTemplate 벌크 INSERT + Kafka 메시지 발행
- 결과: 클라이언트 응답 40~50ms, 벌크 연산 200건 기준 80ms
- 📎 상세 포트폴리오: 보기
지원자별 평가
2025.02 - 2025.08
무중단 마이그레이션 전략 수립
- 문제: 수시→공채 데이터 구조 변경 시 서비스 중단 위험
- 해결: 3단계 전략 (기존+신규 동시저장(듀얼라이트) → 배치 마이그레이션 → 전환)
- 결과: 서비스 중단 0분, 데이터 마이그레이션 손실 0건
- 📎 상세 포트폴리오: 보기
API 아키텍처 개선
- 문제: 대규모 기능 개발 시 코드 누적 후 일괄 배포로 롤백 어려움
- 해결: API 버저닝 + 플래그 제어로 비활성화 상태에서 수시 배포
- 결과: 중복 코드 80% 제거, 엔드포인트 호출 롤백만으로 즉시 롤백 가능
- 📎 상세 포트폴리오: 보기
도메인 주도 객체지향 적용
- 문제: 서비스 클래스에 흩어진 비즈니스 로직, 테스트 불가, QA 대응 어려움
- 해결: Aggregate 패턴 적용, 엔티티 중심 비즈니스 로직 집중, 불변 객체 설계
- 결과: 테스트 커버리지 0% → 70%, QA 시 몇 줄 수정으로 대응, 유지보수성 대폭 향상
- 📎 상세 포트폴리오: 보기
API 레이턴시 해결
- 문제: 권한 테이블(2천만 건) JOIN으로 인재풀 API 응답 13초
- 해결: EXPLAIN 분석 → 불필요 JOIN 제거 + 커버링 인덱스 + 2단계 쿼리(PK 조회 → 재조회)
- 결과: 13초 → 1초 (92% 개선), 디스크 I/O 최소화
- 📎 상세 포트폴리오: 보기
데이터베이스 부하 개선
2025.01
조회 쿼리 부하 개선
- 문제: N건 단건 쿼리, 3초 주기 polling의 불필요한 COUNT 쿼리로 DB CPU 과부하
- 해결: N건 단건 쿼리 → IN절 벌크 조회 후 애플리케이션에서 조합 처리 / COUNT 쿼리 → 전체 조회 후 애플리케이션에서 count 처리
- 결과: 쿼리 수 201개 → 3개 (98% 감소), Reader CPU 50
60% → 3040% 감소 - 📎 상세 포트폴리오: 보기
공고 모집분야
2024.07 - 2024.12
지원자 조회 성능 테스트
- 문제: 공채 시 10,000명 지원자 동시 조회, 기존 쿼리로는 곱연산 성능 이슈
- 해결: 동적 JOIN 쿼리 적용 (필터 파라미터 존재 시에만 해당 테이블 JOIN)
- 결과: 응답시간 27,885ms → 148ms (99.5% 개선), TPS 1.1 → 1,339 (1,217배), CPU 100% → 10%
- 📎 상세 포트폴리오: 보기
배치잡을 통한 데이터 마이그레이션
- 문제: 수시→공채 데이터 구조 변경, 8만 건 → 56만 건 생성 필요
- 해결: Spring Batch 청크 기반 처리, 체크포인트 재시작 지원
- 결과: 56만 건 1시간 내 완료 (9,300건/분), 성공률 100%, 서비스 무중단
- 📎 상세 포트폴리오: 보기
QueryDSL 타입 캐스팅 인덱스 문제
- 문제: intValue() 사용으로 CAST 연산 발생, 인덱스 미사용 Full Table Scan
- 해결: AttributeConverter 적용으로 엔티티 레벨 타입 변환, 쿼리 CAST 제거
- 결과: 인덱스 정상 사용, 스캔 타입 ALL → ref, 포스트모템 문서 팀 공유
- 📎 상세 포트폴리오: 보기
행동과학연구소 연동
2024.04 - 2024.06
파일 처리 방식 개선
- 문제: 서버에서 대용량 파일 직접 처리 시 OOM 위험, 배치 구현 필요
- 해결: Presigned URL 기반 플로우 재설계, 외부에서 S3 직접 업로드
- 결과: OOM 위험 제거, 배치 애플리케이션 미구현으로 개발 공수 절감, 재사용 가능한 패턴
- 📎 상세 포트폴리오: 보기
지원자 탈락, 메일 발송 벌크 액션
2023.08 - 2023.09
비동기 처리 벌크 데이터 처리
- 문제: 동기 처리로 50명 제한 (100초 대기), 부분 실패 시 롤백해도 메일은 발송됨
- 해결: Kafka 기반 비동기 처리, 건별 트랜잭션으로 부분 실패 허용, 진행률 추적 API
- 결과: 처리 규모 50명 → 500명 (10배 확장), 즉시 응답 + 실시간 진행률 확인
- 📎 상세 포트폴리오: 보기
토픽 컨벤션 제안
- 문제: 개발자마다 다른 토픽 네이밍, 토픽명만으로 목적/컨슘 가능 여부 판단 어려움
- 해결: event.{domain}.{sub-domain} (1:N 이벤트), queue.{domain}.{behavior} (1:1 작업) 컨벤션 정의
- 결과: 팀 표준 채택, 코드가 곧 문서가 되는 효과, 신규 개발자 온보딩 시간 단축
- 📎 상세 포트폴리오: 보기
잡플래닛 연동
2023.04 - 2023.08
이벤트 드리븐을 활용한 채용 플랫폼 연동 구축
- 문제: 동기 연동 시 외부 장애가 자사 서비스 전체에 전파, 신규 플랫폼 추가 시 기존 코드 수정
- 해결: Kafka 기반 이벤트 드리븐 아키텍처, 플랫폼별 컨슈머 그룹 분리, 재시도 API
- 결과: 장애 격리 100%, 신규 플랫폼 연동 시 토픽 구독만으로 확장, 부분 실패 허용
- 📎 상세 포트폴리오: 보기
양사 데이터 정합성을 맞추기 위한 배치 애플리케이션
- 문제: 단방향 연동으로 잡플래닛 자체 데이터 변경 감지 불가, 정합성 오류 위험
- 해결: 주기적 배치로 외부 데이터 조회 → 자사 DB 비교 → 차이점 업데이트 + 알림
- 결과: 데이터 불일치 문제 해소, 문제 발생 시 Slack 알림으로 빠른 대응 체계 구축
- 📎 상세 포트폴리오: 보기
ORP 인적성 검사 연동
2023.04 - 2023.05
비동기 처리를 이용한 다건의 인적성 검사 요청
- 문제: 100명 동기 처리 시 2~3분 대기, 부분 실패 시 롤백해도 메일 발송 취소(외부 API) 불가
- 해결: Kafka 기반 비동기 처리, 건별 트랜잭션으로 데이터 정합성 보장
- 결과: 즉시 응답 + 백그라운드 처리, 부분 실패 허용 및 추적 가능
- 📎 상세 포트폴리오: 보기
배치 애플리케이션을 활용한 검사 결과지 세팅
- 문제: 실시간 폴링으로 최초 조회 시 파일 처리 6초 지연, 커넥션 점유
- 해결: 사전 배치 처리 방식으로 전환, 결과 미리 적재 후 즉시 응답
- 결과: 6초 → 1초 이하 (83% 단축), 롱 트랜잭션/커넥션 점유 해소
- 📎 상세 포트폴리오: 보기
프로그래머스 연동
2022.09 - 2023.01
외부 API 요청과 데이터베이스 트랜잭션 분리
- 문제: 외부 서버 동기 호출과 트랜잭션 결합으로 롱 트랜잭션, 장애 전파 위험
- 해결: Kafka 메시지 큐를 이용하여 외부 호출과 트랜잭션 분리
- 결과: 트랜잭션 시간 단축, 외부 장애 시에도 자사 서비스 안정성 확보
- 📎 상세 포트폴리오: 보기
학력
가천대학교 · 컴퓨터공학과 학사
2018.03 - 2022.02 졸업
스킬
MySQL, JPA, Kotlin, Spring Boot, Spring Batch, Apache Kafka
수상/자격증/기타
- 정보처리기사 (2021.11)