미리보기
기본 정보
팀 효율성을 높이는 것과 의미 있는 비즈니스 영향을 미치도록 끊임 없이 고민합니다. 팀의 안정성, 저의 투명성, 비즈니스와 여러 개발에서의 넓은 관점 유지를 중요하게 생각합니다. 적응력이 뛰어나고 책임감이 있으며 다양한 관점에서의 커뮤니케이션을 합니다.
경력
주식회사스매치코퍼레이션
BE | 프로덕트팀
2021.06. ~ 2024.07. (3년 2개월)
스매치와 내부 어드민
기술 스택: Kotlin, Spring Boot, JPA, QueryDSL
코어 통합 프로젝트
Python,Fastapi를 kotlin,spring으로 컨버팅
리모델링 과정에서 언어 변경을 제안하고 팀원들과 논의하여 스프링에 익숙한 팀원들이 많아 효율적인 진행과 추후 채용에 유리할 것으로 판단하여 결정했습니다. 또한, 레이어가 제대로 분리되지 않아 혼동을 일으키던 레거시 코드를 모두 리팩토링했습니다.
1차 통합 단계에서 다른 도메인으로 판단된 건물 및 매물을 먼저 컨버팅하였으며, API를 통해 건물 및 매물의 등록, 수정, 삭제 시 기존 데이터에도 동일하게 반영되도록 연동했습니다.
Spring for GraphQL 도입
기존 GraphQL은 Typescript Pothos GraphQL 라이브러리로 개발되었으나, 학습 곡선이 가파라 기존 개발자들이 이해하기 어려웠습니다. Spring MVC에서 넷플릭스 DGS와 Spring for GraphQL을 비교한 후, Spring 친화성, 간편한 데이터 로더(N+1) 구성, 페이지네이션 스키마 헬퍼 등을 이유로 Spring for GraphQL을 선택했습니다. 이를 통해 동료들이 데이터 로더를 쉽게 이해하고, 페이지네이션을 쉽게 구성할 수 있었습니다. 또한, 동일한 GraphQL 이해도를 확보하기 위해 지식과 모범 사례를 적극 공유했습니다.
초기에는 레거시, 어드민, 코어 통합용으로 3개의 GraphQL을 사용하고 게이트웨이를 통해 묶었으나, 이는 개발 병목을 일으켰습니다. 이후 모든 인터페이스를 하나로 통합하여 팀의 혼동을 줄이고 개발 효율을 향상시켰습니다.
JPA 엔티티와 GraphQL 스키마를 일치시켜 도메인별로 명확한 인터페이스 분리를 이루었고, 프론트와 백엔드 간의 소통이 용이해졌습니다. 또한, relay spec에 맞춰 명확한 규칙을 통해 스키마를 설계하고, Spring for GraphQL에서 지원하지 않는 relay spec을 위해 데코레이터를 직접 구성하여 개발자 경험(DX)을 개선했습니다.
Quartz를 통한 CRM 예약 발송 기능
회원가입 후 신청 넛지를 4시간 뒤 발송하는 CRM 등 예약 발송 로직을 개발하기 위해 Quartz를 사용하였으며, 별도의 큐 서비스 대신 개발자가 코드 내에서 실행 예약을 바로 인지할 수 있도록 설계하였습니다.
flyway 도입
로컬, 테스트, 스테이지, 프로덕션의 각 서버 환경에서 동일한 DB 환경을 유지하기 위해 SQL 마이그레이션 툴을 도입하였고, 배포 시 개발자가 수동으로 쿼리하는 대신 어플리케이션 구동 직전에 Flyway가 작동함으로써 혼동과 리스크를 줄였습니다.
JPA+queryDSL+PostGIS 결합
개발자가 늘어나면서 코드의 가독성과 구조가 좋지 않으면 팀 효율성이 떨어지는 것을 경험했습니다. 이를 개선하기 위해 가독성과 성능을 중시하여 도메인 엔티티와 함수를 활용하고, JPA 레포지터리와 QueryDSL로 쿼리를 추상화했습니다. 성능 향상을 위해 쿼리 배치 사이즈로 N+1 문제를 해결하고, 무거운 쿼리는 QueryDSL 레포지터리로 구성했습니다.
기존 코드에서 SQLAlchemy 내의 지도 관련 함수가 TypeSafe하지 않아 이해하기 어려웠습니다. 이를 해결하기 위해 PostGIS를 QueryDSL에 결합하여 TypeSafe한 지도 관련 함수를 구현하여 개발자들이 쉽게 이해하고 개발할 수 있게 했습니다.
세일즈포스 연동 프로젝트
외주를 통해 진행할 경우 세일즈포스의 자체 언어인 Apex를 사용해야 했습니다. Apex는 Java와 유사하지만 람다나 제네릭스를 지원하지 않으며, 고유한 문법들이 있어 러닝 커브가 크다고 판단했습니다. 외주 개발 비용 약 1억원을 절약하고 자체 개발을 진행하였습니다.
외주 진행 여부를 논의하던 중, 세일즈포스 Pub/Sub gRPC API를 제안하여 개발팀과 의사결정권자를 설득한 결과, 만장일치로 자체 개발을 결정하였습니다. 이후, 당시 메인 언어인 Python을 사용하여 모든 로직을 내부 프로젝트에서 구현하고, 동료들도 동일한 이해도로 개발을 진행할 수 있었습니다.
BigQuery 데이터웨어하우스 구축
마케팅 대시보드 및 데이터 분석을 위해, Parquet로 데이터를 추출하여 S3에 저장하고 빅쿼리로 전달하는 파이프라인을 구축하였으며, 이를 통해 DB View table을 구글 스프레드 시트에 직접 연결하여 발생하던 데이터 종속성과 대시보드 문제를 해결하고, 일자별로 Parquet를 추출하여 S3, GCS, BigQuery로 매일 정해진 시간에 전달되도록 하여 데이터 엔지니어의 분석 환경을 개선하고 데이터 스키마 변경에 미리 대응할 수 있는 환경을 마련하였습니다.
그 외
초기 개발팀을 구축하면서 GitFlow와 코드 리뷰 규칙을 통해 개발 문화를 확립하였습니다.
초기 개발 팀장 이후 백엔드 파트 리드로서 동기부여, 코칭, 목표 설정 및 작업 분담을 통해 팀 역량을 향상시켰습니다.
AWS 인프라의 전반적인 관리를 맡았습니다. 초기에는 테스트, 스테이지, 프로덕션 환경 각각에 EC2 인스턴스를 만들어 배포를 진행했습니다. 프로덕션 배포 시에는 스테이지 환경을 복사한 AMI를 생성한 후 프로덕션 용 EC2 인스턴스를 만들고 기존 EC2와 교체하였으며, AWS CodeBuild와 CodeDeploy를 활용하여 배포 자동화를 구현했습니다.
2차 개선 단계에서는 Terraform, AWS SDK, AWS CloudFormation을 활용하여 배포를 진행했습니다. ECS 태스크 정의를 작성하고 ECS에 배포하였습니다.
Market Fit Lab
BE | 재직 중
2022.04. ~ 재직 중 (2년 7개월)
슬랙을 통한 사내 HR 솔루션 퀘스트봇
기술 스택: Python, Fastapi, NestJS, MikroORM, SlackBolt
엑셀로 관리하던 업무 시간을 슬랙을 통해 관리하여 DB화
출석, 넛지 기능 개발
로컬, 테스트 환경 구성
제가 팀에 합류할 당시에는 로컬과 테스트 환경이 없어 개발과 테스트가 어려웠습니다. 이를 해결하기 위해 Slack 소켓 통신 방식을 도입하여 여러 개발자가 쉽게 연결할 수 있는 환경을 구축하였습니다.
기업 컨설팅 프로젝트 참여 삼성SDS 첼로스퀘어, 푸드케어 클레
mixpanel 이벤트 트래킹
기업들의 현황 파악을 위해 이벤트 트래킹을 진행하였으며, 파악이 된 이후에는 여러 실험을 통해 변화를 거쳐 결과적으로는 구매 전환률이 상승되었습니다.
(주)누리미디어
대리 | 개발운영팀
2016.09. ~ 2021.01. (4년 5개월)
논문관리 SaaS DBpiaONE
기술 스택: Java, spring
2019년 신규계약 수 62건, 목표 매출액 대비 120% 달성
, 재계약 영업 2019년 재계약 수 약 200건, 재계약률 90% 달성에 기여하였습니다.
50여가지 이상의 설정에 대한 시나리오를 고려하며 안정적인 개발을 진행했습니다.
영업팀에서 커스터마이징을 조건으로 1억원이 넘는 계약하는 경우가 몇개 있었고, 최대한 다른 학회도 쓸수 있도록 정형화 하여 개발하였습니다.
유니닥스 솔루션을 이용한 PDF 변환 및 PDF 통합
PDF 변환이 동시에 이루어지면서도 빠르게 다운로드되어야 했었고, 멀티 스레드를 활용하여 동시에 변환을 해도 3~10초 사이에 변환이 가능하도록 구현하였습니다.
유니닥스 솔루션은 별도의 물리서버에 설치하여 어플리케이션과 분리하였습니다.
KRpia
기술 스택: Java, spring
대량 이용 실시간 차단 기능 개발
영업팀,기획팀에서 요청한 기능으로, 크롤링, 부정이용 사용자들에게 1,2차 경고 후 차단. 이후 일정 시간이 지나면 다시 이용가능 하도록 개발하였습니다.
DBpia
기술 스택: Java, spring
200만 MAU 트래픽을 대응하기 위해 DB 인덱스와 프로시저를 통해 대부분의 성능 문제를 해결하였으며, 고성능의 DB 서버 2대로 구성된 환경에서 MSSQL 플랜을 활용하여 비용이 많이 드는 부분을 확인했습니다. 검색의 경우 아이와즈 검색엔진을 사용하여 매일 색인 데이터를 생성하고 반영하였습니다.
(주)퍼비즈
직원 | R&D
2012.01. ~ 2016.09. (4년 9개월)
이지크로(중고거래)
기술 스택: Java, flex, oracle
개발 유지보수
정산 관리 기능
결제 관련 기능
물리서버 AWS로 이전
교육
한국방송통신대학교
대학교(학사) | 컴퓨터과학과
2012.03. ~ 2022.02. | 졸업
자격증
정보처리기사
2021.08.
프로젝트
어니언
해커톤
2024.07. ~ 2024.07.
3주동안 진행된 해커톤 프로젝트입니다. 개발기간은 10일이었으며, 프론트1명, 백엔드2명에서 진행되었습니다.
저는 어니언 프로젝트에서 도메인 설계, 프로젝트 초기 구성, MVP의 시나리오 정리 및 테스크 정리와 일정 산정, CICD 서버 세팅을 하였으며 기술 선택과 테스크 정리를 같이 진행했습니다.
기술 스택: Typescript, NestJS, Mikro ORM