[aws] aws elastic beanstalk 이용해서 SpringBoot 서버를 띄워보자

Date:     Last Updated:

열심히 만든 서버를 어디서든 사용해보고 싶었다.

  • 열심히 따라쳐서 만든, 작은 나만의 서버를 만들어도 내 방, 혹은 내 컴퓨터에서만 쓸수 있는 게 안타까웠다.
  • “서버”라는 것은 인터넷에 접속이 되어있다면 어디서나 접속이 가능해야 “서버” 라고 할 수 있다고 생각했다.
  • 지금까지는 서버라고 불렀지만 실상은 결국 클라이언트와 클라이언트의 통신이라고 봐도 무방했다.
  • 그래서 이 분야의 갑 aws를 사용해보기로 했다.

말로만 듣던 aws에 내가 만든 서버를 올려보자.

  • 현재는 https, 도메인 적용, 클라이언트와의 통신까지 시도해서 성공해봤지만, 정말 딱 이 3가지를 하는데도 너무 어려웠다.
  • 처음에는 당연히 아무것도 몰라서 100% 구글링에 의존해서 버튼하나하나 눌러가면서 했고, 살짝 알것 같아질때는
  • 하나가 되면 하나가 안되고.. 고질적인 프로그래머 문제가 발생했다.
  • 그래서 나중에 다시 동일한 작업은 쉽게 하려고 나만의 포스팅을 남겨놓으려고 한다.
  • 이 포스팅 후에 rds까지 붙여보자. rds까지만 붙이면 아마 나의 레벨에서는 크게 문제가 되는 일이 없을 것 같다.

Route 53, ACM, EC2 로드밸런서, EB 배포와 환경설정

  • 위에 적은 4가지만 제대로 하면 어디서든 볼 수 있는 나만의 hello world를 출력할 수 있었다.
  • 물론 4가지 사이사이에 다른 것들이 조금 많지만 그대로 내 생각에는 큰 줄기로는 4개 같아서 4개로 나눴다.
  • 포스팅을 하려고 순서를 정하는데, 하나를 끝내려면 다른 부분이 물리고 물려서 시간이 약간 걸렸다.
  • 이게 바로 의존성 문제인가… DI가 아직도 잘 모르지만 DI가 필요할 것 같다.!!!

1. 도메인을 만들자.

  • https를 적용시키기 위해서는 도메인이 필요했다. 처음에는 도메인 사는 것도 번거롭고 가격도 비쌀거라 생각해서 무료 도메인을 찾아봤는데
  • aws에서 직접 사는 것도 인기 없는 도메인은 1년에 1만원도 안한다는 걸 알고는 구매부터 하기로 했다.(사실 이걸 먼저 해야 나머지가 수월하다.)
  • 구글 검색해서 나온 godaddy라는 업체에서 도메인 하나를 1년에 1500원에 구매했다.
  • 구매하고 DNS 관리에 오면 이렇게 되어있다. 일단 여기까지하고 AWS로 가서 로그인하고 ACM검색하자. godaddy 1

2. https를 위해서 인증서를 요청하자.

  • ACM으로 들어가면 바로 인증서 요청이 보인다. 그리고 퍼블릭 인증서 요청 누르고 다음. 도메인 이름에 내 도메인 loomdis.site 을 적는다.
  • 아래 추가해서 www.loomdis.site도 해준다. 사실 이건 안해줘도 된다. 기본설정인 DNS 검증을 확인하고 요청 누르자. ACM1

  • 그럼 페이지가 넘어가고 상단에 파란색이 보인다. 인증서보기를 눌러서 들어가준다.
  • 중앙에 CNAME이라고 보인다. 처음에는 아무 값도 없지만 새로고침 몇번하면 값이 보인다.
  • 난 기본 도메인과 www.를 붙인 도메인 두개라서 CNAME이 이름과 값 2개씩 총 4개가 보인다.
  • 이제 이것들을 가지고 다시 godaddy DNS관리로 간다. 아래 사진과 같이 복사 붙여넣기 해준다. godaddy 2
  • 이렇게 해두고 조금 지나면(아마 30분 안으로?) 검증 대기 중이 성공이라고 뜬다. 그러면 https를 위한 인증서 발급은 끝이다.

