상세 컨텐츠

본문 제목

AWS EC2에 Spring 서버 배포

PROGRAMMING/Backend

by koharin 2022. 3. 4. 01:54

본문

728x90
반응형

로컬에서 구축한 서버는 공인 IP가 아니기 때문에 다른 네트워크를 사용하는 클라이언트에서는 사용할 수 없다.

따라서 Spring 서버를 AWS EC2에 구축해서 배포해보기로 했다.

Spring Boot는 내장 웹서버가 있지만, Spring framework는 내장 웹서버가 없기 때문에 Spring 서버가 동작하기 위해 필요한 tomcat도 같이 구축해준다.

물론 MongoDB를 데이터베이스로 사용하기 때문에 MongoDB도 설치해줘야 한다.

 

 

📝 Spring 프로젝트 war 파일 생성

 

war 파일과 jar 파일 중 어떤걸로?

Spring 프로젝트를 export할 때 jar 또는 war 파일로 할 수 있는데 어떤걸로 해야할까? 

jar 파일은 Springboot와 같이 내장 tomcat 서버가 있을 때,

war 파일은 Spring과 같이 내장 서버가 없어서 별도의 웹서버를 구축할 때라고 한다.

Spring 프로젝트이니까 war 파일로 export한다.

 

pom.xml

  <modelVersion>4.0.0</modelVersion>
	<groupId>org.smu</groupId>
	<artifactId>blood</artifactId>
	<name>SMU-Blood-Backend</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>

pom.xml에서 <packaging> 태그에서 패키징하는 확장자를 war로 지정한다.

 

export to war (Eclipse)

  • File → Export → Web → WAR file 선택

 

  • Export source files를 체크해야 java 파일들이 포함된다.

 

export to war (Intellij)

  • Project Structure로 이동

 

  • Web Application:Archive -> '프로젝트명:war exploded'에 대해 선택

 

  • 이름은 Tomcat 서버 xml 파일에서 지정한 프로젝트명과 동일하게 바꾼다. (근데 war파일 만들고 파일명 바꿔도 돼서 상관은 없다.)

 

  • Build -> Artifact Build

 

  • 아까 만든 artifact 선택 -> Build 선택

 

  • 그럼 바로 artifact에서 확인할 수 있는 파일 생성 경로에 프로젝트 war 파일이 생성된다.

 

📝 AWS EC2에 인스턴스 생성

  • [인스턴스 시작] 선택

 

 

  • 원하는 이미지를 선택한다. 필자는 Ubuntu Server를 선택했다.

 

  • [프리 티어 사용 가능] 적힌 t2.micro 선택

 

  • 이후 보안 그룹을 구성해주는데, 방화벽에서 포트를 열어줄 규칙을 추가하는 것이다. 
  • 프로젝트에서 사용하는 포트가 있으면 적어준다.

 

  • 이렇게 설정을 하고나면 보안키를 다운받을 수 있고, 인스턴스가 만들어지고 바로 VM을 사용할 수 있다.

 

 

  • 생성한 인스턴스를 선택하고 [작업] -> [연결]로 인스턴스 쉘에 접속하여 서버 설정을 진행할 수 있다.

 

다음 내용은 인스턴스 내에서 진행하는 설치 과정이다.

 

 

📝 Maven 설치

wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
tar xvf apache-maven-3.8.4-bin.tar.gz
mv apache-maven-3.8.4 /usr/local/maven-3.8.4
sudo vi /etc/profile
  • 만든 Spring 프로젝트에서 gradle이 아닌 maven을 사용해서 필요한 라이브러리를 다운받기 때문에 maven을 설치한다.
  • maven을 설치하는 과정에서 Java도 설치되어 별도로 Java 설치 진행은 안 해도 된다.

 

export M2_HOME=/usr/local/maven-3.8.4
PATH=$PATH:$M2_HOME/bin
  • /etc/profile 파일 열어서 위의 내용 넣고 :wq로 저장, source /etc/profile로 변경 내용을 반영해준다.
  • 환경변수 설정해주는 과정이다.

 

 

📝 Tomcat 설치

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz
tar xvf apache-tomcat-9.0.59.tar.gz
sudo mv apache-tomcat-9.0.59 /usr/local/tomcat9
  • Spring의 웹서버로 사용할 tomcat을 설치한다. 

 

export CATALINA_HOME=/usr/local/tomcat9
  • sudo vi /etc/profile로 파일 열어서 위의 내용을 적는다.
  • source /etc/profile

 

chmod -R 777 /usr/local/tomcat9/webapps // 모든 작업 가능하도록 권한 부여
chown -R ubuntu /usr/local/tomcat9/webapps // ubuntu에게 소유자 권한 부여
  • /usr/local/tomcat9/webapps에 Spring 프로젝트 war 파일 넣을건데, 이 파일을 실행해서 사용할 수 있도록 하는 과정이다.

 

<Connector port="8090" protocol="HTTP/1.1"
     URIEncoding="UTF-8"
     connectionTimeout="20000"
     redirectPort="8443" />
  • /usr/local/tomcat9/conf/server.xml 파일에서 위의 태그를 찾아서 URIEncoding="UTF-8"을 추가한다.
  • port는 로컬에서 Spring 서버 사용할 때와 동일한 tomcat 포트로 지정한다.

 

Tomcat 실행

/usr/local/tomcat10/bin/startup.sh

 

Tomcat 중지

/usr/local/tomcat10/bin/shutdown.sh

 

Tomcat 서버 실행하고 인스턴스에 할당된 IP:포트로 접속 시 위와 같이 뜨면 정상 실행된 것이다.

 

반응형

📝 MongoDB 설치

설치

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

 

실행 및 중지

sudo systemctl start mongod // stasrt
sudo systemctl stop mongod // stop
  • Failed to start mongod.service: Unit mongod.service not found. 오류 뜨면 sudo systemctl daemon-reload 후 다시 실행 해보기

 

 

mongosh

  • MongoDB Shell에 접속해서 데이터 들어가는걸 볼 수 있다.

 

 

📝 서버 war 파일 배포

  • Tomcat의 webapps 경로에 war 파일을 복사한다.
  • 그럼 Tomcat 웹서버 위에서 서버를 실행할 수 있다.

 

  • Tomcat 서버 실행하고, IP:8090/<war파일명> 경로로 접속 시 정상 접속되면 Spring 서버가 문제없이 실행되는 것이다. 
  • 서버 출력은 <tomcat경로>/logs/localhost.<날짜>.log 파일에서 확인할 수 있다.

 

728x90
반응형

관련글 더보기