DevOps

[CI/CD] GitHub Actions CI/CD 구축을 위해 AWS 프리티어 계정 생성 및 EC2 인스턴스 생성하여 SSH 원격연결

랑 이 2025. 5. 2. 01:06
반응형

프로젝트에 GitHub Actions을 이용해서 CI/CD 환경을 구축하기 위해서  AWS에서 EC2 인스턴스를 빌려서 구성하기 위해서

AWS의 EC2를 이용하려고 하는데 이전에 사용하던 AWS 프리티어 계정이 만료되어서 새롭게 프리티어 계정을 만들어 사용합니다

CI/CD란?

빌드부터 배포까지의 과정을 자동화하여 개발 이후에 반복적으로 작업해야 하는 걸 줄여줘 효율적으로 배포할 수 있도록 하는 방법이라고 할 수 있습니다 CI는 지속적 통합(Continuous Integration),CD는 지속적 배포(Continuous Deployment)를 의미합니다

CI(Continuous Integration) 

  • 빌드와 테스트를 자동화하는 과정으로 변경 사항이 애플리케이션에 충돌이나 문제가 없음을 보장합니다
  • 문제를 조기에 발견할 수 있으며 협업 시 충돌을 최소화합니다

CD(Continuous Deployment)

1. 지속적 전달 (Continuous Delivery)

  • 테스트까지 통과한 코드를 수동 승인 후 배포 가능한 상태로 유지
  • Jenkins 등의 툴을 이용하여 배포 준비까지 자동화하여 실질적인 배포는 버튼만 누르면 배포가 이루어지도록 구성

2. 지속적 배포 (Continuous Deployment)

  • 코드가 메인 브랜치(실제 운영 브랜치)에 머지되면 자동으로 배포하도록 자동화하는 과정
  • 수작업으로 직접 배포를 진행하지 않아도 되어 개발에 집중할 수 있는 환경을 만들 수 있습니다

이런 CI/CD 구축을 위해서 실질적으로 배포를 진행할 서버를 AWS의 EC2 인스턴스 서버를 빌려 구성하는 방법에 대해서 작성합니다

AWS 프리티어

AWS에서는 계정을 처음 생성하면 12개월 동안 서비스를 무료로 사용할 수 있는 프리티어를 제공합니다

하지만 한정된 리소스에서만 무료로 제공되기 때문에 주의해서 사용해야 합니다

 

무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어

이러한 프리 티어 혜택은 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과할 경우

aws.amazon.com

위사이트에 들어가면 AWS 프리 티어에 대해서 자세히 확인할 수 있습니다

 

서비스무료 혜택조건

서비스 무료 혜택 조건
EC2 (가상 서버) t2.micro 또는 t3.micro 750시간/월 Linux 또는 Windows 선택 가능
S3 (객체 스토리지) 5GB 저장, 2,000 PUT, 20,000 GET 요청/월 정적 웹사이트 가능
RDS (관계형 DB) db.t2.micro 750시간/월 + 20GB 스토리지 MySQL, PostgreSQL 등
CloudWatch 10개 지표 + 5GB 로그 로그 수집, 모니터링
Lambda 매월 100만 요청, 400,000GB-sec 서버리스 함수 실습용
DynamoDB 최대 25GB 저장, 200만 요청/월 NoSQL 실습 가능

간단하게 EC2를 보면 1달 동안 24시간 실행 가능한 정도의 혜택을 제공합니다

 

[AWS 프리 티어 사용 중 주의 사항]

1. 시간 기준은 매월마다 초기화

- EC2를 예를 들면 월 단위로 750시간을 제공하고 초과되면 자동으로 과금된다

- 만약에 EC2 2개를 동시에 실행한다고 가정했을 때 2대 X 24시간으로 48시간 이기 때문에 서버 1대만 사용해야 한다

 

2. 프리 티어 적용되는 인스턴스만 사용

- EC2: t2.micro 또는 t3.micro만 프리 티어 적용하기 때문에 유형을 체크해야 한다

- 그 외에도 프리 티어가 지원하지 않는 자원을 사용하면 그만큼 과금이 되기 때문에 주의해야 한다

 

3. EIP (Elastic IP) 과금 주의 

- 탄력적 IP라고 부르는데 인스턴스를 만들면 퍼블릭 IP를 할당하는데 고정 IP로 설정하기 위해서 사용된다 

- 하지만 이걸 할당만 받고 어떠한 인스턴스에도 적용하지 않으면 과금이 발생 때문에 무조건 연결하거나 삭제해야 한다

(생각보다 탄력적 IP로 과금되는 경우가 있기 때문에 이런 건 체크 잘하는 게 중요하다)

 

4. S3,RDS,CloudWatch는 요청량 및 용량 초과 주의 

- 각각 서비스의 요청량이나 용량을 프리티어에 초과되어 사용하면 과금되기 때문에 자주 확인 해야 한다

 