3-1. Elastic Beanstalk 에 내가 만든 서버를 올려보자.

  • 나는 아직 java servlet과 springboot로만 서버를 만들어봐서 jar파일과 war 파일 두개만으로 서버를 올려봤다.
  • jar은 플랫폼 선택에서 java를 war은 tomcat을 선택하면 된다.
  • 더 자세한 설정이나 다른 방법은 구글링 검색하면 한글 문서도 많이 나오니 참고하면 된다.
  • https://tech.cloud.nongshim.co.kr/2021/11/01/%EC%86%8C%EA%B0%9C-aws-elastic-beanstalk%EB%9E%80/
  • 농심에서 작성한 방법인데 꽤 자세하게 나와있고 거의 이대로 따라하면 된다. 나머지는 글 대로 다 하면 되고
  • https를 적용하기 위해서 반드시! 로드밸런서를 필요하므로 고가용성 혹은 사용자 설정으로 선택 해야한다.(db도 붙이겠다면 그것까지도 가능한 것을 선택)
  • 환경생성하고 잠시 기다리면 내가 만든 서버가 드디어 실제로 서버의 기능을 수행할 수가 있게 된다!

3-2. Elastic Beanstalk 환경설정->구성에서 로드밸런서로 https 설정을 해주자.

  • 완료가 되고 초록색 체크 표시가 떴다면 제대로 실행이 되고 있는지 현재 주소를 눌러서 실행해보자.
  • 만들어둔 index.html이나 메인 화면이 떴다면 성공이다.
  • 이제 https를 등록을 위해서 리스너를 등록해주어야한다. 내가 올린 서버에서 구성을 눌러서 들어가면 중앙에 “로드 밸런서” -> 편집 클릭
  • 다른 것은 추가할 것은 없고 맨 위로 스크롤해서 리스너 추가를 눌러준다.
  • 포트는 443 프로토콜은 https을 누르면 SSL인증서 선택이 나올텐데 내가 등록한 도메인의 인증서를 눌러준다.
  • 그리고 SSL 정책이 있는데 이건 별 의미가 없는 것 같다. 그래서 그냥 맨 위에 2015-05 선택했다. 그리고 적용 버튼 클릭
  • 제대로 적용이 됐다면 다시 구성 -> 로드 밸런서에 들어가보면 내가 추가한 리스너가 보일 것이다.

4. 도메인을 등록하자.

  • route 53을 검색해서 들어가자. 호스팅 영역을 클릭. 호스팅 생성 클릭. 도메인 이름에 내 도메인을 적어주자.
  • 현재는 딱히 건드릴게 없다. 퍼블릭 호스팅 영역인 것만 확인하고 생성하자.
  • 생성하면 사진처럼 유형에 NS 값 4개와 SOA이렇게 보일텐데 NS값 4개를 godaddy에 입력해주면된다. route 53 2

  • godaddy의 DNS관리로 오면 중간에 네임서버라고 있다. 변경을 누른다. 내 자신의 네임서버 입력(고급) 을 누른다.
  • 네임서버를 2개 추가해서 총 4개를 만들어주고 AWS에서 본 4개를 모두 복붙해주고 마지막에 .은 삭제해준다(안 지우면 저장이 안된다.)
  • 제대로 다 해주고 저장을 하면 위험요소 경고를 해주는데 가볍게 무시해주고 계속하고 완료가 되면 내가 입력한 4개의 ns가 화면에 보인다.
  • 이게 안보이면 제대로 안된것이고 제대로 4개가 보일 때까지 2~3번 입력해서 저장해준다. 제대로 저장이 됐다면 다시 ROUTE 53으로 돌아온다.
  • NS는 제대로 작성했으니 이제 A레코드 2개만 생성해주면 된다. ROUTE 53 -> 호스팅 영역 -> 내 도메인 클릭으로 들어왔따면 레코드 생성 버튼이 보인다. 클릭
  • 크게 중요한 건 아닌데 빠른 레코드 생성으로 화면이 되어 있다면 오른쪽의 “마법사로 전환” 을 눌러서 변경하고 단순라우팅 선택 후 다음을 눌러준다.
  • 그리고 단순 레코드 정의 클릭 ROUTE 53 4
  • 이렇게 화면이 나오는데 우리는 기본 도메인 (loomdis.site)과 (www.loomdis.site) 두개 모두 만들 것이기 때문에 처음은 아무것도 입력하지 않는다.
  • 레코드 유형은 A, 값/트래픽 라우팅 대상은 “Application/Classic Load Balancer에 대한 별칭” 으로 꼭 선택해야 https를 로드밸런서로 적용이 가능하다.
  • 리전 선택은 서울 선택(이건 본인이 서버를 올릴때 서울로 안해놨으면 다를 수도 있는데 eb로 가서 주소를 확인해보면 된다. 서울은 현재 ap-northeast-2 이걸로 되어있다.)
  • 마지막 로드 밸런서 선택은, 이 작업이 처음이라면 로드밸런서도 1개라서 다른 거 선택할 것도 없는데 만약 2~3번 했다면 ec2로 가서 로드밸런서를 들어가서
  • 직접 내가 방금 올린 서버의 로드밸런서가 어딘지 확인을 해주고 선택해야 한다. 선택이 끝났으면 단순 레코드 정의 버튼을 눌러서 나오고, 다시 단순 레코드 정의를 눌러서 동일한 작업을 반복한다. 단! 이때는 레코드 입력에 www를 입력해주고 저장해준다. 아래처럼 나오면 레코드 생성. route 53 5

