Kotlin + Spring Boot을 사용한 당근마켓 REST API 서버 클론 코딩
https://github.com/jeonghyeon00/kotlin-spring-boot-boilerplate
JWT Boilerplate 사용
- Kotlin
- Spring Boot 2.7.4
- Gradle 7.5
- PostgreSQL
- Spring Data JPA
- Spring Security
- JWT
- Redis
- STOMP
https://dbdiagram.io/d/646304fddca9fb07c425183f
![image](https://private-user-images.githubusercontent.com/56068392/257111402-05e946d6-f466-4f9b-85db-7a2a01d77d6f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjM0NTksIm5iZiI6MTczOTU2MzE1OSwicGF0aCI6Ii81NjA2ODM5Mi8yNTcxMTE0MDItMDVlOTQ2ZDYtZjQ2Ni00ZjliLTg1ZGItN2EyYTAxZDc3ZDZmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDE5NTkxOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyOGU3NWI2NGU3MGI0ZGQ3Njc0NmFiNTdmZDc1ZmIzNDJiOGI3MzMzNDMwOGVmZGU2ZjUyNmFlYzI0ZjA5Y2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wVB3OzX-C6RFPGGyP7M08j-eBHt4DeFvRaemiBxZhB4)
- Spring Security를 활용한 JWT 토큰 사용, Redis를 사용한 RefreshToken 구현
- Authorization Header에 있는 JWT토큰에서 userId를 추출하는 어노테이션 생성하여 사용
- @Formula를 활용해 위시리스트의 등록한 사람의 수 카운팅
- Spring Websocket & STOMP를 활용한 실시간 채팅 및 채팅 내용 저장
- 지역에 기반한 게시글 검색 및 거래 기능
- 게시글 위시리스트 및 리뷰 기능
- 리뷰로 조정되는 매너온도
Hibernate 프록시 적용이 안되고 바로 쿼리문이 나가는 문제
Hibernate는 지연로딩을 위해 Entity들을 상속하여 프록시를 만들어준다. 코틀린에서는 클래스의 기본 상속 제어자가 final이기 때문에 지연로딩으로 설정해도 프록시를 만들지 못하므로 프록시를 사용하지 못하는 문제가 발생한다. 그래서 Kotlin AllOpen 플러그인 적용으로 문제를 해결하였다.