Hey! I am

박건우

I'm a

About

About Me

커뮤니케이션 중심의 개발자

  • Name: 박건우
  • Date of birth: 11월 13일, 1995
  • Address: 경기도 의정부시,대한민국
  • Email: pgw111111@naver.com
  • Phone: +82-010-2548-5949

Skills

Language

  • • Java 17, 21

Framework

  • • Spring Boot (Spring Security, Spring Batch, JPA, QueryDSL, Thymeleaf)

Database

  • • MySQL
  • • MariaDB
  • • Redis

Infrastructure

  • • AWS (EC2, S3, CodeDeploy, ECR, ECS)
  • • Terraform
  • • Docker
  • • Linux

Tools

  • • Git
  • • GitHub
  • • GitHub Actions

Experience

2025.04 ~ (재직중)

SearchM

Backend Engineer


서비스명 : SmPay

smpay는 광고 캠페인 데이터 수집·통합, 운영 심사, 비용 정산 및 리포팅 기능을 포함한 마케팅 대행사 전용 백오피스 플랫폼입니다.
다양한 광고 매체와 연동하여 데이터 정합성 유지 및 업무 자동화를 목표로 구축된 시스템입니다.

내가 한 업무

- 서비스 확장성과 코드 재사용성 확보를 위해 모노레포 멀티 모듈 아키텍처 구성 및 런타임 시 MSA 형태 서비스 배포 및 관리

- 대용량 데이터 처리 OOM 방지 및 네트워크 오버헤드 해결을 위해 jdbc Template을 이용한 Bulk Insert/Delete Query 사용 및 비동기 멀티 스레드 전략 도입으로 70만 건 기준 30분 → 2분 성능 개선

- 데이터 정합성과 조회 성능 최적화를 위해 정규화/반정규화 혼합 설계 및 복합 인덱스 구성으로 평균 쿼리 응답 시간 2.5초 → 0.8초로 68% 단축

- 인증/인가 보안 강화를 위해 JWT + Spring Security + API Key를 통한 다중 인증 체계 구축

- 외부 API 연동 안정성 향상을 위해 WebClient 기반 동기 통신 및 tooManyRequest 방지를 위한 RateLimit 설정 및 지수 백오프를 이용한 retry 3회 전략 구축

- 분산 트랜잭션 처리 시 SAGA 패턴을 적용 및 실패 시 보상 트랜잭션을 적용하여 데이터 일관성 99% 달성

- 컴파일 타임 쿼리 검증과 동적 쿼리 성능 최적화를 위해 JPA + QueryDSL 조합 도입

- 이벤트 기반 비동기 처리로 응답 시간 단축을 위해 EventPublisher + AWS SES/Naver SENS 연동 구현으로 알림 발송 시간 3.2초 → 0.9초로 72% 단축

- 장애 대응 시간 단축을 위해 전역 예외 처리 + Slack 실시간 알림 시스템 구축으로 평균 장애 인지 시간 15분 → 3분으로 80% 단축

- 배포 안정성과 가용성 확보를 위해 Blue/Green 무중단 배포

- 반복문을 통하여 처리하던 데이터 수집을 Spring Batch + Cron 스케줄링 기반 구현으로 변경 및 retry 전략 구축하여 데이터 수집 오류 월 평균 12건 → 1건으로 92% 감소

- 수동 API 문서 작성으로 인한 문서-코드 불일치 문제 해결을 위해 Rest Docs + 슬라이스 테스트 환경 구축으로 API 문서 정확도 85% → 100%로 향상

기술 스택

- Java 17

- Spring 3.4

- mysql

- Spring batch

- JPA, QueryDSL

- ThymeLeaf

- AWS EC2, S3, CodeDeploy

- Github actions

TroubleShooting

대용량 광고주 데이터 적재/삭제 병목 해결

