2026 PROJECT / 일상·건강

뭐 먹을 수 있지?

개인의 알레르기 정보와 식품 성분을 비교하는 음식 검색 플랫폼

개발자 한상욱공개일 2026. 06. 23.영상 2:39
Spring BootJavaJavaScriptMariaDBMongoDBRedisNaver CloudNginxThymeleafJPAJWT
재생이 어려운 경우 원본 영상을 확인하세요.YouTube에서 보기 (새 탭)

ABOUT THE PROJECT

프로젝트 소개

뭐 먹을 수 있지?는 사용자의 알레르기 정보를 기반으로 음식을 필터링하여, 식사 시 안전하게 먹을 수 있는 음식을 찾아주는 알레르기 인지 음식 검색 플랫폼입니다.

사용자는 회원가입 시 본인의 알레르기 항목을 등록할 수 있으며, 식품을 검색하면 식품안전처 식품영양성분 API(FoodNtrCpntDbInfo02)를 연동하여 해당 식품의 영양 정보와 알레르기 유발 성분을 조회합니다.

알레르기 판별은 ALLERGY_ITEMS 테이블의 KEYWORDS 컬럼을 기반으로 한 규칙 기반(rule-based) 매칭 방식으로 처리하며, 사용자가 등록한 알레르기 정보와 식품의 성분 키워드를 비교하여 위험 여부를 판단합니다.

식품안전처 API는 FOOD_CD 기준 필터링을 지원하지 않기 때문에, 키워드 검색 후 클라이언트 측에서 foodCode를 매칭하는 방식으로 상세 조회를 구현했습니다.

사용자가 특정 식품이 본인의 알레르기 항목과 겹쳐 위험하다고 판단되는 경우, 대체 가능한 식품을 추천하여 안전한 식사 선택을 돕습니다.

또한 Kakao Maps JavaScript API와 Kakao Local API를 연동하여 사용자 주변의 음식점 정보를 지도 위에 표시하고, 위치 기반으로 안전하게 식사할 수 있는 장소를 탐색할 수 있도록 구성했습니다.

인증/인가는 Spring Security와 BCrypt 비밀번호 암호화를 기반으로 구현했으며, CustomUserDetailsService를 통해 사용자 인증을 처리합니다.

세션 관리는 초기에 JWT 방식을 검토했으나, 최종적으로 Spring Session과 Redis를 연동하는 방식으로 전환하여 세션 기반 인증 구조를 채택했습니다.

사용자의 식품 검색 이력은 MongoDB의 search_logs 컬렉션(SearchLog/SearchLogRepository/SearchLogService)에 저장하여 비정형 검색 로그 데이터를 관리하고, 회원 정보·알레르기 정보 등 정형 데이터는 MariaDB에서 관리합니다.

본 서비스는 Spring Boot 기반 백엔드와 Thymeleaf 기반 서버 사이드 렌더링(SSR)으로 구성된 단일 애플리케이션 구조이며, 별도의 프론트엔드/백엔드 분리 없이 하나의 Spring Boot 애플리케이션에서 화면 렌더링과 비즈니스 로직을 함께 처리합니다.

배포 환경은 Naver Cloud Platform(NCP)의 Rocky Linux 8.10 서버에 구성했으며, Cafe24를 통해 도메인(foodallergy.store)을 등록하고 Nginx를 리버스 프록시로 사용했습니다.

Certbot과 Let's Encrypt를 통해 HTTPS를 적용하여 실제 운영 가능한 형태로 배포를 완료했습니다.

사용 기술

