이은빈백엔드 개발자

Portfolio

"동작한다"에서 멈추지 않고,
"더 좋은 방법은 없을까?" 를 고민하는 개발자

Introduction

소개

새로운 시도를 두려워하지 않고,
개선은 숫자로 확인합니다.

안녕하세요! 백엔드 개발자 이은빈입니다. 새로운 기능을 구현하는 것 자체를 즐기며, 팀 프로젝트에서도 해보지 않은 기능이라면 항상 구현해 보려고 주도적으로 맡아 개발합니다.

안정적인 시스템을 구축하는 방법에도 관심이 많아 새로운 도구들을 직접 도입하고, 성능 개선 지표를 직접 확인하며 시스템의 완성도를 높이고자 노력하고 있습니다.

주력 분야
Backend
주 언어 · 프레임워크
Java 17 · 21 / Spring Boot
데이터
PostgreSQL, MySQL, MongoDB, Redis
인프라
Docker, AWS EC2, GitHub Actions
테스트 · 성능
JUnit5, Mockito, k6, Jest
그 외 경험
ROS2 · Gazebo, React · TypeScript
  • 용감함

    하고 싶은 일이 생기면 일단 부딪혀보는 편입니다.익숙한 깅르 고집하기보다 하고 싶은 분야에 뛰어들었고, 처음 맡는 역할과 기술도 직접 해보며 영역을 넓혀왔습니다.

  • 다정함

    사람을 대할 때 작은 것 하나를 더 살피려고 합니다 다양한 아르바이트를 하며 손님의 취향과 자주 찾는 메뉴를 기억했고, 먼저 알아봐 주시는 단골손님들이 생기는 즐거움을 경험했습니다.

  • 꼼꼼함

    작은 부분도 그냥 지나치지 않고 한 번 더 확인합니다.작은 의문도 그냥 넘기기보다 직접 확인하고, 시작한 일은 스스로 이해할 수 있는 답을 찾을 때까지 붙잡고 있는 편입니다.

17개 허브를 그래프로 다루는 MSA 물류 관리 플랫폼. Hub 도메인 설계부터 최적 경로 탐색과 재고 동시성 제어까지 담당했습니다.

기술 스택

  • BackendJava 17, Spring Boot, Spring Data JPA, QueryDSL
  • StoragePostgreSQL
  • Cache/MQRedis, Redisson, RabbitMQ
  • TestJUnit5, Mockito, Spring Boot Test

기여도

6인 팀 프로젝트의 팀 리더이자 Hub 도메인 담당. Hub 도메인 설계·개발과 공통 API·프로젝트 구조 설계를 주도했습니다.

진행 과정

  • 17개 허브 연결 정보를 JVM 그래프로 구성하고 Dijkstra 최적 경로 탐색을 구현
  • Redis Cache-Aside를 적용하고, 경로 변경 이벤트 기반으로 그래프·캐시를 동기화
  • 동시 재고 차감의 Lost Update를 재현한 뒤 Redisson 분산락을 적용
  • 주문 처리 이력과 Unique Constraint로 재시도 요청의 멱등성을 보장

성과

  • 동시 요청 10건에서 재고 불일치 Expected 90 / Actual 99 → Actual 90 으로 해결
  • hubId + productId 단위 Lock으로 Scale-out 환경의 재고 동시성 제어
  • 최단 경로 Redis Cache-Aside 적용 후 100VU에서 p95 465.9ms → 304.2ms (34.7% ↓), 반면 처리량은 798 → 561 RPS (30% ↓)
  • 1VU 저부하 재측정에서 CPU Throttling 0회 → 35회를 확인, 캐시 적용에 따른 CPU 오버헤드 가능성임을 식별
  • 캐시 사용 여부를 환경변수로 분리해 트래픽 특성에 따라 선택 가능하도록 구성

삼인분

AI를 활용한 음식 주문 관리 플랫폼. 결제 승인·취소 프로세스와 CI/CD·HTTPS 운영 환경을 맡았습니다.

기술 스택

  • BackendJava 21, Spring Boot, Spring Data JPA
  • InfraDocker, Docker Compose, AWS EC2, Nginx
  • StoragePostgreSQL, Redis, S3
  • TestJUnit

기여도

6인 팀 프로젝트에서 결제 도메인과 배포 인프라를 담당했습니다. Toss Payments 결제·취소 프로세스 구현과 Docker·GitHub Actions 기반 CI/CD 환경을 구축했습니다.

진행 과정

  • Toss Payments API를 연동해 결제 승인·취소 프로세스를 구현
  • Docker Compose로 Spring Boot, PostgreSQL, Redis, Nginx를 독립 컨테이너로 구성
  • GitHub Actions와 Docker Hub로 빌드 → 이미지 배포 → EC2 배포를 자동화하는 파이프라인 구축
  • Nginx를 Reverse Proxy로 구성하고 SSL 인증서를 적용해 HTTPS 운영 환경 구축

성과

  • 서버의 주문 정보와 결제 요청 데이터를 교차 검증해 결제 데이터 무결성 확보
  • CI/CD 구축으로 빌드부터 운영 서버 배포까지 자동화
  • Docker Compose · Nginx · SSL로 HTTPS 기반 서비스 운영 환경 구축

혼자 설계하고 구현한 소셜 네트워크 서비스. DB 병목을 줄이기 위해 조회 API에 Redis를 도입했습니다.