문제 상황: 광고주 데이터 대량 적재 요구가 있었고, 해당 데이터는 delete → insert 방식으로 처리해야 했습니다.
JPA 메소드로 saveAll(), deleteAll()을 쓰더라도 단건씩 delete/insert를 수행하다 보니 성능 병목이 발생하는 문제를 발견했습니다.
또한, Thread Pool을 고정하지 않고 순차적으로 블로킹 형태로 처리를 진행하다 보니 요청이 무한 번 온다는 가정하에는 사용할 수 있는 스레드가 없어 서버가 응답할 수 없는 상황도 발생하고 블로킹으로 인해 스레드 효율성이 떨어지는 것을 발견하였습니다.

접근 및 해결: jdbc template을 이용한 nativeQuery를 활용해 다건을 한 번에 처리하는 Bulk Delete/Insert 전략을 도입했습니다.
삭제/적재 작업을 Queue에 넣고, chunk size 단위로 묶어 일괄 처리하도록 변경하여 JPA의 hibernate를 우회하도록 하여 OOM 발생 방지 및 다건 처리로 속도를 향상시킬 수 있게 되었습니다.
또한, CompletableFuture클래스를 이용하여 비동기/논블로킹 방식으로 멀티 스레드를 이용한 데이터 수집을 진행하여 속도 효율을 향상 시켰습니다.
추가적으로, 해당 API에서 처리할 수 있는 스레드 풀을 ThreadTaskExecutor를 통해 고정시켜두고, 요청이 많이 들어오더라도 해당 스레드 내에서 처리할 수 있도록 지정 및 Queue에 대기 시킬 수 있도록 하여 스레드 고갈이 발생하지 않도록 하여, 서버의 가용성을 높였습니다.

성과: 기존에 70만 건의 대용량 데이터 기준으로 30분대 처리되는 속도를 2분대로 처리되도록 개선하였으며, 서비스의 실시간성과 안정성 및 가용성을 크게 높였습니다. 다만, 인프라적으로 MessageQueue를 도입하면 확장성 있는 시스템을 만들 수 있을 거 같아 현재는 기술 검토 중에 있습니다.

TroubleShooting

MSA 환경에서 분산 트랜잭션 일관성 보장을 위한 SAGA 패턴 구현

문제 상황: MSA 구조로 서비스 모듈이 되어 있었기에 서로를 호출하게 되는 경우가 종종 있습니다.
출금 계좌 등록을 하기 위해 메인 코어 서비스 모듈(A)에서 입/출금 관련 서비스 모듈(B)로 호출을 해야하는 상황이었습니다. B 모듈에서는 정상적으로 출금 계좌가 외부 서버에 등록이 되었으나 A 모듈 내에서 입/출금 계좌 정보를 저장하려고 하였지만 실패를 하는 경우가 발생하여 데이터 불일치 문제가 발생하였습니다.

접근 및 해결: 트랜잭션의 경계가 달라졌기에 데이터 일관성을 유지하기 위해서는 SAGA 패턴을 이용하여 보상 트랜잭션을 구축하면 데이터 일관성을 유지할 수 있다고 판단하였습니다.
따라서, B모듈에서 성공적으로 응답을 받았고, A모듈 내에서 응답을 받고 추가 작업을 진행하다 Exception이 발생하였다면, 단계에 따라 서로 다른 보상 트랜잭션들을 진행할 수 있도록 구현하여, B모듈 내에서 성공으로 처리되었던 단계들을 롤백하여 A모듈과 B모듈의 데이터 일관성을 맞추도록 구현하였습니다.

성과: B 모듈에서 처리 되는 부분에 있던 데이터를 안정적으로 취소 및 롤백시킬 수 있게 되어 몇 번을 요청하더라도 데이터는 일관성을 가질 수 있게 되었습니다.
추가적으로, 보상 트랜잭션 또한, 실패할 수 있다 생각하여 지수 백오프를 지정하여 3회까지 재시도를 진행 이후, 실패를 한다면 slack webhook을 통해 어떤 보상 트랜잭션에 문제가 생겼는지를 알 수 있도록 하여 데이터 일관성을 최대한 지키도록 구현하였습니다.
2024.03 ~ 2025.04(1년 2개월)

