안녕하세요,
저는 배태현입니다.

일상의 불편함을 기술로 해결 할 방법을 고안합니다.
같이 성장하는 것에 가치를 두며, 꾸준한 발전을 지향합니다.
누구든 편하게 의견을 낼 수 있는 분위기를 선호합니다.

Work Experience.

GenesisLab.

Backend Engineer - 현재

백엔드 개발팀.

Description.

서비스 전반적인 구성을 고려하며,
변경과 확장적인 설계에 집중합니다.
예외, 장애 상황을 대비하며,
각종 문제 해결 케이스에 관심이 많습니다.
서비스들의 백엔드 시스템을 구축하고,
유지보수 및 운영하고 있습니다.

What did I do.
  • ZUICY 전체 시스템 아키텍쳐 및 DB 설계,
    GraphQL Schema 설계, API 설계 및 개발, 유지보수

  • Junit5, Mockito, Kotest, Mockk,
    TestContainers, Jacoco를 활용한
    통합/단위 테스트 코드 작성 환경 구축 및 테스트 코드 작성

  • 팀 내 코드 컨벤션 확립 및 Git 관리 규칙 확립, 온/오프라인 코드리뷰를 도입하여 개발환경 및 문화 개선
    Git Flow 기반의 Git 관리 규칙을 확립하고,
    쉽고 빠르게 작성 할 수 있는 형태의 PR Template 구성,
    온/오프라인 코드 리뷰 도입, 온라인 코드 리뷰 규칙 확립,
    PR을 웹훅으로 연동하여 팀 내 원활한 작업 사항 공유 및
    온라인 코드리뷰를 활성화시켜
    팀 내 개발 환경과 문화를 개선하였습니다.

  • 서버 모니터링 시스템(DataDog, PinPoint)을
    선행적으로 도입하고,
    팀원분들이 해당 시스템들을 쉽고 빠르게 적용 할 수 있도록
    문서를 작성하여 공유하였습니다.

  • 주어진 업무를 열심히 단순 수행하는 것을 넘어
    타이트한 일정이더라도 안정성이 확보 되면서 더 빠르게
    업무를 진행하기 위해 노력하였습니다.
    퇴근 후 시간, 주말 시간을 활용하여 안정성이 검증되면서,
    폭발적인 생산성을 낼 수 있는 코드 환경을 구축하였습니다.
    덕분에 테스트를 더 진행 할 수 있는 여유 시간이 생겨
    서비스의 안정성을 더 확보 할 수 있었습니다.

  • 팀 내에서 전공 서적을 읽고 공유 할 수 있는 환경을 만들어
    팀원 모두가 주도적으로 성장 할 수 있는 환경을 구성하였습니다.

  • 팀원 모두가 같이 성장하고, 팀의 꾸준한 발전 지향을 위해
    개인적으로 공부한 내용이나 새로 알게된 내용들을
    정기적으로 팀원분들께 공유하였습니다.

  • 백엔드팀의 전반적인 회의록, 노션 문서 등을 만들고 관리하였습니다.

ZUICY 서비스 백엔드 개발.

Description.

Interactive AI를 활용해 크리에이터들의 콘텐츠를 플레이하고,
Generative AI를 활용한 Agent(챗봇)를 통해 소통하는
AI 팬덤 플랫폼(B2C) 서비스
입니다.
서비스 개발 초기에 참여하여
서비스를 성공적으로 성장시키는데에 기여하였습니다.
앱스토어, 플레이스토어 1위 기록,
누적 회원 수 600,000+, MAU 200,000+,
크리에이터 70+, 인터랙티브 콘텐츠 150+, 완주율 77.8%
LLM 기반 Agent(챗봇) 50+, 채팅 수 14,000,000+

