Spring boot + Maven 프로젝트 설치부터 배포까지(feat. VSCode, docker)

Doyeon·2023년 9월 2일
0
post-thumbnail

개발자 준비를 하면서 진행했던 모든 스프링 프로젝트는 gadle 빌드 도구와 JPA를 사용했었고, 개발 툴은 IntelliJ를 사용했었다.
지금 다니는 회사에서는, maven 빌드 도구와 mybatis를 사용하며, 개발 툴은 VSCode를 사용하는 중이다.
내가 익숙하게 사용하던 툴, 빌드도구, OS가 아닌 새로운 환경에서 개발환경을 세팅하고 프로젝트를 빌드, 배포하기까지 꽤나 삽질을 많이 했다. 익숙한 환경과 개발 도구만을 사용해서 개발할 수는 없기에, 상황에 맞춰 적절하게 개발할 수 있는 내공을 갖춰야 하는데, 이번 기회에 내공을 조금은 쌓을 수 있었던 것 같다.
그럼 지금부터 VSCode를 사용해서 Spring boot + maven 개발 환경을 세팅하고, 프로젝트를 실행하고 도커를 사용해 배포하는 과정들을 기록해본다.


<1> VSCode에서 Spring boot 개발환경 세팅하기

1. Extension 설치

IntelliJ는 Java를 비롯한 JVM 언어에 특화되어 있고, VS Code는 다양한 언어를 지원하며 확장 기능을 통해 원하는 언어나 도구를 추가로 설치해 사용할 수 있다.

Java Spring boot 프로젝트를 실행하기 위해 필요한 Extension들을 설치해야 한다. 이 때, Java 언어 사용을 위해 jdk와 JAVA_HOME 환경변수 설정은 따로 세팅해줘야 한다.

Extensions 메뉴를 선택하고 아래 두 개의 Extension Pack을 설치한 후 VS Code를 재실행한다.

  • Extension Pack for Java
  • Spring Boot Extension Pack

2. Maven 설치 및 환경변수 설정

Maven 다운로드 페이지(https://maven.apache.org/download.cgi)에서 Binary zip archive 파일을 다운로드한다.

그 다음, 압축을 푼 경로를 시스템 환경 변수에 Path 환경변수로 설정해야 전체 경로 입력 없이 mvn 명령어만 사용하여 Maven을 빌드할 수 있다.

1) “내PC” > “속성” > "고급 시스템 설정"에서 “환경 변수” 버튼 클릭

2) "시스템 변수" 섹션에서 "새로 만들기" 클릭

3) 변수 이름을 MAVEN_HOME으로 설정하고, 변수 값에 Maven 설치 디렉토리 경로 지정

4) "Path" 시스템 변수 내에 %MAVEN_HOME%\bin 추가

cmd에서 mvn -version 명령 실행하여 제대로 설정되었는지 확인할 수 있다.

<2> Spring boot 프로젝트 빌드 및 실행하기

1. properties 파일 작성 및 pom.xml 설정

  • properties는 프로젝트의 설정이나 빌드에 사용되는 값을 정의하고 관리할 수 있다. 한 프로젝트에 여러 properties를 정의할 수 있다.
  • 프로파일은 특정 환경이나 상황에 따라 빌드나 설정을 다르게 구성할 수 있도록 만든다. activatedProfile을 사용하여 특정 프로파일을 활성화하면 해당 프로파일에 정의된 설정들이 적용된다.
  • activeByDefault는 해당 프로파일로 기본적으로 활성화되어 빌드된다.
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <activatedProfile>dev</activatedProfile>
            </properties>
    				<activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <activatedProfile>prod</activatedProfile>
            </properties>
        </profile>
    </profiles>

2. 프로젝트 실행

  • @SpringfBootApplication이 붙은 Application.java 파일에서 우측 상단 ▷(Run Java) 아이콘을 클릭하거나
  • Spring boot dashboard에서 ▷(Run) 아이콘 클릭하여 프로젝트 실행

3. 프로젝트 빌드

  • 프로젝트 루트 경로에서 다음 명령어를 실행한다. -P 옵션 뒤에 빌드하려는 프로파일을 붙여 사용할 수 있다. -P 옵션이 없다면, <activeByDefault>true</activeByDefault>로 설정된 프로파일로 빌드된다.
    mvn clean install -P dev  # dev 프로파일로 빌드
    mvn clean install         # activeByDefault = true 프로파일 설정
  • Explorer 메뉴의 Maven 섹션에서 LifeCycle > clean & install 을 선택하여 빌드할 수도 있다.
  • 빌드가 끝나면, [프로젝트_루트_디렉토리]/target/ 위치에 .war 파일이 생성된다.

<3> docker 환경에서 Spring boot 프로젝트 배포하기

1. docker 컨테이너 생성 및 명령 실행

컨테이너 생성 및 실행

docker run [옵션] <이미지_이름> [명령]

docker run -d -it -p 6007:8080 --name dev_api tomcat:9-jdk11
docker run -d -it -p 6006:3306 --name dev_db -e MYSQL_ROOT_PASSWORD=password1234! mysql:8.0.17 --lower_case_table_names=1
  • docker run : 컨테이너 생성 및 실행
  • d: 백그라운드 실행
  • it: 상호 작용 모드(interactive mode) 활성화, 터미널 할당
  • p [호스트 포트]:[컨테이너 내부 포트]: 호스트 포트와 컨테이너 내부 포트 연결
  • -name [컨테이너 이름]: 컨테이너의 이름 설정
  • [이미지이름]:[버전]: 컨테이너를 생성할 때 사용할 도커 이미지의 이름 지정(tomcat:9-jdk11, mysql:8.0.17)
  • e MYSQL_ROOT_PASSWORD=: 컨테이너 내부에서 실행되는 MySQL 서버의 루트 사용자의 비밀번호 설정. e 옵션 사용하여 환경 변수를 설정
  • -lower_case_table_names=1: MySQL 서버 설정 중 하나인 lower_case_table_names 값을 1로 설정. 테이블 이름의 대소문자 구분하지 않음

컨테이너 목록 보기

docker ps

컨테이너 내 명령 실행

docker exec -it <컨테이너_이름_또는_ID> <실행할_명령>

docker exec -it dev_api /bin/bash
  • docker exec: 실행 중인 컨테이너 내에서 명령 실행
  • it: 컨테이너의 셸과 상호 작용
  • dev_api: 접근하려는 컨테이너 이름
  • /bin/bash: 컨테이너 내에서 실행하려는 명령으로, Bash 셸 시작

2. war 파일 복사

  • 빌드 후 생성된 war 파일을 putty, mobaXterm 등을 사용해서 개발서버에 넣는다.
  • 개발서버 내 폴더에 옮긴 war 파일을 도커 컨테이너 webapps 폴더로 복사한다.

컨테이너 내부로 파일 복사

docker cp <로컬 파일 경로> <컨테이너 이름 또는 ID>:<컨테이너 내부 경로>

docker cp /home/user/docker/project.war  dev_api:/usr/local/tomcat/webapps

webapps 폴더에 war 파일이 옮겨지면, 개발서버IP에 컨테이너 생성시 설정했던 포트번호로 프로젝트 파일 배포가 완료된다.

참고자료

[VS Code] VSCode에 Spring Boot 개발 환경 세팅 및 샘플 프로젝트 생성, 실행

윈도우에 Maven 설치하는 방법

profile
🔥

0개의 댓글