Java · Spring Backend Developer

Java/Spring 백엔드 개발자
임동현입니다.

PUBLIC DEV 고운맘 · dev.gowoonmom.kr

총 1년 7개월 동안 제조 시스템과 공공기관 업무 시스템을 경험했습니다. 현재는 공공기관 웹 시스템에서 기능 개발, 연계 API, 배포와 운영 오류 대응을 맡고 있습니다.

개인 프로젝트 고운맘은 고객 쇼핑몰과 관리자 운영 시스템을 혼자 만들고, AWS 기반 공개 dev 환경에서 직접 운영하고 있습니다.

실무 경험
총 1년 7개월
현재 업무
Java 웹 개발·운영
개인 프로젝트
51개 테이블 · 1인 개발

경력

회사 실무 경험

현재는 공공기관 웹 시스템의 개발과 운영을 맡고 있습니다.

엔소프트웨어 · 2025.07.01 - 재직 중

사내 메일 시스템 개발·운영

단독 담당

기능만 개발한 구성원이 아니라 시스템 담당자로서 개발부터 운영 환경의 문제 해결까지 전 범위를 책임졌습니다.

  • 기존 시스템 유지보수와 신규 요구사항 반영
  • 타 시스템 연계 API 개발 및 유지보수
  • 운영 배포와 실제 서버 관리
  • 운영 중 발생한 오류 확인 및 수정

담당 범위 기능 개발 · 배포 · 서버 관리 · 오류 대응

Spring LegacyJSPOracle DB연계 API

인사·노무 업무 시스템

유지보수·신규 기능 개발

3인 팀

3인 팀의 구성원으로 기존 업무를 안정적으로 유지하면서 신규 기능과 시스템 연계 기능을 함께 개발했습니다.

  • 기존 기능 유지보수와 신규 기능 개발
  • 시스템 연계 API와 스케줄러 기반 API 개발
  • 개발한 기능의 운영 배포와 실제 서버 관리
  • 운영 중 발생한 오류 확인 및 수정

담당 범위 유지보수 · 신규 기능 · 연계 API · 운영 반영

Spring LegacyJSPOracle DBScheduler API

감프정보기술 · 2024.11 - 2025.05

제약 생산관리 시스템 유지보수·QA 지원

MES·WMS·Smart EBR의 C#/.NET WinForms 화면 수정, SQL Server 데이터 검증, 단위 테스트와 사용자 지침서 작성을 담당했습니다.

고객 기관명과 내부 URL·서버·API·DB·운영 데이터는 공개하지 않았습니다. 회사명과 근무 기간만 공개합니다.

개인 프로젝트 · 공개 dev 운영 중

고운맘

고객 쇼핑몰과 관리자 운영 시스템을 혼자 만들고, 공개 dev 환경에서 직접 운영하고 있습니다.

1인 개발 PUBLIC DEV

쇼핑 화면보다 운영 흐름에 더 많은 시간을 썼습니다.

고객의 옵션 선택·장바구니·주문·결제와 관리자의 상품·재고·배송·환불 업무가 같은 주문과 결제 상태를 사용하도록 만들었습니다. 결제 지연, 중복 webhook, 재고 복구, 인증 세션과 이미지 처리 실패도 별도의 운영 상태로 다룹니다.

고객 흐름
상품 탐색·상세·장바구니·회원/비회원 주문·결제·주문 조회
관리자 흐름
상품·카테고리·메인진열·주문·결제·환불·배송·재고·회원 관리
데이터 모델
회원·인증·상품·재고·주문·결제·배송·알림·이미지 등 약 51개 테이블
플랫폼
Spring Security, JWT·OAuth 인증, MyBatis/JPA 데이터 처리, 공통 API 계약
배포
AWS Lightsail, Docker Compose, Nginx, HTTPS, MariaDB, S3·CloudFront 기반 dev 환경

Java 17Spring Boot 3.5.16Next.js 16.2React 19.2 TypeScriptMariaDBPortOneAWS

실사용 고객을 받는 production은 아닙니다. 면접관이 직접 기능을 확인할 수 있도록 공개한 dev 환경입니다.

AWS Lightsail에서 Docker Compose로 실행 중인 현재 dev 배포 구성

문제 해결

데이터 흐름으로 설명하는 문제 해결

이력서에는 결론만 적고, 여기서는 데이터가 이동하는 순서와 판단 기준을 함께 정리했습니다.

01

결제 상태 수렴

SDK 성공보다 서버에 남은 주문·결제 상태를 최종 기준으로 사용합니다.

문제

결제창 응답과 webhook은 순서가 다르고 같은 이벤트가 다시 올 수 있습니다. 화면, 주문, 결제 원장이 서로 다른 결론을 내리면 출고와 환불도 잘못됩니다.

해결

webhook 검증 후 결제사 API를 다시 조회하고 저장된 식별자와 대조했습니다. 주문과 결제 시도를 정해진 순서로 잠그고, 늦은 승인은 자동 환불 또는 수동 검토로 분리했습니다.

