[로드 투 정글] 2. 입학 시험(6) - 배포(AWS EC2)

2025. 3. 8. 21:40·크래프톤 정글/로드 투 정글(입학시험)
목차
  1. 내 웹 서비스를 누구나 이용할 수 있게, AWS EC2
  2. 배포 실습 전 유의사항
  3. EC2 인스턴스 생성 시 키페어와 보안그룹 설정하기
  4. EC2 인스턴스 재시작 시 IP주소 변경 이슈
  5. 포트포워딩 시 네트워크 인터페이스 이름 확인하기
  6. 최종 목표는 배포 중인 인스턴스 미리 만들어 놓기
  7. 마치면서

내 웹 서비스를 누구나 이용할 수 있게, AWS EC2

드디어 대망의 입학 시험 마지막 본 포스트를 쓰게 되었는데요. 여기까지 오셨다면 분명 훌륭한 웹 서비스를 만들어낼 수 있는 사람이 된 상태이실 거라 믿어 의심치 않습니다. 다만 이제까지 만든 웹 서비스는 localhost, 즉 로컬 서버인 내 컴퓨터에서만 접속할 수 있습니다. 다른 사람들은 우리가 만든 웹 서비스를 이용할 수 없죠. 그렇기 때문에 배포를 통해 다른 사람들이 우리가 만든 웹 서비스를 이용할 수 있게 만들어야 합니다.

 

물론 내 컴퓨터에서 배포를 해서 다른 사람들이 이용할 수 있게 할 수도 있습니다. 이를 집 호스팅이라고 하는데요. 다만 서버가 켜져 있는 상태에서만 웹 서비스가 작동하기 때문에 컴퓨터를 계속 켜 놔야 합니다. 어머니에게 등짝 맞기 딱 좋겠죠. 그리고 다른 사람들이 들어올 수 있도록 내 컴퓨터의 방화벽에도 구멍을 내줘야 하는데 왠지 좀 꺼림칙합니다.

 

그래서 요즘에는 웹 서비스 배포에 클라우드 호스팅이라고, 업체로부터 서버용 컴퓨터를 하나 빌려서 거기에 서버를 올려 배포하는 방식이 많이 사용되는데요. 빌린 컴퓨터는 항상 켜져 있고 거기에 올려 구동시킨 서버도 항상 켜져 있게 됩니다. 그리고 빌린 컴퓨터이기 때문에 방화벽도 내 컴퓨터보다는 마음 놓고 열어재낄 수 있습니다.

 

배포 실습은 Amazon의 호스팅 서비스인 AWS EC2 인스턴스를 만들어서 진행하게 되는데요. 여기서 인스턴스는 빌리는 컴퓨터라고 생각하시면 됩니다. 다만 인스턴스에 서버를 올려 구동시키려면 여러 고비를 넘어야 합니다. 인스턴스를 만들고 거기에 Python과 flask, pymongo 같은 패키지도 설치해야 하고 , MongoDB도 설치해야 하고.. 챙길 게 너무나 많습니다.

 

다행히도 주어진 학습 자료의 배포 챕터에 이 복잡한 내용들을 풀어나갈 수 있는 길을 제시해 주기 때문에 충실히 따라가면 됩니다. 이어서 본격적으로 학습 자료를 따라가기 전에 보고 가면 개인적으로 정말 많은 도움이 될 거라고 생각하는 몇 가지 유의사항들을 소개해 드려보고자 합니다.

 

 

배포 실습 전 유의사항

EC2 인스턴스 생성 시 키페어와 보안그룹 설정하기

EC2 인스턴스를 생성할 때 OS 이미지에서 Ubuntu 20.04 버전 이상의 프리 티어를 선택해야 하는데요. 나머지 다른 설정들은 따로 건드리지 않아도 되지만 키 페어와 보안 그룹, 두 가지 사항에 대해서는 꼭 따로 설정을 마치고 인스턴스 생성을 완료해야 합니다.

 

먼저 키 페어는 집 열쇠를 설정해 놓는 것이라고 볼 수 있습니다. Git Bash를 이용해서 빌린 컴퓨터를 명령어를 통해 조작하게 되는데요. 이때 빌린 컴퓨터에 SSH 형식으로 접속하기 위해서 키 파일을 필요로 하게 됩니다. 이때 키 페어를 컴퓨터에 따로 갖고 있지 않다면 우측 새 키 페어 생성을 눌러 내 컴퓨터에 새 키 파일을 만들어 저장해 놓고 키 페어 란에 이 새로 만든 키 페어를 설정하면 됩니다.

 

다음으로 보안 그룹은 방화벽을 어떻게 열어줄지에 대한 규칙을 설정하는 것인데요. 내 인스턴스에 대해 어떤 범위에서 어떤 포트로 들어가고 나가게 할 지를 지정할 수 있습니다. 그리고 인스턴스에 들어올 수 있는 규칙을 인바운드 규칙, 인스턴스에서 나갈 수 있는 규칙을 아웃바운드 규칙이라고 합니다.

 

