AWS 버지니아 북부 리전으로 서비스를 이전하면서 진행한 인프라 구축 및 트러블슈팅 과정을 정리했습니다. 처음 배포를 시도하는 환경에서 발생할 수 있는 데이터베이스 연결, CORS, 외부 API 보안 연결 문제를 중심으로 기록했습니다.
1. 인프라 환경 구성
AWS 버지니아 북부(us-east-1) 리전에 새로운 환경을 구축했습니다.
- EC2: Ubuntu 기반, Docker 및 Docker Compose 설치 완료.
- RDS: MySQL 8.4 버전.
- 보안 그룹: 22(SSH), 80(HTTP), 8000(API), 3306(MySQL) 인바운드 허용.
2. 데이터베이스 초기화
RDS 인스턴스를 새로 생성했기 때문에 테이블이 없는 빈 상태였습니다. 제공된 통합 SQL 스크립트를 사용하여 11개의 테이블을 생성하고 기초 데이터를 삽입했습니다.
RDS 접속 및 초기화 명령어:
# RDS 접속
mysql -h [RDS_엔드포인트] -u [사용자명] -p
# 데이터베이스 선택 및 테이블 생성 (MySQL 접속 후)
USE `meat-a-eye-db`;
# (제공된 SQL 스크립트 내용 복사 후 붙여넣기)
# 생성 확인
SHOW TABLES;
SELECT COUNT(*) FROM meat_info;
3. 도커 기반 서비스 실행
프로젝트 루트 디렉토리에서 Docker Compose를 사용하여 백엔드와 프런트엔드 컨테이너를 실행했습니다.
컨테이너 실행 및 로그 확인 명령어:
# 기존 컨테이너 중지 및 제거
docker compose down
# 컨테이너 빌드 및 백그라운드 실행
docker compose up --build -d
# 백엔드 로그 실시간 확인 (문제 발생 시 확인 필수)
docker logs -f meat-api-container
4. 주요 트러블슈팅 사례
4.1 CORS(Cross-Origin Resource Sharing) 문제
프런트엔드에서 API를 호출할 때 브라우저 보안 정책으로 인해 통신이 차단되는 현상이 발생했습니다. 백엔드 설정에서 와일드카드(*) 대신 실제 서버 IP를 명시하여 해결했습니다.
- 해결 방법: 서버 내 .env 파일의 CORS_ORIGINS 값을 http://3.95.213.147로 수정 후 재시작했습니다.
4.2 DB 스키마 불일치 (Unknown column 에러)
백엔드 코드는 업데이트되었으나 초기 SQL 스크립트에 일부 컬럼이 누락되어 500 Internal Server Error가 발생했습니다. 로그 확인 후 수동으로 컬럼을 추가했습니다.
컬럼 추가 명령어:
# members 테이블에 비밀번호 재설정 여부 컬럼 추가
ALTER TABLE members ADD COLUMN must_reset_password TINYINT(1) NOT NULL DEFAULT 0 AFTER guest_id;
# fridge_items 테이블에 희망 소비일 컬럼 추가
ALTER TABLE fridge_items ADD COLUMN desired_consumption_date DATE NULL COMMENT '희망 소비일' AFTER custom_name;
4.3 SSL 핸드쉐이크 실패 (KAMIS API 연결 문제)
실시간 시세 데이터를 가져오는 외부 API(KAMIS) 서버가 구형 보안 설정을 사용하여, 최신 도커 환경의 백엔드 컨테이너와 연결이 끊어지는 문제가 발생했습니다.
- 증상: 로그에 SSLV3_ALERT_HANDSHAKE_FAILURE 에러 발생.
- 현재 진행: 호스트(EC2)에서는 통신이 가능하지만 컨테이너 내부 파이썬 환경에서 차단됨. 시스템 설정(openssl.cnf)을 변경했으나 파이썬 라이브러리가 이를 무시하는 상태입니다. 이 부분은 코드 레벨에서 SSL 보안 수준을 낮추는 커스텀 어댑터를 적용하는 방식으로 내일 수정을 진행할 예정입니다.
5. 현재 상태 요약
- 인프라 구축 및 컨테이너 배포 완료했습니다.
- 회원가입 및 기본적인 데이터베이스 연동 확인했습니다.
- DB 스키마 불일치 문제 해결하여 냉장고 목록 기능 정상화했습니다.
- 외부 API 연동을 위한 SSL 보안 설정 수정 작업이 마지막 과제로 남아있습니다.
'3. 자습 & 메모(실전, 실습, 프로젝트) > 3-3 배포 실전 공부' 카테고리의 다른 글
| [배포] Meat-A-Eye 배포 마무리 정리 - AWS 서버 활용법 (마무리!) (0) | 2026.03.28 |
|---|---|
| [배포] Meat-A-Eye 배포 및 트러블슈팅 진행 기록 (마지막) (0) | 2026.03.27 |
| [배포] AWS EC2 재가동 및 도커 배포 (4) (2) | 2026.03.24 |
| [Meat-A-Eye 배포] AWS EC2 서버 구축 및 AI 환경 세팅(3) (0) | 2026.03.13 |
| [배포] AWS RDS 활용 - MySQL DB 구축 및 초기화(2) (0) | 2026.03.11 |
