記錄

실습_AWS) Spring AWS 배포 (A to Z) -1 본문

Web/AWS

실습_AWS) Spring AWS 배포 (A to Z) -1

surhommejk 2018. 8. 24. 16:08

이번 포스팅은 실제로 사이트를 구축한 뒤 AWS를 통해 어떻게 배포하는지 정리를 할 목적으로 작성한다. 기본적인 것들은 건너 뛸 것이지만 주의해야 할 것이라고 판단되는 부분은 세세하게 짚어가며 정리할 생각이다. 먼저 이 포스팅은 localhost 환경에서 원하는 웹 애플리케이션이 완성되었다는 전제 하에 이 웹 애플리케이션을 배포하려는 시점이라고 가정한다. 학습을 위한 실습이므로 모두 프리티어 기준으로 만들었다.

절차는 다음과 같다.


1) EC2에서 인스턴스 생성

인스턴스를 생성하는데 주의 할 점은 '보안 그룹 구성'이다. '보안 그룹 구성'에서는 해당 인스턴스에 대한 트래픽의 접근을 제어하는 규칙을 정하는 곳이다. 즉, 특정한 방식으로 접근하는 트래픽에 대해 어떤 규칙을 부여 할 지(=접근하게 할 지, 막을지)를 결정한다고 보면 된다. 보통의 웹 애플리케이션의 경우 사용자들이 브라우저로 접근하고 http, https 방식을 이용하기 때문에 해당 두 방식은 접근 IP를 무엇이든 상관 없도록 설정하는 것이 맞다. ssh의 경우 xShell이나 Putty와 같은 프로그램을 통해 접근하는 것을 의미하는데 이 때에는 나쁜 목적을 막기 위해 '내 IP'로 설정하는 것이 좋다고 한다.

Tomcat의 경우 나중에 해당 포트로 접근하기 위해서 뚫어준다.

(참고: 나는 실습용 사이트를 만드는 것이고 도서관이나 카페 등 막 옮겨 다니기 때문에 편의성을 위해 '위치 무관'으로 설정하였다)


2) 인스턴스 제어(연결)

인스턴스를 생성했으면 지금 인스턴스는 텅텅 빈 상태라고 보면 된다. 따라서 우리가 서버 컴퓨터로 인스턴스를 활용하기 위해서는 여러가지 프로그램을 설치하야여 하는데 이를 원격 제어하기 위해서는 우리가 해당 인스턴스를 연결해야 한다. ssh방식으로 제어를 하기 위해 연결을 도와주는 프로그램은 대표적으로 putty와 xShell이 있는데 나는 처음에 xShell로 했기도 했고 putty의 인터페이스가 개인적으로 마음에 안들어서 xShell을 이용하여 포스팅 한다.

xShell을 이용해서 인스턴스를 제어할 준비를 해야한다. xShell을 이미 깔았고 인스턴스를 생성 해 둔 상태라는 가정하에 포스팅한다. 과정은 굉장히 간단하다. 하지만 넣어야 할 부분을 빼먹으면 인스턴스로 제어 연결이 안되니까 유의한다(나는 사용자 이름을 빼먹은 것을 깜빡해서 30분 정도 낭비했다)

이름에는 원하는 연결 이름을 넣고 호스트에는 연결하고자 하는 인스턴스의 IP를 넣는다. 여기서 꼭 인스턴스의 IP를 넣을 필요는 없고 해당 IP의 DNS 주소를 넣어도 된다. 뭐, 결국엔 같은 말이긴 하다. 두번째 그림에서는 나는 인스턴스의 OS를 리눅스로 했기 때문에 초기 설정에 따라 사용자 이름을 'ubuntu'로 설정했다. 이게 아니면 연결 자체가 안된다. 그래서 난 30분을 버렸다. 아무튼 운영 체제에 맞는 초기 사용자 이름을 반드시 제대로 입력하여야 한다. 사용자 키의 경우에는 .pem 파일로 받은 키페어 파일을 등록해주어야 하고 나머지는 빈칸으로 둬도 무방하다.

위 과정을 충실히 했으면 xShell을 통해 인스턴스의 제어를 할 수 있게 된다.


3) EC2 - RDS 연결

EC2에서 RDS에서 만든 데이터베이스로 접속이 되는지 확인해보는 절차다. 단순히 '확인'해보는 것이 의미가 없어 보일지 몰라도 접속이 되어야 EC2에서 해당 RDS를 활용할 것이 아닌가? 접속이 된다는 것은 곧 테이블을 만들거나 수정하는 등 일반적인 관계형 DB를 사용할 수 있다는 의미이므로 이번 절차에서는 RDS를 만들고 EC2에서 RDS에 접속이 되기만 해도 성공이다.

꽤 할 것이 많지만 어려운 것은 하나도 없다. 절차는 다음과 같다. 참고로 나는 MySQL로 연습하였다.


[1] EC2에서 인스턴스에 접속하여 리눅스 명령이 'sudo apt-get upgrade'를 입력하여 설치된 패키지를

    모두 최신 버전으로 업데이트


[2] 리눅스 명령어 'sudo apt-get install mysql-server'를 입력하여 mysql-server를 설치


[3] EC2 인스턴스의 보안그룹 수정에 들어가서 인바운드 규칙 변경으로 3306포트를 추가

MySQL을 연결할 예정이기에 포트는 3306이 된다

[4] RDS 인스턴스 보안규칙을 [3]에서 설정한 보안규칙으로 변경하고 DB인스턴스의 엔드포인트를 확보


[5] RDS 파라미터 그룹 생성 후 utf8 변경

이거 세세하게 왜 이 항목들을 콕 짚어 바꾸는지 아직 이해하지 못해서 세세하게 설명하지는 못하겠다. 일단 나중에 한글 안깨지도록 하는 목적인 것은 분명하다. 참고로 character_set으로 나오는 항목은 위 6개가 전부다.


[6] RDS 인스턴스 수정 하여 만든 파라미터 그룹으로 변경


[7] RDS 인스턴스 재부팅(이것도 굳이 왜 하는지는 모르겠지만 동기화를 위해서 하는게 좋겠지 아무래도)


[8] xShell에서 EC2 인스턴스 연결된 상태에서 'mysql -u DB유저아이디 -p -h DB의 엔드포인트' 입력

예시 : mysql -u surhommekim -p -h surhommekim-mysql.c0zqvz2f87mw.ap-northeast-2.rds.amazonaws.com


그러면 Enter password가 뜨는데 DB인스턴스 생성시 설정한 비밀번호를 입력한다. 아, 마찬가지로 위 명령어에서 유저아이디란 DB인스턴스 생성시 만든 유저아이디를 입력하면 된다.

제대로 입력하였다면 mysql>  로 커맨드가 바뀔 것이고 'show databeses;' 명령어를 입력하여 DB를 확인해본다. 입력을 하고 그냥 엔터를 치지 말고 컨트롤 + 엔터를 같이 치면 제대로 입력이 된다.


[9] DB가 생성되어 있는 것을 확인한다

DB 인스턴스 생성시 초기 DB이름으로 설정한 DB가 생성되어 있어야 한다


잘 만들어 진 것을 확인할 수 있다


'Web > AWS' 카테고리의 다른 글

실습_AWS) Spring AWS 배포 (A to Z) -3  (0) 2018.08.25
실습_AWS) Spring AWS 배포 (A to Z) -2  (0) 2018.08.25
생활코딩_AWS) RDS  (0) 2018.08.24
생활코딩_AWS) Simple Storage Service(S3)  (0) 2018.08.23
생활코딩_AWS) Auto Scaling  (0) 2018.08.23
Comments