Project

클라우드 SaaS 기반 ERP 시스템 개발 프로젝트 정리

readyoun 2025. 1. 13. 18:11

*수정 중 (2025-01-13)

Think Global, Act Local ERP 솔루션

 

GitHub - ready-oun/ERPSystem: Final project overview

Final project overview. Contribute to ready-oun/ERPSystem development by creating an account on GitHub.

github.com

 

구현 영상 YouTube 참조: https://tinyurl.com/omz-erp-youtube

 


 

메가존클라우드, 부산정보산업진흥원 운영 하에 진행된

'클라우드 SaaS 기반 JAVA 백엔드 개발자 양성과정 (3기)'

최우수상 프로젝트를 소개합니다. 

 

'2024 부산디지털혁신아카데미 해커톤(Dev-ton)'

일반트랙에서 입상하기도 했습니다. 

 

개발 기간  2024.07 - 2024.12 (총 6개월)  
개발 인원 7명 (백엔드, 프론트, 클라우드 구분 없음) 
개발 환경  1. 백엔드
 : Java, Spring Boot, HikariCP, QueryDSL, Apache Kafka, Redis, AWS Aurora Serverless
2. 프론트엔드
 : React, Ant Design, Axios
3. 클라우드
 : AWS EKS, S3, CloudFront, Terraform, Prometheus, Grafana
4. 배포 및 운영
 : Docker, Kubernetes, Helm Chart, GitHub Actions, CI/CD 파이프라인

"Think Global, Act Local ERP 솔루션"은 환경 친화적 경영을 지원하는 SaaS 기반의 클라우드 ERP 시스템입니다.

 

재무, 생산, 물류, 인사 관리 등 기업의 주요 비즈니스 프로세스를 통합 관리합니다.

 

멀티테넌트 아키텍처클라우드 인프라를 활용해 확장성과 안정성을 확보했으며,

 

Spring BootKafka를 통한 비동기 메시징, Redis 캐싱으로 성능을 최적화했습니다.

 

AWS EKS 기반의 자동 복구와 RUM 분석, CloudFrontS3를 활용한 콘텐츠 최적화를 통해 사용자 경험을 향상시켰습니다.