What did I do.
  • 캐시서버(인앱결제)를 통해 앱 내 재화인 캐시를 충전하고,
    캐시를 사용하여 프리미엄 콘텐츠 이용권을 구매하는 시스템 구축
    달 매출 100,000,000₩+ 달성

  • 응답이 오래걸리는 API 모니터링을 통해
    많은 콘텐츠를 플레이 한 유저가 조회하는
    콘텐츠 플레이 기록 조회 API 응답이 느리다는 것을 확인하고
    성능 개선을 진행하였습니다.
    EXPLAIN, EXPLAIN ANALYZE를 활용해 쿼리 실행 계획,
    쿼리 실행 결과를 분석하고 쿼리 튜닝을 진행하여,
    콘텐츠 플레이 기록 조회 API의 성능을
    21.4%(5600ms -> 250ms) 개선 하였습니다.

  • 스케일 아웃 된 서버 환경에서
    update가 연쇄적으로 발생하는 기능에
    JPA dirty checking으로 인해
    서버별 select, update 시점이 어긋나
    update 되기 전 select 한 데이터를 덮어씌우는 현상이 발생하여
    @DynamicUpdate, Querydsl update를 활용하여
    필요한 컬럼만 update 쿼리가 실행되도록 변경하여 문제 해결
    동시성 문제가 발생하였지만,
    update 하려는 컬럼이 다른 상황이라
    필요한 컬럼만 update 쿼리가 실행되도록 변경하여
    문제를 해결하였습니다.

  • 서버 스케일 아웃을 진행하며 기존 로컬 cache로 관리되고 있던
    콘텐츠 댓글 카운트 및 좋아요 카운트 Redis를 활용하여 변경

Tech Stack.

Java(Open-JDK-11), Spring Boot, GraphQL(Netflix-DGS), Spring Security, Gradle, JPA, Querydsl, RDS(MariaDB), Redis, SQS, Junit5, Mockito, TestContainers, Jacoco, SonarQube, Vault, AWS, Docker, Nginx, Jenkins

ZUICY 스튜디오 백엔드 개발.

Description.

Interactive AI를 활용한 콘텐츠를 제작하고,
Generative AI를 활용한 Agent(챗봇)를 제작하는
편집 툴 서비스
입니다.

What did I do.
  • 크리에이터 계정 생성 프로세스 확립
    콘텐츠 팀에서 전달해주시는 크리에이터분들의 데이터로
    계정을 생성해주는 프로세스를 시스템화 하여,
    주당 평균 50분의 업무 시간 절약하였습니다.

  • 프롬프트, 환경 변수, 노드 변수, 유저 변수,
    동적 형태의 지식메모리를 저장 및 임베딩,
    모듈 형태의 노드(프롬프트 + 변수) 워크플로우를 통해
    Agent를 제작하고, 테스트 및 배포 요청 할 수 있는 환경 구축
    Applied AI 팀측 서버에서 관리하는 Agent가 배포 이후에
    Agent를 스튜디오에서 마음껏 수정하고 테스트하여도
    배포 되기전에는 실제 유저에게 적용되지 않는 구조를 적용하기 위해 고민하였습니다.

  • Interactive AI 콘텐츠 export/import 시스템 구축
    <Old, New> Map 방식을 활용하여 import 환경 구성,
    영상 디렉토리 무한 depth tree 구조를 유지하며 복사하기 위해
    깊이 우선 탐색 알고리즘 활용하여 문제 해결

  • Git을 사용하여 GraphQL schema(protocol)를
    관리하도록 변경하고 PR을 웹훅으로 연동하여
    클라이언트, 서버간의 작업이 원활하게 공유될 수 있는
    환경을 구축하여 업무 효율을 높였습니다.

  • Agent 시스템 구축 중 Applied AI 팀과 협업 과정에서
    중간자 역할로써 클라이언트, Applied AI팀 사이에서
    주도적으로 커뮤니케이션하여 업무 진행에 대한 공유가
    원활히 진행 될 수 있도록 하였습니다.

Tech Stack.

Kotlin(1.6.10, Open-JDK-11), Spring Boot,
GraphQL(Netflix-DGS), Spring Security, Gradle, WebClient, JPA, Querydsl, RDS(MariaDB), Redis, Kotest, Mockk, TestContainers, Jacoco, SonarQube, Vault, FFmpeg, AWS, Docker, Nginx

ZUICY 배치 백엔드 개발.

Description.

Interactive AI를 활용한 콘텐츠와
Generative AI를 활용한 Agent(챗봇)를 통해
쌓인 데이터들을 기반으로 통계를 산출하고,
사용자 개입 없이 진행이 필요한 작업이 진행되는 서비스입니다.

