(변동사항이 많아 글로 진행합니다)
코드를 다 짰으면 gradle 도움을 받아서 buildJar 명령을 수행하면
여러분들 코드가 .jar 파일로 압축되는데 그걸 터미널에서 실행하면 컴퓨터에서 서버를 띄울 수 있습니다.
자바 설치하고 환경변수 등록하고 터미널에서 java -jar 어쩌구.jar 입력하면 실행됩니다.
그럼 이제 브라우저 주소창에 http://컴퓨터IPv4주소:8080 치면 누구나 내 웹서버에 접속이 가능한데
하지만 컴퓨터 24시간 켜둘 것입니까
클라우드 서비스 업체에서 컴퓨터를 빌려서 서버를 띄워놓는게 안정적입니다.
사람들이 좋아하는 AWS를 이용해봅시다.
AWS Elastic Beanstalk 쓸건데
실은 AWS에는 EC2 상품이 가장 유명한데 그냥 컴퓨터 한대를 빌리는 상품입니다.
그 컴퓨터에 Java 설치하고 .jar파일 거기로 옮기고 그거 실행해서 서버띄워놓으면 끝이긴 한데
하지만 터미널을 안다뤄봤으면 그런 짓거리 하는게 오래걸리고
나중에 이상해졌을 때 해결도 어렵습니다.
그래서 보통 편하게 하려면 AWS Elastic Beanstalk 상품 사용하면 됩니다.
얘는 코드만 올리면 지가 알아서 자동으로 EC2 인스턴스 빌려서
서버띄워주고 무료 도메인도 하나 연결해주고
유저 많아지면 확장도 쉽게 가능하고 버전관리도 해주고
서버죽어도 서버 자동으로 여러번 재시작해주고
Nginx로 reverse proxy도 알아서 넣어주고
여러분은 그냥 코드 업로드밖에 신경쓸게 없습니다.
가격도 거의 차이없음
AWS 가입 후 카드 등록하면 1년간 무료로 저사양 컴퓨터 한대 빌려주니까
AWS Elastic Beanstalk에 올려보도록 합시다.
실은 다른 옵션도 많음
- 구글 클라우드에는 App Engine
- 마이크로소프트 Azure에는 App Services
이런게 있는데 대부분 비슷한 서비스를 제공해줍니다. 따라하기도 쉬움
여긴 docker로 만든 것들도 쉽게 올릴 수 있음
하지만 데이터베이스 호스팅받은 곳이랑 같은 곳에 올리는게 더 좋기 때문에
Azure에서 데이터베이스 호스팅받았으면
Azure App Service에 Spring boot 올리고 그런게 나을 수 있는데
지금은 연습용일 뿐이고 다들 AWS 좋아해서 AWS나 써보도록 합시다.
배포전 체크사항
1. AWS 컴퓨터도 DB에 접속을 해야 데이터를 꺼내든말든 할 것 아닙니까
데이터베이스 호스팅받은 곳의 설정 들어가서
접속가능 IP를 모든 IP에서 접속가능하게 바꿔줍시다.
지금은 테스트라 그럴 뿐이고 나중에 여러분들의 서버컴퓨터 IP만 접속할 수 있게 바꿔주는게 안전합니다.
더 안전하게 하고 싶으면 나중에 서버와 DB를 같은 곳에서 호스팅받아서 VPC 하나 안에 안전하게 DB와 서버 컴퓨터를 넣어두는게 좋습니다.
하지만 누구나 접속가능하게 만들면 위험하기 때문에
더 안전하게 하고 싶으면 나중에 DB와 서버 둘 다 같은 호스팅사이트에 올리고 VPC설정을 만져보도록 합시다.
2. AWS Elastic beanstalk 쓰다보면 8080포트가 아니라 이상하게 5000포트로 접속되게 만드는 경우가 있어서
안되면 application.properties 파일에 server.port=5000 항목을 추가해봅시다.
배포하려면 1. 빌드눌러서 .jar 파일 만들기
님들 소스코드를 .jar 파일로 압축하면 아무데서나 쉽게 실행할 수 있습니다.
▲ Intellij 에디터의 경우 우측에 Gradle 버튼이 있는데 그거 누르면 여러가지 명령어가 나옵니다.
거기서 bootJar 만들기 누르면 .jar 파일 생성이 가능합니다.
- 아니면 프로젝트 폴더에서 터미널 열어서 ./gradlew bootJar 라고 입력해도 .jar 파일 생성이 가능합니다.
- 터미널에서 java, gradlew이런 명령어가 안되면 다운받은 자바SDK를 Path 환경변수에 등록해봅시다.

▲ 그럼 이런 경로에 .jar 파일을 만들어줄텐데 님들 소스코드를 압축한 파일임
저게 들어있는 폴더에서 터미널 켜서 java -jar 어쩌구.jar 이렇게 입력해두면 웹서버가 알아서 실행됩니다.
근데 이걸 여러분 똥컴에서 하는게 아니라 서버컴퓨터에서 하면 되면 그게 배포 끝이긴 한데
우리는 Elastic Beanstalk 사용해볼거라 자동으로 알아서 해줍니다.
(참고) 0.0.1 같은 버전 숫자를 바꾸고 싶으면 build.gradle 파일 열어서 수정하면 됩니다.
배포하려면 2. AWS 가입
- AWS 아이디 없으면 aws.com 가서 가입하고 카드등록 합시다.
- 카드등록까지 해야 1년 간의 AWS 똥컴 무료이용권을 줍니다.
- 로그인하면 우측 상단에 지역선택을 할 수 있는데 사이트를 서울에서 운영할거면 '서울'로 들어옵시다.
배포하려면 3. IAM 역할만들기

