Spring intializr(Gradle), IntelliJ, AWS EC2를 이용한 동적 웹페이지 만들기 - 5단계 배포하기(1)
Machine translation — switch to KO for the original.
0. 웹사이트를 배포하자
일단 생각한 배포 조건은 테스트와 배포자동화가 될 수 있는 서비스와 최근 이슈되는 배포 방식을 사용하는 것이었다.
기존에 이용한 netlify는 정적 웹페이지를 배포 자동화하기 좋은 조건으로 되어있었다. 본 포트폴리오는 메일 전송 등의 동적 사이트이기 때문에 AWS 프리티어인 EC2를 이용한 호스팅 방법을 적용했다.
AWS를 선택한 이유는 AWS를 사용하는 회사도 많고 클라우딩 컴퓨터를 이용한 호스팅을 하고 싶었기 때문이다. 또 설치가 빠르고 관리가 편하다는 점이 마음에 들었다. 그리고 과금제에 따른 요금부과를 피하면서 EC2 를 이용해 보자.
1. AWS 기본 환경 세팅하기
1) Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 64bit로 설치
먼저, Amazon Machine Image(AMI) 선택한다. 여기서 운영체제는 Window, Linux 등 자신이 개발하기에 적합한 개발환경을 선택하면 된다. 여기서 프리티어인 AMI를 선택할 것에 주의하자. 윈도우 운영체제에서 개발했지만 리눅스 운영체제를 사용해보고 싶어서 Ubuntu를 선택했다.
2) SSD Volume Type 64bit인 AMI와 t2.micro 인스턴스를 선택
인스턴스 유형도 프리티어로 선택하고 검토 및 시작을 눌러 다음 단계를 진행한다. 여기서 인스턴스 유형은 애플리케이션을 실행할 수 있는 가상 서버로 프리티어 유형을 선택한다.
3) 스토리지 크기 30GB
프리티어에서 30GB까지 사용을 할 수 있음으로 최대치인 30GB로 설정해두었다. (나중에 다른 프로젝트를 호스팅하는 날이 생길 수도 있으므로)
4) 보안그룹 설정
보안그룹은 서버 사용자에 제한을 두거나 개발환경 단에 있어서 포트 충돌을 방지하기 위해 사용된다. 즉, 쉽게 말하면 서버를 사용하는데 있어 필요한 개방할 포트를 설정하는 것이다.
별도 DB를 필요로 하지 않아서 다음과 같이 포트 설정을 했고, 인스턴스 생성이후 추가 삭제가 가능하다. 처음 생성시 타입을 선택하면 자동으로 프로토콜이나 Source가 입력되는 부분이 있으므로 초기값을 이용하고, 추가 홈페이지를 운영하면서 필요한 경우 제한을 둘 수 있다.
+. 탄력적 IP 등록하기
인스턴스 생성이 완료되고 나면 탄력적 IP를 생성한다. 키 설정 순서와 무관하다. 아마존에서는 한 인스턴스에 추가 탄력적 IP 생성시 또는 인스턴스와 연결되지 않거나 중지된 인스턴스에 연결된 탄력적IP에 소액의 시간당 요금이 발생한다고 쓰여있으므로 유의하자.
정적 IP를 통해 빠르게 연결이 가능하며, 동적 IP는 인스턴스 중지 후 재연결시 변경되므로 탄력적 IP가 필요하다.
생성된 인스턴스 대시보드 왼쪽 사이드바에 보면 탄력적 IP를 생성하는 메뉴가 있다.
여기서 탄력적 IP주소 할당을 눌러 IP를 생성하고, 작업을 눌러 기존 인스턴스와 연결해준다. 간단해서 별도 사진 첨부를 하지 않았다.
2. PuTTY를 이용한 인스턴스 연결
연결 옵션은 여러가지가 있지만 로컬과 인스턴스 운영체제 적합한 것으로 이용한다. 이 프로젝트에서 로컬은 윈도우, 인스턴스 운영체제는 리눅스이다.
2-1. 키 페어 생성
7단계에서 검토하기를 누르면 인스턴스 생성 마지막으로 키페어 생성 창이 뜬다. 모달차에서 새로운 키 페어를 생성하고 이름을 정한 뒤, 별도 보관해 둬야하는데 분실되지 않도록 잘 관리하자.
(인스턴스 생성 후 키페어 삭제 및 새로 발급이 가능하다.)
2-2. PuTTYgen 키 형식변환
인스턴스에 연결하기 위해서는 AWS의 가이드에서 추천하는 PuTTY를 이용했다. 기본 설치가 완료되면, PuTTYgen를 실행시켜 기존에 다운로드 받았던 키 페어를 인스턴스 연결에 사용하기 위해 .pem을 .ppk형식으로 변환시켜 준다.
.pem키를 Load하고 바로 Save private key로 저장해준다. 파라미터 값은 RSA 타입으로 유지했다.
이후에 PuTTYgen을 사용하는데 Generate하고 저장한 키가 Putty 연결시 되지 않는 경우가 있어 이 부분을 수정했다. load하고 바로 save해보자!!
2-3. PuTTY 사용하기
호환을 위해 변경한 .ppk키를 가지고 PuTTY에 접속할 수 있다. 생성된 인스턴스에서 퍼블릭 IPv4주소를 가져온다. session 연결 설정값은 Save해놓고 나중에는 Load를 통해 간편하게 연결할 수 있다. 여기서 그냥 Open을 하는 것이 아니라 key 값을 SSH>Auth에서 찾아서 넣어주고 열어야 바르게 연결된다. (키 값은 변환한 .ppk)
PuTTY 연결시 HostName 값은 사용자이름@퍼블릭IP주소이다. 여기서 사용자 이름은 인스턴스에 따라 다른데, AMI 기본 사용자이름으로 하고 있다. (출처: 아마존 가이드)
2-4. 연결 성공시 결과창
바르게 연결된 경우 다음과 같은 Welcome 창이 뜬다.
No supported authentication methods available 문제로 연결이 안되는 경우, 다음 포스팅을 참조할 것.
2023.03.26 - [DevOps] - [Putty, Filezila] No supported authentication methods available
2-5. PuTTY 기본환경 세팅하기
리눅스 운영체제에서 필요한 프로그램들을 설치해준다.
(1) 먼저 기본 업데이트를 진행한다.
$ sudo apt update
$ sudo apt upgrade
(2) 자바 설치하고 확인하기 + 환경변수 설정 (프로젝트에 필요한 버전을 설치해 준다)
$ sudo apt-get install openjdk-11-jdk
$ sudo apt-get install openjdk-11-jre
$ java -version
$ javac -version
$ sudo update-alternatives --config java
$ which javac
$ readlink -f /usr/bin/javac
$ sudo nano /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin/:$PATH
export CLASS_PATH=$JAVA_HOME/lib:$CLASS_PATH
$ sudo reboot now
$ each $JAVA_HOME
$ $JAVA_HOME/bin/javac -version
(3) 톰캣 설치 및 권한설정
$ sudo apt-get install tomcat9
$ sudo /usr/share/tomcat9/bin/version.sh
$ sudo ufw allow 8080/tcp
$ sudo service tomcat9 start
확인을 위해 위에서 PuTTY 설정시 필요했던 퍼블릭 IP주소:8080으로 접속해보자. 톰캣 구동이 올바르게 된 경우 It works!라는 문구가 뜬다.
$ sudo service tomcat9 stop
$ sudo service tomcat9 restart
이후에 Filezila를 통해 인스턴스의 톰캣 webapps 폴더에 배포할 것인데, 파일을 전송, 삭제를 위해 webapps 폴더의 권한설정이 필요하다.
$ sudo su
chmod -R 777 /var/lib/tomcat9/webapps
chown -R tomcat /var/lib/tomcat9/webapps
(4) 아파치 설치하기
$ sudo apt-get install apache2
$ sudo /etc/init.d/apache2 start
+
이제 기본적인 인스턴스 환경 설정이 끝났다. 프로젝트에 데이터베이스가 필요한 경우 MySQL 등 필요한 프로그램 설치를 추가로 진행한다.
3. Filezila로 배포하기
3-1. Filezila 기본세팅
여러가지 방식이 있지만 필자의 경우, Filezila의 GUI가 보기 편해서 선택했고, WinSCP와의 큰 차이는 느끼지 못했다.
(1) Filezila를 다운로드해서 키를 등록해주자. 편집>설정에서 .ppk 키를 등록해준다.
(2) 파일>사이트관리자에서 인스턴스를 연결해준다. 퍼플릭IP와 사용자 이름을 등록해준다. 여기서 사용자 이름은 PuTTY 설정과 동일하다. 여기서는 ubuntu
연결을 누르면 인스턴스가 연결되서 오른쪽에 디렉터리 구조가 보인다.
Amazon Elastic Compute Cloud Documentation
[AWS/아마존 웹서비스] 말도 안 되는 과금의 추억. 요금 폭탄
[Linux] putty 윈도우에서 리눅스 파일 전송 (pscp.exe)
apt-get 의 sources.list 파일 문제 해결
#2. Intellij와 AWS를 이용한 웹사이트 구축 :: IntelliJ에서 SSH연결하기
[AWS 프리티어 사용법] 4 - AWS 외부접근 설정
AWS에 Ubuntu OS를 사용하는 EC2 인스턴스 생성하기
리눅스 서버 설치기 - 3. Apache 설치 및 Tomcat 연동
Comments
No comments yet. Be the first!
319 posts in 테크
- 368Supabase 프로젝트 복사하기 (Restore to a New Project)NEW
- 341Migrating from Permanent Access Tokens to Token Exchange — Why Order Matters
- 326Startup & Product Glossary: Terms Every Solo Founder Should Know
- 325Context Management — How I Do It Now
- 324Claude Code Routines vs Cowork Schedule — What's the Difference?