백엔드 개발자 | 차윤범

Backend-Developer | Yunbeom Cha

About Me

💡

반갑습니다!
꾸준히 잔디를 심는 3년차 백엔드 개발자 차윤범입니다:)

  • 다양한 도메인에 적응하고자 여러 프로젝트에 참여하여 적응력을 키우고 있습니다.
  • 코드 리뷰에 대한 두려움보다는 재미를 느끼며 성장을 하고 있습니다.
  • 어려운 지식을 저만의 언어로 쉽게 풀어내 많은 사람에게 지식을 전파할 수 있는 사람이 되고자 합니다.
  • 다양한 방면의 기술을 공부하고 적용하는 데에 관심이 많습니다.
  • 비즈니스 문제를 해결하는 데에 초점을 두고자 합니다!
  • 레거시 프로젝트를 개선하는 것에 보람과 성취감을 느낍니다:)

🎓 Education

세종대학교 컴퓨터공학과(편입)

재학 기간: 2020.03 ~ 2022.02

  • 교내 창의경진대회 우수상 (2021.09 ~ 2021.12)

숭실대학교 전산원 컴퓨터공학전공

재학 기간: 2015.03 ~ 2019.02


💻 Work Experience.(3년)

(주) 스터디워크

Backend Developer

재직 기간 2024.12 - 재직중

Tech Stack

Kotlin
Spring Boot
JPA
MySQL
Kotlin JDSL
Redis
NestJS
TypeScript
React
AWS
AWS EC2
AWS Lambda
AWS DynamoDB
AWS S3
AWS ECS Fargate
AWS Elastic Cache
AWS RDS
Grafana
Prometheus

  • [배치 서버 도입 및 Jenkins 환경 구축]

  • [셧다운 공지 서버 배포]
    • AWS RDS 업데이트 시 다운 타임 발생으로 인한 별도 공지 서버 배포.
    • Spring boot 환경에서 무거운 환경보다는 Nest.js로 node 환경에서 컨테이너 실행

  • [B2B 프로젝트 촬영 개선 및 배포 방식 변경]
    • 촬영 프레임 업로드 및 시간 갱신 시 DynamoDB 중복 조회 로직 개선.
    • 기존 8080, 8081의 두 port를 수동 배포하는 방식에서 무중단 배포 방식 블루/그린 배포 도입.
      • 다운 타임 최소화
      • 8080, 8081 각 포트에서 배포 번잡성 제거
      • 배포 스크립트 작성 (Graceful)

  • [챌린지 개발]
    1. 영어 숙어 챌린지
    1. 인플루언서 챌린지
    1. 작심칠일 챌린지

  • [B2B 프로젝트 리팩토링]

    레거시 프로젝트 개선

    • Gradle Catalog 도입
    • 재사용성, 유지보수 용이성과 모듈간 느슨한 결합도를 위한 개선
      • Layered → Multi Module 아키텍처 변경
      • 이벤트 발행 로직 도입
      • Facade 패턴 적용으로 Service 로직은 도메인에만 의존
    • EC2 → ECS Fargate로 서버리스 배포 전환
    • TestContainer, Fixture Monkey 도입
    • 랭킹 API 개선
      • N+1 쿼리 사용 부분 삭제
      • associateBy를 통한 Grouping
      • Redis Cache 도입 (TTL 10m)
    • DynamoDB 설정 개선
      • Dynamo Enhance Client, CRUD 활용성 개선
    • 촬영 기록 검수 로직 개선
      • 촬영 종료 시 분석 실행 로직을 이벤트 발행하여 개선
      • 이벤트 발행 시 푸시 알림되도록 개선
      • 전략 패턴 적용

  • [B2C 어드민 개발환경 배포 환경 변경]
    • React는 정적 build 파일을 사용한 pm2 배포 방식 도입
    • nohup 백그라운드 실행 → ECR, docker compose 배포로 전환
    • React, Spring boot 배포 시 workflow 자동화로 develop 브랜치 푸시 시 Github Actions 자동 배포

스페이스워크 (SpaceWalk)

Backend Engineer

재직 기간 2024.02 - 2024.12

