Spring Boot와 React Native를 연동
기존에 제작한 만보기 화면에 직접 설계한 백엔드 코드를 연동해본 프로젝트입니다. 백엔드 학습을 위해 인프런 강의를 수강하고 Spring Boot를 사용하여 API 서버를 구축하였으며, **React Native(Expo)**를 통해 안드로이드 앱을 구현하여 실제 데이터를 연동해보는 것을 목표로 했습니다.
- 개발 기간: 2026.02.02 ~ 2026.02.27 (약 4주)
- 개발 인원: 1인 개인 프로젝트
- 참고: 스프링 미니프로젝트 - ERD 작성 과정
스프링 미니프로젝트 - HTTP API 설계 & 개발
스프링 미니프로젝트 - 연동
스프링 미니프로젝트 - 비즈니스 로직
스프링 미니프로젝트 - MySQL
- Java 25 -> Java 21, Spring Boot 4.0.2 -> Spring Boot 3.5.1
- Spring Data JPA, H2 Database (로컬 개발용)
- Gradle
- React Native, Expo
- JavaScript
- Axios (미정)
- IntelliJ IDEA, VS Code
- Git, GitHub
- Postman (API 테스트)
- 회원가입/로그인: JWT 기반 인증 (미정)
- 걸음 수 측정: Expo Sensors를 활용한 실시간 걸음 수 추적
- 포인트 적립: 백엔드 API와 통신하여 포인트 이력 추적
- 쿠폰 구매와 내 쿠폰함: 쿠폰 구매 로직과 내 쿠폰함 조회
추후 예정
- User: 사용자 정보 (id, username, nickname, userPoint)
- StepInfo: 일일 걸음 기록 (user_id, step_count, date)
- CouponInfo: 쿠폰 정보 (user_id, coupon_name, valid_date)
- PointHistory: 이력 정보 (user_id, amount, description, createdAt)
개발 중 발생한 문제와 해결 과정을 기록했습니다.
자바 25 와 부트 4.0.2 에서 자바 21 과 부트 3.5.10 으로 변경하고자 하였습니다. 허나, 기존 단위 테스트를 실행하였을 때 쿼리가 보내지지 않는 문제가 발생하였음을 확인하였습니다. Cannot compare left expression of type 'Member' with right expression of type 'String' 이러한 로그가 뜨는 것을 발견하였고, Member 타입의 member를 String타입으로 검색하려고 하여 오류가 발생하는 것을 인지하였습니다. 비슷한 오류로 Cannot compare left expression of type 'java.time.LocalDate' with right expression of type 'java.lang.String' 도 발견하여 타입을 변경해주니 정상 작동함을 확인하였습니다.
RN Expo와 연동 중에 네트워크 오류를 확인했습니다. 처음엔 스프링 CORS 정책 위반에 따른 문제인 줄 알았으나, API 경로가 잘못 설정되었음을 확인했습니다. 에러 코드 전체를 프론트엔드 코드에 있는 로그에서 확인해서 스프링이 리소스를 찾지 못하고 있음을 인지하고 api 주소를 바꿔주니 간단히 해결할 수 있었습니다.
MySQL로 변경한 후 포인트 이력을 조회하는 과정에서 발생했습니다. 구글링과 AI를 활용해서 이 오류는 숫자가 아닌 문자열을 정수나 숫자 데이터로 바꿀 때 발생하는 것을 확인했습니다. PointHistoryRepository에서 findById를 findByMemberId 로 변경하였더니 해결되었습니다. findById는 테이블 내의 PK를 찾아가는 JpaRepository에서 제공하는 기본 메서드이고 findByMemberId는 직접 규칙에 맞게 작성한 커스텀 쿼리 메소드였습니다. Id에 문자열이 들어가서 NumberFormatException가 발생했던 것이였습니다.
- 김영한 님의 스프링 강의에서 배운 JPA의 영속성 컨텍스트 개념을 실제로 적용해 보며, 엔티티 업데이트 시점이 언제 발생하는지 직접 확인할 수 있었습니다.
- @DataJpaTest를 통해 웹 상으로 구현하지 않아도 테스트가 가능함을 확인했습니다. 스프링 데이터 JPA가 서버를 작동시켜 h2 데이터베이스를 사용하여 검증합니다.
| 타입 | 설명 |
|---|---|
| feat | 새로운 기능 추가 |
| fix | 버그 수정 |
| docs | 문서 수정 (README, 주석, 가이드 등) |
| style | 코드 포맷팅, 세미콜론 누락, 오타 수정 (로직 변경 없음) |
| refactor | 코드 리팩토링 (기능 변경 없이 구조만 개선) |
| test | 테스트 코드 추가/수정 |
| chore | 빌드 설정, 패키지 매니저 설정, 라이브러리 추가 (코드 변경 없음) |
cd backend
./gradlew bootRun