결과

중복 완료, 지연 승인, 결제 상세 불일치와 webhook·reconciliation 경합을 테스트했습니다. 프론트도 서버 주문 상태가 확정된 뒤 완료 화면을 표시합니다.

02

만료 주문의 예약재고 복구

결제창을 이탈한 주문이 판매 가능한 재고를 계속 묶지 않게 합니다.

문제

PAYMENT_READY 상태에서 멈춘 주문은 예약재고도 함께 남깁니다. 주문상품을 한 건씩 수정하면 데이터가 늘수록 쿼리와 경합 비용도 커집니다.

해결

시간과 batch 크기로 후보를 제한하고 주문을 잠근 뒤 현재 상태를 다시 확인했습니다. 옵션별 예약 수량은 DB에서 집계하고 재고와 주문 상태를 조건부 bulk update했습니다.

결과

webhook과 cleanup이 동시에 실행돼도 한쪽 상태만 반영되지 않게 했습니다. 중단 후 다시 실행하거나 대상이 없는 두 번째 실행도 안전한 no-op으로 확인했습니다.

03

안전한 소셜 계정 연결

같은 이메일이라는 이유만으로 기존 회원과 소셜 계정을 연결하지 않습니다.

문제

제공자마다 이메일 신뢰 수준이 다르고 이메일은 변경될 수 있습니다. 이메일 일치만 믿으면 기존 주문과 주소가 다른 로그인 수단에 노출될 수 있습니다.

해결

비밀번호, 현재 로그인 세션 또는 고운맘 이메일 인증으로 본인을 다시 확인합니다. OAuth 연결은 사용자와 refresh session에 묶인 5분짜리 일회성 grant로 처리합니다.

결과

동시 callback, grant 재사용, 다른 세션 사용, 연결 도중 로그아웃과 마지막 로그인 수단 해제를 검증했습니다. 현재 로컬 구현·검증 상태이며 실제 제공자 E2E와 dev 배포는 남아 있습니다.

04

MariaDB 기반 Public API Rate Limiter

공개 API의 요청 횟수를 IP와 사용자 식별자 범위로 나눠 관리합니다.

문제

IP만 제한하면 분산 공격에 약하고 식별자만 제한하면 공격자가 임의 값으로 버킷을 계속 만들 수 있습니다. 메모리 방식은 재시작과 다중 인스턴스에서 횟수가 초기화됩니다.

해결

IP를 먼저 검사하고 통과한 요청만 IP+식별자와 식별자 버킷을 확인합니다. 원문은 HMAC으로 보호하고, MariaDB 행 잠금과 독립 트랜잭션으로 동시 요청과 rollback에서도 횟수를 유지합니다.

결과

정확한 허용 횟수, Retry-After, 시간 창 초기화, 동시 요청, DB 장애와 제한된 배치 삭제를 검증했습니다. DB 부하나 hot-row 대기가 커지면 Redis로 옮길 기준도 정했습니다.

05

S3 이미지 처리의 재시도와 복구

DB와 외부 저장소를 한 트랜잭션으로 묶을 수 없는 문제를 상태로 추적합니다.

문제

S3 작업은 DB commit과 함께 rollback할 수 없습니다. 응답 유실이나 worker 중단이 발생하면 파일은 존재하지만 DB 상태는 실패로 남을 수 있습니다.

해결

DB에는 자산과 outbox 상태를 먼저 남기고 외부 I/O는 트랜잭션 밖에서 수행합니다. worker는 lease로 구분하고 timeout 뒤에는 S3 HEAD로 실제 결과를 다시 확인합니다.

결과

commit·rollback, 응답 유실, worker 재시작, 동시 lease와 활성화 순서 역전을 테스트했습니다. 삭제 전에는 보관 기간과 현재 상품 참조를 다시 확인합니다.

Technology

실제로 사용한 기술 스택

회사 실무와 현재 코드·설정에서 확인되는 기술만 역할별로 정리했습니다.

Company Systems

Spring Legacy · JSP · Oracle DB · Scheduler · System Integration API

Backend

Java 17 · Spring Boot 3.5.16 · Spring Security · MyBatis · Spring Data JPA · AWS SDK for Java

Frontend

Next.js 16.2.11 · React 19.2.4 · TypeScript 5 · Tailwind CSS 4 · Zustand · React Hook Form

Database & Integration

MariaDB · H2(test) · PortOne Payment/Webhook · OAuth · S3

Authentication & Security

JWT · Refresh Token Rotation · OAuth Account Linking · API Rate Limiting · HMAC-SHA256 · HttpOnly Cookie · CORS · CSP

Infrastructure & Verification

Docker Compose · Nginx · HTTPS/Let's Encrypt · AWS Lightsail · CloudFront · JUnit 5 · MockMvc · Testing Library · ESLint · Browser QA

Resume & Contact

이력서와 연락처

전화번호와 주소를 제외한 공개용 이력서와 개발 기록을 확인할 수 있습니다.

고운맘 dev 서비스: dev.gowoonmom.kr