Tech Stack Kotlin, Spring boot, JPA, Spring WebFlux, Postgres, AWS, React

  • 어드민 페이지 (React, mui)

    장애 모달 작업

    • 관리자가 사용할 모달 CRUD 기능 추가
    • 리스트에서 상세 조회 DIalog 컴포넌트 추가
    • 드래그 앤 드롭으로 모달을 노출할 순서 조정과 활성화 여부에 대한 필드 추가

    라이트/플러스 분석 기록 데이터 조회

    • 몇 십만 건에 대한 라이트 혹은 플러스 분석에 대한 기록 조회 API 개발
    • Full-Scan을 피하고자 페이지네이션으로 개발
    • 리스트에서 페이지네이션 페이지 개발 및 관리자가 쉽게 조회할 수 있는 userId 및 빌드 상태에 따른 조건부 조회 (criteria 사용)

  • 결제 시 잔액 부족 에러 발생 시 예외 처리
    • 잔액 부족 시 멤버십 권한이 그대로 부여되는 현상 발견
    • 발견된 현상에 따라 에러 처리 및 Transactional Rollback 옵션 추가

  • 사업성분석 고도화
    • 기존 간소화된 사업성분석 지표를 상세하게 제공하고자 시세분석 데이터를 활용해 리모델링
    • 대용량 시세분석 데이터를 조회 시 15초 타임아웃 에러를 EXPLAIN을 활용해 무거운 쿼리를 최소하
    • 최소화된 데이터로 불필요한 each 연산 삭제

  • AI 건축분석 목록 조회 성능 개선
    • 문제: 전체 분석 기록에 대한 연관 테이블을 N만큼 SELECT 하는 성능 이슈
    • 유저별 AI 건축분석하였던 기록를 불러오는 쿼리에서 1516초가량 응답 시간을 23초로 개선
    • 불필요 및 중복 filter, map 메서드 최소화
    • Cursor 페이지네이션 방식을 채택하여 lastId와 size를 QueryString으로 요청받아 Infinity Scroll 방식에 맞는 로직으로 개선

  • 사업성지표 분석 파일 PDF → JPG 파일 변환 (Serverless)
    • Spring 프로젝트에서 API 리소스를 줄이고자, Serverless 기술로 해결
    • AWS의 Lambda, API Gateway, S3를 사용하여 Lambda 함수 작성(Python) 및 계층 구성과 API Gateway를 사용한 배포 구성
    • S3를 사용한 이유는 List<String>으로 구성된 Base64 코드를 Response 하기엔 제한적이여서 S3의 Put, GetObject를 활용

  • 멤버십 결제 고객 해지 플로우 개선 및 할인 정책 수립
    • 멤버십 이탈율 개선을 위한 멤버십 및 쿠폰 사용 현황 표기
      • 사용자가 어떤 쿠폰을 사용하였고, 잔여 쿠폰의 수를 보여주기 위한 별도 API 개발
    • 멤버십 고객 대상 오픈채팅방 형성
      • 오픈채팅방을 가입한 사용자 대상으로 unique id 생성과 가입한 일자 저장 테이블 구성
    • 첫 멤버십 고객 중 해지 시 50% 할인이 가능한 모달을 통해 전환 시 다음 달 자동 결제 예약 생성
      • 첫 멤버십 결제 고객인 지 주문 테이블 조회 후 별도 비즈니스 로직 진행

  • MSA 기반의 프로젝트 Gradle Build Cache 도입
    • Spring 프로젝트 내에 Github Actions gradle-build-action 도입으로 빌드 시간 7분 → 4분 30초 정도로 시간 단축

  • 연간/주간 Slack 알림 중복 보고 해결

    원인: 현재 MSA 구조의 EKS 여러 Pod 내에서 @Scheduled 를 사용하여 k8s 환경 각 Pod에 스케줄러가 실행되어 Pod 수만큼 메세지가 중복 전송되는 현상

    → 이를 해결하기 위해 AWS EventBridge 스케줄러와 Lambda를 활용하여 Schedule 어노테이션을 걷어 냈음


  • B2C 플랫폼 멤버십 에러 대상 Slack 메세지 전송
    • 멤버십 결제 고객 대상으로 에러가 발생된 케이스에 대해 Slack 메세지를 전달하는 API 엔드포인트 설계
    • 기존 Slack 라이브러리에서 attachments 변경 사항을 인터페이스 정의 후 리팩토링


