user_preference_id BIGINT
preferred_book_id INT
ML 팀에서 추천 벡터 생성을 위해 user_book_read 테이블을 참고하고 있음
→ 따라서 설문 데이터가 이 테이블에 있어야 벡터 생성이 가능
따라서 회원가입 설문 결과도 user_book_read에 넣어달라는 요청이 들어옴.
A안. 기존 테이블 삭제하고 user_book_read로 통합
장점
- 데이터 중복 관리 필요 없음
- ML에서 바로 활용 가능
단점
- 설문 데이터와 실제 읽은 책을 구분하기 어려움
- 과거 데이터 마이그레이션 필요
B안. 기존 테이블 유지 + 백엔드에서 user_book_read에 동시 insert
장점
- 설문 통계나 별도 처리 시 user_preference_book_id 유지 가능
- ML도 바로 활용 가능
단점
- 데이터 중복 관리 필요
- 설문 데이터를 두 테이블에 모두 저장해야 함
나는 ML 추천 기능이 최우선이고, 해당 설문 조사 데이터를 쓸 곳은 없기 때문에 A안을 선택했다.
1. DB 마이그레이션
INSERT INTO user_book_read (user_id, book_id, source, created_at)
SELECT up.user_id, up.preferred_book_id, 'SURVEY', NOW()
FROM user_preference_book_id up;
‼️ 여기서 마이그레이션이란?
: 데이터베이스에서 데이터를 옮기거나, 스키마를 변경하는 작업.
테이블 구조를 바꿀 때, 데이터를 다른 테이블로 이동할 때,컬럼 추가/삭제/이름 변경 등 스키마 변경를 할 때 사용된다.
2. 테이블 삭제
DROP TABLE user_preference_book_id;
3. 백엔드 코드 수정
이상 이렇게 DB 관련 리팩토링은 마무리했다..
그리고 다음으로 해야할 일

우선은 유저 벡터 생성 API 호출을 진행해야한다.
벡터 생성 시점
1. 회원가입 질문(취향 설문) 완료 시
2. user_book_read에 도서가 새로 추가될 때 (설문 포함, 이후 독서 기록 포함)
호출할 API
POST /api/users/{user_id}/generate-vector
성공: { "message": "유저 벡터 생성 완료" }
실패: { "message": "벡터 생성 실패" }
이 부분부터는 아래 글에서 진행했다.
유저 벡터 생성 자동 호출 구현 + RestTemplate Apache 오류 해결