개발 인원: BE 2인, AOS 1인, 풀스택 1인
개발 기간: 2025. 06. ~ 2025. 06. (2주)
Github 바로가기 →
🍚 서비스 소개
전북잇다는 전북특별자치도의 향토음식을 중심으로 한 맞춤형 여행 AI 큐레이션 모바일 앱입니다. 단순한 맛집 추천 서비스가 아닌, 사용자가 원하는 음식과 지역을 선택하면 AI가 최적의 여행 동선을 고려한 맞춤 맞로드 코스를 자동으로 생성해주는 서비스입니다. 스탬프 수집과 인증 기능을 통해 게임적 요소를 더해 사용자의 지속적인 참여와 전북 향토음식 문화 체험을 유도합니다.
👤 담당 역할
- 백엔드 설계 및 개발 (기여도 30%)
- Spring Boot 기반 REST API 아키텍처 설계 및 개발
- JWT 구현
- JWT 토큰 생성, 검증, 갱신 로직 구현
- JWT 토큰 기반 사용자 인증/인가 시스템 설계
- Spring Security와 JWT 연동을 통한 보안 강화
- Android 개발 (기여도 40%)
- 회원가입, 로그인
- 식당/코스 북마크
- 스탬프 수집 및 필터링
- 메인 화면, 향토음식 소개 기능
⚙️ 개발 환경
| 언어 | Java 17, Kotlin |
| 서버 | Docker 27.5.1, Railway |
| 프레임워크 | Spring Boot 3.4.1, Spring Security, JPA, Android SDK |
| DB | MySQL 8.0, Redis |
| IDE | IntelliJ IDEA CE 2024.2.6, Android Studio 2024.2.2 |
| API, 라이브러리 | RESTful API, Retrofit/OkHttp, JWT, AWS SDK(S3), ... |
아키텍처 구성도

주요 기술 선정 이유
Android Hilt
- 복잡한 의존성 관리와 팀 협업 효율성을 위해 선택. Repository, ViewModel 간 자동 주입으로 코드 결합도를 낮추고 테스트 용이성 확보.
DataStore
- 사용자 토큰 및 설정 정보 저장을 위해 선택. SharedPreferences 대신 Flow 기반 비동기 처리와 타입 안전성을 제공하여 안정적인 로컬 데이터 관리.
Docker+Railway
- 컨테이너화된 배포 환경 구축을 위해 선택. GitHub Actions와 연동한 CI/CD 파이프라인으로 코드 변경 시 자동 빌드 및 배포 구현.
AWS S3
- 사용자 업로드 이미지 저장을 위해 선택. 안정적인 클라우드 스토리지로 대용량 이미지 파일 관리와 CDN을 통한 빠른 로딩 속도 제공.
주요 기능 및 목업



성과
팀 성과
- 기획부터 개발, 배포까지 2주 만에 완성도 있는 앱 개발
- 단순 맛집 추천이 아닌 '맛로드 코스' 자동 생성으로 새로운 가치 창출
- 공공데이터 API 연동 및 AI 큐레이션 기능까지 구현한 풀스택 서비스
개인 기여
- Spring Security 기반 JWT 인증/인가 시스템 설계 및 구현
- JWT 토큰 생성, 검증, 블랙리스트 관리 로직 구현
- Spring Security FilterChain과 연동한 커스텀 JWT 인증 필터 개발
- DataStore를 활용한 로컬 데이터 관리 시스템 구현
- Android Hilt 의존성 주입으로 모듈화된 아키텍처 구축
- 의존성 주입을 통한 코드 유지보수성 향상
- 백엔드 개발 경험을 바탕으로 서버-클라이언트 간 원활한 API 연동
회고
- 스탬프 수집 기능에서 실시간 필터링과 진행률 계산 로직을 구현하면서, 사용자 인터페이스에서의 상태 관리와 데이터 동기화의 중요성을 깨달을 수 있었습니다.
- 팀원의 제안으로 Android Hilt를 도입해보면서, 처음에는 복잡해 보였지만 Repository와 ViewModel의 의존성 관리가 자동화되어 코드가 훨씬 깔끔해지는 것을 경험할 수 있었습니다.
- 처음으로 Spring Security와 JWT를 연동한 보안 시스템 구현에 도전하면서 인증 필터 체인과 토큰 검증 로직을 이해하는 과정에서, 웹 보안의 핵심 원리와 인증/인가 시스템에 대한 이해를 얻을 수 있었습니다.
- 백엔드를 담당했다가 이후 Android 개발로 역할을 전환하면서 다소 혼란이 있을 뻔했지만, 서버와 클라이언트 간의 데이터 흐름을 완전히 이해하게 되어 API 설계와 연동에서 더 나은 결과를 낼 수 있었습니다.
Detail
1. Hilt 의존성 주입을 통한 모듈화 아키텍처 구축
이전 프로젝트에서는 Fragment에서 직접 Repository를 생성하고 ViewModel에 전달하는 방식으로 구현했으나, 객체 생성과 의존성 관리가 복잡해지는 문제가 발생했습니다.
이를 해결하기 위해 Hilt 의존성 주입 프레임워크를 도입하여 NetworkModule, ApiModule, DataStoreModule로 계층을 분리했습니다. @Singleton 어노테이션으로 AuthRepository와 StampRepository의 생명주기를 관리하고, @HiltViewModel과 @AndroidEntryPoint를 통해 자동 주입을 구현했습니다. 결과적으로 각 컴포넌트가 필요한 의존성만 주입받아 코드 결합도가 현저히 낮아지고, 개발 효율성이 향상되었습니다.

2. 커스텀 Interceptor를 활용한 API 인증 오류 해결
개발 중 자체 서버 API 호출 시 403 Forbidden 오류가 지속적으로 발생하는 문제에 직면했습니다. 모든 API 요청에 JWT 토큰이 포함되지 않아 서버에서 인증되지 않은 요청으로 처리되었으며, 동시에 공공데이터 API에는 토큰이 불필요한 상황이었습니다.
이를 해결하기 위해 OkHttp의 AuthInterceptor를 구현하여 요청 경로를 분석해 자동으로 토큰을 추가하는 시스템을 구축했습니다. excludedPaths로 로그인/회원가입 경로를 제외하고, 나머지 요청에는 DataStore에서 JWT 토큰을 조회해 "Bearer" 헤더를 자동으로 추가하도록 구현했습니다. 결과적으로 403 오류가 완전히 해결되었으며, 개발자가 매번 수동으로 토큰을 관리할 필요가 없어져 개발 효율성이 크게 향상되었습니다.

'project' 카테고리의 다른 글
| 요비 (YOBI) (0) | 2025.09.05 |
|---|---|
| 러너스 (LEARNAUTH) (0) | 2025.09.05 |
| 레퍼 (REPER) (0) | 2025.09.05 |