← 모든 프로젝트
01 / 백엔드 이관·운영 개선2023.11 – 현재 · 개발·운영

수리엔 API 이관과 배포 자동화

수리 매칭 플랫폼 · DB Inc.

React 화면을 유지하며 Next.js·MongoDB 백엔드를 Spring Boot·MySQL로 이관했습니다.

담당 역할

백엔드 개발·PM · 데이터 모델 이관 · CI/CD·모니터링

활용 기술
Spring Boot · JPAMySQLJenkins · DockerPrometheus · GrafanaSpring Security · JWT
문제

외주 백엔드를 내부에서 유지보수하고 서버별 수작업 배포를 줄여야 했습니다.

설계와 구현
  1. React 화면을 유지하며 백엔드 이관
  2. 서버별 수작업을 배포 파이프라인으로
  3. 엑셀 대량 업로드의 비동기·병렬 처리
성과

약 1시간 → 약 10분

서버 2대 기준 · 수동 배포 약 1시간 → Jenkins 파이프라인 약 10분 (배포 기록·작업 체감)

수리엔 백엔드이관 전후 구조
수리엔 백엔드 이관과 배포 자동화의 전후 구조
이전이후
화면ReactReact 화면 유지
APINext.js APISpring Boot · JPA
데이터MongoDBMySQL
배포SVN · 서버별 수작업GitLab · Jenkins · Docker

Next.js API 약 50개를 이관하고 기존 React 화면과 연동

핵심 흐름 · 이해를 돕기 위해 단순화한 개념도

01 / CHALLENGE

문제와 제약

외주에서 인계한 Next.js·MongoDB 서버를 내부에서 유지보수해야 했습니다. 사내에서는 이미 Spring Boot를 쓰고 있었고 백엔드 개발자는 2명이라, 별도 스택을 계속 유지하기 어려웠습니다. 배포 때마다 SVN checkout, 파일 이동, deploy.sh 실행을 서버별로 반복하는 작업도 개선이 필요했습니다.

02 / DECISIONS

설계와 구현

01

React 화면을 유지하며 백엔드 이관

백엔드를 Spring Boot·MySQL로 통일하기로 하고 Next.js 백엔드 API 약 50개를 이관했습니다. MongoDB 모델은 MySQL 기반 JPA Entity로 재설계하고 기존 React 화면과 연동했습니다. Internal·External·Bypass 호출 경로와 인증을 나누고, Java 11→21·Spring Boot 2.7→3.3으로 버전을 올렸습니다.

02

서버별 수작업을 배포 파이프라인으로

형상관리를 SVN에서 GitLab으로 옮기고, Jenkins·Docker로 빌드·이미지 생성·배포를 자동화했습니다. 서버 2대는 1대를 먼저 배포해 헬스체크를 통과하면 나머지 1대를 배포하는 순차 무중단 방식이며, Jenkins 전환도 1대에서 먼저 검증한 뒤 전체에 적용했습니다. AWS ALB 뒤 Nginx 멀티서버를 운영하고 Prometheus·Grafana 모니터링을 구성했습니다.

03

엑셀 대량 업로드의 비동기·병렬 처리

엑셀 대량 업로드는 행마다 외부 API 응답을 기다린 뒤 다음 행을 처리하는 직렬 구조라 대기 시간이 행 수만큼 누적됐습니다. CompletableFuture로 행별 처리를 비동기 작업으로 나누고 ExecutorService의 스레드 풀에서 병렬 실행했습니다. 동시 실행 수는 스레드 풀로 제한했습니다. 모든 작업의 결과를 모아 행별 성공·실패와 사유를 반환했습니다.

처리 구조 전후 · 개념도

이전 · 직렬 처리

  1. 1행응답 대기
  2. 2행응답 대기
  3. 3행응답 대기
  4. 4행응답 대기

✕ 대기 시간이 행 수만큼 누적

행마다 외부 API 응답을 기다린 뒤 다음 행을 처리하는 직렬 구조라 대기 시간이 행 수만큼 누적됐습니다.

변경 후 · 스레드 풀 병렬 처리

  1. 1행스레드 1
  2. 2행스레드 2
  3. 3행스레드 1
  4. 4행스레드 2

✓ 행별 성공·실패와 사유를 반환

CompletableFuture로 행별 처리를 비동기 작업으로 나누고 ExecutorService의 스레드 풀에서 병렬 실행했습니다. 동시 실행 수는 스레드 풀로 제한했습니다.

이전에는 1행부터 4행까지 한 행씩 차례로 처리합니다. 변경 후에는 스레드 2개가 1·2행을 동시에 처리하고, 먼저 끝난 스레드가 3·4행을 이어서 처리합니다. 가로축은 시간, 막대는 행별 외부 API 응답 대기입니다. 응답 대기 시간이 모두 같다고 가정한 개념도이며, 행·스레드 수와 처리 시간은 실측값이 아닙니다.

GitLab
Jenkins 빌드
Docker 이미지
배포·모니터링
이해를 돕기 위해 단순화한 개념 흐름입니다.
03 / RESULT

약 1시간 → 약 10분

서버 2대 기준 · 수동 배포 약 1시간 → Jenkins 파이프라인 약 10분 (배포 기록·작업 체감)

백엔드 API 약 50개를 Spring Boot로 이관해 외주 의존을 없애고, 배포 작업을 약 1시간에서 약 10분으로 단축했습니다. Flutter 앱의 Play Store·TestFlight 배포와 Vue·React 화면 유지보수도 담당했습니다. 별도 기업 홈페이지는 React.js·Tailwind CSS로 신규 구축(2025.12)하고 2026.08 전면 개편했으며, 어드민 연동과 배포까지 맡았습니다.

다음 프로젝트스카이탭 결제·Apple 환불 연동
← 모든 프로젝트 보기

채용·프로젝트 문의

dohoon321@gmail.com
도훈의 AIPORTFOLIO ASSISTANT
PORTFOLIO Q&A

안녕하세요.
경력과 프로젝트를 질문해 주세요.

공개된 포트폴리오를 바탕으로 답변합니다.

AI 답변은 오류가 있을 수 있습니다. 이용 안내(새 탭)
질문은 OpenAI로 전송됩니다. 개인정보는 입력하지 마세요.