여기까지가 핵심을 요악한 내용이고 더 궁금한 내용이 있다면 따로 검색해 보시면 좋겠습니다. 당장은 배포 실습만을 위한 인스턴스를 만들 것이기 때문에 그냥 사용하는 포트에 대해 다 뚫어 놓으면 됩니다. 아래의 과정을 따라 보안 그룹을 만들고 인바운드, 아웃바운드 규칙을 추가한 뒤, 인스턴스 생성 시에 해당 보안 그룹을 선택하면 됩니다.

새 보안 그룹 생성 및 인바운드, 아웃바운드 규칙 추가하기

1. AWS 콘솔 - EC2 메뉴 - 네트워크 및 보안 - 보안 그룹에 들어가 우측 상단의 '보안 그룹 생성'을 클릭합니다.

2. 보안 그룹 이름은 원하는 이름으로 설정하면 됩니다.

3. 인바운드 규칙 란에서 '규칙 추가'를 눌러 아래 첫번째 그림과 같이 규칙들을 추가합니다.

  • 혹시 모를 상황에 대비한 최소한의 보안 조치를 위해 SSH 연결은 '내 IP'로 설정해 줍니다.
  • 나머지 유형들의 소스에 대해 Anywhere-IPv4(모두 허용)을 선택해 줍니다.
    • 실습용이기 때문에 모두 허용 처리를 했지만 실제 고객이 있는 웹 서비스 배포 시에는 별도로 처리해야 합니다.

[그림1] 인바운드 규칙 설정 - SSH(22포트), HTTP(80포트), Flask(5000포트), MongoDB(27017포트)

 

4. 마찬가지로 아웃바운드 규칙 란에서 '규칙 추가'를 눌러 아래 두번째 그림과 같이 규칙들을 추가합니다.

  • 모든 유형에 대해 Anywhere-IPv4(모두 허용)을 선택해 줍니다.

[그림2] 아웃바운드 규칙 설정 - HTTP(80포트), HTTPS(443포트), MongoDB(27017포트)

 

5. 우측 하단 '보안 그룹 생성'을 눌러 보안 그룹 생성을 완료합니다.

6. EC2 인스턴스 생성 시 네트워크 설정 - 방화벽(보안 그룹) - 기존 보안 그룹 선택 - 방금 만든 보안 그룹을 선택합니다.

 

EC2 인스턴스 재시작 시 IP주소 변경 이슈

EC2 인스턴스를 만들게 되면 해당 인스턴스의 퍼블릭 IPv4 주소를 얻을 수 있습니다 그리고 Git Bash SSH에 접속할 때, Filezilla를  통해 서버를 업로드할 때, app.py에 MongoDB를 연결 할 때 등 여러 곳에서 해당 IP주소를 이용하게 되는데요. 이때 주의할 점은 이 퍼블릭 IPv4 주소는 해당 인스턴스의 고유한 주소가 아니라 동적으로 할당된 주소라는 것입니다. 인스턴스가 계속 켜져 있는 상태나 인스턴스 재부팅(Reboot)을 했을 경우에는 특별히 문제 될 게 없지만, 인스턴스를 중지(Stop)했다가 다시 시작(Start)한 경우 퍼블릭 IPv4 주소가 변경되어 버립니다.

 

저 같은 경우에는 실습 중에 EC2 설정을 만지느라 인스턴스를 잠깐 중지했다 다시 킨 적이 있었는데요. 다시 인스턴스를 킨 다음에 서버나 DB가 먹통이 되어서 해결법을 찾느라 여기저기 인터넷을 뒤지고 다녔는데, 알고보니 IP주소가 바뀌어서 생긴 문제였습니다. 저는 이 문제를 해결하느라 한 시간을 날려먹었지만 이 글을 보는 분들은 부디 소중한 시간을 아끼셨으면 좋겠습니다.

 

포트포워딩 시 네트워크 인터페이스 이름 확인하기

원래는 기존 IP주소에 포트 번호(:5000)을 입력해야 서버를 통해 웹페이지에 접속할 수 있는데요. 포트포워딩을 통해 IP주소만 입력했을 때(80포트 연결)을 5000번 포트에 자동으로 넘겨줄 수 있습니다. 이렇게 설정해 놓으면 이용자들이 포트 번호를 따로 붙이지 않고 IP주소만 입력해도 서버에 접속해 웹페이지를 띄워볼 수 있게 됩니다.

 

포트포워딩을 하기 위해서는 인스턴스가 연결된 Git Bash 창에서 실행 중인 서버를 종료한 뒤, 포트포워딩 규칙 추가 명령어를 입력해주면 되는데요. 이때 Ubuntu 버전 또는 기타 여러 가지 이유로 인해 네트워크 인터페이스 이름이 다를 수 있다는 점을 주의해야 합니다.

 

명령어에 올바르지 않은 네트워크 인터페이스 이름으로 포트포워딩 규칙을 추가하게 되면 포트포워딩이 정상적으로 이뤄지지 않습니다. 그렇기 때문에 꼭 네트워크 인터페이스 이름을 확인하고 이를 포트포워딩 규칙을 추가할 때 반영해야 합니다. EC2 인스턴스의 네트워크 인터페이스 이름을 확인하려면 인스턴스가 연결된 Git Bash 창에 ip addr을 입력하면 됩니다.

