AWS를 이용한 어플리케이션 서버 만들기
어플리케이션을 제작할 때 중요한 요소는 서버이다. 이 글에선 서버를 만드는 방법 중 하나인 아마존 인스턴스를 다룰 것이다. 지금 다루는 내용을 알면 내 다른 글에서 말하는 서버 준비 단계에 기본 부분이라 할 수 있다. 서버와 인스턴스를 혼용해서 적었다.
아마존은 수 년 간 가장 폭넓게 사용되는 클라우드 서비스이다. 마이크로소프트나 구글도 비슷한 클라우드 서비스를 가지고 있지만, 클라우드 시장에선 아마존이 가장 뛰어나다. 많은 사용자로 인해 문제가 발생해도 답을 찾기에 가장 유리하다. 아마존이 제공하는 한글판 가이드는 편리하다. 모든 서비스를 이용해보진 않았지만 적어도 사용해본 서비스는 군더더기 없이 깔끔했고, 문제가 발생하는 부분도 없었다.
아래의 내용은 인스턴스 생성의 많은 부분을 생략하고 바로 만드는 방법이다. 자세한 설명은 생활코딩 AWS 강의를 유튜브에서 보는 걸 추천한다.
대시보드 창은 심플하다. 서버를 만들 때 EC2를 사용하면 된다. 아마존은 1년간 무료로 사용할 수 있는 프리티어 인스턴스를 제공하고, 한달에 750시간까지 이용가능하다. Launch Instance를 눌러보자.
서버 지역을 설정해야 한다. 오른쪽 상단을 보면 현재 어떤 리전(Region)에 인스턴스를 생성하는지 확인할 수 있는데, 가장 빠른 서비스를 이용하려면 서울 리전을 이용하면 된다. 대신 서울 리전은 가격이 다른 리전보다 비싸다. 가격에 대한 내용은 아래의 비용 부분에서 다룬다.
들어가면 여러 형태가 나타난다. 내 경우 우분투 14.04 LTS를 선호하는데 다른 OS를 이용해도 큰 차이는 없다. 자신에게 편한 서비스를 이용하면 된다. 이 글에선 우분투를 사용하였다.
다음 단계는 서버 타입을 정한다. 맨 처음 개발을 진행할 때는 t2.micro(프리티어)로 해도 충분하다. 만약 시도하려는 서비스가 크다고 해도 차후에 쉽게 확대할 수 있다. 이 내용은 스케일업과 스케일아웃에서 다룬다.
다음은 환경설정이다. 이 부분은 디폴트를 그대로 따라가도 된다.
저장 용량을 추가하는지에 대한 설정이다. 사이즈를 설정하거나 저장 형태를 바꿀 수 있다. 타입을 바꾸면 IOPS를 설정할 수 있는데 1초에 얼마나 많이 입출력을 허용할 것인지 설정한다.
인스턴스에 대한 설명이다. 아무 것도 적지 않고 넘어가도 되지만 Name 부분에 설명을 해두는게 좋다. 그 뿐 아니라 필요한 정보(만든 날짜, 용도 등)를 기입해두는 게 유지보수에 유리하다.
가장 중요하다고 볼 수 있는 보안 설정이다. 보안 설정은 어떤 포트와 통신을 허용할지 정한다. 웹 어플리케이션의 경우 SSH, HTTP, HTTPS를 여는게 보편적이고, 모바일 어플리케이션은 용도에 따라 다른 포트를 열곤 한다. 자신이 하려고 하는 서비스 특징에 맞게 열어야 하며, All traffic으로 설정하는 것은 매우 위험하다.
모두 마친 후에 확인을 누르면 키페어 설정이 나온다. 키페어는 접속 보안을 위해 필요하다. 새로운 키페어를 받게 되면 pem 형태의 파일을 얻을 수 있다. 이미 키페어가 있다면 아래의 체크박스를 눌러 사용하면 된다.
인스턴스를 생성하고 시간이 2분 정도 지나면 생성이 완료된다. 생성이 완료된 인스턴스를 누르면 다음의 창이 뜬다.
아래의 퍼블릭 아이피와 퍼블릭 DNS는 서버의 주소이다. 이 상태에서 서버를 중지했다가 다시 켜게되면 주소가 변경된다. 테스트 중일 땐 큰 문제가 되지 않겠지만, 정식 서비스 중에 이렇게 주소가 바뀌면 큰 문제가 된다. 그렇기 때문에 Elastic IP를 설정한다.
Elastic IP를 통해 아이피를 할당받을 수 있다. 좌측 하단에 Elastic IP에 들어가 새로운 아이피를 할당 받고, Associate Address를 통해 인스턴스와 연결하면 인스턴스를 껐다 켜도 아이피가 변경되지 않는다. Elastic IP는 연동된 1개의 인스턴스까지는 무료이다. 그러나 인스턴스를 끄게 되면 1개의 Elastic IP라도 요금이 청구된다.
이제 만든 인스턴스에 접속을 해본다. 윈도우 환경에선 putty를 설치해 접속을 할 수 있다. 만약 리눅스나 OSX를 사용한다면 터미널을 통해 접속할 수 있다.
putty는 아래의 링크에서 다운 받는다. 자신의 운영체제에 맞게 'putty'와 'puttygen'을 다운 받는다.
실행하면 위와 같은 화면이 나타난다. Host Name 부분에 IP 주소를 입력하면 되고, 맨 뒤에 '/'를 붙이면 안된다. SSH접속이므로 22 포트를 이용한다. 이제 키를 설정해야 하는데, 아까 다운받은 pem파일을 사용한다.
pem파일을 ppk파일로 바꾸어야 한다. 위에서 받은 puttygen 파일을 통해 pem을 ppk로 변환해준다.
위 링크를 따라 ppk를 만든 후 putty안에 넣어준다.
Browse를 통해 만든 ppk 파일의 위치를 설정해주고 열면 서버에 들어갈 수 있다. 맨 처음 접속시 Security Alert이 뜨는데, '예'를 누르면 된다. 이로써 서버 생성 및 접속이 완료되었다.
이렇게 만든 서버를 이용하려면, 여러 명령어들을 기본적으로 알아야 한다. 리눅스 서버의 경우 리눅스 명령어 및 편집기 개념을 알아야 하는데, 쉽게 검색할 수 있다.
0)로그인 아이디는 ubuntu이다. 이건 OS마다 다르다.(아마존 리눅스는 ec2-user)
1)리눅스의 경우 드래그를 하면 복사된다.
2)오른쪽 클릭을 하면 붙여넣기가 된다.
3)'Ctrl+C'는 중지 명령이다.
4)비밀번호는 눌러도 안보인다. 안 적힌게 아니다.
위의 예에서 t2.micro라는 작은 사이즈의 서버를 생성했다. 테스트용 및 어느정도 어플리케이션에선 큰 문제가 없지만 사용자가 많아지거나, 서비스가 무거워지면 큰 컴퓨팅 파워가 필요하다. 이럴 때 가장 쉽게 해결하는 방법은 스케일업이다.
스케일업은 작은 사이즈의 서버에서 큰 사이즈의 서버로 옮기는 것이다. 이때 매우 조심스럽게 진행해야 하는데, 생활코딩 이고잉님의 영상을 추천한다.
스케일아웃은 더이상 스케일업으로 해결이 안될만큼 커졌을 때 서버를 분산처리하는 것을 의미한다. 이 과정은 매우 복잡한 과정이고, 매우 어려운 일이라 이 글에선 적합하지 않다. 스케일아웃을 할 정도면 사용자 수가 수십만의 규모는 되야 하는데, 이정도 서비스를 운영한다면 서버 전문가를 고용하는것이 옳다.
서버를 운영할 때 어떤 서비스건 비용을 고려해야 한다. 아마존 클라우드 서비스의 비용은 낮은 편은 아니다. 그럼에도 불구하고 아마존을 사용하는 이유는 확장성 때문이다. 아마존 클라우드 서버의 확장성은 거의 무한하다고 볼 수 있고, 다른 서비스와 연계도가 매우 높다. 일반적인 컴퓨터라 할 수 있는 EC2와 저장에 중점을 둔 S3 등의 연동을 고려해보면 크면 클 수록 저렴하다고 볼 수 있다.
요금 방식은 3가지로 나뉜다. 아래의 링크는 매우 자세한 설명이다.
가장 비싸고, 사용한 만큼 지불하는 방식이다.
온디멘드 대비 70%까지 저렴하다. 예약한 기간동안 정해진 컴퓨팅 파워를 구매하는 방식이다.
예비 용량을 입찰한다. 상황에 따라 온디멘드보다 50~90%까지 비용을 절감할 수 있다.
비용에 대해서 고려해야할 사항 중 하나는 위치이다. 자세히 보면 알겠지만, 미국서버의 요금과 한국 서버의 요금이 다르다. 이는 미국의 경우 이미 인프라가 크게 갖추어진 상황이고 반면 한국은 미국만큼 크지 않기 때문에 비싼 가격으로 사용해야 한다. 즉 외국 서버를 이용하면 가격은 최대 3배 정도 절감할 수 있으나, 속도는 떨어질 것이다. 서버 관리자가 반응 속도 테스트를 진행하여 가장 최선의 서버를 이용하는 것이 좋다.
글의 서두에서 밝혔듯 어플리케이션에 적용할 수 있는 간단한 서버 생성 방법을 다뤘다. 위 방법을 그대로 따라오면 내 다른 글에서 다루는 서버 생성 과정을 똑같이 따라할 수 있다. 한번 시도해보고, 문제가 되면 서버를 없에도 큰 문제가 되지 않는다. t2.micro의 경우 시간당 0.02달러 청구되므로 크게 걱정할 필요도 없다. 다만 자주 Billing 페이지를 보는 게 좋다. 내 경우 처음에 RDS도 무료인줄 알고 큰 사이즈로 만들었다가, 꽤 큰 금액을 지불했던 경험이 있다. 아마존에 이메일을 보내면 어느정도 실수는 통크게 봐주기도 한다는데, 이왕이면 메일 보낼일 없이 Billing 페이지를 자주 보는게 좋다.