5. http접속을 https로 리다이렉트 시키자

  • 여기까지 했다면 https://loomdis.site 이렇게 들어가면 https적용이 됐고 도메인까지도 적용이 잘 됐을 거다.
  • 다만 http://loomdis.site 이렇게 접속하면 계속해서 주의 요함이 뜬다. 이건 http접속시 https로 리다이렉트 시켜주면 된다.
  • EC2를 검색해서 들어가서 왼쪽 네비게이션 하단이나 화면 가운데 로드 밸런서 클릭. 위에서도 말했지만 처음 이 작업이면 로드밸런서도 1개지만 여러번 했다면
  • 여러개 있을 수도 있다. 확인 후 해당 로드밸런서를 체크하고 하단 탭에 리스너를 클릭하면 아래 HTTP:80과 HTTPS:443이 보일 것이다.
  • HTTP:80을 클릭하고 편집을 누른다. 아래 처럼 창이 나올텐데 기본작업을 제거하고 작업 추가를 누르면 리디렉션이 보인다. 눌러서 추가
  • 프로토콜은 https 포트는 443을 입력하고 변경내용 저장! 하면 끝이다. 로드밸런서

  • 제대로 됐다면 아래 사진처럼 나온다. 그리고 http://loomdis.site 로 접속하면 자동으로 https로 리다이렉트 되는 것을 확인 할 수 있다. 로드밸런서 2

6. 끝!!!!!

  • 정말 별거 아니지만 이 정도라도 설명할 수 있게 될 때까지 정말 이것저것 시간낭비를 많이 했다. 그래도 eb를 이용해서 아주아주 간단한 서버를 띄우는 것은
  • 할 수 있게 되어서 되게 기뻤다. 정말 아무것도 안나오는 페이지지만 어디서든 볼 수 있다는 것에 현재는 만족한다.
  • 이제는 실제 프로젝트를 올려보는 시도를 해봐야겠다. 아마 db를 사용하기 위해서 aws rds를 붙여야 할 것 같은데 역시 이 작업도 만만치 않을 것 같다.

마무리

  • 서버를 올려야겠다고 생각한 가장 큰 계기는 wordle게임을 만들어서 매일매일 단어를 서버에서 받아오게 하자! 였었다.
  • wordle게임의 실제 실행은 github page로 하고 server는 aws로 하기로 했다. 그래도 나름 유튜브를 열심히 봐서 sop와 cors에는 당황하지 않았다.
  • 근데 생각지도 못한 mix content?? 라는 오류가 나타났다. 이유는 바로 http와 https간의 통신을 막는 크롬의 기능이었다.
  • 내가 내 집에서 내 컴퓨터만 가지고 접속한다면 그냥 해당 기능을 꺼버리면 됐는데 맨 처음 말했듯 어디서든 접속이 가능하게 하고 싶었고 그게 서버니까!
  • 그래서 거의 1주일 동안 틈나는대로 어떻게 해야 서버를 올리고, https를 적용하고 하는 것을 찾아서 겨우겨우 해냈다.
  • 어려웠지만 그래도 뿌듯하다. 재밌고! 그리고 처음 제대로 https로 띄웠을 때는 완전 새벽이었는데 행복했다ㅎㅎㅎ

Leave a comment