자.. 배포할 때 아주 초보적인 지식들에 대한 내용을 다뤄보고자 한다. 그만 물어보라는 뜻이다.
"war"와 "jar"는 둘 다 Java 애플리케이션에서 사용되는 파일 형식입니다. 그러나 이들은 서로 다른 용도와 구조를 가지고 있습니다.
"war" 파일은 "Web Application Archive"의 약자이며, JSP(Java Server Pages), 서블릿 등의 웹 애플리케이션 구성요소를 포함하는 Java 웹 애플리케이션을 패키징하는 데 사용됩니다. "war" 파일은 압축 파일로 구성되어 있으며, 웹 애플리케이션을 배포하고 설치하는 데 사용됩니다.
반면에 "jar" 파일은 "Java Archive"의 약자이며, Java 애플리케이션에서 사용되는 클래스, 라이브러리, 리소스 등을 포함하는 데 사용됩니다. "jar" 파일은 실행 가능한 Java 애플리케이션을 패키징하는 데 사용될 수도 있으며, 다른 Java 프로젝트에서 라이브러리로 사용될 수도 있습니다.
따라서, "war" 파일은 Java 웹 애플리케이션의 배포 및 설치를 위해 사용되고, "jar" 파일은 Java 애플리케이션의 클래스 및 라이브러리 패키지를 위해 사용됩니다.
jar 파일은 서버에 올리고 빌드만 해주면 되는데 war 파일은 서버 자체에 톰캣 환경을 만들어주고 돌리는 경우가 많다
톰캣은 버전별로 환경별로 설정별로 차이가 좀 있으니 다루지 않겠지만 대충 10버전 위쯤부터는 wepapps에 직접 war파일을 넣는 것이 아니라 wepapps-javaee 폴더를 만들어서 넣어주면 wepapp 폴더에 자동으로 풀려서 작동하는 식이다
아무튼 그럼 war파일이 더 귀찮지 않나요?
스프링 부트는 JSP 파일을 사용할 수 있습니다. 그러나 스프링 부트에서 JSP 파일을 사용하는 경우에는 WAR 파일로 애플리케이션을 패키징하고 배포해야 합니다.
이유는 JSP 파일은 동적인 웹 페이지를 생성하기 위해 서버 측에서 Java 코드를 실행하고 HTML을 생성하기 때문입니다. 이를 위해서는 JSP 파일과 함께 Java Servlet 컨테이너가 필요하며, WAR 파일은 Java Servlet 컨테이너에서 실행할 수 있는 웹 애플리케이션을 패키징하기 위해 사용됩니다.
반면에 JAR 파일은 주로 독립 실행형 Java 애플리케이션을 패키징하고 배포하는 데 사용됩니다. JAR 파일은 Java 애플리케이션의 클래스, 라이브러리 및 리소스를 포함하며, 자체적으로 실행 가능한 Java 애플리케이션으로 사용됩니다.
따라서, 스프링 부트에서 JSP 파일을 사용하는 경우 WAR 파일로 애플리케이션을 패키징하고 배포해야 합니다.
도커 파일을 만들어서 젠킨스를 통해 빌드하려면 다음과 같은 단계를 거칩니다.
도커 파일 작성하기: 빌드할 애플리케이션을 실행하기 위한 도커 이미지를 생성하는 도커 파일을 작성합니다. 도커 파일은 애플리케이션에 필요한 패키지, 설정, 파일 등을 정의하는 파일입니다.
도커 이미지 빌드하기: 작성한 도커 파일을 기반으로 도커 이미지를 빌드합니다. 이를 위해서는 도커 명령어를 사용하여 도커 이미지를 빌드하고 태그를 지정해야 합니다.
젠킨스에 도커 플러그인 설치하기: 도커 이미지를 빌드하려면 젠킨스에 도커 플러그인을 설치해야 합니다. 이 플러그인을 사용하면 도커 이미지 빌드와 관련된 작업을 젠킨스에서 실행할 수 있습니다.
젠킨스 파이프라인 구성하기: 젠킨스 파이프라인을 구성하여 도커 이미지 빌드를 자동화합니다. 이를 위해서는 파이프라인 스크립트를 작성하고, 해당 스크립트를 젠킨스 파이프라인에 등록해야 합니다.
젠킨스 파이프라인 실행하기: 작성한 젠킨스 파이프라인을 실행하여 도커 이미지 빌드를 실행합니다.
위의 단계를 참고하여 젠킨스를 사용하여 도커 이미지 빌드를 자동화할 수 있습니다. 각 단계에서 필요한 구체적인 내용은 해당 도구의 공식 문서나 사용 가이드를 참고하는 것이 좋습니다.
스프링 부트를 배포할 때 문제가 발생하는 경우, 다음과 같은 절차를 따라 해결할 수 있습니다.
빌드 확인하기: 빌드된 결과물이 올바르게 생성되었는지 확인합니다. 빌드된 결과물은 JAR 또는 WAR 파일입니다. 이 파일이 정상적으로 생성되지 않았거나 손상되었다면 배포할 수 없습니다. 이 경우 빌드 설정을 다시 확인하거나 빌드 과정에서 발생한 오류를 해결해야 합니다.
포트 충돌 확인하기: 스프링 부트 애플리케이션을 배포하기 전에 해당 애플리케이션에서 사용하는 포트가 다른 프로세스에서 사용 중이지는 않은지 확인합니다. 만약 포트 충돌이 발생하면 애플리케이션이 정상적으로 시작되지 않을 수 있습니다.
로그 확인하기: 배포한 애플리케이션이 동작하지 않는 경우, 로그를 확인하여 원인을 파악할 수 있습니다. 스프링 부트는 기본적으로 콘솔에 로그를 출력합니다. 로그 파일이 설정되어 있다면 해당 파일에서도 로그를 확인할 수 있습니다.
환경 변수 설정하기: 배포 환경에서 애플리케이션에 필요한 환경 변수가 설정되어 있는지 확인합니다. 스프링 부트에서는 프로파일(Profile) 기능을 제공하며, 개발 환경, 테스트 환경, 운영 환경에 맞게 프로파일을 설정할 수 있습니다. 프로파일을 제대로 설정하지 않으면 애플리케이션 실행 중 문제가 발생할 수 있습니다.
서버 설정 확인하기: 애플리케이션이 배포될 서버의 설정을 확인합니다. 스프링 부트는 내장형 서버를 사용하기 때문에, 서버 설정과 관련된 문제가 발생할 수 있습니다. 서버가 정상적으로 실행 중이며, 애플리케이션을 실행하는 데 필요한 서버 설정이 모두 적용되었는지 확인합니다.
위의 절차를 참고하면 대부분 스프링 부트 애플리케이션의 배포 문제를 해결할 수 있습니다.
도커는 컨테이너 기반 가상화 기술을 사용하여 애플리케이션의 개발, 배포, 실행을 쉽게 할 수 있도록 지원하는 플랫폼입니다. 도커를 사용하면 다음과 같은 이점이 있습니다.
환경 일치성: 도커를 사용하면 개발 환경, 테스트 환경, 운영 환경 등 각종 환경의 일치성을 유지할 수 있습니다. 개발자가 개발한 애플리케이션을 컨테이너로 패키징하면, 다른 환경에서도 동일한 애플리케이션을 실행할 수 있습니다.
빠른 배포: 도커를 사용하면 컨테이너를 이미지로 만들어서 배포할 수 있습니다. 이미지를 만드는 과정은 미리 정의된 설정 파일(Dockerfile)을 이용하므로 자동화가 용이합니다. 이를 통해 애플리케이션을 빠르게 배포할 수 있습니다.
확장성: 도커를 사용하면 애플리케이션을 쉽게 확장할 수 있습니다. 컨테이너를 이용하면 각각의 컨테이너에서 독립적으로 애플리케이션을 실행할 수 있으며, 필요에 따라 컨테이너를 추가하거나 제거할 수 있습니다.
격리성: 도커를 사용하면 각 애플리케이션의 실행 환경을 격리시킬 수 있습니다. 컨테이너는 호스트 OS에서 독립적으로 실행되기 때문에, 애플리케이션 간의 충돌이나 영향을 줄이고, 보안성을 높일 수 있습니다.
편리한 관리: 도커를 사용하면 컨테이너를 중앙 집중적으로 관리할 수 있습니다. 도커는 컨테이너의 상태를 모니터링하고, 로그를 수집하는 등 다양한 기능을 제공합니다.
유연성: 도커는 다양한 운영체제와 클라우드 플랫폼에서 지원되므로, 유연하게 애플리케이션을 배포할 수 있습니다. 또한, 도커 이미지를 통해 개발자나 운영자가 다양한 환경에서 테스트를 수행할 수 있습니다.
효율성: 도커는 가상화 기술보다 더 가볍고 빠릅니다. 가상화 기술은 하이퍼바이저를 이용하여 호스트 OS 위에 게스트 OS를 설치하고, 각각의 OS에서 애플리케이션을 실행합니다. 하이퍼바이저가 추가적인 리소스를 소모하므로 성능이 저하됩니다. 반면, 도커는 호스트 OS와 커널을 공유하기 때문에 가볍고 빠릅니다.
컨테이너 이미지 공유: 도커는 컨테이너 이미지를 공유하기 쉽습니다. 이미지를 Docker Hub나 개인적인 레지스트리에 업로드하고 다운로드하여 사용할 수 있습니다. 이를 통해 이미지 공유와 재사용성을 높일 수 있습니다.
개발환경 통일: 다양한 개발자가 다양한 개발환경을 사용하는 경우가 많습니다. 도커를 이용하면 모든 개발자가 동일한 개발환경을 사용할 수 있으며, 이를 통해 협업과 버전관리가 효율적으로 이루어질 수 있습니다.
라이브러리 관리: 애플리케이션에 필요한 라이브러리나 프레임워크를 도커 이미지에 포함시킬 수 있습니다. 이를 통해, 호스트 OS에 라이브러리를 설치하는 번거로움을 줄이고, 각각의 애플리케이션이 필요한 라이브러리를 독립적으로 관리할 수 있습니다.
이러한 이점들 때문에 도커는 현재 가장 인기있는 컨테이너 기반 가상화 기술 중 하나입니다. 많은 기업이 도커를 활용하여 애플리케이션 개발, 배포, 관리를 효율적으로 수행하고 있습니다.