방학동안 프로젝트를 하면서 서버를 배포하게 되었다. 안드로이드가 통신용 서버랄까. ec2위에다가 자바, nginx, mysql... 뭐 이러한 것들을 설정 하고 rds 연결하는 방법도 있지만, 서버 배포 뿐만 아니라 꾸준히 유지 관리를 하기 위해서는 뭔가 편리한 방법이 필요했다. 흐름은 이렇다. jar 파일 올릴 곳. db 연결하기. route 53으로 domain 이름 설정 하기. 이 domain 이름으로 https 적용하기. 이 순서대로 시작하겠다.
1. Elastic Beanstalk
줄여서 EB아니면 EBS라고 한다. EBS의 모토는 개발자는 코드 작성만 하면 되고 배포, 확장, 관리를 모두 알아서 해주는 완전 관리형 시스템이다. 생성시 여러 설정으로 인스턴스 생성, 오토 스케일링, 로드 밸런싱 뿐만 아니라 db 연결, https 적용도 매우 쉽게 도와준다. 설정도 그다지 어렵지 않다. 천천히 알아보자.
아 놓칠 뻔한 정보가 있는데, EBS를 이용함으로써 추가적인 과금은 없다. ebs는 하나의 공짜 layer 느낌으로 보면 될 것 같다.
자세한 설정들은 참고 reference 들을 걸어 놓기로 하고 굵직굵직한 줄기만 보자. 위와 같이 다양한 플랫폼을 고를 수 있다. 스프링이면 java, 노드면 node.js, 예전의 유산물인 php 뿐만 아니라 python 심지어는 Docker를 고를 수도 있다. 플랫 폼을 고르면 세부 버전까지 고를 수 있어 정말 친절하달까.
추가 옵션 구성에서 프리티어 제한 옵션을 고를 수도 있고, 로드 밸런서, 데이터 베이스 다양한 정보들을 설정 할 수 있다. 후에 https 를 적용하고자 하면 로드 밸런싱이 필수 이기에 프리티어로(단일 인스턴스)는 불가하다. https 는 따로 ec2에서 직접 설치하던가 해야한다. 놀라운 점은 nginx는 기본으로 설정 되어 있다는 사실~
수분이 지나고 아무튼 이런 과정을 통해 나만의 ebs 를 만들면 ec2에 내 인스턴스가 자동으로 생기고 실행 된다. 이후에는 아래와 같은 화면이 나온다.
상단 부에 url이 있는데 저게 이제 내 서버 url 이다. 신기하지? 물론 탄력적 ip 까지 자동으로 ec2에 할당되어 있어 해당 ip 주소를 사용해도 된다!@!
가운데에 보이는 업로드 및 배포를 눌러보면 아래와 같다.
버튼 중에 파일 선택이 보이는데 난 스프링이니 저기에 jar 파일 압축해서 올리면 된다. 단, 이때 ebs가 배포시 사용할 포트 번호는 5000번이기에 스프링 에서 5000번 포트를 지정해 주면된다.
뿐만 아니라 "이전 버전을 배포하려면," 이라는 문구가 보이는데 이것이 정말 ebs의 엄청난 장점이다. 이전 버전을 쉽게 복구 할 수 있다. 이말이 무엇이냐면, 우리의 어플리케이션을 업데이트 해서 2.3.3 버전을 만들었는데, 이 웬걸 2.3.3에 오류가 있다는 사용자 요청이 무수히 쏟아지기 시작했다. 제빨리 이전 버전인 2.3.2 버전을 올려야하는데, local에서 압축했던 파일 찾아서 ec2에 기존것 내리고 이번 걸 올리는 식으로 서버에 공백이 생길 텐데 ebs는 그렇지 않다. 아래 화면 처럼 이전 버전으로 되돌려 버리고 그 사이에 무중단 배포가 가능하다.
지금 what 버전을 여러번 올렸는데 그냥 박스 선택 해서 작업 목록 중 배포를 누르면 이전 버전으로 배포 된다. 이게 정말 큰 장점 중에 하나라고 생각한다.
뿐만 아니라 모니터링, 경보 설정 등등이 가능하다. 정말 편리하지? 아래 설치 과정에 참고했던 url을 걸어 두겠다.
https://www.youtube.com/watch?v=cOUhREAWJNw
2. RDS
db 연결은 한가지 문제가 있다. rds를 연결하려고 하면 아래와 같은 화면이 나온다.
이 문제가 무엇이냐면 mysql버전을 지내가 기본 값으로 5.6으로 설정해 놨으면서 이거를 지원 안하겠다는 처리를 해서 저렇다. (뭔 이런 쉣) 하지만 아래 블로그를 따라해 보면 된당. 헤헤
https://devcamus.tistory.com/?page=1
까뮈의 개발 기록
개발에 관한 나의 모든 기록들.
devcamus.tistory.com
위 블로그 따라하다 보면 중간에 지역 설정 root nickname 설정에서 갑자기 막히는데 거기까지만 해도 된다. ㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋ꽤 많이 돌아다녔는데 요게 가장 나았다. 아마 설정 중간에 virtualenv command not found 문제가 생길텐데 아래 명령어로 실행하면 된다.
sudo /usr/bin/easy_install virtualenv
마지막에 eb 명령어를 수행해야 하는데 안될 경우
Note: To complete installation, ensure eb is in PATH. You can ensure this by executing:
1. Bash:
echo 'export PATH="/root/.ebcli-virtual-env/executables:$PATH"' >> ~/.bash_profile && source ~/.bash_profile
Success 문구 뜨고 위 명령어 복붙 하면 됨!
이렇게 하면 rds 설치 문제는 해결 된다.
이후에 나는 rds에다가 ec2 보안 그룹 인바운드 설정(정말 많은 자료에서 이야기 하듯이)을 통해 db 연결도 성황리에 마쳤다. 만약 불편하다면 그냥 rds 직접 만들고 ebs가 관리하는 ec2를 연결하면 된다. 이럴 땐 밑에 블로그를 따라하세요.
https://bcp0109.tistory.com/357
AWS 2편: RDS 생성 후 EC2 와 연동
Overview 지난 포스팅에서는 AWS 에서 EC2 인스턴스를 생성하고 Spring Boot 서버를 띄워 외부에서 요청하는 것까지 해봤습니다. 이번에는 데이터베이스 연동을 위해 RDS 인스턴스를 생성하고 이전에 만
bcp0109.tistory.com
3. Route53
aws의 DNS이다. 검색 창에 route53을 검색하면 아래와 같은 화면이 나온다.
보이듯이 등록을 통해 직접 domain을 구매해도 되지만 이전에 "가비아"를 통해 구매해 놓은 도메인이 있어서 DNS관리에 추가만 했다. 도메인 생성과 동시에는 아래 사진 중에서 두번째, 세번째 항만 존재한다.
ns 유형을 가비아의 설정 페이지에 등록해주어야 한다. 이후 레코드 생성 버튼을 눌러 ec2에 지정된 탄력적 ip를 A유형으로 생성해 주면 된다. 자세한 설정은 아래 블로그를 참고하면 될거 같다.
https://hannut91.github.io/blogs/route53/gabia
가비아에서 구매한 도메인을 AWS Route53에서 호스팅하기 – Yunseok's Dev Blog
가비아에서 구매한 도메인을 AWS Route53에서 호스팅하기
hannut91.github.io
4. ACM
acm의 장점은 인증서 갱신을 주기적으로 하지 않아도 되고 certbot같은 것 설치 없이 알아서 aws에서 관리해 준다는 것이 편하다. 게다가 과금도 없다. domain이름만 등록 하면 되는데 사실 등록 자체가 과금이다. 0.5딸라..ㅎㅎ 거기다가 domain 검색 량이 늘면 과금이 더 들어간다. 근데 이 과금도 0.5 달러 선에서 처리 되어서 다음 달부터는 0.5달러면 된다. 크크
acm를 이용하여 두 가지 방식으로 https를 적용 할 수있다. 이 방식에 대한 자세한 설명은 아래에 해두겠고 배포가 먼저 급한 이들을 위해 간략하게 나마 정리하자면 검색창에 acm 입력해서 나오는 화면에서 요청 버튼을 누른다.
요청 후에 domain이름 (route53에 등록되어 있어야만 한다) 설정하고 DNS인증을 해야 한다. 이 DNS인증이라는 것을 하게 되면 자연그레 "레코드 생성"이라는 것을 하게 될텐데 생성 이후에는 CNAME이라는 유형과 함께 Route53에 등록해 놓은 해당 domain에 새로운 레코드가 만들어 진다. 아래 사진과 같이
여기서 부터는 블로그 같은 곳에 잘 정리되어 있지 않았는데, CNAME이라는 것을 가비아 같은 우리가 등록한 곳에 레코드 이름과 값을 등록해야한다. 이 과정을 하지 않으면 acm은 평생동안 검증 대기 상태이다. 사실상 이 과정이 DNS 인증인데 이상하게도 자료 검색해봐도 잘 안나왔고 내 직감상 등록해 봤더니 되어서 정말 기뻤었다. 정말 무언의 속삭임이 내게 다가왔달까.
위와 같이 레코드를 추가하면 된다. 난 정말 대단해. 이걸 어떻게 직감으로 알았을까?
이후 ebs에 로드 밸런싱 설정을 통해 https를 적용 시켜주면 완료 된다. 아래 블로그를 보면 route53부터 쭈루룩 잘 나와있으니 참고해영.
https://amanokaze.github.io/blog/Using-HTTPS-in-Elastic-Beanstalk/
AWS Elastic Beanstalk에서 HTTPS 사용하기
Various IT-based research space, django, cloud, machine learning, and so on.
amanokaze.github.io
그렇다면 이제 acm이 https 를 맥여주는 과정을 정리해보겠다.
내가 적용한 방식은 사실상 두 번째 방법이고 첫번째 방법은 Cloud Front를 이용하는 방식이다.
client는 route53에 등록되어있는 domain을 통해 https로 통신을 요청하고 CloudFront가 acm에 등록된 인증을 통해 우리의 서버와 http 통신을 진행하게 된다. 게다가 이 서비스는 캐싱도 지원하니 꽤나 유용해 보인다. 사실 CloudFront는 주 목적이 이 기능은 아니지만 써먹을 수 있기에 위 같은 방식으로 한다.
두번째 방식은 cloudFront가 아닌 Application load Balencer를 이용한다. 위에서 말했듯이 ebs 로드 밸런싱 설정을 한다고 했는데 고녀석이 요녀석이다. 과정은 첫번째와 비슷하다.
아무쪼록 이러한 방식을 통해 origin(인스턴스)에 직접 https를 적용하는 것이 아닌 인프라 서비스를 통해 할 수 있기에 귀찮은 과정들을 생략 할 수있는 고마운 친구들이다.
두 설정 방법에 대해서는 아래 유튜브 영상에 자세히 나와있으니 실습을 해보길 바람~~~
https://www.youtube.com/watch?v=WS2n8mkrFaYa
5. 마무리
아무쪼록 어쩌다 보니 배포 정보 모음집이 되었는데 이런 모음서 있으면 꽤나 편하지 않니? 나름의 정보도 있고 말야. 아무쪼록 성공적인 배포를 응원합니다.
추가적으로 이렇게 aws의 신식 기술을 따라하다 보니 꽤나 재밌는 거 같다. 다음에는 aws lamda에 대해서 설명해보고 거기에 배포까지 해보자!!
'기타' 카테고리의 다른 글
함께 자라기 [에자일로 가는 길] 리뷰 (2) | 2022.07.19 |
---|---|
2022년 [삼성전자 DX] 동계 SW역량강화 후기 (2) | 2022.03.25 |
인텔리제이 룸복 등록 (0) | 2022.01.22 |
깃허브 등록 (0) | 2022.01.03 |
En début (0) | 2022.01.02 |