Navisafe/Infrastructure

AWS S3를 활용한 데이터 저장 구조 설계

jjaehyeok 2026. 5. 2. 21:32

S3 저장 로직 추가

스트리밍 데이터를 처리한 이후, 결과를 로컬이 아닌 클라우드 저장소(S3)에 적재하도록 구조를 변경했다. 컨테이너 기반 환경에서는 Pod 재시작이나 재배포 시 로컬 파일이 유지되지 않기 때문에, 데이터가 유실될 수 있고 다른 서비스에서 동일 데이터를 참조하기도 어렵다. 또한 데이터 처리 결과를 이후 배치 작업이나 분석에 활용하려면 저장 위치가 실행 환경과 분리되어 있어야 했다.

이러한 이유로 S3를 외부 저장소로 사용해 데이터를 안정적으로 보관하고, 여러 환경에서 동일 데이터를 활용할 수 있도록 구조를 변경했다.


이를 위해 Spark DataFrame을 S3에 직접 저장하는 로직을 추가했다.

해당 함수는 배치 단위로 처리된 데이터를 S3에 parquet 형식으로 저장하는 역할을 한다.

주요 처리 흐름

  • 환경변수에서 S3 버킷 및 AWS 설정 값을 읽음
  • Spark의 Hadoop 설정을 통해 S3 접근 정보 구성
  • 배치 단위 데이터를 S3 경로에 저장
  • 저장 결과를 로그로 기록


AWS 접근 정보 관리 (Secret / ConfigMap)

S3에 데이터를 저장하기 위해서는 AWS 접근 정보가 필요하다.
하지만 이러한 값들을 코드에 직접 작성할 경우 보안상 문제가 발생할 수 있기 때문에, Kubernetes의 Secret과 ConfigMap을 활용해 설정을 분리했다.

1) Secret 생성 (민감 정보 관리)

AWS Access Key와 같은 민감 정보는 Secret으로 관리했다.

kubectl apply -f aws-secret.yaml

 

2) ConfigMap 생성 (코드 및 설정 관리)

Spark에서 실행할 Python 코드는 ConfigMap으로 관리했다.

kubectl create configmap spark-code --from-file=preprocessing/outbreak_streaming.py --from-file=preprocessing/emergency_streaming.py --from-file=utils/ -o yaml --dry-run=client | kubectl apply -f -

 


S3 저장 결과 확인

Spark에서 처리된 데이터가 정상적으로 S3에 저장되었는지 확인하기 위해 AWS CLI를 사용해 버킷 내부 데이터를 조회했다.

  • outbreak topic 데이터 조회
aws s3 ls s3://navisafe-data-jh/processed/outbreak/ --recursive

 

  • emergency_alert topic 조회
aws s3 ls s3://navisafe-data-jh/processed/emergency_alert/ --recursive

 

  • AWS 접속 후 S3 버킷 직접 확인


마치며

  • 이번 과정에서는 Spark에서 처리된 데이터를 S3에 저장하도록 구조를 변경고, Kubernetes 환경에서 Secret과 ConfigMap을 활용해 접근 정보와 실행 코드를 분리했다.
  • 또한 AWS CLI를 통해 실제 데이터가 S3에 적재되는 것을 확인하며 데이터 수집 → 처리 → 저장까지 이어지는 흐름이 정상적으로 동작하는 것을 검증했다.
  • 특히 로컬 파일 저장 방식에서 벗어나 S3를 중심으로 저장 구조를 전환함으로써, 실행 환경과 데이터 저장을 분리하고 이후 확장 가능한 형태로 구조를 정리할 수 있었다.
  • 이 과정을 통해 단순 데이터 처리에 그치지 않고, 운영 환경을 고려한 데이터 저장 구조를 구성하는 기준을 정리할 수 있었다.

다음 글

다음 단계에서는 S3에 저장된 데이터를 기반으로 RDS와 연동하여 데이터 적재 구조를 확장할 예정이다.

S3에 적재된 데이터를 그대로 활용하기보다는, 분석 및 조회를 위한 구조로 변환해 RDS에 저장하는 과정이 필요하다.

다음 글에서는

  • RDS 인스턴스 생성 및 접근 설정
  • Kubernetes 환경에서 RDS 연결 구성
  • S3 → RDS 데이터 적재 흐름 구성

을 위한 RDS 환경 세팅 과정을 포스팅할 예정이다.

 

AWS RDS(MySQL)연결을 위한 환경 세팅

AWS RDS를 만들어서 navisafe 기존의 로컬 DB를 클라우드 환경으로 이전해보자.1. AWS RDS 생성AWS 콘솔에 RDS 입력 후 생성 MySQL DB 선택 및 생성 방식 선택현재 로컬 DB가 MySQL이기 때문에 MySQL을 선택하였

jjaehyeok.tistory.com