What did I do.
  • 25,000,000+ 건 데이터 통계 배치 성능 개선
    일별로 쌓인 데이터 기반으로 일별 통계를 계산해
    기존 통계 데이터를 갱신하도록 구조를 변경하고,
    조회하는 데이터를 페이징 형식으로 조회하도록 변경하여
    작업 성능을 359%(30min -> 5000ms) 개선하였습니다.

  • 캐시, 이용권 데이터 마이그레이션 배치 구축
    짧은 시간 내에 데이터를 변환하고 삽입하여
    무중단 환경에서 다른 서비스들의 배포 시점과 맞추어
    배치를 실행하여 데이터 마이그레이션을 진행하였습니다.
    약 600,000+ 건 데이터를 짧은 시간 내에 삽입하기 위해
    JDBC Bulk Insert를 활용하여 구현하였습니다.

  • AOP를 활용한 작업 시작/종료 알림 시스템 구축
    개발자 확인을 위한 내부 알림,
    사업실 공유를 위한 외부 알림을
    Custom Annotation으로 설정 할 수 있도록 시스템 구축

  • 작업 결과를 모니터링하여 실패 시
    재시도 할 수 있는 시스템 구축

Tech Stack.

Java(Open-JDK-11), Spring Boot, Gradle, JPA, Querydsl, RDS(MariaDB), Redis, Junit5, Mockito, Jacoco, AWS, Docker, Jenkins, Nginx, SonarQube, Vault

ZUICY 채팅 백엔드 개발.

Description.

Generative AI를 활용한 Agent(챗봇)를 통해
응답을 생성 요청하고, 생성된 응답을 처리하는 서비스입니다.

What did I do.
  • 초기에는 Batch Task 형태의 RDB Table로
    채팅 생성/응답을 관리하고, callback을 통해
    채팅 응답 내용을 업데이트하는 구조였지만,
    사용량이 많아짐에 따라 응답 지연 문제,
    스케일 아웃 시 성능 개선을 위해,
    callback 구조를 요청/응답 SQS를 활용한 구조로 개선하여
    응답 지연을 최소화하고 스케일 아웃 문제를 해결하였습니다.

Tech Stack.

Java(Open-JDK-11), Spring Boot, Gradle, JPA, Querydsl, RDS(MariaDB), Redis, SQS, Junit5, Mockito, Jacoco, AWS, Docker, Jenkins, Nginx, SonarQube, Vault

ZUICY 채팅 응답 백엔드 개발.

Description.

Generative AI를 활용한 Agent(챗봇)를 통해
응답된 답변을 조회(polling)하는 서비스입니다.
채팅 시스템 아키텍쳐를 개선하며,
기존 서비스 서버로 들어오는 polling 부하를 분산하기 위해
구축하였습니다.

What did I do.
  • Redis 데이터 구조 설계 및 Redis Cluster 모니터링

  • 비동기 non-blocking 형태의 polling API 설계 및 구축
    기존에는 polling 시 무조건 RDB를 조회하는 구조였지만,
    클라이언트 polling 전략을 확립하고, Redis로 변경하여
    성능을 5%(300ms -> 50ms)개선하고
    DB 부하를 분산시켰습니다.

  • 시나리오 설계 및 nGrinder를 활용한 시나리오 부하테스트 진행

Tech Stack.

Java(Open-JDK-21), Spring Boot, WebFlux, SQS, Redis, Gradle, Junit5, Jacoco, nGrinder, AWS, Docker, Nginx, SonarQube, Vault

Dotori.

Backend Lead
Backend Engineer
- 2022. 09

Dotori 백엔드 개발.

- 2022. 09
Description.

기숙사 종합 시스템 관리 웹 서비스
전교생과 사감선생님까지 약 250명 가량이
사용하고 있는 서비스 입니다.
2022년 3월 2일부터 정식 릴리즈 후 운영 중이며
사감선생님과 학생들의 피드백을 반영해 꾸준히 유지보수하고 있습니다.

