<aside> 💡 기존 데이터 타입과 호환성 문제

1. UNSIGNED INTAUTO_INCREMENT 사용

2. 날짜 처리 방식 변경

<aside> 💡 INTERESTS 테이블의 중복 컬럼

****✅ 관심사 정보를 하나의 컬럼(interest_name)에 저장

<aside> 💡 Open API 호출 횟수 초과

****✅ BOOK_DETAILS 테이블 추가

<aside> 💡 도서관 검색

1. 중복된 코드 제거 및 메소드 분리

공통된 로직을 메소드로 분리(buildUrl, fetchLibraries, appendIfNotEmpty 등)하여 코드의 반복을 줄이고, 각 메소드가 하나의 역할만 수행하도록 함

2. 예외 처리 및 코드 안정성 강화

데이터가 없을 때 예외를 명확하게 처리할 수 있도록 NoSuchLibraryListException을 생성하여, 빈 리스트를 반환하는 대신 문제가 발생할 경우 예외를 던져 버그를 보다 빠르게 인지하고 해결할 수 있도록 함

3. URL 인코딩 처리 추가

검색어에 공백이나 특수 문자가 포함되어 있을 때 문제가 발생하는 것을 해결하기 위해 urlEncode 메소드를 추가하여 URL 인코딩을 자동으로 처리하도록 함

</aside>

<aside> 💡 Controller에 로직 집중

ex) 책 검색 기능을 구현할 때, URL을 생성하고 외부 API를 호출하고, 결과를 처리하는 모든 로직을 Controller 내에 작성하였음

Controller와 Service, ServiceImpl의 역할 분리

<aside> 💡 일관성 없는 커밋 메세지, 이슈 관리 부재로 인한 작업 흐름 혼란

1. 커밋 메시지 컨벤션 정의 및 적용

notion에 커밋 메시지 컨벤션을 정의하여 커밋 메세지의 일관성을 유지하고, 커밋 로그를 빠르게 이해할 수 있도록 함

2. JIRA를 이용한 이슈 관리 시스템 도입

각 작업을 이슈 단위로 관리하여 작업 세분화, 이슈 생성, 진행 상황 추척, 완료된 작업 관리 등을 명확히 함 (각 이유에 부여된 고유 번호를 통해 커밋 메시지에서 참조)

3. Commit 및 Push 규칙 수립

JIRA와의 연동으로, 각 커밋이 관련된 이슈 번호를 포함하도록 강제하는 규칙을 정하여 무분별한 커밋과 푸쉬 충돌을 최소화함

</aside>

<aside> 💡 보안 개선

세션 관리

URL로 민감 정보 전달하지 않도록 수정

개인정보를 URL 파라미터로 받는 대신 POST 요청의 body로 데이터를 전달받도록 변경

</aside>

<aside> 💡 엔티티 연관관계 및 생성자 리팩토링

<aside> 💡 비지니스 로직 추가를 통한 불필요한 쿼리 요청 제거

</aside>

<aside> 💡 코드 개선

<aside> 💡 연관관계로 인한 쪽지 삭제 문제

<aside> 💡 알라딘 API 파싱

</aside>

<aside> 💡 다중 for문 로직 수정

</aside>

<aside> 💡 오류 처리

</aside>

<aside> 💡 CI/CD

</aside>