FAQ

  • ERP 시스템이 뭔가요?
    기업의 여러 부서와 기능을 하나의 통합된 시스템으로 연결하여 업무를 효율적으로 관리하는 도구입니다.
    (예: 요즘IT - 대표적 ERP 제품을 알아보자)

    예를 들어, 회사의 재무, 인사, 생산과 같은 다양한 부서에서 발생하는 정보를 정리하고 공유함으로써,
    부서 간 소통이 원활해지고 업무 속도가 빨라집니다.

  • SaaS 기반의 클라우드 ERP 시스템은 무엇이 다른가요?
    SaaS(Software as a Service) 기반 ERP는 소프트웨어를 클라우드에서 호스팅하여 인터넷을 통해 제공하는 방식입니다.
    이는 사용자가 별도 설치 없이 브라우저를 통해 ERP에 접근할 수 있도록 합니다.

  • 멀티테넌트 아키텍처가 무엇이고, 어떻게 구현했으며 왜 그렇게 했나요?
    하나의 애플리케이션 인스턴스가 여러 고객(테넌트)에게 서비스를 제공하는 구조입니다.
    데이터는 테넌트별로 분리되며, 같은 시스템에서 개별적으로 관리됩니다.

    "스키마 분리 전략"을 사용해 하나의 데이터베이스 내에서 테넌트별로 독립된 스키마를 운영했습니다.
    (이외에 데이터베이스 분리 전략, 테이블 분리 전략이 있음)

  • 클라우드 인프라를 활용해 확장성과 안정성을 확보했다는 것은 무엇을 의미하나요?
    • 확장성: 트래픽 변화에 따라 리소스를 동적으로 조정(HPA, Cluster Autoscaler)하여 시스템이 부하를 효율적으로 처리할 수 있도록 했습니다.
    • 안정성: 장애 발생 시 Elastic Load Balancer와 Auto Scaling을 통해 복구 시간을 최소화하고, 고가용성을 유지했습니다.
    • 구현 방법: AWS EKS와 HPA를 결합하여 자동 스케일링을 설정했고, Prometheus로 실시간 모니터링하며 이상 상황을 감지했습니다.
  • Spring Boot ver 3.3.1을 선택한 이유는 무엇인가요?
    • 최신 버전으로 성능과 보안 업데이트를 포함합니다.
    • Spring Native 지원을 통해 컨테이너 환경에서 빠른 실행 속도를 제공합니다.
    • 모듈화된 구조와 다양한 스타터 패키지로 빠른 개발이 가능합니다.
    • Spring Data JPA와의 연동으로 데이터 처리를 간소화할 수 있습니다.

  • Java 17 대신 Java 18(Amazon Coretto)를 사용한 이유는?
    Amazon Corretto는 AWS에서 제공하는 OpenJDK 배포판으로, AWS 환경과의 호환성이 우수합니다.

    이는 Amazon이 자체 서비스에서 Corretto를 사용하며, AWS 인프라에 최적화된 성능 개선과 보안 패치를 제공하기 때문입니다.
    또한, 멀티플랫폼 지원을 통해 클라우드, 온프레미스 및 로컬 시스템에서 동일한 환경을 실행할 수 있습니다.

    단, LTS 버전인 17 사용 시 프로젝트가 정상적으로 돌아가지 않는 문제가 발생했습니다.
    해당 프로젝트는 비용 상 장기적으로 운영할 수 없다고 판단하여 17 버전을 보수한 18 버전을 사용하게 됐습니다.

    따라서, AWS 환경에서의 최적화와 호환성을 고려한다면 Amazon Corretto를 사용하는 것이 유리합니다. 또한, 장기적인 안정성을 위해 Java 17 LTS 버전을 선택하는 것이 바람직합니다.

  • 왜 비동기 메시징이 필요했고, Kafka를 활용한 이유는? Kafka란 무엇인가요?

    Kafka란:
    Apache Kafka는 분산 메시징 시스템으로, Producer가 메시지를 Topic에 저장하고 Consumer가 이를 읽는 방식으로 작동합니다.
    • 비동기 메시징 필요성:
      • 모듈 간 의존성을 줄이고 독립적으로 작동 가능.
      • 고성능 데이터 처리가 필요했던 대량의 트랜잭션 처리에서 지연을 줄이기 위함.
    • Kafka 사용 이유:
      • 이벤트 기반 아키텍처 지원으로 대용량 메시지 처리가 가능.
      • 높은 확장성과 분산 환경에서 안정적인 데이터 전달.

  • Redis 캐싱이 필요한 이유와 성능 최적화 방식은?
    • 필요성: 읽기 중심의 ERP 시스템에서 데이터베이스 부하를 줄이고 응답 시간을 단축하기 위함.
    • 동작 원리: Redis는 메모리 기반 데이터 저장소로, 자주 조회되는 데이터를 캐시에 저장하여 I/O 대기 시간을 없앱니다.
    • 성능 최적화: Read-Through 전략을 사용해 요청 시 캐시에서 데이터를 먼저 조회하고, 없을 경우 DB에서 가져와 캐시에 저장했습니다.
  • AWS EKS란 무엇이고 기존 Kubernetes와 무엇이 다른가요?
    • EKS: Amazon Elastic Kubernetes Service는 Kubernetes 관리형 서비스로, AWS가 클러스터의 Control Plane을 관리합니다.
    • 차이점: 기존 Kubernetes는 사용자가 모든 노드와 Control Plane을 관리해야 하지만, EKS는 AWS가 이를 자동화하여 운영 부담을 줄입니다.
    • 자동 복구란 무엇이며, EKS에서만 가능한가요?
      • 자동 복구: 클러스터에서 장애가 발생하면 새로운 노드를 추가하거나 장애가 발생한 노드를 대체하는 프로세스입니다.
      • EKS에서만 가능한가? 아닙니다. 다른 클라우드 서비스(Azure AKS, Google GKE)나 자체 Kubernetes 설정으로도 구현 가능하지만, EKS는 AWS의 네이티브 도구를 활용해 더욱 간소화된 설정을 제공합니다. 
  • CloudFront와 S3 활용의 목적 및 성과는?
    • 목적: 정적 자산(이미지, JS, CSS 등)을 S3에 저장하고, CloudFront로 CDN(Content Delivery Network)을 구성해 빠르고 안정적으로 전송합니다. 
    • 성과:
      • 콘텐츠 최적화: TTL 설정으로 캐싱을 활용해 트래픽 부담 감소.
      • 사용자 경험 향상: 콘텐츠 전송 속도 개선으로 페이지 로드 시간이 단축.
    • 구현: S3에 정적 파일 업로드, CloudFront에서 캐싱 정책 설정(TTL 24시간) 및 WAF 통합으로 보안 강화.

 


 

프로젝트 수행 주요 항목

1. 기초정보 및 작업지시 관리 API 설계 및 개발

  • 생산 운영 및 계획, 작업지시 관리와 관련된 API 설계 및 구현.
  • 데이터 일관성과 확장성을 고려한 엔티티 및 데이터베이스 설계.
  • Spring Boot 및 Spring Data JPA를 활용한 RESTful API 구축.

