소개
Java, Kotlin, Spring, JPA, MariaDB 기반 6년차 개발자 고정완입니다.
200만 다운로드, MAU 16만, 미국 앱스토어 피처드 B2C 목표관리 서비스인
드림포라의 백엔드 테크리드로 일하며 Feed 커뮤니티와 검색, 현금성 포인트와 상점을 구현했습니다.
독일의 FAU 연구진에 의해 Self-Improvement 우수사례로 저널 논문이 등재되었습니다.
우아한테크코스와 넥스트스텝에서 Java, Kotlin, Spring, JPA 강사로 일하며 크루와 현직자를 교육했습니다.
학력
UNIST 컴퓨터공학 성적우수 졸업 (수리과학 부전공)
실무경험 (6년차)
백엔드 테크리드
Dreamfora
2021.08.25 -
- 사용기술: Java, Spring Boot, Spring Security, JPA, MariaDB
- 미국, 영국, 인도, 러시아, 이집트 등 전세계 200만명이 사용하는 B2C 목표관리 서비스를 개발
- 주요성과
- IDC에서 AWS 클라우드로 인프라 전환 후 장애빈도 99% 감소
- 쿼리튜닝과 DB 파티셔닝 후 서버비용 82% 절약
- 모놀리식에서 MSA로 리팩토링 후 테스트 커버리지 86% 달성
- 인증서버를 세션기반에서 토큰기반으로 변경 후 인증시간 93% 단축
웹 개발자
Ecube Labs
2018.10.15 - 2020.12.28
- 사용기술: TypeScript, React, Redux, Express.js
- 미국 볼티모어, 일본 이치카와, 한국 고양시와 계약한 B2B 스마트 시티 SaaS 를 개발
- 주요성과
- 미국 볼티모어 시의 폐기물 수거 업무 낙찰을 위한 경매 시스템을 구축
- 일본 이치카와 시의 유료 공공 쓰레기통을 위한 QR 기반 인증 및 과금 시스템을 구축
- 한국 고양시와 협력 하드웨어 업체를 위해 OAuth2.0 인증 서버와 리소스 서버를 구현
- E2E 테스트 환경을 구축하고 테스트 코드를 작성
Dreamfora 경력기술
클라우드 전환
장애빈도 99% 감소
이중화, 망분리, CI/CD
- 문제: IDC 인프라에 문제가 생기면 서비스가 정지
- 원인: Single Point of Failure 가 되는 물리적 서버가 존재
- 해결책: 클라우드로 인프라 이전 후 보강
- 트래픽 폭증 시 서비스가 정지할 수 있는 WAS 서버를 이중화
- 취약점 공격 시 데이터가 위험한 DB 를 Private Cloud 설정을 통해 인터넷과 격리
- Continuous Integration 시, 빌드와 테스트 성공 여부를 확인
- 도커 이미지를 활용한 Rolling 방식의 무중단 배포 도입
MSA 도입
테스트 커버리지 86% 달성
ATDD Cycle
- 문제: 신규 기능 추가 시, QA 에서 찾지 못하는 버그가 발생
- 원인: 모놀리식 구조로 인해 의도치 않은 Side Effect 가 발생
- 해결책: 도메인을 기준으로 서비스를 분리
- 모놀리식 서버를 5개의 도메인을 기준으로 분리 후 테스트 작성
- 도메인 객체에는 단위 테스트를, 서비스 시나리오에는 인수 테스트를 작성
- 분리한 5개의 마이크로 서비스 설명
- Auth 서비스 (사용자 인증 및 인가)
- Diary 서비스 (데이터를 자동 동기화)
- Feed 서비스 (커뮤니티에 일상을 공유)
- 로드밸런서를 통한 이중화와 자동복구 도입
- Point 서비스 (이벤트성, 현금성 포인트)
- Private Clould 로 망분리
- Shop 서비스 (Point 를 소비하여 아이템을 거래)
- 모놀리식 서버를 5개의 도메인을 기준으로 분리 후 테스트 작성
테이블 스키마 재설계 및 쿼리튜닝
서버비용 82% 절약
Horizontal Partitioning
- 문제: 게시글 검색 시 메모리와 CPU 자원을 많이 소모
- 원인: 검색 시 탐색하는 테이블의 크기가 큼
- 해결책: 주 단위로 테이블을 파티셔닝
- 활성 테이블에는 1주일 동안 생성된 데이터만 남기고, 나머지는 분리한 테이블로 이동
- 1달(5주)이 지난 데이터는 비용이 싼 아카이빙 스토리지 서버로 이동하여 비용절감
- 활성 테이블이 아닌 테이블은 Pagination 을 통해 과거 데이터를 찾는 경우에만 사용
데이터 마이그레이션
마이그레이션 정합성 검증
JPA 기반의 테스트 코드
- 문제: 테스트로 마이그레이션 후 장애가 발생
- 원인: 데이터 정합성이 맞지 않아 서버 로직이 오동작
- 해결책: 마이그레이션 로직을 테스트 코드로 검증
- 마이그레이션 로직을 JPA 로 작성해 JUnit 으로 검증
- Batch Size 보다 데이터가 많아서 생긴 N+1 쿼리문제를 EntityManager 커스텀으로 해결
토큰 기반 인증 도입
인증시간 93% 단축
JWT 도입
- 문제: 인증 시 평균 8초가 넘는 시간이 소요
- 원인: 지나치게 누적된 세션으로 인한 메모리 점유
- Session TTL 설정이 잘못되어, 8천만개의 세션이 휘발되지 않고 쌓임
- 해결책: JWT 를 활용해 Sessionless 인증 도입
보유기술
Backend
- Java, Kotlin, Gradle
- Spring Boot, Spring Security
- JPA, MyBatis, JDBC Template
- JUnit5, Mockito, RestAssured, RestDocs
- IntelliJ, DataGrip, Vim
DevOps
- MySQL, MariaDB, AWS RDS
- AWS Code Pipeline, Code Deploy, Code Build
- AWS EC2, ELB, ECS, IAM, VPC, Route53
- AWS Amplify, Athena, CloudFront, S3
- Docker, docker-compose, Firecracker serverless
Web
- JavaScript, TypeScript, JQuery
- React, Redux, RxJS, axios, lodash
- Jest, Selenium, Storybook, Material UI
- NodeJS, Express.js, NGINX
교육경험
Kotlin 강사
우아한테크코스
2024.02 - 2024.06
- 우아한테크코스에서 크루들에게 Kotlin, OOP, TDD 를 교육
- 코드리뷰 예시
Spring JPA 강사
넥스트스텝
2021.03 -
- 현직자를 교육하며 WAS 와 ORM 프레임워크를 바닐라 언어만으로 구현하도록 지도
- 코드리뷰 예시
세미나 강사
한빛미디어
2019.03 - 2019.06
- 개발 문서화를 주제로 한빛미디어의 후원을 받아 공감세미나 주니어를 개최
- 작성하는 법을 강의한 개발문서들
- 사전정의서
- 요구사항 명세서
- Entity Relationship Diagram
- 프로세스 Flow Chart