자원(Resource) 중심의 API 설계:
DTO (Data Transfer Object) 활용:
전역 CORS (Cross-Origin Resource Sharing) 설정:
localhost:5173)가 Spring API 서버(localhost:9000)에 접근할 수 있도록, Spring Boot에 전역 CORS 설정을 추가하여 특정 출처의 요청을 명시적으로 허용했습니다.중첩 라우팅과 레이아웃:
<Outlet /> 컴포넌트를 배치하여, 자식 라우트 컴포넌트가 해당 위치에 렌더링되도록 하는 중첩 라우팅 구조를 구현하여 코드의 재사용성을 극대화했습니다.데이터 페칭 전략: useEffect vs loader:
useEffect 방식: 컴포넌트가 렌더링된 후에 데이터를 요청하는 전통적인 방식. 로딩 상태를 컴포넌트 내부에서 관리해야 합니다.loader 방식: 컴포넌트가 렌더링되기 전에 데이터를 미리 가져오는 최신 방식. loader가 데이터 로딩을 완료하면, 그 결과를 컴포넌트에 전달하여 렌더링을 시작합니다.커스텀 에러 페이지:
errorElement를 추가하여, 존재하지 않는 경로로 접근하거나 loader 실행 중 에러가 발생했을 때 사용자 친화적인 에러 페이지를 보여주도록 처리했습니다.WHERE 절을 생성하는 복잡한 쿼리를, 타입-세이프(Type-safe)하고 가독성 높게 작성하기 위해 QueryDSL을 도입했습니다.useEffect보다 사용자 경험이 우수한 loader를 적극 활용했습니다.