먼저 전체적인 파이프라인은 아래와 같음
클라우드 수업 취지에 맞게 최대한 클라우드 솔루션을 활용해 아키텍처 설계를 진행해보고 다양한 솔루션을 사용해보는 것에 의의를 두었음

내가 맡은 부분은 아래와 같이 데이터 아키텍처 부분임

왜 데이터 파이프라인이 필요한가?
서울시 공공데이터포털의 일반 음식점 인허가 정보 데이터를 주기적으로 수집하여(배치), 서비스(FoodDonor)내에서 DB로 활용하고자 하였음
비즈니스적 관점
데이터 최신화가 필요하기 때문임
즉, 공공데이터는 실시간으로 업데이트가 되는 정보가 아니기에, 이미 폐업을 하거나 장사를 하지 않는 오래된 정보가 존재함
즉, 실제 기부가 가능한 유효한 데이터의 필터링이 필요함
데이터의 신뢰성를 보장할 수 있음
필터링된 데이터로 인해 오류가 발생했을 때, 원본 데이터와의 대조를 통해 오류의 원인을 찾을 수 있음
외부 데이터(Source) 변경 시 미리 저장을 해둔 원본 데이터와의 비교를 통해 데이터 품질을 보장할 수 있음
기술적 관점
시스템의 안정성
국가정보자원관리원 화재로 인해 공공데이터 API의 호출이 불가했음
미리 확보한 데이터를 사용하여 서비스를 지속적으로 운영할 수 있으며, 장애 격리를 수행할 수 있음
낮은 비용
데이터 수집은 배치 처리를 수행하기에, 수집을 위한 리소스를 24시간 운영시킬 필요가 없음
또한 데이터 스캔에 있어 Parquet형식을 통해 스캔의 범위와 데이터 양이 줄어들어 해당 리소스를 최적화 할 수 있음
데이터 수집
먼저 광진구 음식점 데이터를 예로 들어보면 아래와 같이 사용 했음

물론 다른 필드도 있었지만, 우리가 서비스에 사용할 필드는 이 정도면 충분했기에 사전 필터링 작업이 필수적이 었음
이런 데이터들은 실시간으로 업데이트가 되는 것이 아니기에 AWS의 EventBridge를 통해 스케줄 작업을 설정했음

예를 들어 이렇게 스케줄링을 설정해주면 됨
데이터 레이크 구조
여기서 원본 데이터를 보관하는 S3가 있음
Glue코드에 오류가 발생하여 데이터를 잘못 가공하면 다시 source로부터 데이터를 호출해야하하는 문제가 발생함
또한 추후에 지금 쓰는 데이터 형식이 아닌 다른 형식으로의 수정을 위해서 source로부터 호출을 다시 해야하는 문제 또한 해결할 수 있음
필터링된 데이터는 다시 한번 S3에 저장 됨
이렇게 2-Stage 구축도 하지만, 단계 구분없이 한번에 처리를 하는 ETL을 사용하기도 함
즉, Glue없이 Raw Data가 있는 S3에서 Athena가 직접 JSON을 쿼리 수행함
물론 쿼리를 할때 느리고 비용이 올라가는 단점이 발생함
우리의 프로젝트 목적을 보면 "최소비용 보장" 그렇기에 2-Stage단계 구성이 적합하다고 판단을 하였음
그리고 Raw데이터를 뜯어보면 Field에 맞춰 데이터들이 모두 맞게 들어가 있는 것이 아니었음...
그렇기에 정제 과정을 거친 S3를 통해 쿼리 수행시 발생하는 에러를 낮추는 역할도 수행하였음
메타데이터 관리
Glue의 restaurants Table의 스키마는 아래와 같음

식당의 Table들은 실제로는 S3에서 관리 되고 있음

Athena가 쿼리를 통한 스캔을 수행할때 S3에 바로 가서직접 수행하는게 아니라 Glue의 Data Catalog를 먼저 바라보게 됨
이 Data Catalog를 먼저 보고 S3로 이동해서 데이터를 뽑아오게 됨
업그레이할 부분
현재 회원가입을 할때 기부자의 식당을 고를 수 있는 UI 부분이 있음

이렇게 식당의 위치를 자동으로 넣어주는 부분인데, 이걸 Athena를 통해 쿼리를 수행해서 가져오고 있음
이때 식당을 검색해서 넣게되면 4초 이상의 지연이 발생하고 있는 것을 자주 확인할 수 있었음
이를 개선하기 위해 DynamoDB에서 조회를 하면 개선이 될 것이라고 생각을 하고 있음
Athena는 OLAP이기에, 웹 서비스용인 OLTP에 적합하지 않음
즉, Glue단계에서 식당 데이터만을 따로 저장을 하게하고, 이를 호출하는 서버는 DynamoDB를 바라보도록 설계를 바꾸면 지연 시간을 줄일 수 있을 거임
'데이터 > 아키텍처' 카테고리의 다른 글
| FoodDonor CDC 도입 (0) | 2026.01.16 |
|---|---|
| 메타데이터 계층 아키텍처(2) (0) | 2025.11.07 |
| 메타데이터 계층 아키텍처(1) (0) | 2025.11.04 |
| 공통 데이터 처리 단계 (0) | 2025.11.02 |
| 클라우드 스토리지 구성(1) (0) | 2025.10.30 |