CDRI

Backend Engineer


서비스명 : Ceticos, Cosmetest

Certicos는 화장품 및 기능성 제품의 인증 업무를 디지털화한 플랫폼으로, 제품별 인증 항목 관리, 서류 업로드 및 검토, 기관 제출 및 처리 상태 추적까지 인증 전 주기(Pipeline)를 자동화·시각화를 목표로 구축된 시스템입니다.


CosmeTest는 화장품 시험 분석 업무의 의뢰-진행-보고 전 과정을 통합 관리하는 플랫폼으로, 시험 의뢰 접수, 스케줄링, 결과 등록, 리포트 자동 생성 등 시험 실무의 업무 흐름을 디지털 전환한 서비스입니다.
임상 실험을 하는 과정을 디지털화하여 업무 자동화를 목표로 구축된 시스템입니다.

내가 한 업무

- 레거시 시스템의 1:1 테이블 구조를 비즈니스 확장 요구사항에 맞춰 1:N 구조로 전환하기 위해 연관된 30여 개 API의 영향도 분석 및 단계적 리팩토링을 통해 데이터 무결성을 보장하면서 불필요한 조인 쿼리 개선을 통해 조회 성능 40% 개선

- 텍스트 매칭 정확도 향상을 위해 투포인터 + 트라이 알고리즘 조합으로 OCR 좌표 매핑 시스템 구현

- 대용량 데이터 마이그레이션 안정성 확보를 위해 jdbc Template을 이용한 Bulk Query + 트랜잭션 분할 전략으로 500만 건 중단 이관 달성

- 다중 데이터베이스 환경에서 데이터 정합성 보장을 위해 @Transactional 어노테이션 기반 Master/Slave DataSource 자동 라우팅 구현 (읽기 전용 트랜잭션은 Slave, 쓰기 트랜잭션은 Master로 분기)

- 컴파일 타임 쿼리 검증을 위해 불필요한 Native Query → QueryDSL 전환으로 런타임 오류 95% 감소

- 대용량 데이터 처리를 위해 Spring Batch + Cron 스케줄링 기반 상태 변경 시스템 구현으로 일 평균 200만 건의 성분 데이터 처리 시간 4시간 → 1.5시간으로 62% 단축

- 서버 간 통신 보안 강화를 위해 SHA-256 기반 API Key + 환경별 인증 분리 체계 구축으로 무단 접근 시도 차단율 99.7% 달성

- 장애 대응 시간 단축을 위해 GlobalExceptionHandler + Slack 실시간 알림으로 MTTD 70% 감소

- 인프라 가시성 향상을 위해 Terraform IaC + AWS ECS 오토스케일링으로 배포 안정성 99.9% 달성

- 쿼리 성능 최적화를 위해 Explain Plan 분석 및 복합 인덱스 생성으로 Slow Query 4ms → 0.89ms로 78% 단축

기술 스택

- Java 17, Java 11

- Spring Boot 3.1, Spring Boot 2.6

- Spring Batch

- JPA, QueryDSL

- ThymeLeaf

- MariaDB

- Terraform

- AWS ECS,ECR,EC2,S3,CodeDeploy

TroubleShooting

OCR 텍스트 매칭 정확도 문제

문제 상황: 임상 실험 검사 시 규제 단어 검출을 위해 사용자가 등록한 딕셔너리와 AI 서버에서 분석된 OCR 텍스트를 매칭해야 했습니다. 하지만 OCR 결과가 단어 단위가 아닌 "안 녕"처럼 글자별로 분리되어 오는 경우가 많아 정확한 매칭이 어려웠고, 수만 개의 딕셔너리 단어를 실시간으로 검색하기엔 성능 병목이 발생했습니다.

