<aside> 💡 기존 데이터 타입과 호환성 문제
VARCHAR(255)로 정의되어 있었음✅ 1. UNSIGNED INT와 AUTO_INCREMENT 사용
VARCHAR(255) 에서 UNSIGNED INT ****로 변경함으로써 메모리 사용량을 줄이고, 인덱싱 속도를 높여 데이터베이스의 성능을 최적화함profile_uid, book_uid, message_id 와 같은 식별자 컬럼에 AUTO_INCREMENT 옵션을 적용하여 고유 식별자를 자동으로 관리함으로써, 수동 관리의 불편함을 없애고 고유성을 유지함✅ 2. 날짜 처리 방식 변경
String에서 Date 타입으로 변경하여 올바른 날짜 처리 가능하도록 함
</aside><aside>
💡 INTERESTS 테이블의 중복 컬럼
기존 스키마에서는 각 회원의 최대 5개의 관심사를 모두 별도의 컬럼으로 관리하여, 테이블 설계의 비효율성 문제 초래
ex) 하나의 회원이 설정하는 관심사의 개수를 늘려야 할 경우, 테이블 스키마를 수정해야 하는 상황
****✅ 관심사 정보를 하나의 컬럼(interest_name)에 저장
INTERESTS 테이블을 새롭게 설계하여 각 관심사를 개별 레코드로 관리함으로써, 확장성을 높임 (관심사의 개수와 관계없이 테이블 구조를 변경할 필요가 없어짐)NULL 값을 줄일 수 있는 구조로 개선하여 정규화 수준을 INF와 2NF로 향상시키고, 데이터 무결성을 유지함<aside> 💡 Open API 호출 횟수 초과
****✅ BOOK_DETAILS 테이블 추가
BOOK_DETAILS 테이블을 추가하여, 책의 상세정보(book_title, author, publisher, cover_image_url)을 저장함<aside> 💡 도서관 검색
✅1. 중복된 코드 제거 및 메소드 분리
공통된 로직을 메소드로 분리(buildUrl, fetchLibraries, appendIfNotEmpty 등)하여 코드의 반복을 줄이고, 각 메소드가 하나의 역할만 수행하도록 함
✅ 2. 예외 처리 및 코드 안정성 강화
데이터가 없을 때 예외를 명확하게 처리할 수 있도록 NoSuchLibraryListException을 생성하여, 빈 리스트를 반환하는 대신 문제가 발생할 경우 예외를 던져 버그를 보다 빠르게 인지하고 해결할 수 있도록 함
✅ 3. URL 인코딩 처리 추가
검색어에 공백이나 특수 문자가 포함되어 있을 때 문제가 발생하는 것을 해결하기 위해 urlEncode 메소드를 추가하여 URL 인코딩을 자동으로 처리하도록 함
</aside>
<aside> 💡 Controller에 로직 집중
Controller가 단순히 요청을 받아 응답하는 역할을 넘어, 비즈니스 로직을 직접 처리하고 있었음ex) 책 검색 기능을 구현할 때, URL을 생성하고 외부 API를 호출하고, 결과를 처리하는 모든 로직을 Controller 내에 작성하였음
✅ Controller와 Service, ServiceImpl의 역할 분리
Service를 호출하는 역할만 담당ServiceImpl에 위치<aside> 💡 일관성 없는 커밋 메세지, 이슈 관리 부재로 인한 작업 흐름 혼란
✅ 1. 커밋 메시지 컨벤션 정의 및 적용
notion에 커밋 메시지 컨벤션을 정의하여 커밋 메세지의 일관성을 유지하고, 커밋 로그를 빠르게 이해할 수 있도록 함
✅2. JIRA를 이용한 이슈 관리 시스템 도입
각 작업을 이슈 단위로 관리하여 작업 세분화, 이슈 생성, 진행 상황 추척, 완료된 작업 관리 등을 명확히 함 (각 이유에 부여된 고유 번호를 통해 커밋 메시지에서 참조)
✅3. Commit 및 Push 규칙 수립
JIRA와의 연동으로, 각 커밋이 관련된 이슈 번호를 포함하도록 강제하는 규칙을 정하여 무분별한 커밋과 푸쉬 충돌을 최소화함
</aside>
<aside> 💡 보안 개선
✅ 세션 관리
✅ URL로 민감 정보 전달하지 않도록 수정
개인정보를 URL 파라미터로 받는 대신 POST 요청의 body로 데이터를 전달받도록 변경
</aside>
<aside> 💡 엔티티 연관관계 및 생성자 리팩토링
연관관계를 통한 엔티티 생명주기 관리
→ 회원탈퇴 API 호출 시 기존의 repository.delete() 를 호출하여 연관된 데이터를 지워 데이터 무결성 문제 발생함
연관관계 편의 메서드 리팩토링
→ 연관관계 편의 메서드가 일관되지 않게 구현되어 있었음
생성자 및 접근 제한
→ 생성자와 연관관계 편의 메서드 모두 public으로 접근 제한을 둬 잘못된 객체 생성할 위험 발생
<aside> 💡 비지니스 로직 추가를 통한 불필요한 쿼리 요청 제거
팔로우 수, 팔로잉 수를 불러올 때 매번 쿼리 요청을 했음.
✅ profile 도메인에 팔로우 및 팔로잉 수 속성을 추가하여 API 호출 감소.
</aside>
<aside> 💡 코드 개선
<aside> 💡 연관관계로 인한 쪽지 삭제 문제
<aside> 💡 알라딘 API 파싱
</aside>
<aside> 💡 다중 for문 로직 수정
</aside>
<aside> 💡 오류 처리
</aside>
<aside> 💡 CI/CD
</aside>