프로젝트 개요
가비아 도메인 사업팀에서 다수의 도메인 레지스트라 관련 서비스를 개발하고 운영했습니다. 도메인 등록, 연장, 예약, 취소, 변경 등 도메인 라이프사이클 전반에 걸친 서비스를 담당했습니다.
도메인 생성 서비스 (2023.12 ~ 2024.01)
TypeScript, Next.js 14, Chakra UI, ChatGPT 기반의 도메인 추천 AI 서비스 개발
주요 이슈
- Assistants API vs Chat Completions API 선택
- LLM의 Output 형식 고정
- Vercel 무료 버전 배포 시 서버리스 스크립트의 타임아웃 (~10초)
접근 방법
- Chat Completions API 기반의 프롬프트 엔지니어링
- Suspense를 활용한 로딩 UI의 분리
- 백엔드를 별도로 구현하기보다 우선 Next.js의 서버리스 스크립트로 프로토타입 개발
진행 과정
- temperature를 (1.0 → 0.9) 조정하여 응답 형식의 일관성 개선
- 생성 배열의 크기를 축소하여 Vercel 무료 버전의 타임아웃 (maximum 10초) 대처
성과
- 가비아 도메인 서비스에 대한 AI 활용방안의 PoC 진행
- 도메인 검색 서비스에 대한 개선 방향성 제시
도메인 예약 통합 검색 / 주문 서비스 (2023.08 ~ 2023.09)
Java Spring MVC, JPA, Oracle 기반의 REST API / PHP CodeIgniter, JavaScript, jQuery 기반의 프런트 기능 개발
주요 이슈
- 도메인 낙장/예약 상품에 대한 통합 검색이 가능함에도 단일 주문서에서 함께 결제 불가
- 기존엔 주문 시 사용자에 대해서만 잠금을 걸던 DB 비관락 → 간헐적인 동시성 이슈 발생
- 여러 모놀리식 서비스에 흩어져 있는 코드베이스
- 타입스크립트를 사용할 수 없는 환경에서 PHP, JavaScript 등 프런트 스크립트에 하드코딩된 매직 상수
- 클라이언트(웹, 모바일)별로 파편화된 AJAX 호출
접근 방법
- 서로 다른 예약 상품에 대한 통합 주문이 가능하도록 Spring MVC 기반 REST API, 백오피스 및 프런트 개발을 진행하여 주문/결제 기능 고도화
- 고객과 요청 도메인 목록에 대한 Redis 다중 분산락(multilock)으로 대체함으로써 데이터 정합성 및 예약 중복 주문 동시성 개선
진행 과정
- Redis가 다운되면 DB 비관락을 사용하도록 예외처리
- 단일 API를 호출하고 서버 단에서 인자로 전달받은 클라이언트 유형에 따라 메시지를 응답
- 프런트 PHP 서버에서 바로 DB에 붙거나 하드코딩된 정책을 통해 비즈니스 로직을 직접 처리하던 기존 코드 대비 HTTP 기반 API 통신을 추가로 거치게 되면서 사용자 레이턴시 증가
성과
- 흩어져있던 코드를 Spring MVC 기반 단일 마이크로서비스로 통합하여 기술부채 청산
- 매직 상수에 대해 enum 및 JSDoc으로 리팩토링하여 가독성 및 유지보수성 개선
- Lombok의 toBuilder를 이용한 Copy-On-Write 적용 및 Functional Interface, Lambda, Stream API 등을 활용하여 함수형 프로그래밍 패러다임 적용, 부작용 최소화 및 코드 가독성 개선
도메인 등록 변경 / 취소 서비스 (2023.04 ~ 2023.08)
Java Spring MVC, JPA, Oracle 기반의 REST API / PHP CodeIgniter, JavaScript, jQuery, AngularJS 기반의 프런트 기능 개발
주요 이슈
- 고객센터 문의를 통해 평일에 수동으로 처리되던 도메인 등록 취소 / 변경
- 주말에 들어온 요청이나 시행사 점검 등으로 처리가 불가능한 경우 불가피한 손실 발생
- 도메인은 등록유예기간 내에 취소 처리 시 전액 환불이 가능
접근 방법
- 등록유예 기간 내에 처리가 가능하도록 Kafka를 이용한 이벤트 주도 패턴을 적용하여 등록유예기간 내 도메인 삭제 및 환불 자동화
- 변경 가능 여부 조회 및 도메인 변경 서비스 분리를 통한 CQRS 패턴 적용
- 프런트 팀에서 전달받은 마크업을 기반으로 레거시 AngularJS 및 Fetch API 기반으로 웹 페이지 기능 추가
진행 과정
- 초기 기획 단계에서 운영팀과의 프로세스 동기화 부족으로 일정이 지연되었으나, 이를 계기로 프로젝트 킥오프 시 이해관계자 인터뷰 프로세스를 정립
- 다부서 협업 과정에서 역할 범위를 명확히 정의하는 것의 중요성을 학습, 이후 프로젝트에서는 초기 R&R 합의를 통해 효율적 협업 체계를 구축
성과
- 일일 100건 이상 수동으로 처리되던 운영실 공수 대폭 감소
- Value Object 활용 및 디버깅 개선을 위한 CodeIgniter 내 Composer 오토로딩 적용
- Xdebug 도입을 통한 PHP 디버깅/프로파일링 프로세스 개선
만료 도메인 파킹 서비스 (2022.09 ~ 2022.12)
Java Spring MVC, JPA, MySQL 기반의 REST API / TypeScript Vue 기반의 백오피스 개발
주요 이슈
- 사용 기간이 만료된 도메인에 대해 복구기간 동안에도 이용 가능한 도메인
- 계약 만료로 인한 시행사 파킹 서비스 사용 종료
- 접속 경로에 따라 인코딩이 달라지는 파킹 스킨 관리 페이지
- 제대로 관리되지 않는 REST Docs 기반 API 문서
접근 방법
- 자체 네임서버에 등록된 안내 페이지로 파킹하여 도메인 연장 및 예약을 장려
- Spring MVC 및 JPA 기반 만료 도메인 파킹 전환 / 복구 RESTful API 개발
- 신규 스킨 생성 시 인코딩을 UTF8로 고정하여 한글 깨짐 이슈 해결
- Spring RestDocs → Springdoc 기반 OpenAPI로 문서화 도구 변경
진행 과정
- Spring 기반 API 100% 문서화
- Vue 3, Ant Design Vue 기반 TypeScript SPA로 사내 파킹 스킨 관리 레거시 시스템 마이그레이션
- OpenAPI Generator, Vue-Query 도입을 통한 개발 생산성 개선
성과
- 만료 도메인 연장률 20% 증가
KR 도메인 예약 서비스 (2022.09 ~ 2022.11)
PHP CodeIgniter, Oracle 기반의 REST API 및 배치 스크립트 개발
주요 이슈
- 가비아에 등록된 상태임에도 불구하고 예약 시에 만료 후 시행사를 통해 타사와의 경쟁을 통해 획득해야 하는 KR 도메인
- 텍스트 기반으로 런타임에 라이브러리를 로딩하여 IDE의 코드 추적을 무력화하고 개발자의 디버깅을 어렵게 하는 3버전 이하의 CodeIgniter 프레임워크
접근 방법
- KR 도메인에 대한 내부 예약 서비스 개발
- 예약 주문 시 기존 소유자에 대한 이메일 알림 기능을 통한 연장 독려
진행 과정
- PHPDoc을 도입하고 CI 코어에 대한 주석 파일을 추가함으로써 레거시 PHP 프로젝트 전반에 대한 타입 힌팅 및 코드 가독성 개선
성과
- KR 연장률 10% 증가
- KR 예약 성공률 개선