(주) 탑코

Backend Developer

재직 기간 2022.04 - 2024.01

Tech Stack Node.js, Typescript, NestJs, Go, MySQL, AWS

  • 이상형 월드컵 서비스 개발
    • 백오피스 및 플랫폼 이상형 월드컵 페이지 구성할 CRUD 기능 개발
    • 이상형 월드컵 게임 리워드, 만화 이용권 지급으로, 어뷰징 체크와 동시성 이슈를 해결하여 사용자에게 하루에 한 번만 지급
      • 어뷰징은 기존 fingerprint 라이브러리를 사용한 방문자 고유ID를 검증
      • 검증된 ID 대상의 사용자 ID와 이용권 ID unique-index를 사용하여 동시성 이슈를 임시적으로 해결
    • 이상형 월드컵 진행 중 사용자의 행동 분석 및 지급 내역을 쌓는 로그 데이터를 MySQL 데이터베이스에 축적
    • 초기 MAU 26만 달성

  • 플랫폼 검색 서비스 개발
    • 최근 검색어에 대한 개발은 프론트엔드의 LocalStorage의 가장 최근 순으로 alasql 라이브러리를 활용해 개발
    • 인기 검색어는 DB에 누적된 검색 키워드 히스토리 Count를 SELECT 하여 가장 Count가 많은 순으로 Response
      • Explain 실행계획으로 다량의 rows와 latency를 확인하여 복합 인덱스를 사용

  • 앱 푸시 기능 개발 및 리팩토링
    • AWS Lambda 목적인 Go 프로젝트에서 Lambda SDK를 사용하여 주마다 발송되는 푸시 알림 개발
    • Topic 관리를 위해 백오피스에서 관리할 수 있는 기능 추가하여 Topic을 DB에서 관리
    • 조회된 Topic을 yml에 정의된 CRON 식에 맞춰 푸시 알림 전송

  • 통계 데이터 응답 시간 최소화

    원인: 각 이용권, 만화, 회차 등 사용된 결제 내역과 코인에 대한 데이터를 사내 백오피스 통계 페이지에 Response 하였지만, 최대 2000만 건에 달하는 데이터에 대한 지연 Latency 발생

    → 대용량 통계 DB 테이블에서 PK, INDEX, 복합 INDEX 활용 및 코드 리팩토링하여 실제 6~7초 페이지를 3초 정도 감소시켜 최적화

    [통계 페이지 로딩 속도 개선 회고]


🚀 Personal Experience.


피다(Pida) (2025.03.06 ~ 진행 중)

사용자의 현재 위치를 기반으로 가까운 벚꽃 명소를 안내하는 우리 동네 꽃길 안내 서비스

Tech Stack Kotlin, Spring boot 3.x, Multi Module Architect, Kotlin JDSL CoRoutine, Redis, PostgreSQL, Swagger, RestDocs AWS EC2, Elastic Cache, ECS Fargate, RDS, VPC, Load Balancer

Github Repo

https://github.com/Team-PIDA/Pida-Server

개발 내용 및 역할


SIPE 3기 (2024.10.12 ~ 2025.02.01)

1차 미션

어렵게 배워서, 쉽게 사용하는 Webflux + Coroutines

Tech Stack Kotlin, Spring boot 3.x, CoRoutine

Github Repo

https://github.com/sipe-team/3_1_spring_webflux_coroutines

학습 내용

  • 1주차

    Thread, Runnable, Callable, ExecutorService, Async, CompletableFuture, ThreadLocal 등등 개념 학습

    JVM에서의 Thread 동작 방식 및 컨텍스트 스위칭 내용 학습

  • 2주차

    하드웨어적 관점 컨텍스트 스위칭 이해.

    JVM에서 제공되는 동기화 방법 학습(Atomicsyncronizedvolatile)

    Tomcat 네트워킹 중 스프링에서 어떻게 스레드를 처리되는 지

  • 3주차

    코루틴의 개념 및 사용 이유

    코루틴(경량)과 스레드의 차이점 비교 및 동작 원리 실습

  • 4주차

    코루틴 continuation, Dispatchers, async, launch, suspend, coroutineScope, coroutineContext, yield, runBlocking, withContext 키워드 정의 및 실습

  • 5주차

    간단한 Todo List 애플리케이션으로 코루틴 실습

    withContext, Dispatchers.IO를 통해 애플리케이션 단에서 코루틴 도입.