ip addr 을 입력해 네트워크 인터페이스 이름을 확인할 수 있습니다. 위 사진에서는 enX0가 해당 인스턴스의 네트워크 인터페이스 이름입니다.

 

이후 본인 인스턴스의 네트워크 인터페이스 이름을 확인한 뒤, 해당 이름을 포트포워딩 규칙 추가 명령어에 적으면 되는데요. 아래의 명령어에서 [이름] 부분을 확인한 이름으로 바꾼 뒤 Git Bash에서 복사해서 실행하면 됩니다.

sudo iptables -t nat -A PREROUTING -i [이름] -p tcp --dport 80 -j REDIRECT --to-port 5000

 

마지막으로 다시 서버를 실행시킨 뒤, 포트 번호 없이 IP주소를 입력해서 접속했을 때 웹페이지가 정상적으로 뜨면 포트포워딩이 성공적으로 완료된 것입니다.

 

최종 목표는 배포 중인 인스턴스 미리 만들어 놓기

어떻게 보면 가장 꿀팁이라고 할 수도 있는데요. 배포 실습의 최종 목표는 무엇일까요? 바로 정상적으로 IP 주소를 입력했을 때 웹페이지를 띄우고 웹 서비스를 제공하는 서버가 실행 중인 인스턴스를 미리 만들어 놓는 것입니다. 모든 설정이 완벽하게 마무리 된 인스턴스를 가지고 있는 것이죠. 그리고 입학 시험 때 이 인스턴스를 활용해 배포를 진행하면 됩니다.

 

입학 시험 때에 웹페이지를 만들고 DB와 연결된 서버를 구축하는 것만으로도 시간적 압박이 상당한데요. 이때 미리 만들어 놓은 인스턴스가 연결된 Filezilla에서 새로 만든 서버 파일(app.py)과 웹페이지 관련 폴더들(templates, static)만 교체하면 손쉽게 배포를 진행할 수 있습니다. 조금이라도 시간을 아끼고 싶은 분들, 배포까지 완료한 상태로 제출하는 것을 목표로 하고 있는 분들은 꼭 이 방법을 사용해 보시면 좋겠습니다.

 

물론 배포를 하지 못하고 소스 코드만 제출했지만 입학 시험을 합격하신 분들도 계신 걸로 알고 있는데요. 그래도 배포를 완벽하게 한 뒤 소스 코드와 IP 주소를 함께 제출하는 것이 입학 시험에서 더 좋은 점수를 받을 수 있지 않을까 싶습니다. 학습 자료에는 분명 배포 단계까지 주어져 있으니 말이죠.

 

 

마치면서

이 글을 마지막으로 나름 길고 길었던 입학 시험 장이 마무리되었습니다. 처음 웹 서비스의 전체적인 큰 그림을 그려보는 것부터 시작해 웹페이지, 서버, DB, 배포에 이르기까지 각 단계에서의 큰 그림을 또 세부적으로 그려보았는데요. 이 시리즈를 통해 학습 자료를 보기 전 큰 그림을 그려보고 학습을 진행하시면 분명 더 친숙하게 배워나가실 수 있을 것이라 생각합니다. 생판 모르는 남보다는 그래도 한 번 본 친구가 눈에 더 잘 들어오지 않을까요? 새로운 꿈을 향해 도전하는 건 분명 아름다운 일입니다. 그리고 그 아름다운 일에 조금이라도 도움이 될 수 있었으면 좋겠습니다. 읽어주셔서 감사합니다!

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 로드 투 정글(입학시험)' 카테고리의 다른 글

[로드 투 정글] 3. 온라인 인터뷰  (0) 2025.03.09
[로드 투 정글] 2. 입학 시험(5) - DB(MongoDB)  (0) 2025.03.06
[로드 투 정글] 2. 입학 시험(4) - 서버(Flask)  (0) 2025.03.05
[참고자료] 자주 쓰이는 JQuery 함수(+동적 이벤트 할당)  (0) 2025.03.04
[로드 투 정글] 2. 입학 시험(3) - 프론트엔드(JQuery, AJAX)  (0) 2025.03.03
  1. 내 웹 서비스를 누구나 이용할 수 있게, AWS EC2
  2. 배포 실습 전 유의사항
  3. EC2 인스턴스 생성 시 키페어와 보안그룹 설정하기
  4. EC2 인스턴스 재시작 시 IP주소 변경 이슈
  5. 포트포워딩 시 네트워크 인터페이스 이름 확인하기
  6. 최종 목표는 배포 중인 인스턴스 미리 만들어 놓기
  7. 마치면서
'크래프톤 정글/로드 투 정글(입학시험)' 카테고리의 다른 글
  • [로드 투 정글] 3. 온라인 인터뷰
  • [로드 투 정글] 2. 입학 시험(5) - DB(MongoDB)
  • [로드 투 정글] 2. 입학 시험(4) - 서버(Flask)
  • [참고자료] 자주 쓰이는 JQuery 함수(+동적 이벤트 할당)
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리) N
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[로드 투 정글] 2. 입학 시험(6) - 배포(AWS EC2)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.