🖥 Backend
백엔드 탐험기 1 - AWS 인스턴스와 RDS 생성하기
나의 첫 프로젝트 배포
컴퓨터공학과 4년의 마무리인 졸업프로젝트에서 우리팀은 Java/Spring + Flutter 의 조합으로 진행하기로 결정했습니다. Flutter 는 이미 몇 차례 사용해 본 경험이 있기에 이번 프로젝트는 앞으로 나의 커리어를 위해 Spring 공부에 집중해보기로 했습니다.
이번 글에서는 AWS 인스턴스를 생성하고 RDS 데이터베이스와 로컬에 연결하는 작업까지 달려보도록 하겠습니다!
AWS 인스턴스 생성
먼저 AWS의 지역 설정을 서울로 변경해주겠습니다. 서울에는 2016년에 처음으로 리전이 개설 되었다고 하는데 가까운 곳의 인스턴스인 만큼 속도가 더 빠를 것이라고 기대할 수 있겠습니다. 그 후에 인스턴스 시작 버튼을 눌러 생성을 시작해봅시다.


그 다음에는 원하는 이름을 설정해주고 가장 중요한 AMI(Amazon Machine Image)를 선택해줘야 하는데 AMI는 운영 체제(OS)와 해당 운영 체제에서 실행할 소프트웨어, 데이터, 설정 등이 포함된 이미지입니다. 가상머신의 스펙을 정해주는 단계라고 보시면 됩니다.

이 다음이 중요합니다! 여기서 아키텍처를 선택할 수 있는데 어느 아키텍쳐를 선택하느냐에 따라 빌드한 프로젝트를 올릴 때에 설정이 필요할 수 있습니다. 저는 M1 노트북을 사용하고 있어서 로컬에서 빌드한 정보는 arm 아키텍쳐에서만 돌아갈 수 있게 됩니다. 따로 설정을 해주게 된다면 x86에서도 문제 없이 돌아갈 수 있으나 오늘은 수고를 줄이기 위해 arm 아키텍쳐를 선택하도록 하죠.

다음은 키페어를 생성합니다. 키페어(Key Pair)는 중요한 보안 요소로 공개키 암호화 방식을 사용하여 인스턴스에 대한 원격 액세스를 안전하게 관리하는 데 사용됩니다. 일반적으로 SSH(Secure Shell) 접속을 통해 리눅스 또는 유닉스 기반 인스턴스에 접근하는 데에 사용됩니다. 저는 맥의 터미널에서 SSH접속을 위해 .pem 방식을 선택합니다. RSA와 ED25519는 공개키 암호화 알고리즘의 이름입니다. 암호화 알고리즘은 추후 다른 글에서 다뤄보도록 하겠습니다. 저는 기본으로 선택된 RSA를 선택하겠습니다.

웹서버 접근을 위해 HTTP, HTTPS 옵션을 활성화해준 후,

인스턴스를 활성화 시켜보도록 하겠습니다.

SSH 접근 (맥 터미널)
먼저 키페어의 권한을 400으로 바꿔줍니다. 400은 읽기권한을 주는 옵션입니다. chmod 명령어로 변경이 가능하고 읽기와 쓰기를 모두 허용하고 싶다면 600번 권한을 주면됩니다.
chmod 400 my-key-pair.pem
그 후 자신의 인스턴스에 다음과 같은 명령어로 접근합니다. {사용자이름}@{인스턴스IP}에서 사용자이름은 인스턴스 AMI를 어떻게 설정했느냐에 따라 달라질 수 있으니 검색해보시길 추천드립니다.
ssh -i /path/to/my-key-pair.pem ubuntu@your-instance-ip
그럼 이제 … 짜짠! 접근에 성공했습니다. (맥이라 Putty를 사용하지 않아도 된다는게 참 행복합니다..ㅎㅎ)

네트워크 및 보안 설정
이제 인바운드 규칙을 설정해봅시다. 왼쪽 메뉴의 네트워크 및 보안 → 보안 그룹 → 인바운드 규칙 으로 접근합니다.

인바운드 규칙 편집을 클릭하고 아래처럼 8000번 포트를 열어주도록 하죠. 보통 웹서버가 8000번을 사용한다고 합니다.

위 메뉴의 아래 있는 탄력적 IP주소도 할당해봅시다. 탄력적 IP(Elastic IP)는 AWS에서 제공하는 정적인 공인 IP 주소입니다. 이 IP 주소는 AWS 클라우드 리소스와 연결되어, 해당 리소스에 고정된 공인 IP 주소를 제공합니다. 탄력적 IP는 인스턴스나 로드 밸런서와 같은 AWS 리소스에 연결되어, 해당 리소스가 중지되거나 다시 시작되어도 IP 주소가 변하지 않습니다. 탄력적 IP주소를 할당하게 되면 보안의 이점 뿐 아니라 별도의 DNS 없이 공인IP주소로 인스턴스를 연결할 수 있죠.

아래 버튼을 통해 인스턴스와 연결해주면

아까와 같이 정상적으로 연결되는 것을 알 수 있습니다.

RDS 생성 및 연결
이번에는 RDS를 생성해봅시다. 콘솔에서 RDS를 선택후 데이터베이스 생성버튼을 눌러 아래와 같이 데이터베이스를 선택해줍시다. 저는 가장 많이 사용하는 MySQL을 선택했습니다.

배포버전은 8.0.28, 템플릿은 프리티어로 선택했습니다.

인스턴스는 t2.micro, 스토리지는 다 기본에 자동 조정 옵션은 꺼두었습니다. 동적으로 조정할 필요는 없으니까요.


그 후 MySQL Workbench와의 연결을 위해 네트워크를 열어주고

퍼블릭 액세스를 허용한다음 아까 설정한 VPC 보안그룹을 선택해준다면 간편하겠죠?

db 식별자와 비밀번호는 알아서 선택해주신 후에 데이터베이스를 생성해줍시다.
이제 파라미터 그룹을 설정해 줍니다. 파라미터 그룹은 RDS 데이터베이스 인스턴스의 동작 방식과 속성을 제어하는 매개 변수들을 모아 놓은 묶음 입니다. 파라미터 그룹을 사용하여 데이터베이스 인스턴스의 동작을 세부적으로 제어하고 맞춤 설정할 수 있습니다.

그 후에는 파라미터 검색창을 활용하여 아래의 항목들을 변경해줍니다.

- time_zone : Asia/Seoul
- character_set 으로 검색해서 나오는 것들 : utf8mb4
- collation 검색해서 나오는 것들 : utf8mb4_general_ci
- max_connections : 150
그 후 데이터베이스에 사용되고 있는 보안그룹에 EC2 보안 그룹 ID와 본인 IP를 RDS 보안 그룹의 인바운드로 추가 해줍니다. 아래 보이는 것을 각각 1개씩 생성하시면 됩니다.

이제 Workbench에서 hostname과 password에 아까 설정한 값을 넣어주면..? \

이렇게 데이터베이스 연결까지 성공했습니다!

마무리
글을 쓰며 작업하느라 생각보다 많은 시간이 걸렸네요..! Azure는 다뤄본적이 있지만 AWS는 첨이라 조금 헤맸지만 그래도 역시 새로운 걸 배우는 것은 즐겁습니다. 처음 AWS를 접하시는 분들께 도움이 되길 바라며 글 마칩니다!
Reference
- Chat GPT