Spring/프로젝트 코드 리뷰

웹 애플리케이션 관리자 사이트 아키텍처 분석

code2772 2025. 4. 2. 11:24
728x90
반응형

 

 

프로젝트를 하면서 잊지 않기 위해 정리용으로 작성하였습니다.

관리자 사이트 아키텍처에 대해 상세히 알아보겠습니다. 이 아키텍처는 대규모 트래픽을 처리하고 개발 효율성을 높이는 데 최적화되어 있습니다. 

 

 

 

전체 아키텍처 구성

 

이 아키텍처는 크게 다음과 같은 주요 구성 요소로 이루어져 있습니다:

  1. 개발 환경 (Development)
  2. CI/CD 파이프라인 (Jenkins)
  3. 서버 인프라 (프론트엔드, 백엔드)
  4. 테스트 인프라
  5. 데이터베이스 시스템

 

각 구성 요소의 역할과 상호작용을 자세히 살펴보겠습니다.

 

1. 개발 환경 (Development)

 

백엔드 개발 환경

백엔드는 다음과 같은 기술 스택으로 구성되어 있습니다:

  • Kotlin: JVM 기반의 현대적인 프로그래밍 언어로, Java와 완벽한 상호 운용성을 제공하면서도 더 간결한 문법과 null 안전성을 제공합니다.
  • Spring Boot: 마이크로서비스 아키텍처에 최적화된 자바 기반 프레임워크로, 자동 구성과 내장 서버를 제공하여 개발 효율성을 높입니다.
  • Git: 소스 코드 버전 관리 시스템으로, 개발자 간의 협업과 코드 변경 이력 관리에 사용됩니다.

 

프론트엔드 개발 환경

프론트엔드는 다음 기술을 활용합니다:

  • React: 컴포넌트 기반의 UI 라이브러리로, 가상 DOM을 활용하여 효율적인 렌더링을 제공합니다.
  • TypeScript: JavaScript의 정적 타입 확장으로, 코드 품질과 개발자 경험을 향상시킵니다.
  • Next.js: React 기반의 프레임워크로, 서버 사이드 렌더링(SSR), 정적 사이트 생성(SSG) 등 다양한 렌더링 전략을 제공합니다.
  • Git: 프론트엔드 코드의 버전 관리에 사용됩니다.

개발자는 로컬 환경에서 코드를 작성한 후 Git을 통해 저장소에 Push하면, 이것이 CI/CD 파이프라인의 트리거가 됩니다.

 

 

2. CI/CD 파이프라인

Jenkins 기반 자동화 시스템

이 아키텍처의 핵심은 Jenkins를 활용한 CI/CD(지속적 통합/지속적 배포) 파이프라인입니다:

  • 자동 빌드: 개발자가 코드를 Push하면 자동으로 빌드 프로세스가 시작됩니다.
  • 자동 테스트: 단위 테스트, 통합 테스트 등 다양한 테스트가 자동으로 실행됩니다.
  • 자동 배포: 테스트를 통과한 코드는 적절한 환경(개발, 스테이징, 프로덕션)에 자동으로 배포됩니다.

Jenkins는 백엔드와 프론트엔드 레포지토리의 변경사항을 모니터링하고, Git Push 이벤트가 발생하면 파이프라인을 트리거합니다. 이를 통해 개발-테스트-배포 과정이 자동화되어 개발 주기가 단축되고 휴먼 에러가 감소합니다.

 

 

3. 테스트 인프라스트럭처

품질 높은 코드를 보장하기 위해 다양한 테스트 도구가 사용됩니다:

  • JaCoCo: Java 코드 커버리지 분석 도구로, 테스트 코드가 얼마나 많은 프로덕션 코드를 커버하는지 측정합니다.
  • Mockito: Java 모킹 프레임워크로, 단위 테스트에서 외부 의존성을 격리시키는 데 사용됩니다.
  • Kotest: Kotlin 전용 테스트 프레임워크로, 다양한 테스트 스타일과 강력한 단언 기능을 제공합니다.
  • JUnit: 자바 애플리케이션을 위한 표준 단위 테스트 프레임워크입니다.

Jenkins 파이프라인은 이러한 테스트 도구들을 활용하여 코드 변경사항에 대한 포괄적인 테스트를 수행하고, 테스트 결과에 따라 배포 여부를 결정합니다.

 

 

4. 서버 인프라

프론트엔드 서버

  • Nginx 로드밸런서: 클라이언트 요청을 여러 프론트엔드 서버에 분산시켜 부하 균형을 유지합니다.
  • 이중화된 서버 구성: Server 1과 Server 2로 구성된 이중화 시스템으로, 하나의 서버에 장애가 발생해도 서비스를 계속 제공할 수 있습니다.

 

백엔드 서버

  • WAS(Web Application Server) 로드밸런서: 백엔드 요청을 여러 애플리케이션 서버에 분산시킵니다.
  • 이중화된 서버 구성: 프론트엔드와 마찬가지로 고가용성을 위한 이중화 구성을 채택했습니다.

 

특수 목적 서버

  • 이미지 서버: 이미지와 같은 정적 자산을 전용으로 처리하는 서버로, 메인 애플리케이션 서버의 부하를 줄이고 최적화된 이미지 처리를 제공합니다.

 

5. 데이터베이스 시스템

  • MariaDB: 오픈소스 RDBMS로, 일반적인 트랜잭션 처리에 사용됩니다.
  • Oracle DB: 엔터프라이즈급 RDBMS로, 복잡한 쿼리와 대규모 데이터 처리에 사용됩니다.

백엔드 서버는 이러한 데이터베이스에 연결하여 데이터를 저장하고 검색합니다.

 

아키텍처의 주요 이점

1. 고가용성 (High Availability)

로드밸런서와 이중화된 서버 구성으로 단일 장애점(Single Point of Failure)을 제거하여 시스템의 지속적인 가용성을 보장합니다.

 

2. 확장성 (Scalability)

필요에 따라 서버를 추가하거나 확장할 수 있는 구조로 설계되어 있어, 트래픽 증가에 유연하게 대응할 수 있습니다.

 

3. 유지보수성 (Maintainability)

프론트엔드와 백엔드의 분리, 모듈화된 아키텍처로 인해 시스템의 특정 부분을 변경하거나 업데이트하기 쉽습니다.

 

4. 자동화된 개발 프로세스

CI/CD 파이프라인을 통해 개발-테스트-배포 과정이 자동화되어 개발 주기가 단축되고 휴먼 에러가 감소합니다.

 

5. 코드 품질 보장

다양한 테스트 도구와 자동화된 테스트 프로세스를 통해 높은 코드 품질을 유지할 수 있습니다.

 

결론

마이크로서비스 아키텍처의 요소를 적용하면서도 전통적인 시스템의 안정성을 유지하고 있으며, CI/CD 파이프라인을 통한 자동화로 효율적인 개발 프로세스를 구현하고 있습니다.

이러한 구조는 특히 관리자 사이트와 같이 안정성과 보안이 중요한 시스템에 적합하며, 비즈니스 요구사항의 변화에 빠르게 대응할 수 있는 유연성도 제공합니다.

앞으로의 개선 방향으로는 컨테이너화(Docker)와 오케스트레이션(Kubernetes) 도입, 클라우드 네이티브 아키텍처로의 전환 등을 고려해볼 수 있을 것입니다.

반응형