강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이영훈님의 프로필 이미지
이영훈

작성한 질문수

비전공자도 이해할 수 있는 Docker 입문/실전

[실습] 웹 프론트엔드 프로젝트(HTML, CSS, Nginx)를 Docker로 배포하기

실제 웹 서비스 배포 시 질문

작성

·

43

·

수정됨

0

안녕하세요 강사님!

저는 프론트엔드 개발자이고 현재 진행중인 사이드 프로젝트에서 Docker, AWS를 사용해서 Next.js 프로젝트를 배포하려고 합니다.

머릿속으로 큰 그림을 그려봤을때, 강의에서 나오는 컨테이너 역할을 해주는 게 AWS EC2이고

https의 기본 포트는 443번이니까 실제 배포할때는
docker run -d -p 443:3000 my-web-server

이런식으로 포트가 맵핑돼야한다고 이해하고 있는데 제가 올바르게 이해하고 있는 게 맞을까요?

추가로 현재는 로컬에서 직접 docker run -d -p 80:3000 my-web-server를 실행하는데, 배포하게 된다면 이 명령어를 누가 실행시켜주는지도 궁금합니다..!

답변 2

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 영훈님 ! 질문 너무 잘해주셨어요 !

질문해 주신 내용에 대해 답변드려볼게요 ~

 

"강의에서 나오는 컨테이너 역할을 해주는 게 AWS EC2이고 https의 기본 포트는 443번이니까 실제 배포할때는 docker run -d -p 443:3000 my-web-server 이런식으로 포트가 맵핑돼야한다고 이해하고 있는데 제가 올바르게 이해하고 있는 게 맞을까요?"

-> 먼저 EC2와 컨테이너의 관계에 대해 말씀드리면, EC2는 컨테이너 역할이 아니라 '호스트(host) 컴퓨터' 역할을 해요 !

EC2라는 가상 서버(호스트 컴퓨터) 위에 Docker를 설치하고, 그 Docker 안에서 컨테이너를 실행하는 구조라고 이해하시면 돼요 !

HTTPS와 포트 매핑에 대해 말씀드리면, 단순히 443:3000으로 포트를 매핑한다고 HTTPS가 적용되는 건 아니에요 !

HTTPS를 사용하려면 SSL 인증서 설정이 별도로 필요해요 ~

실무에서는 보통 Nginx를 리버스 프록시로 앞에 두고 SSL 인증서를 적용하거나, AWS의 ALB(Application Load Balancer)를 사용해서 HTTPS를 처리하는 방식을 많이 써요 :)

 

"현재는 로컬에서 직접 docker run -d -p 80:3000 my-web-server를 실행하는데, 배포하게 된다면 이 명령어를 누가 실행시켜주는지도 궁금합니다..!"

-> 기본적인 방법은 개발자가 EC2에 SSH로 직접 접속해서 명령어를 실행하는 거예요 !

하지만 매번 수동으로 하면 번거롭기 때문에 실무에서는 GitHub Actions 같은 CI/CD 도구를 활용해서 코드가 푸시되면 자동으로 배포되도록 구성하는 경우가 많아요 :)

 

추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~

0

안녕하세요, 인프런 AI 인턴입니다. 이영훈님.

Docker와 AWS를 활용하여 Next.js 프로젝트를 배포하려는 계획에 대해 이야기해주셨네요. 실제 배포 환경에서의 포트 맵핑과 관련하여 몇 가지 설명드리겠습니다.

포트 맵핑

  1. HTTPS의 기본 포트 443번 사용:

    • 보통 HTTPS를 통해 서비스를 제공할 때 클라이언트 요청은 443번 포트를 통해 들어오고, 이를 내부 웹 서버가 처리하게 됩니다.
    • docker run -d -p 443:3000 my-web-server 명령어는 외부의 443번 포트를 컨테이너의 3000번 포트로 포워딩하는 것을 의미합니다. 이는 올바른 설정입니다.
  2. 로컬 환경에서 80:3000으로 실행했을 때:

    • 로컬 개발 중에는 보통 HTTP 기본 포트 80을 사용하여 접근을 간소화합니다.
    • 하지만 운영 환경에서 SSL 인증서를 통해 HTTPS를 사용할 경우 443번 포트를 외부와 연결하는 것이 좋습니다.

명령어 자동 실행

배포 단계에서는 수동으로 docker run 명령어를 실행하지 않고, CI/CD 파이프라인을 활용하여 자동으로 실행되도록 설정할 수 있습니다. 이 과정에서는 보통 다음과 같은 활동이 포함됩니다:

  • CI/CD 툴 사용: Jenkins, GitHub Actions, GitLab CI/CD 등을 사용하여 Build 및 deploy 프로세스를 자동화합니다.
  • Docker Compose 또는 배포 스크립트 사용: 여러 서비스와 디펜던시가 있을 경우, Docker Compose를 이용하거나 직접 배포 스크립트를 작성하여 EC2 인스턴스에서 컨테이너를 실행할 수 있습니다.
  • AWS 서비스 사용: AWS의 Elastic Beanstalk, ECS(Fargate) 등을 사용하면 컨테이너 기반 애플리케이션의 배포 및 관리를 쉽게 할 수 있습니다.

추가 자료

더 구체적인 활용 방안이나 방법론에 대해 사례 기반 학습을 위해 다음 게시물을 참고하실 수 있습니다:
- AWS 배포 시 docker-compose.yml 관리
- 도커 활용 자동화 배포 전략

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이영훈님의 프로필 이미지
이영훈

작성한 질문수

질문하기