2차 미션

Smart(Spring Modular Architecture Research Team) Payment 파트

Tech Stack Kotlin, Spring boot 3.x, JPA, Spring Modulith

Github Repo

https://github.com/sipe-team/3-2_smart_fintech

학습 내용

  • 모듈러 모놀리스와 스프링 모듈리스의 기본 개념 학습
  • 학습에 필요한 도메인 파트 분리
  • Modular Monolith Architecture의 기본 구조와 개념 학습
  • Spring Modulith의 주요 기능 학습
  • Payment MVP 요구사항에 따른 이벤트 스토밍 진행
  • 송금 관련 이벤트 발행 로직 구현.

디프만 15기 (2024.06.01 ~ 2024.09.14)

**왈왈 (**Team Lead, Backend Lead)

반려동물과 함께 미션을 수행하는 새로운 펫 커뮤니티 서비스

Backend Tech Stack Java 17, Spring boot 3.x, JPA, Querydsl, MySQL, Jacoco, SonarCloud, AWS, Docker, CloudFlare, Kotlin, ktlint

Cooperation Tool Notion, Slack

Github Repo

https://github.com/depromeet/WalWal-server


팀 성과

📌 앱스토어

https://apps.apple.com/kr/app/왈왈/id6553981069

📌 웹사이트

https://walwal.oopy.io/

인프런 스터디 활동 (Lead)

IT 동아리 내에 인프런 스터디 구성

  • Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트 강의를 선정하여 스터디 원 모집
  • 스터디 그라운드 룰과 코드 실습환경 구성
  • 주 1회 강의 수강 후 한명씩 발표 후 토픽에 대한 의견 제시 및 토론
  • 의존성 역전 법칙에 따른 Testability를 어떻게 올리는가?
  • 도메인과 영속성 객체 분리로 도메인 객체 테스트
  • 왜 헥사고날 아키텍처를 사용하는 지 레이어드 아키텍처와의 비교 후 적용

Github Repo.

https://github.com/depromeet/15th-Spring-Test-Study

Team Blog.

개발 내용 및 역할


  • Spring 프로젝트 초기 구성
    • 도메인 레이어 아키텍처, 코드 포맷팅 pre-commit hook을 사용한 Spotless 포맷팅, Spring Actuator 구성
    • 코드 스멜 및 버그 체크를 위한 SonarCloud 연동
    • Redis 로컬 환경 구성
    • application yml 책임 분리
    • Querydsl의 버전이 5.0에서 업데이트 Stop되어, Openfeign에서 관리하는 Querydsl 6.0 + 사용
    • Mocking 데이터 활용을 위한 FixtureMonkey 도입
  • 초기 AWS Elastic BeanStalk 배포
    • docker-compose 내에 redis, nginx 등 컨테이너 배포 워크플로 작성 및 환경 변수 설정
    • 개발, 운영 서버 분리로, amd64에 따른 운영 서버 워크플로 별도 작성
    • 프리티어 메모리 부족으로 인한 메모리 스왑과 인스턴스 업그레이드
  • Docker Compose 배포로 전환
    • EB에서 반복적인 스왑 메모리 사용과 무리한 인스턴스 업그레이드로 인해 Docker Compose 방식으로 전환
    • ECR이 아닌 Docker Hub를 사용하여 비용 절감
    • 운영, 개발 서버 전환 워크플로 작성
    • Nginx conf를 사용한 로드 밸런싱을 CloudFlare로 대체
  • 소셜 로그인 및 회원가입 구현 (애플, 카카오)
    • Spring Security 환경 구성
    • RestClient 네트워크 통신 라이브러리 구성
    • Apple 로그인 - authorizationCode를 통한 id_token 추출 및 애플 유저 정보 조회
    • Kakao 로그인 - 카카오 서버 GET user/me 엔드포인트를 통한 유저 정보 조회
    • 소셜 로그인 유저 정보로 JWT 토큰 발급 및 회원가입 처리
    • Switch-Case 활용하여 Provider에 따른 소셜 로그인 처리
  • 팀 내 데일리 스크럼 도입 및 개발 문화 형성
    • Slack 리마인더를 활용해 팀 내부 일정 공유하도록 데일리 스크럼 제도 도입
    • Slack 스레드를 활용한 내부 커뮤니케이션 형성 및 Merge, CI 단계 Slack 웹훅 알림 이벤트 추가
    • iOS - Backend 파트 간 작업 단위 스쿼드 형성
    • Notion 칸반보드를 사용하여 태스크 및 일정 공유 커뮤니케이션 형성
  • Kotlin, Spring boot 마이그레이션
    • 불필요한 Lombok 사용 중지와 null-safety, 간결한 코드 작성을 위한 마이그레이션
  • 모니터링 구축
    • Prometheus, Grafana를 위한 별도 모니터링 서버 구축
    • Grafana 시각화에 대한 UI 커스텀
    • Loki, Promtail를 통한 logging
  • 댓글 기능 구현
    • 댓글, 대댓글 추가 및 조회 기능
    • 대댓글 시 self join을 통한 부모 댓글, 자식 댓글 추가하도록 설계
    • 댓글 시, 부모 댓글과 자식 댓글 간의 푸시 알림 분기처리

