스프링부트는 기본적으로 JAR 파일 혹은 WAR 파일로 배포할 수 있다.
JAR와 WAR이 무엇인지 간략히 정리한 글은 아래에서 확인할 수 있다.
→ https://fidget278.tistory.com/48
JAR 와 WAR
JAR와 WAR는 둘 다 java 기반의 application 배포 형태이다. JAR (Java Archive) 자바 프로젝트를 압축한 파일이다. 자바 클래스 파일과 각 클래스들이 사용하는 리소스 파일 및 메타 데이터를 ZIP 포맷으로
fidget278.tistory.com
우선 앵그리뱅크 프로젝트를 하려던 목적 자체가 기존 수업 들었던 부분에서 데브 옵스 부분의 복습이었다.
플젝을 진행할 때 데브옵스는 다른 팀원이 맡아 진행했기 때문에 실습이 모자라고 이해도가 낮다고 스스로 느꼈기 때문이었다.
실제로 앵그리 뱅크 배포 환경을 처음 구축할 땐 JAR와 WAR 차이를 잘 몰랐었다.
그냥 어렴풋이 JAR는 java 어플리케이션 배포 파일이고 WAR는 web 어플리케이션 배포 파일이다 정도의 지식만 가지고 있었고, 학원에서는 war로 배포하는 법을 배웠기 때문에 웹은 WAR로 배포하나보다 라고만 생각하고 있었다.
앵그리 뱅크 배포 환경을 구축하면서 좀더 자세히 공부하게 되어 JAR과 WAR의 차이를 알게 되었고, 이후 팀원과 함께 JAR로 배포해야할지 WAR로 배포해야할지 고민했었다.
당시에 우리가 내린 결론은 이랬다.
현재 상황
- 기존 Musicat 프로젝트의 배포 환경을 그대로 다시 구성해보면서 복습하려던 목적이 있었으니 WAR로 해보자.
JAR로 진행하면?
- 내장 톰캣이 있으니 외장 톰캣을 설치하고 셋팅할 필요 없이 JAR만 실행하면 바로 배포 된다.
WAR로 진행하면?
- WAR을 돌리려면 외장톰캣이 필요하니 외장 톰캣을 셋팅하고 운영해보는 경험을 해볼 수 있다.
추가로 고려되는 점
- 주머니 사정상 AWS EC2 하나에서 여러 개의 프로젝트를 배포해야할 수도 있을 것 같은데, 이 때 JAR보단 외장 톰캣을 이용해서 컨텍스트를 나눠주는 방식으로 배포하는 게 더 관리하기 쉬울 것 같다.
외장 톰캣 셋팅하는 법을 실습해보고 싶었고, EC2 하나에서 여러 개의 프로젝트를 배포해야하는 상황이 100% 올 예정이었으므로 우리는 WAR로 배포하기로 결정했다.
실제로 이후 WAR 빌드/배포 방식으로 젠킨스를 셋팅했고, 외장 톰캣도 셋팅해서 약 두 달간 운영을 지속했다.
우리의 예상대로 하나의 EC2에서 두 개 이상의 프로젝트를 배포할 일이 여러 번 있어서 외장톰캣의 server.xml을 건드려서 컨텍스트를 나눠주는 형태로 셋팅할 일도 있었다.
하지만 이제 조금 더 지식이 쌓이고 나니, 우리가 처음에 생각했던
"여러 개의 프로젝트를 배포할 때 jar보다는 외장톰캣 방식이 더 편할 것이다" 라는 의견에 좀 의문이 생겼다.
때마침 Musicat 리팩토링을 진행하면서 하나의 EC2에서 여러 개의 프로젝트를 배포할 일이 한 번 더 생겼고, 여러가지 방식을 시도해보겠다고 도커에 2개의 톰캣 컨테이너를 올렸다가 서버가 버티지 못하는 걸 확인했으니 다른 방식을 고려해볼 기회가 생겼다.
웬만하면 젠킨스 파이프라인을 안건드리고 WAR로 그대로 진행하는 게 시간절약상 좋긴 하겠지만..
어쨌든 현재 고려 중인 방식은 아래와 같다.
1. EC2 OS에서 직접 JAR 파일을 실행하고 포트를 다르게 설정해준다.
2. 도커에서 JAR 이미지 파일을 만들어서 두 개의 컨테이너를 올린다.
이 후에 더 시도해본 방식이나 실제로 적용해보고나서 후기를 추가로 적을 생각이다.
'개인프로젝트' 카테고리의 다른 글
| 앵그리박스) API 서버 응답 속도 향상 시키기 1 (2) | 2022.09.14 |
|---|---|
| Spring RestDocs 적용기.. (1) | 2022.06.25 |
| 앵그리뱅크) 서버 구축 과정 (0) | 2022.06.21 |
| Musicat 리팩토링) AWS MEDIUM에도 스왑 메모리를 설정해준 날.. (0) | 2022.06.15 |