▲ 좌측 메뉴의 역할 눌렀을 때
목록에 aws-elasticbeanstalk-ec2-role 역할 이름이 없으면 역할 만들기 누릅니다.
elastic beanstalk이 ec2 맘대로 사용할 수 있게 만드는 짓거리입니다.

(1단계) 신뢰할 수 있는 엔터티는 AWS 서비스, 사용사례는 EC2 선택
(2단계) 권한추가메뉴에선
AWSElasticBeanstalkWebTier
AWSElasticBeanstalkWorkerTier
AWSElasticBeanstalkMulticontainerDocker
3개 찾아서 체크마크

(3단계) 이름 지정부분은 aws-elasticbeanstalk-ec2-role 기입하고 끝냅시다.
이런거 예전엔 자동이었는데 지금은 쓸데없이 직접 설정해줘야 합니다.
배포하려면 4. Elastic beanstalk

AWS 상단 검색창에 Elastic beanstalk 검색해서 들어갑시다.
그럼 앱생성이나 환경생성 버튼이 어딘가에 있을텐데 그거 눌러서 진행합시다.
(1단계) 이거저거 적으라고 나올텐데
- 애플리케이션 이름 아무거나 작명하고
- 환경 이름 아무거나 작명하고 (아마 자동생성될듯)
- 플랫폼은 Java, 브랜치 버전은 님들이 쓰던 자바 버전 선택하면 됩니다. 까먹었으면 build.gradle 파일 열어보쇼
- 사전설정 선택하라고 나오면 우리는 거지니까 '단일 인스턴스' 고릅시다.

▲ 코드 업로드 눌러서 아까 만든 .jar 파일 올려줍시다.
버전레이블은 방금 업로드한 소스코드 버전 기록용입니다. 작명하고 싶으면 합시다.
다음으로 넘어갑시다.

(2단계) ▲ 여기서는 위처럼 잘 되어있나 체크하고 넘어갑시다.
안되어있으면 위에서 IAM 설정이 안된 것임
(3단계) 건드릴 필요없음

(4단계) ▲ 루트볼륨 유형을 gp3 또는 범용3로 선택해줍시다.
아마 IOPS 3000까지, 처리량은 125까지 무료입니다.

(4단계) ▲ t3.micro가 프리티어에서 쓸 수 있는 기기라서 이거 설정해줍시다.
돈내고 빠른걸 원하면 마음대로 하십시오
간혹 배포이상하게 안되면 램 부족 이슈인 경우가 많아서 t3.small 이상으로 써보면 됩니다.
(5단계) 모니터링을 기본 vs 강화됨 선택하라고 하면 기본으로 합시다.
나머지는 만질 필요 없고 다음 다음 누르면 배포 끝입니다.
몇분 기다리면 어쩌구.com 주소 뜨는데 거기 들어가면 님들 사이트로 개나소나 접속이 가능합니다.
- 까먹고 1년 냅두다가 요금청구되기 싫으면 안쓰면 애플리케이션 & 환경을 각각 삭제합시다.
- AWS 검색창에 S3 입력해서 거기 있는 데이터 백업본도 삭제해야 요금으로부터 안전할 수 있습니다.
Q. 저는 사이트 업데이트하고 싶은데요
- jar 파일 또 만들어서 다시 업로드하면 됩니다. 관리자 페이지에 업로드 및 배포 버튼 같은게 있음
근데 배포 자주하면 1년 무료계정도 elastic compute cloud 요금 청구됩니다.
Q. 저는 배포시 이상한 AWS elastic beanstalk 100.0 % of the requests are erroring with HTTP 4xx 에러가 나오는데요
- 메인페이지 접속이 불가능하면 보통 그렇습니다.
보통 DB접속 셋팅안해놔서 그런 경우가 많아서 DB 호스팅받은곳 들어가서 접속가능한 IP 셋팅 제대로 했나 확인합시다.
Q. The instance profile aws-elasticbeanstalk-ec2-role 어쩌구가 없다는 에러 나오는데요
- 위에서 IAM 역할 만든거 지우고 다시만들어봅시다.
- 배포할 때 2단계에서 새 서비스 역할 생성 눌려있나 체크해봅시다.

- 구성 메뉴에선 님들 환경 설정이 가능합니다.
- 로그 메뉴에선 터미널 로그출력이 가능합니다. 이상한 에러나면 에러메세지 확인가능
- 상태 메뉴에선 인스턴스 안쓰는게 있으면 끄고 재부팅하고 그럴 수 있습니다.
인스턴스는 가상 컴퓨터 한대임
- 모니터링을 자동으로 해줍니다.
400, 500 에러같은게 너무 잦거나 접속이 안되는 페이지가 있으면 알려줌
참고로 환경마다 하나의 application을 실행해둘 수 있는데
application은 프로젝트 버전1개라고 생각하면 됩니다.

-
Add a note