5. 12개월 이후에 자동 과금 

- 프리티어는 12개월만 적용되기 때문에 실 서비스를 운영하는 게 아니라면 자동 과금을 막기 위해 리소스 삭제를 해야 한다

 

그 외에도 AWS 계정이나 인스턴스에 접속하는 키 등을 유출되지 않도록 조심해야 한다

AWS 프리티어 계정 생성하기

 

무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어

이러한 프리 티어 혜택은 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과할 경우

aws.amazon.com

위 사이트에 접속

접속하면 이런 화면이 나오는데 무료 계정 생성을 눌러 줍니다

영어로 나온다면 우측 상단에 Language를 한국어로 설정하고 AWS에 가입할 이메일 주소를 입력하고 이메일 주소 확인을 눌러 줍니다 그 이후 입력한 이메일에 확인 코드가 발송되는데 확인 코드를 입력하고 다음으로 넘어가줍니다

다음으로 계정 사용자의 개인정보를 입력합니다 여기는 영어로 작성해야 합니다

이름은 여권 이름 국가는 거주 국가 주소는 영문 주소로 변환하여 작성했습니다 

계정 결제 정보를 입력해야 합니다 해외 결제가 되는 신용, 체크카드 정보를 입력해 줍니다

여기서 확인을 위해서 100원이 결제가 되는데 바로 돌려줍니다

계정에 사용될 전화번호를 입력하고 SMS에 전송된 확인코드를 입력해 줍니다

플랜 선택은 프리 티어를 사용하기 때문에 기본 지원 - 무료를 선택하고 가입 완료를 눌러줍니다

가입이 완료되어고 밑에 있는 체크 박스는 최신 정보를 이메일로 받아 보고 싶으면 체크하면 됩니다

언어 설정

설정 아이콘 - 한국어로 설정

 

리전 설정

상단에 있는 아시아 태평야(시드니) 아시아 태평양(서울)으로 설정

- 리전은 AWS 서버가 설치되어 있는 구역으로 사용자와 가까운 리전일수록 빠르기 때문에 서울로 지정

EC2에서 인스턴스 생성

인스턴스는 AWS EC2에서 제공하는 가상 머신으로 클라우드에서 실행 중인 컴퓨터입니다

로컬 PC에 서버를 설치하여 사용하는 것보다 클라우드 서버를 빌려서 사용하는 게 효율적이고 편리합니다

 

검색창에 EC2라고 검색하면 나오는 첫 번째 항목을 클릭해 줍니다

왼쪽에 있는 인스턴스 시작을 눌러 인스턴스를 생성할 수 있습니다

인스턴스 생성 창이 나오게 됩니다

인스턴스의 이름을 지정해 줍니다 (서버 이름) 

간단하게 인스턴스 컴퓨터의 OS을 선택하는 항목입니다

주로 Ubuntu OS를 많이 사용하고 있습니다 저도 Ubuntu OS를 선택했습니다

 

여기서 주의할 건 Amazon Machine Image(AMI)에서 프리 티어 사용 가능 OS만 선택하여 사용해야 프리 티어를 사용할 때 과금이 발생되지 않습니다

다음으로 인스턴스 유형입니다 여기는 컴퓨터의 스펙을 선택하는 공간입니다

여기서도 프리 티어 사용 가능 스펙만 사용해야 과금이 발생되지 않습니다 (t2.micro 또는 t3.micro)

 

저는 t2.micro를 선택했습니다

키 페어는 나중에 SSH로 안전하게 인스턴스에 접속하기 위해서 인증에 사용되는 키라고 보면 됩니다

키 페어가 없다면 오른쪽에 있는 새 키 페어 생성을 눌러 키 페어를 생성해 줍니다

키 페어 이름을 설정하고 유형은 RSA로 설정합니다

 

프라이빗 키 파일 형식은 윈도우에서 PuTTY로 접속한다면 .ppk를 선택하고 다른 툴로 접속하거나 MAC OS는 .pem으로 선택 .pem도 .ppk로 변환이 가능하기 때문에 웬만해서 .pem으로 설정하고 키 페어 생성

 

생성된 키 페어는 컴퓨터에 다운로드가 되는데 이거는 유출되지 않도록 해야 합니다 

유출된다면 돌아오는 건 요금 폭탄이 될 수도 있습니다 ㅠㅠ

다음으로 네트워크 설정입니다 어떤 프로토콜,포트,IP의 요청을 허용할 것인지 방화벽을 설정하는 곳입니다

TCP 22 0.0.0.0/0 누구나 SSH 접속 가능 (보안상 위험)
TCP 22 123.456.78.90/32 특정 IP만 SSH 접속 허용
TCP 80 0.0.0.0/0 누구나 웹사이트 접속 가능 (HTTP)
TCP 443 0.0.0.0/0 누구나 HTTPS 접속 가능

