에그로그 서비스에 배치 서버가 필요한 이유

안녕하세요. 에그로그 프로젝트의 백엔드 팀에서 ICS 캘린더 시스템 개발을 맡고 있는 피칸파이 입니다.

현재 에그로그 서비스의 캘린더 시스템에서는 외부 캘린더 데이터 내보내기 및 가져오기 위해 스프링 스케줄러를 활용해서 캘린더 데이터를 동기화를 하고 있습니다.

이 기능으로 사용자는 ICS 형식을 지원하는 타사 캘린더 앱과의 연동성 높아져 유저 편의성이 향상되었습니다.

하지만, 현재 메인 로직이 있는 서버에서 스케줄링을 처리하기 때문에 특정 시각에 메인 서버가 불안정해지는 문제가 있었습니다.

이를 해결하기 위해 메인서버와 스케줄링 서버의 분리가 필요했습니다.

간단 타당성 분석

스케줄링 서버? batch 서버?

들어가기 앞서, 스케줄링 서버와 배치 서버에 대해 간략하게 설명하겠습니다.

스케줄링 서버

스케줄링 서버는 특정 시간에 작업을 자동으로 실행하는 서버입니다.

예를 들어, 매일 밤 12시에 데이터를 백업하거나 매주 월요일 아침에 리포트를 생성하는 등의 작업을 처리합니다.

즉, 스케줄링 서버는 작업의 주기적 실행과 관리가 필요할때 사용되게 됩니다.

배치 서버

배치 서버는 대량의 데이터를 한 번에 처리하는 작업을 주로 담당하는 서버입니다.

일반적으로 대규모 데이터 처리, 데이터 변환, 데이터 마이그레이션 등의 작업을 수행합니다.

즉, 배치 서버는 작업의 효율적 처리가 필요할 때, 스프링 배치(Spring Batch)와 같은 프레임워크를 사용합니다.

ICS 캘린더 시스템 또한 비교적 많은 데이터의 IO가 발생되기 때문에 배치 작업이 필요하다고 판단되었습니다.

배치 프레임워크 및 스케줄러의 종류

배치 및 스케줄링 시스템을 구현할 수 있는 프레임워크나 툴은 다양합니다.

배치 프레임워크

  1. Spring Batch: 대규모 배치 작업을 수행하기 위한 종합적인 솔루션을 제공합니다. 데이터 처리의 각 단계를 정의하고 관리할 수 있는 유연한 구조를 갖추고 있습니다.
  2. Apache Hadoop: 빅데이터 처리를 위한 분산 처리 프레임워크로, 대규모 데이터 세트를 효율적으로 처리할 수 있습니다.
  3. Apache Spark: 실시간 데이터 처리를 지원하며, 배치 처리와 스트리밍 처리를 모두 지원하는 강력한 데이터 처리 엔진입니다.

스케줄러

  1. Quartz: 자바 기반의 강력한 스케줄러로, 복잡한 스케줄링 작업을 간단하게 구현할 수 있습니다.
  2. Spring Scheduler: 스프링 프레임워크에서 제공하는 스케줄링 기능으로, 애노테이션을 통해 간단하게 스케줄링 작업을 설정할 수 있습니다.

이렇게 많은 시스템 중 저희 백엔드 팀은 스프링 배치 + 스프링 스케줄러를 활용해서 ics 시스템을 구현하기로 했는데요.

그 이유를 설명하겠습니다.

스프링 배치&스케줄러 의 선택 이유

  1. 기존 메인 서버의 시스템이 스프링 서버로 구현
    기존에 구현되어 있는 시스템을 변경하는 작업이기 때문에 기존의 스프링 설정방식이나, ICS 동기화 시스템의 로직을 큰 변경 없이 통합 할 수 있다는 장점이 있었습니다.
  2. 배치 작업
    ICS 동기화 과정을 Job과 Step으로 나누어 명확하게 읽기, 처리, 쓰기 단계로 나누어 유연하게 처리하도록 변경이 가능했습니다. 또한, 많은 데이터의 IO를 트랜잭션 단위로 일관성을 보장할 수 있었고 중간에 작업이 멈추더라도 그 시점부터 다시 진행 할 수 있기 때문에 자원을 아낄 수 있다는 장점이 있었습니다.
  3. 효율적인 자원 관리
    Hadoop 및 Spark 같은 경우에는 메모리 리소스 및 비용이 비교적 많이 소모되었습니다. 또한, 런닝 커브가 있는 기술이기 때문에 비교적 간단하게 구현이 가능한 스프링 배치로 선택했습니다.
  4. 단순한 작업
    ICS 시스템을 배치 작업으로 할때 필요한 요구사항이 비교적 간단한 작업들이기 때문에 타 기술 대비 비교적 간단하게 구현이 가능하고, 런닝 커브 및 비용이 적게 드는 스프링 배치를 선택했습니다.

ICS 동기화 배치 시스템 설계 및 구현

(미완료) 이제까지는 에그로그 서비스의 안정성과 성능을 향상시키기 위해 메인서버와 스케줄링 서버를 분리하는 작업의 타당성 분석을 진행했습니다.

변경된 시스템의 성능 비교

(미완료)

마치며

에그로그 서비스의 안정성과 성능을 향상시키기 위해 메인서버와 스케줄링 서버를 분리하는 작업을 진행하게 되었습니다.

이를 통해 메인 서버의 부하를 줄이고, 스케줄링 작업을 보다 효율적으로 관리할 수 있게 되었습니다. 또한, 작업 중단 시에도 중단된 지점부터 재개할 수 있는 기능을 통해 시스템의 안정성과 신뢰성을 높였습니다.

하지만, 여전히 성능 개선이 필요한 부분들이 존재합니다.

예를 들어, 데이터 처리 시 발생하는 IO 병목 현상을 해결하기 위한 추가적인 최적화가 필요하다고 생각됩니다.

또한, 작업 실패 시 자동으로 재시작하는 로직의 개선과 더불어, 장애 발생 시 알림 시스템을 구축하여 신속하게 대응할 수 있도록 할 필요가 있습니다.

진행하면서 많은 것을 배울 수 있었으며, 앞으로도 지속적인 개선을 통해 더욱 안정적이고 효율적인 시스템을 구축해 나가겠습니다.

감사합니다

Discussion and feedback