공공 클라우드 플랫폼 개발
수행기간: 2024.01 ~ 2025.04 (1년 3개월)
프로젝트 개요




PHP, HTML, Javascript로 된 모놀리식 프로젝트를 프론트엔드, 백엔드를 분리하였습니다. 그 중 API 서버를 Express.js로 개발하였으며, Java로 작성된 기존의 비동기 처리 부분을 Spring Boot로 마이그레이션 하였습니다.
이 프로젝트는 공공 클라우드 플랫폼의 API 서버로, 다양한 클라우드 자원에 대한 API를 제공합니다.
- 로드 밸런서(Load Balancer) API
- 공인 IP API
- 서브넷 API
- 웹 방화벽(WAF) API
- SSL(TLS) 인증서 API
- 방화벽 (Firewall) API
- 파일/이미지 백업 API
- 이벤트 로그 API
- 계정 관리 API
위와 같은 클라우드를 사용하기 위한 기본 자원을 제공하는 API 서버를 개발 및 유지보수 하고 있습니다.
개발 환경
- Language: Javascript, Java
- Framework: Express, Spring Boot
- ORM: KnexJS, JPA(Hibernate)
- Cloud Infra: 자체 스택
- DB: MySQL, Redis
- Deploy: Docker, Gitlab CI/CD
- Monitoring: EFK(Elasticsearch, Fluent Bit, Kibana)
아키텍처
-
Express.js 프레임워크를 활용한 클라우드 자원 API 서버 설계 및 구현
-
클라우드 도메인의 상품 분석 및 API 설계
-
아키텍처 개선 및 성능 최적화
-
OAS(OpenAPI Specification) 기반으로 API 클라이언트 코드를 자동 생성하는 OpenAPI Generator 도입
-
Gitlab CI/CD를 통해 배포 자동화
-
로그 시각화
-
Sentry를 통한 에러 모니터링 및 알림 설정
역할 및 기여
주요 업무
- 기존의 비동기 처리 담당 부분을 Spring Boot로 마이그레이션
- Spring Data JPA DB 엔터티 및 레포지토리 코드 재사용을 위해 라이브러리화
- autoconfigure를 통한 Spring Boot 설정 자동화
- Gradle Composite Build 도입을 통해 라이브러리 배포 전 사전 확인 도입
- OAS(OpenAPI Specification) 기반으로 API 클라이언트 코드를 자동 생성하는 OpenAPI Generator 도입
- API 문서화 및 클라이언트 코드의 일관성 유지
- 개발 생산성 향상
- Gitlab CI/CD를 통해 배포 자동화
- Gitlab Runner를 활용한 CI/CD 파이프라인 구축
- semantic-release 를 통한 CHANGELOG 및 애플리케이션 버전 관리 자동화
-
- 로그 시각화
- EFK(Elasticsearch, Fluent Bit, Kibana) 스택을 활용한 로그 수집 및 시각화
- Kibana 대시보드를 통한 실시간 모니터링
- 애플리케이션 아키텍처 개선
- dependency injector를 구현하여 의존성을 외부에서 주입 가능한 형태로 변경
- 공통 기능을 uility 패키지로 만들어 라이브러리를 팀 내에서 공유해서 사용할 수 있게 변경
- 유지보수성과 높은 응집력, 낮은 결합력을 유지하는 소프트웨어를 만들기 위한 작업을 진행
- OpenAPI Specification(OAS) 기반의 API 문서화
- Redocly를 활용하여 검색이 가능한 API 문서 제공
- 다양한 입력 예시와 출력 예시를 포함한 API 문서 작성




- 에러 알림
- 개발 서버는 직접 애플리케이션 터미널의 접근하여 에러 스택트레이스와 더 불어 요청 로그를 보면서 빠르게 해결할 수 있습니다.
- 운영 환경에서는 직접적으로 애플리케이션의 터미널을 직접 볼 수 없기에, 에러 대응이 어려운 점이 있습니다.
- 따라서 운영 환경에서 발생하는 에러를 빠르게 대응하기 위해서 로그 중앙화 아키텍처를 구축하였습니다.
- 또한 센트리 웹훅을 Mattermost에 연결하여 에러 발생시 알림을 받을 수 있도록 구성하였습니다.
Last updated on