접근 및 해결: 성능 최적화를 위해 애플리케이션 시작 시 트라이 알고리즘으로 딕셔너리 검색 구조를 미리 구축하고, 사용자가 추가한 새로운 단어들을 매일 아침 배치 작업을 통해 트라이 구조에 반영하여 메모리 효율성과 안정성을 확보했습니다. OCR 텍스트의 분리 문제 해결을 위해 슬라이딩 윈도우 알고리즘을 적용하여 연속된 글자들을 조합해 단어를 재구성하고 딕셔너리와 매칭하도록 구현했습니다.

성과: 트라이 + 슬라이딩 알고리즘 도입으로 검색 속도가 기존 대비 60% 개선되어 사용자에게 전달하는 응답 속도가 향상되었습니다.
인프라 확장성 및 배포 안정성 개선

문제 상황: 기존에는 EC2 + CodeDeploy + Nginx를 통한 무중단 배포를 사용했지만, MSA로 프로젝트 구조를 변경할 예정이었습니다. 각 모듈별로 개별 EC2 인스턴스를 관리하고 배포하기에는 확장성이 떨어지고, 인프라 관리가 복잡해지는 문제가 있었습니다. 또한 수동으로 관리되는 인프라 설정으로 인해 환경 일관성과 재현성에 어려움이 있었습니다.

접근 및 해결: 컨테이너 기반 아키텍처로 전환하여 AWS ECS를 도입하고, 각 모듈을 독립적인 컨테이너로 패키징하여 확장성과 격리성을 확보했습니다. Blue/Green 배포 전략을 통해 무중단 배포를 구현하고, 배포 실패 시 자동 롤백이 가능하도록 ECS 서비스 설정을 구성했습니다. 인프라 관리의 일관성과 재현성을 위해 Terraform을 활용한 IaC(Infrastructure as Code)를 도입하여 중요한 인프라 리소스를 코드로 관리하고 버전 제어가 가능하도록 구축했습니다.

성과: 멀티모듈 환경에서 각 서비스별 독립적인 배포와 확장이 가능해져 개발 생산성이 42% 향상되었습니다. ECS 오토스케일링을 통해 트래픽 증가 시 자동으로 인스턴스가 확장되어 서비스 안정성이 99.9%로 개선되었고, Terraform을 통한 인프라 코드화로 환경 구성 시간이 기존 대비 70% 단축되었습니다.

2021.04-2023.02(1년 10개월)

코그넷나인

Cognitive Engineer


프로젝트명 : KB 증권 FCC, AIA 생명 FCC

KB 증권 FCC의 프로젝트의 경우 주식에 대한 현재가, 지수에 대한 내용을 음성봇 및 챗봇으로 사용자에게 전달할 수 있도록 개발한 프로젝트입니다.

AIA 생명 FCC의 경우 보험에 대한 어려운 내용을 상담사를 대신해 정보를 전달할 수 있게 음성봇 및 챗봇으로 사용자에게 전달할 수 있도록 개발한 프로젝트입니다.

내가 한 업무

- 고객 요구사항 분석을 통한 음성봇 대화 시나리오 설계 및 Flow Chart 작성

- 사용자 경험 향상을 위해 자연어 처리 엔진 기반 의도 분석 및 예외 처리 로직 구현

- 외부 시스템과의 데이터 연동을 위해 RESTful API 통신 및 응답 처리 구현

- 음성봇 성능 최적화를 위해 대화 흐름 분석 및 시나리오 개선

- 서비스 품질 향상을 위해 테스트 시나리오 작성 및 QA 프로세스 구축

- 운영 모니터링을 위해 Genesis Cloud 기반 대화 흐름 분석 및 개선 방안 도출

기술 스택

- Java 1.8

- InfoChatter, AIQ

- Genesis Cloud

- Figma

TroubleShooting