세종피어

세종대학교 재학생들만을 위한 캠퍼스 네트워킹 서비스

Backend-Developer(2024.01 ~ 2024.05)

Backend Tech Stack Java 17, Spring boot 3.x, JPA, Querydsl, MySQL, AWS

Frontend Tech Stack React.js, Javascript

Cooperation Tool Notion

Github Repo

https://github.com/SejongPeer/SejongPeer-back

https://github.com/SejongPeer/SejongPeerFront

개발 내용 및 역할


Backend Contribute

  • Spring 프로젝트 구성
  • 코드 컨벤션 Spotless 도입
  • 세종대학교 학생 인증 Webclient 적용
  • AWS EC2 + CodeDeploy + Docker 배포 및 Nginx 구성
  • Spring Actuator 적용 및 Grafana + Prometheus 모니터링 도입 예정

Frontend Contribute

  • S3 정적 웹 사이트 배포 워크플로 작성
    • CloudFront, ACM, Route53 구성
    • CloudFront에서 index.html에 대한 캐시 무효화 설정
  • 아이디/패스워드 검증 방식 수정
  • eslint, prettier 구성

디프만 14기(2023.11 ~ 2024.02)

10MM(10분만)

최대 집중 시간이 짧은 2030을 위한 10분 습관형성 서비스

Backend-Developer (2023.11 ~ 2024.02)

Backend Tech Stack Java 17, Spring boot 3.x, JPA, Querydsl, MySQL Jacoco, SonarCloud, Naver Cloud Platform, AWS, Docker, CloudFlare

Frontend Tech Stack React.js, Next.js 14, Typescript

Cooperation Tool Slack, Git, Swagger, Notion, Github Project

Monitoring Grafana, Prometheus


Github Repo

https://github.com/depromeet/10mm-server

https://github.com/depromeet/10mm-client-web


📌 앱스토어

https://apps.apple.com/kr/app/10분만-10mm-10분으로-시작하는-습관-형성/id6475635740

📌 구글 플레이 스토어

https://play.google.com/store/apps/details?id=com.tenminuteapp&hl=ko

📌 웹 사이트

https://www.10mm.today/

Goal

  • 1차 MVP 이후 141건의 QA 처리
  • 디스콰이엇 트렌딩 프로덕트 2등 달성
  • Max DAU 440 달성
  • 총 회원 수 800명 이상 달성

최우수상 수상🏆 [회고]

인프런 스터디 1등 수상

인터뷰 링크

소개 페이지

https://info.10mm.today/

개발 내용 및 역할