What did I do.
  • Junit5를 이용한 테스트 코드 & Github 코드리뷰를 도입하여 개발환경 개선

  • ERD 설계 및 서비스로직 설계, 공지사항, 상벌점, 학생정보 관리, 기상음악 신청, 기숙사 자습 신청 등 코어시스템 개발

  • GitHub Action, Elastic Beanstalk 환경에서 CI/CD 구축

  • SSL handshake 문제로 인한 pending 현상 발생으로
    Amplify, Elastic Beanstalk 환경에서
    Client : S3, CloudFront
    Server : EC2, Route53, Elastic Load Balancer 환경으로 마이그레이션

  • 마이그레이션 된 AWS 환경에 따라
    Github Action, Code Deploy, S3 환경에서
    prod/dev 환경으로 나누어 CI/CD 재 구축

  • v1.0.0-beta ~ 구축한 코어시스템을 사감선생님과 학생들의
    요구 사항 및 피드백에 맞춰 수정 및 유지보수

  • v1.0.0-beta ~ Spring Data JPA(Hibernate) + Querydsl에서
    암묵적 join인 cross join이 일어나는 이슈를 발견하고
    명시적 join인 inner join으로 개선

  • v1.0.0 정식릴리즈 ~ MVP 단위 개발 프로세스를 참고하여
    일주일 간격으로 재배포하며
    사감선생님과 학생들의 피드백을 받아 서비스에 반영하여
    더욱 사용자 친화적이고 완성도 높은 서비스를 위해
    지속적인 수정, 유지보수를 해 나가고 있습니다.

  • v1.1.x ~ Exception 구조를 Enum으로 관리하는 방식으로 변경하여 Custom Exception을 더 효율적으로 관리하도록 변경

  • v1.1.x ~ 기능이 많아짐에 따라 feature별로 패키지 구조를 나누는 방법을 채택하여 패키지 구조를 domain, global로 변경하여 개발환경 개선

  • v1.1.x ~ 테스트 커버리지 관리를 위한 Jacoco를 도입하여 개발환경 개선

  • v1.1.x ~ Multi Thread 환경에서 자습신청 인원 수 count 관련 기능에서 자습신청 정원을 넘어 신청되는 동시성 문제가 발생하여 자습신청 feature ERD와 비즈니스 로직 구조를 다시 설계하고, JPA 비관적 Lock을 이용하여 동시성 문제 해결

Tech Stack.

Java(Open-JDK-11), Spring Boot, Spring Security, Gradle, JPA, Querydsl, RDS(MariaDB), AWS, Github Action, Swagger, Junit5, Jacoco

EZY.

Backend Engineer - 2021. 12

EZY 백엔드 개발.

- 2021. 12
Description.

단기 일정을 계획하는 iOS 앱으로,
개인 일정을 관리하는 방법을 제시합니다.

What did I do.
  • Coolsms, Redis를 이용한 문자 전송, 인증 시스템 구축
  • JWT를 이용한 인증/인가 시스템 구축
  • 전체적인 회원 관련 서비스 로직 flow와 시스템 구축
  • 앱 알림을 위한 회원 로직에서의
    Firebase Token(FCM Token) 관리

Tech Stack.

Java(Open-JDK-11), Spring Boot, Spring Security, Gradle, JPA, Querydsl, H2DB, MySQL, Redis, Jacoco, Junit5, Swagger, Firebase(FCM)

Overall.

  • 일상의 불편함을 기술로 해결 할 방법을 고안합니다.
  • 같이 성장하는 것에 가치를 두며, 꾸준한 발전을 지향합니다.
  • 끈기의 가치를 알기에 매사에 포기하지 않으며 학습에도 이를 적용시킵니다.
  • 주도적으로 업무를 진행할 수 있는 환경을 선호합니다.
  • 누구든 편하게 의견을 낼 수 있는 분위기를 선호합니다.
  • 커뮤니케이션의 원활함을 중요하게 생각합니다.

Skills.

Backend.

  • Java, Kotlin
  • Spring Boot, Spring Security, Spring Data JPA/Redis
  • JPA, Querydsl
  • Junit5, Mockito, Kotest, Mockk

ETC.

  • MySQL, MariaDB, H2
  • AWS, Docker

Tooling.

  • MacOs, IntelliJ IDEA, DataGrip을 사용하는 개발환경에 익숙합니다.
  • Git을 능숙하게 다루며, Git Flow 등의 개발 방법론에 익숙합니다.

Other.

Military.

산업기능요원(현역)
- 2026. 01 (현재 복무 중)

Affiliation.

광주소프트웨어마이스터고등학교
- 2023. 01 졸업

Certificate.

정보처리기능사
취득

Other Experiences.

Blog.

log.info()라는 이름의 개인 블로그를 운영하고 있습니다.
비정기적으로 제가 새롭게 배우게 된 내용, 공부했던 내용들 등을 글로 작성해 공유합니다.
이전에는 다른 블로그 플랫폼에서 블로그를 운영했습니다. log.info(예전블로그)

Contact.