AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
aws 셋팅 관련하여 전반적인학습진행
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
AWS - EC2, RDS를 활용하여 배포하기
[목차]
-
- AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)
- 가입: https://portal.aws.amazon.com/billing/signup#/start
- 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.
- 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적)
- (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png
-
- Filezilla 설치하기
- 다운로드: https://filezilla-project.org/download.php
- 다운로드 클릭 후 가장 기본 버전 (스크린샷 기준 왼쪽) 다운로드!
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4a95fdc0-db5f-49c4-bef9-91a0d861f196/Untitled.png
- 3**. (윈도우만) Git Bash**
- Git bash 라는 프로그램이 필요합니다.
- 설치하기: (링크)
01. RDS 구매하고 MySQL 세팅하기
- RDS 구매하기
- 미리 가입한 AWS에 로그인합니다.
- (링크)에 접속합니다.
- [코드스니펫] AWS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#>
- RDS를 검색하고 결과를 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efd9be1c-0e0c-4c6d-b5a5-4b297f0388bc/_2020-10-21__9.37.21.png
- "데이터베이스 생성"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4543ba37-ec6f-45ea-bf62-2fd99d91b862/_2020-10-21__9.38.47.png
- "표준생성" 과 "MySQL"을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/63deb4f6-b086-42b4-a1ed-798fbc2cae90/Untitled.png
- "프리 티어"를 선택합니다. (요금부과를 방지하기 위해 꼭 확인해주세요! → https://aws.amazon.com/ko/free/faqs/)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e9afda2-ae52-4f0d-8e6c-21ce5cff4acb/Untitled.png
- 다음과 같이 입력합니다.
- DB 인스턴스 식별자에 "springboot-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
- 마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
- DB 인스턴스 크기와 스토리지는 설정 그대로 두고 넘어갑니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3a013c1-a184-4ebc-b6f9-4217cf05f693/Untitled.png
- [중요] 연걸 > 추가 연결 구성 탭을 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f027f799-55ac-4b94-9956-6766461c5f78/_2020-10-21__9.46.33.png
- 다음과 같이 설정합니다.
- 퍼블릭 액세스 기능: "예" 선택
- → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
- VPC 보안 그룹: "새로 생성" 선택
- 새 VPC 보안 그룹 이름: springboot-db-security
- 가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.
- 추가 구성 > 초기 데이터베이스 이름 에 "shop" 을 입력한다.
- 데이터베이스 생성 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/883ab2fd-4d2a-4909-b832-156f1891d523/Untitled.png
- RDS 포트 열어주기
- springboot-database 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e4a283f-8619-42a0-955d-e0143573f6f2/Untitled.png
- 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b57b737-7268-4b6e-9a17-dd9cb4a2f5dd/_2020-10-21__10.00.43.png
- 보안 그룹 ID 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fc556744-d3ee-4c11-a86f-ceed5badf53d/_2020-10-21__10.02.00.png
- 인바운드 규칙 편집 클릭
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a9634f03-ec15-44c6-bfc7-2adc25936831/_2020-10-21__10.02.34.png
- 소스 > 위치 무관 클릭해서 0.0.0.0/0, ::/0 생성 확인 후 "규칙 저장" 클릭
- IntelliJ에서 확인하기
- (링크) 이동 후 springboot-database 클릭
- [코드스니펫] RDS 대시보드 링크
- <https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:>
- 엔드포인트 확인 후 드래그하여 복사
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/608201e3-128b-480c-9338-ae3346039188/_2020-10-21__10.08.33.png
- myselectshop 프로젝트를 IntelliJ에서 열기
- 우측 Database 탭을 클릭합니다.
- Data Source > MySQL 을 클릭합니다. (제일 상단이 아니라면 중간 즈음 있을 거에요!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc9d0fa-8114-40c7-8ef3-c92a52ab640b/_2020-10-20__9.43.43.png
- 다음과 같이 입력합니다.
- Name: springboot-database
- Host: 나의 엔드포인트
- User: 나의 Username
- Password: 나의 비밀번호
- Database: shop
- Test Connection 을 클릭하고, 아래와 같이 성공적으로 연결되면 OK 를 클릭합니다.
- (링크) 이동 후 springboot-database 클릭
- 스프링 부트를 MySQL과 연결하기
- 스프링 부트 설정의 대부분은 application.properties 에서 관리합니다.
- [코드스니펫] MySQL 연결하기
- spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop spring.datasource.username=나의USERNAME spring.datasource.password=나의패스워드 spring.jpa.hibernate.ddl-auto=update
- 연결 확인하기
- 프로젝트를 작동시키고, 관심 상품 등록 후, 서버를 내린 다음에 다시 작동시켰을 때 관심 상품 목록이 잘 나타남을 확인합니다.
- 쿼리 콘솔에서 아래 내용을 입력해서 product 테이블에 내용이 잘 들어가있음을 확인합니다.
- select * from product;
02. EC2 구매하기
-
- EC2 서버 구매하기
- AWS EC2 서버 사기 (준비 상식 편)
- 클릭 만으로 내가 원하는 서버(컴퓨터)의 설정을 정하고, 거기에 컴퓨터를 실행시키기 위한 운영체제(OS)를 설치할 거에요.
- 우리는 OS로 리눅스의 Ubuntu를 설치합니다. 윈도우와 같이, OS가 여러개 존재합니다. 리눅스도 그 중의 하나이며, 오픈소스로 발전되는 OS입니다.
- AWS EC2 서버 사기
- 구매 화면들 따라하기</aside>
- Name은 sparta_web으로 해주세요.(선택)
- Ubuntu로 20.04 or 22.04를 선택해주세요! (ubuntu 선택 중요!)
- t2.micro가 무료 서비스랍니다!(1년 기한)
- KEY 생성하기를 클릭 후, key를 발급 받아요(서버 접속 시, 매우 중요!!!)
- 나머지 체크리스트들을 체크 후, Launch instance를 클릭해주세요!
- <aside> 👉 Ubuntu Server 20.04 또는 22.04 버전을 구매합니다.
-
- EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cd9daaf-4901-4492-881f-aa3dc6560646/_2020-04-29__11.15.14.png
- </aside>
-
- EC2에 접속하기
- AWS EC2에 접속하기 (준비 상식 편)
- SSH(Secure Shell Protocol)
- 다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
- 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 확인해볼까요?
- SSH(Secure Shell Protocol)
- AWS EC2에 접속하기
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
- 터미널을 열기 (spotlight에 terminal 입력)
- 방금 받은 내 Keypair의 접근 권한을 바꿔주기
- sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Window: ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!예) 아래와 비슷한 생김새!
- ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
- ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
- Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!
- git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
- Mac OS: Mac은 ssh가 있어서, 명령어로 바로 접근 가능!
-
- 간단한 리눅스 명령어 연습하기
- 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다. (일종의 마우스 역할)
- 팁! 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나옵니다.
ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 지우기 sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
03. EC2 준비하고 배포하기
- 배포 파일 빌드하기
- 우측 탭 중에서 Gradle 을 선택합니다.
- Tasks > build > build 를 더블 클릭합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b7cc79-f698-4d86-871f-b13d0e85003c/_2020-10-20__9.37.57.png
- 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼을 거에요! 빌드에 성공하였습니다.
- (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기(반드시 17v)
- sudo apt-get update sudo apt-get install openjdk-17-jdk java -version
- Filezilla를 이용해서 배포 파일을 업로드하기
- 파일질라 실행, 다음과 같이 설정
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5564e4cb-ffc5-49ba-9dc4-56efce3a49ad/Untitled.png
- 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음 (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c91661f0-1274-4f35-b9c2-3a09879a0b09/Untitled.png
- 마우스로 드래그 해서 파일을 업로드/다운로드하면 됩니다!
- 왼쪽(본인 컴퓨터)에서 개발 완료된 myselectshop 프로젝트 폴더의 build > libs로 이동합니다.
- 오른쪽(EC2)으로 드래그합니다.
- !https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47a40685-1be7-421f-939f-0fdad19c7d81/Untitled.png
- 스프링 부트 작동시키기
- java -jar JAR파일명.jar
- AWS에서 80, 8080 포트를 열어주기
- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다.
- → 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.
- 해당 보안그룹을 클릭합니다.
- Edit inbound rules를 선택합니다.
- 두 가지 포트를 추가해봅니다. (8080포트는 범위가 2가지 입니다.)→ 80포트: HTTP 접속을 위한 기본포트
- → 8080포트: 스프링 부트 기본포트
- 접속해보기
- <http://내> public 아이피:8080
04. 포트포워딩 & nohup 적용하기
- 포트 번호 없애기 - 기본 개념
- 지금은 8080 포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :8080 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
- HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
- 포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
- 포트 번호 없애기 - 리눅스 자체 포트포워딩을 작동시키기
- 띄워둔 터미널에서 새롭게 설정을 적용하기 전에 돌아가고 있던 서비스는 일단 끄고! (터미널에서 ctrl + c)
- 포트포워딩 룰을 입력합니다.
- [코드스니펫] 포트포워딩
- sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
- 다시 서비스 시작
- java -jar JAR파일명.jar
- 포트 번호를 떼고 접속해봅니다.
- 웹 브라우저에서 접속하기
- <http://내AWS아이피/>
- SSH 접속을 끊어도 서버가 계속 돌게 하기
- 현재 상황
- Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다. 그러나 우리가 원격접속을 끊어도, 서버는 계속 동작해야겠죠?
- 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- 서버 종료하기 - 강제종료하는 방법
- # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep java # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
- 다시 켜기
- # 아래의 명령어로 실행하면 된다 nohup java -jar JAR파일명.jar &
- SSH 접속을 종료한 뒤, 접속해봅니다!
- 브라우저에서 접속하기
- <http://내AWS아이피/>
728x90
'Study > 개발일지' 카테고리의 다른 글
[백엔드온라인TIL] java 학습 28일차 (0) | 2023.07.03 |
---|---|
[백엔드온라인TIL] java 학습 27일차 (0) | 2023.06.30 |
[Spring프로젝트] 9조 뉴스피드 Starting Assignments (0) | 2023.06.30 |
[백엔드온라인TIL] java 학습 26일차 (0) | 2023.06.29 |
[백엔드온라인TIL] java 학습 25일차 (0) | 2023.06.28 |