기술 스택

  • BackendJava 17, Spring Boot, Spring Data JPA
  • InfraDocker, Docker Compose
  • StorageMySQL 8.0, Redis, MinIO
  • TestJUnit, k6

기여도

개인 프로젝트. 회원가입·로그인, 게시물 CRUD, 좋아요, 파일 업로드·다운로드를 모두 직접 설계하고 구현했습니다.

진행 과정

  • 이미지·PDF 파일을 Object Storage(MinIO)에 저장하도록 분리
  • DB 병목을 방지하기 위해 좋아요와 게시물 조회 API에 Redis 적용
  • Docker로 API 서버, MySQL, Redis, MinIO를 독립 컨테이너로 구성

성과

  • Redis 캐시 적용 후 게시물 조회 평균 응답 시간 22% 단축
  • 독립 컨테이너 설계로 선택적 실행이 가능해져 개발·테스트 생산성 증가
  • Docker volume을 활용해 데이터 영속성 확보

운동화 쇼핑몰의 주문 도메인. MongoDB로 만든 MVP를 MySQL로 재설계하고, 부하테스트로 병목과 락 경합을 추적했습니다.

기술 스택

  • BackendNode.js, Express, JavaScript, Mongoose, Prisma
  • StorageMongoDB → MySQL
  • Testk6, Jest, Supertest
  • ToolingCustom Performance Analyzer (Python, 자체 개발)

담당

팀 프로젝트에서 주문 도메인을 담당했습니다. MVP 모델 개발부터 DB 재설계, 부하테스트와 병목 분석까지 맡았습니다.

진행 과정

  • Node.js와 MongoDB 기반의 MVP 모델 개발 및 주문 도메인 담당
  • 주문 데이터의 관계성과 정합성을 고려해 MySQL 기반으로 재설계
  • 주문 생성 로직을 트랜잭션으로 구성하고 조건부 원자적 재고 차감 적용
  • k6 부하테스트로 주문 조회·생성 성능 및 병목 분석
  • 트랜잭션 실패와 동시 주문 테스트로 Rollback 및 초과 판매 방지 검증

성과

  • 주문 5만 건, 200RPS 조회 부하테스트
    • MongoDB userId 인덱스 적용으로 P95 약 31초 → 약 3초 (90.2% ↓)
    • MySQL 전환 후 약 0.3초 (추가 89.6% ↓)
  • 주문 생성 100RPS 부하테스트
    • Prisma P2028 발생 → MySQL InnoDB LockWait 분석으로 동일 상품 옵션에 대한 row-level lock 경합 확인
    • 중복 조회 제거와 조건부 재고 UPDATE 적용으로 주문 1건당 SQL 15 → 11회 (26.7% ↓)
  • 재고 10개에 동시 주문 20건 통합 테스트에서 10건 성공 · 10건 409 Conflict · 최종 재고 0, 초과 판매 방지와 트랜잭션 정합성 검증

Finding Path Analysis

ROS2와 Gazebo 시뮬레이션 위에서 A*, Dijkstra, RRT* 알고리즘의 탐색 영역과 경로 생성 과정을 비교했습니다.

기술 스택

  • EnvLinux (Ubuntu 22.04), ROS2
  • SimulationGazebo
  • AnalysisPython (Matplotlib)

기여도

시스템 아키텍처 설계와 환경 구축, 데이터 파이프라인 설계 및 시각화를 담당했습니다.

진행 과정

  • 리눅스 환경에서 ROS2와 Gazebo를 연동해 가상 시뮬레이션 환경 구축
  • 10m × 10m 영역 내 정적 장애물의 무작위 배치 시스템 구현
  • A*, Dijkstra, RRT* 등 경로 탐색 알고리즘 3종 구현
  • 장애물 위치를 JSON으로 추출해 경로 탐색 알고리즘의 입력값으로 사용
  • Matplotlib으로 알고리즘의 탐색 영역과 경로 생성 과정 시각화

성과

  • Dijkstra 대비 A*가 탐색 영역을 줄여 목표 지점에 더 빠르게 도달함을 확인
  • 장애물이 적은 환경에서는 A*가 가장 안정적인 경로를 생성
  • 복잡도가 높고 센서를 활용하는 환경에서는 RRT*의 활용도가 높음을 확인

지도를 함께 편집하고 공유하는 플랫폼. 타임라인·탐색 페이지와 지도 편집 엔진, 자체 툴바를 구현했습니다.

기술 스택

  • FrontendReact, TypeScript, React Query, SCSS, Zustand
  • EnvVercel
  • CI/CDGitHub Actions

기여도

타임라인 페이지, 탐색 페이지, 지도 편집 기능을 담당했습니다.

진행 과정

  • 타임라인 페이지와 탐색 페이지 담당
  • react-intersection-observer로 무한 스크롤 구현
  • 추천 키워드 기반 검색 필터링 로직과 팔로우·팔로잉 상태 관리 구현
  • 카카오 맵 SDK와 연동한 지도 편집 엔진 및 자체 툴바 구현

성과

  • 무한 스크롤 구현으로 사용자 경험 및 렌더링 최적화
  • 자체 편집 인터페이스를 구축해 마커·선·면의 동적 스타일링 기능 구현
  • SVG-to-Base64 동적 주입 방식으로 별도 이미지 리소스 없이 마커 디자인을 실시간 변경