Posts AWS 서버리스 아키텍처 기반 2,000여명 고객사 인사데이터 동기화 시스템 구축기
Post
Cancel

AWS 서버리스 아키텍처 기반 2,000여명 고객사 인사데이터 동기화 시스템 구축기

배경

임직원 규모가 1,000명 이상인 기업에선 자사 인사 관리 시스템(HCM)과 외부 서드 파티 솔루션의 임직원 데이터를 이중화 관리해야 하는 번거로움이 존재한다.

Open API가 구축되지 않은 상황에서 위 문제를 해결하기 위해 고객사에서 동기화 시스템 구축을 제품 도입 조건으로 제안하게되어 시작하게 되었다.

클라우드 아키텍처 설계

현재 사내에서 스케줄링 요구사항은 단일 EC2 인스턴스에 스프링 애플리케이션을 배포하여 @Scheduled 어노테이션 기반으로 구현되어 있었습니다.

하지만 이러한 EC2 인스턴스 프로비저닝 작업, CICD 구축, 유지보수 비용 등을 고려했을때 더 나은 방안이 없을까 고민하게 되었고 AWS EventBridge와 Labmda 기반 서버리스 아키텍처를 설계하게 되었습니다.

Image

세부적인 동작 메커니즘은 다음과 같습니다.

1) AWS EventBridge에 Rule 을 등록하여 json 페이로드를 람다에 인자로 전달하며 실행시키는 이벤트 발생

1
2
3
4
5
6
7
8
9
10
{
    "cmsServerEnv": string, // dv, pr
    "tenantInfos": [
        {
            "tenant": string,
            "externalServerEnv": string // dv, pr - 외부 고객사 게이트웨이 환경
        }
    ],
    "enalbedNotification": boolean
}

2) 람다 함수에서 고객사 인사게이트로 부터 HTTP 프로토콜 기반 임직원 데이터를 조회하여 CMS 형상과 비교하여 업데이트 작업 수행

3) 동기화 실패 발생시 개발/사업 담당자 및 고객사 담당자에게 실패 메일 발송(장애 대응 프로세스)

  • 사내 MSK, Lambda, SES 기반 메일 발송 모듈을 활용한 메일 발송 처리 구현
  • 동기화 성공/실패에 대한 결과는 무조건 MS Teams로 웹훅 송신하여 일단위 모니터링 가능하도록 구현
  • 개발자 실패 메일에는 에러 스택 트레이스를 포함하여 빠른 대응 가능하도록 구성

애플리케이션 아키텍처 설계 및 구현

image

동기화 애플리케이션의 변하지 않는 핵심 비즈니스 로직은 다음과 같다.

  • 외부 고객사의 인사 데이터를 조회해온다.
  • CMS 인사 데이터를 조회하여 비교한다.
  • CMS Internal-API를 호출하여 생성, 업데이트, 삭제 처리해준다.

위 로직이 구현된 모듈은 app-core 모듈이다.

각 고객사 모듈(app-samsung, app-lg)은 해당 고객사 시스템의 데이터를 조회해서 CMS 데이터와 비교할 수 있는 모델로 변환해주는 책임을 갖는다.

위와 같이 구성함으로써 새로운 고객사 동기화 요구사항이 들어오더라도 외부 고객사 시스템에서 조회하여 컨버팅 처리만 해주면되기에 간편하게 대응이 가능해진다.

(참고: https://jeonyoungho.github.io/posts/클린아키텍처-12~14장/#14장-컴포넌트-결합)

설계 및 구현시 고려 사항

Lambda 애플리케이션 배포 방식 선택

AWS Lambda 에 애플리케이션 소스를 올리는 방법은 4가지가 존재한다.

1) 인라인 코드 작성 (용량 제한 : 3MB)

2) zip 파일 업로드 방식 배포 (용량 제한 : 50MB)

3) AWS S3의 zip 파일 업로드 기반 배포

4) AWS ECR에 등록된 이미지를 기반 배포

AWS 람다는 압축 패키지의 한도는 50MB, 압축 해제된 소스의 경우 250MB의 제한이 있다보니 1, 2, 3 번의 방법들은 모두 고객사가 늘어날수록 업로드하는데 한계가 존재할 수 있겠다는 판단을 하게 되었다.

하지만 4번 ECR에 등록된 컨테이너 이미지로 배포를 하게 되면 AWS 공식 문서에 기재된 것처럼 최대 10GB의 이미지 크기까지 람다 함수에 배포가 가능하므로, 람다 함수 용량 제한에 대한 걱정 없이 충분하게 인사 정보 동기화 구현을 할 수 있게 되어 선택하게 되었다😀(https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html)

Reference

AWS 서버리스 아키텍처 도입을 통한 이점

해당 아키텍처 구조를 도입함으로써 얻을 수 있는 이점은 크게 다음과 같다.

  • EC2 인스턴스 구동 비용 절감으로 인한 클라우드 비용 제로화
  • 유지보수 효율성 극대화(인프라프로비저닝/CICD 구축 공수 및 유지보수 비용 절감)

약 1년 6개월이 지난 현재(25년 1월)까지도 안정적으로 동기화 시스템이 동작하며 유지보수되고 있습니다:)

This post is licensed under CC BY 4.0 by the author.