Skip to Content
프로젝트공공 클라우드 플랫폼 개발

공공 클라우드 플랫폼 개발

수행기간: 2024.01 ~ 2025.04 (1년 3개월)

프로젝트 개요


개요1개요2개요3개요4

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를 통한 에러 모니터링 및 알림 설정

역할 및 기여

주요 업무

  1. 기존의 비동기 처리 담당 부분을 Spring Boot로 마이그레이션
    • Spring Data JPA DB 엔터티 및 레포지토리 코드 재사용을 위해 라이브러리화
    • autoconfigure를 통한 Spring Boot 설정 자동화
    • Gradle Composite Build 도입을 통해 라이브러리 배포 전 사전 확인 도입
  2. OAS(OpenAPI Specification) 기반으로 API 클라이언트 코드를 자동 생성하는 OpenAPI Generator 도입
    • API 문서화 및 클라이언트 코드의 일관성 유지
    • 개발 생산성 향상
  3. Gitlab CI/CD를 통해 배포 자동화
    • Gitlab Runner를 활용한 CI/CD 파이프라인 구축
    • semantic-release를 통한 CHANGELOG 및 애플리케이션 버전 관리 자동화
    • semantic release
  4. 로그 시각화
    • EFK(Elasticsearch, Fluent Bit, Kibana) 스택을 활용한 로그 수집 및 시각화
    • Kibana 대시보드를 통한 실시간 모니터링
  5. 애플리케이션 아키텍처 개선
    • dependency injector를 구현하여 의존성을 외부에서 주입 가능한 형태로 변경
    • 공통 기능을 uility 패키지로 만들어 라이브러리를 팀 내에서 공유해서 사용할 수 있게 변경
    • 유지보수성과 높은 응집력, 낮은 결합력을 유지하는 소프트웨어를 만들기 위한 작업을 진행
  6. OpenAPI Specification(OAS) 기반의 API 문서화
    • Redocly를 활용하여 검색이 가능한 API 문서 제공
    • 다양한 입력 예시와 출력 예시를 포함한 API 문서 작성
api-doc1api-doc2api-doc3api-doc4
  1. 에러 알림
    • 개발 서버는 직접 애플리케이션 터미널의 접근하여 에러 스택트레이스와 더 불어 요청 로그를 보면서 빠르게 해결할 수 있습니다.
    • 운영 환경에서는 직접적으로 애플리케이션의 터미널을 직접 볼 수 없기에, 에러 대응이 어려운 점이 있습니다.
    • 따라서 운영 환경에서 발생하는 에러를 빠르게 대응하기 위해서 로그 중앙화 아키텍처를 구축하였습니다.
    • 또한 센트리 웹훅을 Mattermost에 연결하여 에러 발생시 알림을 받을 수 있도록 구성하였습니다.
Last updated on