Spring BootJavaJavaScriptMariaDBMongoDBRedisNaver CloudNginxThymeleafJPAJWT
YouTube 원본 프로젝트 설명
❍ 개발자 : 한상욱 ❍ 제목 : 뭐 먹을 수 있지? ❍ 설명 : 뭐 먹을 수 있지?는 사용자의 알레르기 정보를 기반으로 음식을 필터링하여, 식사 시 안전하게 먹을 수 있는 음식을 찾아주는 알레르기 인지 음식 검색 플랫폼입니다. 사용자는 회원가입 시 본인의 알레르기 항목을 등록할 수 있으며, 식품을 검색하면 식품안전처 식품영양성분 API(FoodNtrCpntDbInfo02)를 연동하여 해당 식품의 영양 정보와 알레르기 유발 성분을 조회합니다. 알레르기 판별은 ALLERGY_ITEMS 테이블의 KEYWORDS 컬럼을 기반으로 한 규칙 기반(rule-based) 매칭 방식으로 처리하며, 사용자가 등록한 알레르기 정보와 식품의 성분 키워드를 비교하여 위험 여부를 판단합니다. 식품안전처 API는 FOOD_CD 기준 필터링을 지원하지 않기 때문에, 키워드 검색 후 클라이언트 측에서 foodCode를 매칭하는 방식으로 상세 조회를 구현했습니다. 사용자가 특정 식품이 본인의 알레르기 항목과 겹쳐 위험하다고 판단되는 경우, 대체 가능한 식품을 추천하여 안전한 식사 선택을 돕습니다. 또한 Kakao Maps JavaScript API와 Kakao Local API를 연동하여 사용자 주변의 음식점 정보를 지도 위에 표시하고, 위치 기반으로 안전하게 식사할 수 있는 장소를 탐색할 수 있도록 구성했습니다. 인증/인가는 Spring Security와 BCrypt 비밀번호 암호화를 기반으로 구현했으며, CustomUserDetailsService를 통해 사용자 인증을 처리합니다. 세션 관리는 초기에 JWT 방식을 검토했으나, 최종적으로 Spring Session과 Redis를 연동하는 방식으로 전환하여 세션 기반 인증 구조를 채택했습니다. 사용자의 식품 검색 이력은 MongoDB의 search_logs 컬렉션(SearchLog/SearchLogRepository/SearchLogService)에 저장하여 비정형 검색 로그 데이터를 관리하고, 회원 정보·알레르기 정보 등 정형 데이터는 MariaDB에서 관리합니다. 본 서비스는 Spring Boot 기반 백엔드와 Thymeleaf 기반 서버 사이드 렌더링(SSR)으로 구성된 단일 애플리케이션 구조이며, 별도의 프론트엔드/백엔드 분리 없이 하나의 Spring Boot 애플리케이션에서 화면 렌더링과 비즈니스 로직을 함께 처리합니다. 배포 환경은 Naver Cloud Platform(NCP)의 Rocky Linux 8.10 서버에 구성했으며, Cafe24를 통해 도메인(foodallergy.store)을 등록하고 Nginx를 리버스 프록시로 사용했습니다. Certbot과 Let's Encrypt를 통해 HTTPS를 적용하여 실제 운영 가능한 형태로 배포를 완료했습니다. ❍ 적용 기술 : 프레임워크 : Spring Boot, Spring Security 프론트엔드 : Thymeleaf(SSR), HTML5, CSS, JavaScript 백엔드 : Spring Boot, Spring Security, Spring Data JPA, WebClient(spring-boot-starter-webflux), CustomUserDetailsService 사용 언어 : Java 데이터베이스 : MariaDB(회원/알레르기 정보 등 정형 데이터), MongoDB(검색 로그 비정형 데이터 저장), Redis(Spring Session 기반 세션 관리) 클라우드 : Naver Cloud Platform(NCP, Rocky Linux 8.10) 외부 API : 식품안전처 식품영양성분 API(FoodNtrCpntDbInfo02), Kakao Maps JavaScript API, Kakao Local API 통신 프로토콜 : REST API, HTTPS 웹서버/배포 : Nginx(리버스 프록시), Certbot/Let's Encrypt(HTTPS), Cafe24(도메인), SCP 기반 JAR 배포 인증/보안 : Spring Security, BCrypt 비밀번호 암호화, Spring Session 기반 세션 관리 데이터 접근 기술 : Spring Data JPA 빌드/의존성 관리 : Gradle(Groovy) 기타 : PhysicalNamingStrategyStandardImpl(Hibernate 테이블명 매핑), 불변 객체 패턴(withNewPassword 등) ❍ 아키텍처 : 모놀리식(Monolithic) 구조, SSR(Server Side Rendering) 기반 단일 애플리케이션, Rule-based 알레르기 매칭 로직, 클라이언트 측 데이터 매칭(키워드 검색 + foodCode 매칭) ❍ 블로그 주소 : https://app.notion.com/p/Notion-1c84e7a5c95e800bb0cdfdf4416ae1a3 ❍ github 주소 : https://github.com/hansangwook1 ❍ 도메인 주소 : https://foodallergy.store

공개된 YouTube 설명에 근거한 소개입니다. 설명에 없는 학생 정보나 기능은 추가하지 않습니다.

CONTINUE EXPLORING

기술로 이어지는 작품

모든 작품 보기 ↗

이런 프로젝트를 직접 만들어보고 싶다면

빅데이터소프트웨어공학과 알아보기 (새 탭)