미리보기
기본 정보
교육
서울대학교
대학교(학사) | 컴퓨터공학부
2019.03. ~ 현재 | 재학 중
경력
주식회사 아티투
백엔드 엔지니어 | 개발팀
2023.12. ~ 2024.08. (9개월)
[서비스 설명]
타투 예약을 쉽게 할 수 있도록 견적, 문의서 및 문진표 등을 '타투이스트'에게 제공하는 SaaS 서비스
일반소비자를 대상으로, '타투이스트'의 작업물을 쉽게 찾아볼 수 있도록 태그 검색 기능을 추가하여 제공하는 Platform 서비스
두 가지 핵심 서비스에 풀스택 엔지니어로서 참여했습니다.
[세부 업무]
Portone, LemonSqeezy 결제 모듈 도입 및 통합
수수료 정책을 고려하여 복잡하지만 두 PG 사의 서비스를 동시에 사용하기로 결정했습니다.
Portone은 정기결제를 '예약결제'라는 방식으로 지원하고, LemonSqueezy는 다양한 Webhook을 기반으로 서비스를 제공하는 등, 서로 기능에 차이가 많아 통합에 어려움을 겪었습니다.
정기결제 시작, 변경, 결제취소, 무료체험과 같이 공통적인 필수 기능들을 하나의 인터페이스로 정리했습니다.
결제 정보 또한 단일 테이블에 저장하도록 다중 연관성(Polymorphic Association)을 고려한
설계를 통해 성공적으로 통합했습니다.
GitHub Actions의 캐싱기능과 Docker Layer 최적화를 통해 5분 이상 소요되던 CI/CD 속도를 1분으로, 약 80% 개선했습니다.
FREE, MEMBERSHIP, PRO의 권한에 따라 다른 결과를 제공하기 위해 전략 패턴(Strategy Pattern)을 도입했습니다.
PostgreSQL의
tsvector
,tsquery
를 이용한 자연어 검색 고도화도메인 특성 상 Full Text Search보다 태그 중심의 검색이 잦고, 데이터 일관성 유지 비용 또한 작다는 점을 근거로 삼아, 검색엔진을 도입하지 않고 PostgreSQL 단일 기능으로 검색을 고도화했습니다.
인덱스를 통해 슬로우 쿼리를 최적화하고,
Redis
쿼리 결과 캐싱과 Read Only DB 도입을 통해 DB 부하를 분산했습니다.실시간 이름 검색을 도입하고, 과도한 API 호출을 막기 위해 Debounce를 적용해 실제 사용자들이 불편을 느끼지 않으면서 부하는 줄일 수 있도록 했습니다.
상태 관리 라이브러리
Jotai
의atomfamily
를 사용해, 자동저장 기능과 동시작성 기능을 구현했습니다.
[사용 기술스택]
TypeScript, JavaScript
NestJS
Next.js, React
PostgreSQL
AWS EC2, RDS, S3, Lambda
GitHub Actions
Docker, Docker Compose
Redis
[링크]
주식회사아티피셜소사이어티
백엔드 엔지니어 | 개발팀
2023.10. ~ 2024.04. (7개월)
[서비스 설명]
서울시 교육청을 대상으로 생성형 AI를 활용한 수능 국어/영어 문제를 생성해주는 웹서비스입니다. 문제 생성 API와 Java Spring Boot 백엔드 서버를 통합하고, React 프론트엔드 개발 또한 참여했습니다.
[세부 업무]
1인 백엔드 개발자로서 개발 및 배포환경 설정, DB 설계부터 세부 기능 구현까지 주도적으로 진행하면서, 백엔드 개발의 기초를 익힐 수 있었습니다.
GitHub Actions과 Docker Compose로 일관된 배포환경 구현
프로젝트 특성상, 개발 이후 운영 시 다른 서버환경에서 실행될 가능성이 있었고, 이때 서버 환경에 따른 변수를 차단하기 위해 Docker 사용을 결정했습니다.
GitHub Actions을 통해 테스트와 배포를 자동화했습니다.
Logger를 통해 XSS 시도를 확인하고, Spring Interceptor를 활용하여 이를 차단했습니다.
복잡한 함수 이름이 강요되는 JPA의 한계를 느끼고, 보다 복잡한 쿼리를 위해 QueryDSL을 도입했습니다.
<시스템 프로그래밍> 수업을 참고하여 문제, 문서, 폴더로 구성된 간단한 파일시스템을 구현했습니다.
Google Drive의 엔드포인트를 참고하여 UUID 방식의 id를 채택했습니다.
문제 생성에 많은 시간이 소요되는 문제를 비동기 방식과 Polling을 통해 해결했습니다.
ThreadPoolTaskExecutor를 통해 스레드풀을 관리하고, ComputableFuture 타입 객체를 리턴하도록 했습니다.
임의의 Key 값을 생성한 후 반환된 ComputableFuture을 Key-V
alue Map에 넣어 관리했습니다. 이를 이용해 프론트엔드와 협업하여 Polling을 구현했습니다.
[사용 기술스택]
Java Spring Boot
MySQL
JPA, QueryDSL
GitHub Actions
Docker, Docker Compose
AWS Bastion, EC2, RDS
[링크]
외국어
영어
비즈니스 회화 가능
일본어
비즈니스 회화 가능
자격증
OPIc
IM3 | ACTFL
2024.09.
기술 스택
NestJS, Node.js, TypeScript, TypeORM, PostgreSQL, MySQL, Spring Boot, Java, Docker, docker-compose, Redis, github-actions, Python, React