서비스 링크: https://naimy.ai/
Overview
- 한글 브랜드 이름에 특화된 브랜드 이름 작명 서비스 naimy.ai . 작명에 이어 작명된 이름을 도메인 API, 특허청 API, 소셜 네트워킹 서비스 크롤링 등의 외부 서비스 연동을 통해서 적절성을 분석할 수 있습니다.
- 크게 Postgres RDS를 사용하는 Lambda backend와 React frontend로 이루어진 애플리케이션으로, 외부 서비스 연동을 고려한 AWS 아키텍처를 설계하고 특허청을 제외한 외부 서비스 연동 개발을 진행했습니다.
- 작명 옵션 선택지 변경, Database connection pool 디버깅, AWS 계정 마이그레이션 등 사이트 운영 이슈 대응
Architecture
A screenshot of naimy options
Lambda Break-down
Chalice micro framework 로 테스트, 배포되었습니다.
naimy- Main API server
- 외부 API 호출
- 외부 API 테스트 코드를 주기적으로 구동
naimy-gpt- Open AI SDK로 Chat GPT lambda 호출
- 자연어로부터 네이밍 옵션 자동 생성
- 기본적인 브랜드명 생성
naimy-trigger- Raw query로 로그인을 빠르게 수행하기 위해서 분리한 Lambda
- Cognitio user pool의
pre-signup,post-signupevent에 의해서 Trigger됨
AWS Services
- Postgres Database 관리
- API Lambda마다 데이터베이스 연결을 수립하므로 connection 개수가 전통적인 서버보다 많았었음
- 오래 걸리는 Open AI API 호출을 담당하는 Lambda는 Lazy하게 데이터베이스 연결을 수립하도록 변경
- Database backup 정책 수립, Stage를 마이그레이션
- Lambda에 적합한 SQL Alchemy option 조사
- 고정 IP 보안이 필요한 (주) 후이즈
API 연동
- Elastic IP를 등록한 EC2에 후이즈 API로 Reverse proxy를 하는 Nginx 구성
- 해당 EC2의 Private IP를 CloudMap service에 등록
- 후이즈 CloudMap service를 호출하는 API Gateway route를 생성하고 IAM authentication으로 보호
- Lambda의 Service role로 호출
- CloudFront로 Next.js static site 서비스
- S3 CloudFront origin 설정이 Next.js router 설정과 합치하도록 Next.js를 설정하고 배포 스크립트를 구성
- 점검 중에 사용할 수 있는 별도 페이지 구성
Lessons
- Cognito 인증이 들어간 B2C 프로젝트 운영 경험. 홍보가 이루어지며 회원과 트래픽이 서서히 증가하는 모습을 보았습니다.
- Lambda로 API 서비스를 만드는 것의 장단점을 명확하게 느꼈습니다. 서버를 사용했을 때보다 비동기 처리와 인프라 방면에서 이슈 발생이 적었지만, Fast API 등의 서버 프레임워크보다 Chalice의 기능이 적어 고민하고 기능을 구현해야 하는 상황이 많았습니다.
- Recoil 을 기반의 상태 관리 코드를 리팩토링하며 React 상태 관리의 기본적인 원리에 대해서 고민하기 시작한 좋은 기회였습니다.