서울
로 체크되어있는지 확인하자.
AWS 사이트 에서 RDS
를 검색해서 들어간다
프리 티어
로 반드시 체크해주자.
해당 설정들은 IntelliJ 에서 DB 와 연결 시
해당 정보들을 입력해서 연결해야 하므로, 기억 또는 메모해두자.
가용 영역은 옵션 중 아무거나 선택해도 무방하다.
추가 구성을 눌러보면 다음 항목이 뜬다
초기 데이터베이스 이름
을 입력해야한다.
해당 이름은 IntelliJ 에서 DB 와 연결 시 입력해줘야 하므로, 기억 또는 메모해두자.
해당 설정들로 데이터베이스를 생성해준다.
'인바운드 규칙 편집' 을 통해, RDS 포트를 열 수 있다.
데이터베이스가 생성돼있는데, 상태
는 약 5분정도 기다리면 '사용 가능'으로 변한다.
생성한 데이터베이스로 들어간다.
보안 그룹 ID 로 들어간다
인바운드 규칙 편집을 누른다.
소스
> 위치 무관
클릭해서 > 0.0.0.0/0
생성 확인 후 > 규칙 저장
클릭
생성해둔 데이터베이스로 들어가서 엔드포인트
를 복사한다.
MySQL 로 들어간다.
Name
: 'DB 인스턴스 식별자' 에 적은 것을 입력하면 된다
Host
: 생성한 데이터베이스로 들어가서, '엔드포인트' 를 복사해서 붙여넣으면 된다
User
: '마스터 사용자 이름' 에 적은 것을 입력하면 된다
Password
: '마스터 암호' 에 적은 것을 입력하면 된다
Database
: '초기 데이터베이스 이름' 에 적은 것을 입력하면 된다
모두 입력 후, TEST Connection
으로 입력한 정보가 일치하는지(DB 와 정상 연결이 되는지) 확인하고, OK 를 눌러준다.
application.properties 로 들어가 아래 코드를 넣어준다.
spring.datasource.url=jdbc:mysql://엔드포인트:3306/초기 데이터베이스 이름
spring.datasource.username=마스터 사용자 이름
spring.datasource.password=마스터 암호
spring.jpa.hibernate.ddl-auto=update
만약, 로컬 환경에서 이미 DB 와 연결해 데이터를 넣었더라도
다음과 같이 아래에 추가로 DB가 생성된다.
위는 로컬에서 연결된 DB
아래는 AWS에서 생성한 DB 와 연결된 것
아래의 SQL 쿼리문을 입력해, 테이블을 정상적으로 조회할 수 있는지 확인하자.
select * from 엔티티명;
정상적으로 연결돼있다면, 해당 컬럼을 확인할 수 있다.
AWS EC2 서버를 구매하고, 해당 서버에서 컴퓨터를 실행시키기 위한 운영체제(OS)인 Ubuntu 를 설치하면 된다.
(Ubuntu 외에도 여러 개의 OS 가 존재한다.)
AWS EC2 서버 로 들어간다.
EC2 로 검색해서 들어가도 무방하다.
인스턴스 시작을 누른다.
원하는 이름을 입력한다.
Ubuntu 를 사용할 것이므로, Ubuntu 를 선택해주고
이 중 '프리 티어' 를 선택해준다.
새롭게 키 페어를 생성해준다.
인스턴스 시작으로 인스턴스를 생성해준다.
인스턴스가 생성돼있는 것을 확인할 수 있다.
단, 무료 기간(1년) 후 결제가 되므로 그 전에
해당 인스턴스를 중지 or 종료해주자.
주의!
Window 의 경우, SSH 가 없으므로 반드시Git Bash
를 사용해줘야 한다.
Git Bash 에 해당 명령어를 입력해주자.
ssh -i 받은키페어를끌어다놓기 ubuntu@퍼블릭 IPv4 주소
퍼블릭 IPv4 주소
는 생성해둔 인스턴스로 들어가서 > '퍼블릭 IPv4 주소'를 의미한다.
Key fingerprint 관련 메시지가 나올 경우, Yes를 입력해준다.
SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램
- 다른 것들 보다 보안이 상대적으로 뛰어나다
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능 (AWS EC2 의 경우, 이미 22번 포트가 열려있다)
리눅스 명령어 모음
ls: 내 위치의 모든 파일을 보여준다.pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir: 내 위치 아래에 폴더를 하나 만든다.
cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
cd .. : 나를 상위 폴더로 이동시킨다.
cp -r [복사할 것][붙여넣기 할 것]: 복사 붙여넣기
rm -rf [지울 것]: 지우기
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
IntelliJ > Gradle > Task > build > build 를 클릭해준다.
build 가 정상적으로 완료된다면,
프로젝트 폴더 > build > libs 에 jar 파일이 생긴 것을 확인 할 수 있다.
'clean' 을 클릭하면, build 해둔 .jar 파일을 모두 제거할 수 있다.
전에 켜둔 Git Bash 창을 다시 띄워서, 아래 명령어를 입력해준다.
(ssh로 접속한) Ubuntu에서 OpenJDK 설치한 후, 버전을 확인하는 명령어다. (반드시 17v)
sudo apt-get update
sudo apt-get install openjdk-17-jdk
java -version
Filezilla 를 실행시키고, 빨간 상자로 표시한 부분(사이트 관리자 열기)을 누른다.
내 컴퓨터에 있는 프로젝트 폴더 > build > libs > jar 파일 하나를 오른쪽으로 끌어서 옮기기
(plan.jar 파일은 옮길 필요 없다)
Git Bash 에 해당 명령어를 입력해준다.
java -jar JAR파일명.jar
아래 코드로 작동시킬 경우, 작동시키면서도 터미널을 종료해도 해당 서버가 꺼지지 않는다.
nohup java -jar JAR파일명.jar &
EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도,
AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있도록 하기 위함이다.
인스턴스 > 보안 > 보안 그룹
인바운드 규칙 편집 > 80, 8080 포트를 열어주기
80포트: HTTP 접속을 위한 기본포트
8080포트: 스프링 부트 기본포트
http://퍼블릭 IPv4 주소:8080
주소창에 다음 URL 를 입력해서, 정상적으로 접속이 되는지 확인한다.
Whitelabel Error Page 문구가 뜨게 되는데,
이는 index.html 을 만들지 않았기 때문에 띄울 수 있는 페이지가 없어서 나타는 것이다.
매번 :8080 이라고 뒤에 붙여줘야 하는데, HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 된다.
이는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하면 가능하다.
띄워둔 터미널에서 새롭게 설정을 적용하기 전,
돌아가고 있던 서비스는 일단 꺼둔다
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Git bash 또는 맥의 터미널을 종료하면 (= SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않게 된다.
그러나 아래 명령어를 사용하면 SSH 접속을 끊어도 서버가 계속 돌게 할 수 있다.
// 아래의 명령어로 실행하면 된다
nohup java -jar JAR파일명.jar &
// 1. 해당 명령어를 통해, EC2 로 접속 후
ssh -i 받은키페어를끌어다놓기 ubuntu@퍼블릭 IPv4 주소
// 2. 아래 명령어로 미리 pid 값(프로세스 번호)을 본다
ps -ef | grep java
// 3. 예시 : 그럼 다음과 같이 나온다
ubuntu 159076 1 0 Aug31 ? 00:02:00 java -jar toogo-0.0.1-SNAPSHOT.jar
ubuntu 161358 161347 0 01:32 pts/2 00:00:00 grep --color=auto java
// 아래 명령어로 특정 프로세스를 죽인다
kill -9 pid값
// 예시
kill -9 1338
// 아래의 명령어로 실행하면 된다
nohup java -jar JAR파일명.jar &
nohup: ignoring input and appending output to 'nohup.out'