프로젝트 개요
행샤는 서울대학교 비교과 행사 정보를 더 쉽게 찾고 관리할 수 있도록 만든 캘린더 서비스입니다. 기존 플랫폼에서 행사 정보를 찾기 어렵다는 문제를 보고, 캘린더 뷰, 필터링, 북마크, 시간표 연동, 메모 기능을 제공했습니다.
행사 데이터를 수집/정규화하고, 이를 월별 캘린더, 일별 목록, 검색, 상세 조회 API에서 사용할 수 있도록 백엔드 흐름을 구현했습니다. 사용자 관심 카테고리와 제외 키워드를 조회 결과에 반영하고, 크롤러를 배치 작업으로 분리해 주기적으로 데이터를 갱신할 수 있게 했습니다.
담당 내용
- 전체 DB 스키마를 설계 및 유지보수하고, 크롤링 로직과 API를 문서화하여 협업에 기여했습니다.
- 월별 캘린더, 일별 행사 목록, 행사 검색, 행사 상세 조회 등 행사 관련 API를 구현했습니다.
- 사용자 관심 카테고리와 제외 키워드를 반영한 행사 정렬/필터링 로직을 구현했습니다.
- 서울대 비교과 사이트의 목록/상세 페이지를 분석해 행사 정보와 세부 회차를 파싱했습니다.
- 행사 이미지와 상세 설명 내부 이미지를 OCI Object Storage에 저장하고, HTML 내부 이미지 경로를 교체했습니다.
- 크롤러를 batch 모듈로 분리하고 Docker/Kubernetes CronJob 기반 주기 실행 구조에 맞게 정리했습니다.
- 중복 행사 생성, 세션 없는 행사 처리 오류, SQL 조회 오류, 상세 페이지 로딩 전 파싱 문제 등 다양한 문제에 대응했습니다.
설계상 과제
가장 먼저 정리해야 했던 것은 외부 사이트에서 가져온 행사 데이터를 서비스의 조회 흐름에 맞는 형태로 만드는 일이었습니다. 목록/상세 페이지에서 행사 정보를 수집한 뒤, 행사 기간, 신청 기간, 회차 정보, 모집 상태, 주관 기관 등을 DB 스키마에 맞게 정규화하고, 월별 캘린더/일별 목록/검색/상세 조회 API에서 같은 기준으로 사용할 수 있도록 조회 조건을 정리했습니다.
또한 사용자 관심 카테고리와 제외 키워드를 반영해 행사 목록의 정렬과 필터링이 달라지도록 처리했습니다. 활동 기간만 보던 기존 조회 로직에는 신청 기간 조건도 함께 반영해, 캘린더와 목록에서 누락되는 행사를 줄였습니다.
운영 환경에서는 DB를 초기화하고 다시 크롤링하는 방식이 아니라, 기존 데이터를 유지한 채 스키마 변경과 기능 추가를 반영해야 했습니다. 그래서 마이그레이션으로 관리해야 하는 기준 데이터와 외부 사이트 상태에 따라 계속 바뀌는 행사 데이터를 구분했고, auto increment ID 대신 신청 링크, 행사 기간, 회차 정보처럼 환경이 달라도 유지되는 값을 기준으로 기존 데이터와 신규 데이터를 매칭하도록 정리했습니다.
미리보기
행사 탐색, 필터링, 개인화 기능을 캘린더 중심으로 사용할 수 있도록 만든 화면입니다.