미리보기
기본 정보

현직 3년차 백엔드 엔지니어로, 서버 사이드, 데브옵스 파트에 관심이 많습니다. 현업에서는 Java, Spring, Go 등을 이용해서 서버사이드 개발을 주로 수행해왔으며, RabbitMQ, AWS SQS를 활용하여 Event Driven Architecture를 설계해본 경험도 있습니다. RDB는 PostgreSQL, MySQL, Oracle에 대해 경험이 있으며, Oracle의 경우 개인 강좌를 오픈한 경험이 있을 정도로 자신있습니다. NoSQL계열은 MongoDB에서 30만건 정도의 상품을 매번 외부 플랫폼에서 안정적으로 실시간 동기화하는 로직을 구성한 경험이 있습니다. 주변에 있는 것을 편리하게 바꾸는 것을 좋아하여, 반복적인 작업을 자동화하거나, 단순화하는 것을 좋아합니다. 오픈소스로 편의성 CLI를 배포해본 경험이 있을 정도로 오픈소스 생태계 역시 관심을 갖고 있습니다. 피드백을 주고 받는 것을 좋아합니다. 확장 가능하고, 유연한 구조로 개발하는 것을 즐기며, 새로운 것을 도입하거나, 기존에 있던 것을 효율화하고, 비용을 절감하는 것을 좋아합니다.
기술 스택
Java, Spring, Spring Boot, JPA, MySQL, PostgreSQL, MongoDB, Go, AWS, Git, GitHub, SQL, Docker
경력
(유)일루미나리안
백엔드 엔지니어 | 서버개발 | 재직 중
2024.04. ~ 재직 중 (10개월)
Spring Boot를 사용하여 신재생 에너지 크라우드 펀딩 투자 플랫폼 Energy Shares US의 서비스 및 백오피스의 RESTful API 개발 및 유지보수
MySQL을 사용한 데이터 관리 및 JPA, QueryDSL을 통해 비즈니스 로직을 구현
Testcontainers를 이용하여 QueryDSL의 Repository 테스트 도입 및 커버리지 50% -> 70% 개선
@SpringBootTest 어노테이션을 최적화하여 기존대비 테스트 시간을 3분의 1로 경감
Grafana Tempo 도입 및 로그 필드 정의 로그 포맷 단일화를 통해 모니터링 시스템 개선
Locust 부하테스트를 통해 컨테이너 적정 스펙 정의 및 외부 서비스 API를 비동기 처리하여 성능 개선
AWS SQS를 활용하여 이벤트 기반 아키텍처를 도입, 응답 지연으로 인한 사용자 경험을 개선함
(주)룩코
백엔드 엔지니어 | 개발팀
2022.08. ~ 2024.04. (1년 9개월)
1년 6개월 동안 진행된 반기별 인사 평가에서 연속적으로 ‘Outstanding’, ‘Exceed’, ‘Outstanding’ 등급 획득
에이클로젯
회원수 100만, MAU 40만의 트래픽을 받아내는 의류 관리 플랫폼 에이클로젯 서비스에 Go Echo Framework를 사용하여 RESTful API를 구현 및 유지보수
PostgreSQL을 통해 중고 거래의 기초 테이블 설계 및 관련 비즈니스 로직 구현
Looko AI
중고 빈티지 의류 사업자의 작업 효율을 높이기 위한 B2B 서비스 Looko AI의 백엔드 구축
Go Echo Framework를 이용한 RESTful API 구현 개발 및 클린 아키텍처 도입으로 각 계층 간 재사용성을 증가시킴
초기 프로젝트였기에 RDB에 비해 스키마 변경에 용이한 MongoDB를 통해 메인 DB를 사용하여 DB를 구성
3개의 멀티소스 (에이클로젯, 카페 24, 네이버 스마트 스토어)의 주문/상품/클레임에 대한 서비스 상태를 FSM을 통해 서비스와 동기화 하고 30만건의 상품, 5만건의 주문 상태를 실시간으로 동기화 처리 경험
AWS Lambda, EventBridge를 통해 각 플랫폼의 토큰을 정기적으로 Refresh하는 서버리스 함수 구축 경험
라벨링 백오피스
의류 AI 정확도를 높이기 위한 Go 기반 사내 라벨링 백오피스 개발
클린 아키텍처 도입으로 기존 쿼리 기반 라벨링 백오피스 대비 Worst case 기준 1/9 수준으로 응답 속도를 개선함
주식회사투디지트(2DIGITInc.)
백엔드 엔지니어 | 개발팀
2022.04. ~ 2022.07. (4개월)
Python Django 기반 백오피스 서버 RESTful API 개발 및 유지보수 담당
기존 SQL Alchemy 기반 SQL Raw Query 부분을 Django ORM 으로 리펙토링
Javascript 모듈 Trading View를 이용하여 주가 차트 UI 개발
프로젝트
모니터링 시스템 개선
(유)일루미나리안
2024.08. ~ 2024.12.
기존 로그에는 특정 트랜잭션에 포함되어 있는 로그를 검색할 수 있는 기준이 없어, Client에서 헤더를 통해 주입받은 Request ID를 내부 로깅에 추가하고, Micrometer를 활용하여 Trace ID, Span ID를 내부 로깅에 추가하여 버그 추적을 용이하게 변경함
해당 ID를 이용하여 Grafana Alert, Rule에 등록함으로써 버그 발생 시 Slack에 메시지가 출력되도록 기능 추가
서버 로그 포맷을 JSON으로 변경함으로써 Log Insight, Grafana에서의 필드 검색을 용이하게 변경
기존에는 로그만 모니터링하고 있었기 때문에 함수별 실행 시간 등을 모니터링 하기 어려웠음. Grafana Tempo 도입을 통해 트랜잭션의 각 구성요소의 소요 시간, 내부 이벤트 로그 등을 볼 수 있게 개선 됨 추가로 응답시간이 느린 API를 추적하기 위해 Grafana Alert, Rule에 추가하여 Slack에 메시지가 출력되도록 기능 추가함
Jenkins -> Github Actions 마이그레이션
(유)일루미나리안
2024.08. ~ 2024.09.
DevOps 인력 문제를 개선하기 위해 기존 Jenkins 스크립트를 Github Actions로 이관하고, YAML Difference Reporter를 이용해 배포 시 발생하는 휴먼 에러를 최소화하였습니다.
기존에 Jenkins의 경우 devops 개발자가 관리하고 있었음. 단순한 CI의 경우 Github Actions를 통해 각 파트 개발자가 구성하고 있었으나, devops 개발자가 다수 퇴사함으로 인해 관리에 인력 부족이 발생함
Github Enterprise 요금제를 사용하고 있으나 기본 러너를 거의 사용하지 않아 한달 무료 50000분에 훨씬 못 미치는 수준으로 사용하고 있었음
기존 개발자들이 Jenkins 보다 Github Actions에 더 익숙하고 러닝 커브가 더 낮기 때문에 Github Actions -> Docker Build -> ECR -> EventBridge -> ECS 로 이어지는 배포 플로우를 마이그레이션함
Pull request open 시 수행되는 테스트 커버리지 측정, SonarQube를 수행하는 액션을 Github Actions로 마이그레이션함
Github Environment를 이용하여 환경별로 달라지는 변수, 시크릿을 좀 더 용이하게 관리하도록 함
테스트 개선 및 최적화
(유)일루미나리안
2024.07. ~ 2024.10.
Self-hosted runner 도입, @SpringBootTest
어노테이션 최적화를 통해 PR에서의 테스트 시간을 5분의 1로 경감
천재 지변 등으로 인한 Failover처리에 유의하여 Self-hosted runner를 도입하므로써 테스트 시간을 경감.
Testcontainers 도입을 통해 Repository 유닛 테스트를 추가하고 기존 테스트 커버리지를 50%에서 70% 수준으로 개선
Looko AI 서버 개발
(주)룩코
2024.03. ~ 2024.04.
중고 의류 판매 사장님의 업무를 자동화하는 서비스 Looko AI를 통해 룩코의 첫 매출을 견인하는데 일조함.
데이터 스키마가 외부 서비스에 많은 의존을 하고 있어 스키마 변경이 유리한 MongoDB를 채택하여 메인 DB로 사용
각 플랫폼 별 API의 쿼터에 맞게 물동량을 조절하여야 했기 때문에 순서에 맞게 요청하기 위해 RabbitMQ를 사용하여 비동기 방식의 이벤트 기반 아키텍처로 서비스를 구현
플랫폼 별 상품, 주문, 클레임을 Looko AI가 정의한 데이터에 맞게 동기화하기 위해 FSM을 사용하여 30만건의 상품, 5만건의 주문을 실시간 동기화 처리함
유지보수를 편리하게 하기 위해 각 이벤트 단위로 동기화 할 수 있는 FSM을 사용하여 조건문을 크게 감소시킴
상태 별 다이어그램을 지원하기 때문에 실제 코드와 일치하는 상태 다이어그램 API를 만들어 공유함
Mockery를 사용하여 각 레이어별 유닛 테스트 코드를 작성함. 전체 테스트 커버리지를 70% 이상으로 유지
Looko AI DevOnly CLI 개발
(주)룩코
2023.04. ~ 2023.04.
Go 특성상 발생하는 보일러 플레이트 및 중복 상수 정의를 회피하기 위해 코드 자동 생성 CLI를 제작 및 도입함
사내에서 사용하는 응답 및 필드 도메인의 코드가 yaml 기반으로 작성, 파싱하여 사용되고 있었음
yaml, Go 코드에 중복 정의를 해야하기 때문에 개발자가 누락하여 배포되어 문제가 종종 발생함.
이를 자동화 하기 위해 urfave/cli 라이브러리를 통해 3가지 Task를 정의, 구현함
metagen: 사내에서 사용하는 메타데이터 API의 응답을 yaml을 기반으로 Go 코드를 생성하는 Task
enumgen: 각 타입의 enum을 대체하기 위해 yaml기반으로 Go 코드를 자동생성하는 Task
errorgen: 에러 Response 내 코드, 다국어 설명을 Go 코드로 자동 생성하는 Task
에이클로젯 서버 개발
(주)룩코
2022.09. ~ 2023.03.
회원수 100만, MAU 30만을 받아내는 API서버를 Go 기반으로 구현, 유지보수 하였음
Go, Echo Framework를 이용하여 RESTful API를 구현함
Github Discussions에 각 레이어별 지켜야 할 컨벤션 목록을 정의, 문서화함
기존 SSH 접속을 통해 배포하는 방식을 Github Actions로 이관함으로써 배포 자동화 프로세스 구축
PostgreSQL을 통해 데이터를 관리하고, 테이블 설계함.
쿼리 개선 및 인덱싱을 통한 성능 튜닝을 경험함
excalidraw를 통해 중고 상품의 상태 정의 및 다이어그램으로 알기 쉽게 문서화하였음.
초기 중고 판매 상품 데이터 스키마 정의 및 관련 API 구현
Open Source 기여
Open Source
2023.05. ~ 진행 중
yaml-diff-reporter
환경 별 달라지는 yaml 기반 시크릿을 검사하기 위해 제작함
기존 yaml 체크 도구의 경우 값 검사까지 진행하기에, 필요에 따라 타입, 키, 인덱스를 선택하여 검사하기 위해 제작
self-hosted-runner-online-checker
Self-hosted runner, Github에서 제공하는 기본 runner를 상황에 맞게 분기처리하기 위해 제작, 해당 라이브러리의 결과를 이용하여 Self-hosted runner가 offline인 경우 Github runner를 사용하도록 Failover 처리할 수 있음
action-api-checker
액션 진행 도중 특정 API가 원하는 응답 코드, Body등을 반환할 때까지 대기하는 액션을 구현함
이벤트 기반 아키텍처에서 rabbitmq의 Graceful Shutdown을 위해 구현된 액션으로, 메시지 Consume 도중 배포가 진행되는 경우 이전 데이터로 개발자가 수동으로 처리해줘야 하는 번거로움을 피하기 위해 제작함
Queue가 모두 비었는지 확인하는 API를 구현하여, 해당 API가 200(OK)를 반환할 때 배포가 진행되도록 지정함
gombok
Go 언어 특성 상 어쩔 수 없이 생성되는 보일러 플레이트 코드를 줄이기 위해 구현
Lombok에서 영감을 얻어 생성자, 빌더, Getter, Setter 등을 주석을 통해 파싱하여 보일러 플레이트 코드를 자동 생성하는 CLI를 구현
aws-secret-gen
AWS Secret Manager로 시크릿을 저장할 때 목록에서 가져올 Secret을 선택하여 지정된 파일로 생성하는 도구
로컬에서의 개발, 디버깅을 위해 메신저를 통해 시크릿을 공유하는 상황을 피하기 위해 제작함