커뮤니케이션을 통한 고객 이탈률 최소화

문제 상황: 기획서 기반 개발로 인해 시나리오 내 인증 절차가 과도하게 길어져, 사용자가 피싱으로 오해하거나 복잡함을 느껴 이탈하는 문제 발생 (고객 이탈률 60% 이상)

접근 및 해결: PM과 협의하여 시나리오 내 인증 단계 최소화 요청 및 반영, 음성봇 UX 개선을 통해 키패드 입력 시 음성 재생 중에도 버튼 입력으로 즉시 다음 단계 진행 가능하도록 구현

성과: 모니터링 결과 고객 이탈률 60% → 10% 미만으로 83% 감소 달성

Communication & Leadership

Communication

• 기술 지식 공유 문화 정착을 통한 팀 역량 향상
팀 내 기술 격차로 인한 개발 속도 저하 문제를 해결하기 위해 회사 기술 블로그에 글 작성 및 팀 내 노션 기술 페이지 작성 후 정기적인 지식 공유 세션을 진행했습니다.
복잡한 Spring Security 인증 흐름과 JPA 성능 최적화 기법을 실무 사례 중심으로 정리하여 공유 및 백엔드 아키텍쳐 및 테라폼 사용방법에 대한 내용 정리하여 공유함으로써, 팀 전체의 기술 이해도가 향상되었고 신규 입사자의 온보딩 시간이 평균 2주에서 1주로 단축되었습니다.

• 크로스 팀 협업 효율성 증대를 위한 표준화 체계 구축
프론트엔드, 백엔드 팀 간 API 연동 시 발생하는 반복적인 소통 비용과 오해를 해결하기 위해 REST API 문서 표준화 가이드라인을 수립하고 Rest Docs 기반 자동 문서화 시스템을 구축했습니다. 이를 통해 팀 간 소통 시간이 30% 이상 단축되고 개발 생산성이 42% 향상되었으며, API 연동 관련 버그 발생률이 40% 이상 감소하는 성과를 달성했습니다.

• 기획팀과의 기술적 제약사항 소통 및 요구사항 조율
기획팀이 요청한 "무제한 데이터 조회" 기능의 성능 이슈를 개발에 익숙하지 않은 기획자에게 이해하기 쉽게 설명하고 대안을 제시했습니다.
데이터베이스 부하와 응답 시간 지연 문제를 실제 시연을 통해 보여주고, 페이지네이션과 검색 필터를 추가한 실용적인 기능으로 조정하여 합의를 도출했습니다.
이를 통해 기획팀의 만족도를 유지하면서도 기술적으로 안정적인 서비스를 제공할 수 있었고, 향후 유사한 요구사항에 대한 소통 효율성이 크게 향상되었습니다.

Leadership

• 패스트캠퍼스 백엔드 부트캠프 멘토링 경험
신입 개발자들의 성장을 돕기 위해 패스트캠퍼스 백엔드 부트캠프에서 멘토로 활동했습니다. 객체지향 설계 원칙과 SOLID 원칙을 중심으로 한 코드 리뷰를 통해 20명의 멘티들이 클린 코드 작성 능력을 향상시킬 수 있도록 지도했습니다. 특히 Spring Boot 프로젝트에서 계층별 책임 분리와 의존성 주입을 통한 테스트 가능한 코드 작성 방법을 중점적으로 가르쳐 멘티들의 백엔드 개발자 역량을 기르는 데에 있어 일조하였습니다.


Certificate

2022.01.15

Google Cloud Professional Cloud Architect

- 구글 클라우드 아키텍트 취득

2022.03.04

Google Cloud Professional Data Engineer

- 구글 클라우드 데이터 엔지니어 취득

2022.09.29

Google Cloud Professional Machine Learning Engineer

- 구글 클라우드 머신러닝 엔지니어 취득

Education

2017.03-2021.02

컴퓨터공학 전공

한림대학교