Backend Contribute

  • 프로젝트 초기 세팅
  • Naver Cloud 배포 환경, CORS, 스토리지 환경 구성
  • Swagger 초기 세팅
  • Jacoco + SonarCloud 코드 커버리지 분석 도입
  • 미션 및 미션 기록 도메인 개발
    • DTO 컨벤션 Class가 아닌 Java 17의 Record 사용
  • 테스트 코드 최적화 및 트랜잭션 격리
    • Transaction간의 격리성이 필요하여 Transactional 어노테이션은 테스트 케이스에서 일절 사용하지 않도록 제어
    • Database Clean 중복 코드 개선으로 JUnit Extension 활용 및 AutoDetection 도입
  • 피드 탭 무한 스크롤에 따른 No-offset 구현
    • 여러 Proxy 객체를 참조하는 현상으로 Select 쿼리를 줄이고자 Projections을 활용하여 Querydsl로 리팩토링
  • 미션 재촉 및 리액션 등 도메인 활용에 따른 FCM 푸시 알림 도입
    • sendMulticastAsync Deprecated로 인한 sendEachForMulticastAsync 으로 다중 푸시 알림 구현
  • Naver Cloud → AWS 마이그레이션
    • Object Storage → S3 데이터 마이그레이션
    • CloudFront 적용
    • CloudFlare 프록시 구성
    • 운영 환경 DockerHub를 사용하여 Image Pull 방식 채택
  • 랭킹 API 개발
    • 초기 랭킹 데이터 생성과 갱신을 위해 insert duplicate Native-Query를 활용

Frontend Contribute

  • 문의 채널 버튼 컴포넌트 추가
  • 무한 스크롤 피드 v2 API 연결 및 개선

개인 블로그 프로젝트 (1인)

JPA와 Spring boot, 프론트엔드 생태계 학습을 위한 개인 블로그 개발 (백엔드, 프론트엔드)

Full-Stack (2023.03 ~ 2023.10)

Tech Stack Java, Typescript, Spring boot 3.0.x, JPA, Querydsl, MySQL, AWS, Vue.js

Github Repo

https://github.com/char-yb/ybchar.dev-back

https://github.com/char-yb/ybchar.dev-front

개발 내용 및 역할


  • Spring Data JPA로 게시글, 댓글 API 구현
  • 게시글과 댓글 스키마는 1:N 일대다 매핑으로 1+N 이슈를 해결하고자 Fetch join 활용
  • 게시글 내용은 MarkDown Editor 라이브러리 사용하여 작성 가능하도록 개발
  • Spring Security에서 JWT 토큰으로 인증 구현, 토큰은 Session Storage에서 관리
  • Vue.js를 활용하여 게시글, 댓글, 로그인/로그아웃 페이지 기능 구현
  • EC2 + CodeDeploy Github Action을 통한 자동 배포
  • 프론트엔드는 S3 정적 웹 호스팅을 사용한 Github Action을 통한 자동 배포 구현
    • 배포 시 즉시 반영을 위한 CloudFront 캐시 무효화 활용

🛠️ Available Skills.

  • Front-End: JavaScript, TypeScript, React.js, Next.js, React Query, Vue.js 3.0
  • Back-End: Java, Kotlin, Typescript, Node.js
    • Spring Boot, Spring Data JPA, Querydsl, Spring Security, Spring WebFlux, Kotlin JDSL, Nestjs(TypeORM)
    • AWS: EC2, S3, Lambda, CloudFront, CodeDeploy, RDS, Route53, ACM, IAM, ECS, ALB, DynamoDB, LightSail
    • Naver Cloud Platform: Server, Container Registry, Source Deploy, Object Storage, Load Balancer, Cloud for Redis
  • Database: MySQL, Postgres, Redis
  • Monitoring: Grafana, AWS CloudWatch
  • IDEs: IntelliJ, Vscode, Webstorm
  • Version Control: Git
  • Communication & Collaboration: Notion, Slack, Jira

🏅Certificate.


자격증취득일발급기관
정보처리기사2021.06.02한국산업인력공단
정보처리산업기사2018.11.16한국산업인력공단
네트워크관리사 2급(만료)2015.12.29한국정보통신기술협회

본 포트폴리오는 PC와 Notion 어플리케이션에 최적화되어 있습니다.