작성
·
166
0
안녕하세요, 강사님.
강사님 강의로 Spring Batch를 공부하고 있는 사람입니다.
다름이 아니라 배포 방법에 있어서 마땅한 방법이 떠오르지 않아 질문을 드리게 되었습니다.
AWS Cloud를 활용한 배포에서 하나의 EC2 내부에서 API 서버와 Batch 서버를 같이 돌리게 되면 성능 저하 이슈가 발생하는 것으로 알고 있습니다. 그래서 API 서버용 EC2 1, Batch 서버용 EC2 2 별도의 EC2로 관리하면 성능 저하가 발생하지 않을까라고 생각을 하는데 실제 프로젝트에서도 별도의 프로젝트로 API 서버와 Batch 서버 프로젝트를 따로 개발하나요?
답변 2
0
안녕하세요.
Spring batch 관련 자료를 찾아보다가 우연히 보게 되어, 답변 남깁니다!
너무 뻔하긴 하지만, 절대적인 정답은 없고 모든 결정은 팀이나 회사의 상황에 맞게 이루어지면 될 것 같습니다 ㅎㅎ
[배치 서버 프로젝트 구성]
- 여기서 '프로젝트'가 소스코드의 그룹(?)이나 Git 레포지토리를 말씀하시는 거라면, Gradle 멀티 모듈과 같은 방식으로 프로젝트를 구성하면, 별도의 프로젝트를 만들지 않고, 공통된 로직이나 엔티티들을 여러 애플리케이션에서 참조하도록 구성할 수 있습니다.
물론 별도의 프로젝트로 만들어도 괜찮지만, 하나의 프로젝트에서 개발하려면 멀티모듈로 구성하는 게 매우 합리적인 선택으로 생각됩니다.
[배치 애플리케이션 배포]
- 먼저 배치 애플리케이션은 실제적인 비지니스 로직을 수행하는 API 서버와는 분리되는 게 좋습니다. 배치 작업의 경우, 컴퓨팅 자원을 많이 사용하는 경우가 있을 수 있어서, API 서버와는 아예 분리되어야 서로 영향을 주지 않기 때문입니다.
- 문제는 비용인데, 배치 애플리케이션의 경우 계속 서버가 떠 있을 필요 없이 작업이 수행될 때만 구동되도록 하는 게 비용적으로는 가장 좋습니다. 하지만 이렇게 하기 위해서는 EC2를 구동하는 것보다는 좀 더 높은 학습이 필요하긴 할 것 같습니다. AWS Batch, ECS, K8S 등등 EC2 이외의 배치 애플리케이션 구동을 위한 컴퓨팅 자원을 다루기 위한 학습이죠.
그래서, 비용을 무조건 타이트하게 아껴야하는 것이 아니라면, EC2로 배치 애플리케이션을 구동하는 것도 좋은 선택이라고 생각됩니다. (Auto scaling group을 사용하면, EC2도 내렸다가 올렸다가 할 수는 있긴합니다.)
[요약]
- 배치 애플리케이션을 위한 별도의 프로젝트를 만들어도 된다. 하나의 프로젝트에서 개발할 것이라면 '멀티모듈' 고려하기.
- API 애플리케이션과 배치 애플리케이션은 분리하는 게 좋다.
- 배치 애플리케이션 배포 및 구동 방식은 비용과 학습곡선을 고려해서 결정하면 된다.
0
안녕하세요, 인프런 AI 인턴입니다. duiaa님 질문 주셔서 감사합니다.
Spring Batch를 배포하는 방법에 대해 고민하고 계신데요, AWS Cloud 환경에서 성능 최적화를 위한 배포 전략을 세우는 것은 중요한 부분입니다.
일반적으로, 하나의 EC2 인스턴스에서 API 서버와 Batch 서버를 같이 운영할 경우, 리소스 경쟁 때문에 성능 저하가 발생할 수 있습니다. 따라서 실제 프로젝트에서는 API 서버와 Batch 서버를 분리하여 각각 독립적인 EC2 인스턴스에서 운영하는 것이 일반적입니다. 이렇게 분리하면 다음과 같은 이점이 있습니다:
리소스 분리: API 서버와 Batch 서버가 각각의 리소스를 독립적으로 사용하기 때문에 한쪽의 높은 리소스 사용량이 다른 쪽에 영향을 끼치지 않습니다.
유지보수 용이성: 각 서버의 스케일링이나 업그레이드를 별도로 관리할 수 있어, 필요 시 각각의 요구사항에 맞게 조정이 가능합니다.
보안 및 안정성: 서로 다른 목적의 서버를 분리함으로써, 보안 및 안정성 측면에서도 더 유리할 수 있습니다. 문제가 발생했을 때 해당 서버에 대한 트러블슈팅이 용이합니다.
관련하여, 스프링 배치를 어떻게 독립적으로 배포할 수 있는지에 대한 더 많은 정보를 스프링 공식 문서를 통해 확인하실 수 있습니다.
이와 같은 구조는 AWS에서의 배포뿐만 아니라, 다양한 클라우드 환경에서 사용 가능한 일반적인 배포 패턴이기도 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.