SSH(22번 포트)는 0.0.0.0/0으로 모든 접속이 가능하도록 설정하면 다른 IP에서도 접근이 가능하기 때문에 이거는 내 IP만 허용하도록 설정하여 키 페어가 유출되어도 IP 차단이 이루어지기 때문에 꼭 설정해줘야 합니다

스토리지 구성은 컴퓨터의 하드디스크 용량을 설정합니다 

프리 티어는 최대 30GB까지 사용할 수 있기 때문에 그 이상 설정하지 않아야 합니다

인스턴스 요약을 확인하고 다시 한번 프리 티어에 초과되는 설정이 없는지 체크하고 인스턴스 시작을 눌러줍니다

결제 알림 생성은 만약에 프리 티어를 초과하여 비 용이 발생되면 확인할 수 있도록 설정하는 게 좋기 때문에 알림 생성을 해줍니다

생성한 EC2 인스턴스에 탄력적 IP 적용하기

탄력적 IP(Elastic IP)는 AWS EC2에서 고정된 공인 IP 주소를 인스턴스에 할당하기 위해서 사용됩니다

 

EC2 인스턴스는 기본적으로 부여되는 IP는 퍼블릭 IP로 인스턴스를 재시작할 때마다 바뀌지만 탄력적 IP를 적용하면 인스턴스를 재시작해도 변하지 않기 때문에 설정하여 서버의 IP 주소가 바뀌지 않도록 해줍니다 

 

EC2 창 접속 - 왼쪽 메뉴 - 네트워크 및 보안 - 탄력적 IP로 이동

이동하면 탄력적 IP 주소가 아무것도 없는 걸 확인할 수 있습니다 먼저 탄력적 IP를 할당받아야 합니다

탄력적 IP 주소 할당을 눌러줍니다

따로 설정하지 않고 기본으로 할당받아 줍니다

그다음 탄력적 IP 주소 항목으로 이동하면 생성된 IP 주소가 있는데 IP 주소를 클릭하여 상세 페이지로 이동하면 탄력적 IP 주소 연결 버튼이 있는데 눌러 인스턴스와 연결해주면 됩니다

리소스 유형은 인스턴스를 선택하고 생성한 인스턴스를 찾아 선택해 줍니다

인스턴스의 프라이빗 주소도 찾아서 선택하고 연결을 눌러줍니다

 

탄력적 IP는 꼭 인스턴스에 연결이 되어 있어야 과금이 되지 않습니다

인스턴스만 삭제하고 탄력적 IP는 그대로 활성화되어 있어 과금이 되는 경우가 있어 주의해야 합니다

 

인스턴스만 삭제한다고 탄력적 IP도 삭제되는 건 아니기 때문에 삭제를 해줘야 합니다

비주얼 스튜디오 코드(VScode) 확장 프로그램으로 SSH 접속 환경 구축

윈도우 OS를 사용 중이기 때문에 터미널 환경을 사용하기 쉽지 않아 VScode의 확장 프로그램으로 SSH 접속을 할 수 있도록 환경을 구축하고 사용해보려고 합니다

 

Remote - SSH

VScode 확장 프로그램에서 Remote - SSH를 검색하여 설치를 진행해줍니다

Ctrl + Shift + P를 눌러 Remote-SSH를 입력하면 나오는 첫 번째 항목을 클릭

SSH 호스트 구성...을 눌러줍니다

상단에 있는 항목을 클릭

config 파일에 인스턴스 접속을 위한 설정을 작성합니다

Host (접속할 인스턴스 이름)
    HostName (인스턴스 퍼블릭 IPv4 DNS) / (탄력적 IP 적용 인스턴스는 탄력적 IP)
    User ubuntu (접속 이름)
    IdentityFile ~/.ssh/000.pem (키 페어 파일 위치)

Host: 접속할 인스턴스의 이름을 지정합니다 (식별을 위한 이름)

HostName: 일반적으로 퍼블릭 IPv4 DNS를 작성하고 저는 탄력적 IP를 적용한 인스턴스 이기 때문에 탄력적 IP를 작성

User: 접속 이름으로 ubuntu로 작성

IdentityFile: 생성했던 키 페어의 로컬 위치 작성

설정을 완료하고 다시 호스트 연결을 시도하면 Host 이름이 뜰 텐데 클릭하면 SSH 접속이 이루어진다

터미널을 실행시키면 다음과 같이 인스턴스에 접속이 완료된 걸 볼 수 있습니다

마무리

AWS 프리 티어 계정을 생성하여 EC2의 인스턴스까지 만들어서 SSH 원격 접속까지 하는 방법을 작성해 봤습니다 

앞으로 인스턴스에서 GitHub Actions를 사용해서 CI/CD 구축과 백엔드 프로젝트를 직접 배포하는 방법 등 여러 가지 방향으로 사용하고 포스팅해보겠습니다

반응형