2. Spring Batch를 활용한 대시보드 데이터 처리

  • 대량 데이터를 효율적으로 처리하기 위해 Spring Batch를 사용하여 배치 작업 설계.
  • AWS S3와의 연동을 통해 대시보드 데이터를 비동기적으로 처리하여 응답 속도 최적화.
  • Tasklet 기반 데이터 처리 구현 및 Chunk 기반으로의 리팩토링 계획 수립.

3. EKS 기반 자동 복구 및 클러스터 관리

  • AWS Elastic Kubernetes Service(EKS)를 활용하여 클러스터 자동 복구 전략 설계 및 구현.
  • Horizontal Pod Autoscaler(HPA)와 Cluster Autoscaler를 통해 트래픽 변화에 따른 자원 자동 확장 설정.
  • Prometheus 및 Grafana를 연동하여 클러스터 상태 모니터링 및 이상 탐지 환경 구축.

4. CloudFront 및 AWS S3를 활용한 콘텐츠 전송 및 자산 관리 최적화

  • AWS CloudFront를 활용하여 콘텐츠 전송 속도 최적화 및 캐싱 정책 설계.
  • 정적 자산을 AWS S3에 저장하고, TTL(Time to Live) 설정으로 캐싱 효율성 향상.

5. AWS KMS 및 Secrets Manager를 통한 인증 및 보안 강화

  • AWS KMS(Key Management Service)를 사용하여 데이터 암호화 및 인증 정보 보안 강화.
  • Secrets Manager를 통해 민감한 데이터(예: 데이터베이스 접속 정보)를 안전하게 관리.

6. RUM(Real User Monitoring)을 활용한 사용자 경험 분석

  • RUM 데이터를 분석하여 실시간 사용자 행동 데이터 수집 및 주요 성능 병목 구간 파악.
  • UX 개선을 위해 성능 최적화 작업 수행 및 주요 지표 대시보드 구성.

7. MSA 서비스 분할 및 성능 테스트

  • 모놀리식에서 MSA로 전환하여 서비스 분리 설계 및 구현.
  • 독립된 모듈별 트래픽 처리 및 확장을 고려한 설계.
  • K6 및 Locust를 활용하여 부하 테스트 진행 및 성능 개선 검증.

8. Kafka 기반 비동기 메시지 처리 시스템 설계

  • Apache Kafka를 활용하여 비동기 메시징 시스템 구현 및 서비스 간 의존성 감소.
  • Saga 패턴을 도입하여 분산 트랜잭션 관리 및 데이터 일관성 보장.

9. 분산 시스템에서 데이터베이스 성능 최적화

  • RDS Aurora Serverless v2와 RDS Proxy를 도입하여 데이터베이스 성능 향상 및 비용 최적화.
  • 복제 지연 및 병목 현상 해결을 위한 데이터 구조 개선 및 캐싱 전략 설계.

10. 친환경 인증 및 평가 관리 시스템 설계

  • 생산량, 폐기물 발생량, 에너지 사용량 등의 데이터를 ERP 시스템에서 수집 및 관리.
  • 정부 부처 보고용 친환경 데이터 분석 및 관리 모듈 설계.

11. DevOps 및 CI/CD 파이프라인 구축

  • GitHub Actions 및 Helm Chart를 활용한 CI/CD 파이프라인 설계 및 자동화.
  • Terraform을 이용한 IaC(Infrastructure as Code) 구현 및 클라우드 리소스 관리 효율화.

12. 프로젝트 일정 관리 및 협업 도구 활용

  • 프로젝트 초기 도메인 학습 및 팀 간 역할 분담 조율.
  • 스마트 팩토리 견학 및 실무 도메인 이해를 바탕으로 설계 방향 제안.
  • Figma, Discord, Notion 등 협업 도구를 활용하여 작업 흐름 관리 및 진행 상황 추적.

 


Outro.

프로젝트 초반에는 비즈니스 도메인 자체 지식 습득에 많은 시간(한두 달)이 소요됐습니다. 

그래서 양산의 한 스마트팩토리 운영 기업에 현장 견학도 가면서 부족한 도메인 지식을 보완하기도 했습니다. 

 

또한, Java & Spring 자체를 처음 접한 인원이 대다수였기 때문에,

기술 지식을 모두 새로 습득하면서 개발 및 배포한 프로젝트인 점 참고 바랍니다. 

 

관련 문의는 댓글 혹은 아래 메일 주소로 부탁드립니다. 

Email: heeyn.lim@gmail.com