Skip to content

JamminTeam/Jamrello

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

269 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ˜Ž Jamrello - ์žฌ๋ฐŒ๋Š” ์žผ๋ ๋กœ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 14 48
์˜ค๋Š˜ ์ผ์€ ๋‚ด์ผ๋กœ? ์žผ๋ ๋กœ์™€ ํ•จ๊ป˜๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ!

๐Ÿ˜Ž ๊ฐœ๋ฐœํ™˜๊ฒฝ

์–ธ์–ด - JDK 17
ํ™˜๊ฒฝ - SpringBoot 3.2.1
๋ฐฐํฌ ํ™˜๊ฒฝ - AWS S3 / EC2 / ELASTICACHE
DB - MySQL 8.1, Redis

๐Ÿ˜Ž ์‹œ์—ฐ ์˜์ƒ

์žผ๋ ๋กœ ์‹œ์—ฐ์˜์ƒ

๐Ÿ˜Ž Links

PostMan
Notion
PPT

๐Ÿ˜Ž Role

Name Role
์กฐ์›ํ˜ธ Catalog API
์•ˆ์ค€์šฐ User API, Auth API
๋ฐ•์ƒ์‹  Board API
๊น€์ง€ํ˜„ Card API
๋ฌธ์ •ํ˜„ Card Detail API

๐Ÿ˜Ž Commit Convention

Tag Name Description
feat ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix ์ด์Šˆ ํ”ฝ์Šค
test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
refactor ๋ฆฌํŒฉํ† ๋ง
!HOTFIX ๋ฉ”์ธ ํ•ซ ํ”ฝ์Šค

๐Ÿ˜Ž Pipeline

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-03 แ„‹แ…ฉแ„’แ…ฎ 3 20 30

๐Ÿ˜Ž UI/UX

image

๐Ÿ˜Ž ERD

image

๐Ÿ˜Ž API ๋ช…์„ธ์„œ

User API

Name Url Method Auth
ํšŒ์›๊ฐ€์ž… /api/members/signup POST None
์ด๋ฉ”์ผ ์ธ์ฆ /api/members/email POST None
๋กœ๊ทธ์ธ /api/members/login POST None
๋กœ๊ทธ์•„์›ƒ /api/members/logout POST Access Token
๋‚ด ์ •๋ณด ๋ณด๊ธฐ /api/members/{memberId} GET Access Token
ํšŒ์› ์ •๋ณด ์ˆ˜์ • /api/members/{memberId} PUT Access Token
ํšŒ์› ํƒˆํ‡ด /api/members/{memberId} DELETE Access Token

Board API

Name Url Method Auth
๋ณด๋“œ์ƒ์„ฑ /api/boards Post Access Token
๋ณด๋“œ์ˆ˜์ • /api/boards/{boardId} Put Access Token
๋ณด๋“œ์‚ญ์ œ /api/boards/{boardId} Delete Access Token
๋ณด๋“œ์ดˆ๋Œ€ /api/boards/{boardId} Post Access Token
๋ณด๋“œ์กฐํšŒ /api/boards/{boardId} Get Access Token
๋ณด๋“œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ /api/boards/{boardId} Put Access Token

Catalog API

Name Url Method Auth
์นดํƒˆ๋กœ๊ทธ ์ƒ์„ฑ /api/boards/{boardId}/catalog Post Access Token
์นดํƒˆ๋กœ๊ทธ ์ด๋ฆ„ ์ˆ˜์ • /api/catalog/{catalogId} Patch Access Token
์นดํƒˆ๋กœ๊ทธ ๋ณด๊ด€ /api/catalog/{catalogId}/keep Patch Access Token
์นดํƒˆ๋กœ๊ทธ ์‚ญ์ œ /api/catalog/{catalogId}/keep Delete Access Token
์นดํƒˆ๋กœ๊ทธ ์ˆœ์„œ ์ด๋™ /api/catalog/{catalogId}/pos Patch Access Token

Card API

Name Url Method Auth
์นด๋“œ์ƒ์„ฑ /api/catalogs/{catalogId}/cards Post Access Token
์นด๋“œ ์ˆ˜์ • /api/cards/{cardId} Patch Access Token
์นด๋“œ ์‚ญ์ œ /api/cards/{cardId} Delete Access Token
์นด๋“œ ๋‹จ๊ฑด ์กฐํšŒ /api/cards/{cardId} Get Access Token
์นด๋“œ ๋ชฉ๋ก ์กฐํšŒ /api/catalogs/{catalogId}/cards Get Access Token
์นด๋“œ ์ž‘์—…์ž ์ถ”๊ฐ€ /api/cards/{cardId}/collaborators Post Access Token
์นด๋“œ ์ž‘์—…์ž ์‚ญ์ œ /api/cards/{cardId}/collaborators/{collaboratorId} Delete Access Token
์นด๋“œ ์ด๋™ (์นดํƒˆ๋กœ๊ทธ ๋‚ด ์œ„์น˜ ์ด๋™) /api/cards/{cardId}/pos Patch Access Token
์นด๋“œ ์ด๋™ (์นดํƒˆ๋กœ๊ทธ ์ด๋™) /api/cards/{cardId}/move Patch Access Token

Comment API

Name Url Method Auth
๋Œ“๊ธ€ ๋‹ฌ๊ธฐ /api/cards/{cardId}/comment Post Access Token
๋Œ“๊ธ€ ์ˆ˜์ • /api/comment/{commentId} Patch Access Token
๋Œ“๊ธ€ ์‚ญ์ œ /api/comment/{commentId} Delete Access Token
๋‚ ์งœ ์ง€์ • /api/card/{cardId}/due Patch Access Token

๐Ÿ˜Ž ํŒŒ์ผ๊ตฌ์กฐ

๐Ÿ“ฆโ”€ย src
ย ย ย ๐Ÿ“ฆโ”€ย main
ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย java
ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย com
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ๐Ÿ“ฆโ”€ย sparta
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย jamrello
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย domain
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย board
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย request
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย response
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย card
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย Service
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย request
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย response
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย  ๐Ÿ“ฆโ”€ย cardCollaborators
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย catalog
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย comment
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย member
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย memberboard
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ย ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ย ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย global
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย annotation
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย config
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย constant
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย exception
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย security
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย jwt
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย time
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย utils
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย s3
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย config
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย dto
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย response
ย ย ย โ”‚ย ย โ”‚ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย resources
ย ย ย ๐Ÿ“ฆโ”€ย test
ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย java
ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย com
ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย sparta
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย jamrello
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย domain
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย board
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย card
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย Service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย catalog
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย comment
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย controller
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย repository
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย entity
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ”‚ย ย ๐Ÿ“ฆโ”€ย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย member
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐Ÿ“ฆโ”€ย controller

๐Ÿ˜Žย Technical Decision

  1. ์ˆœ์„œ ์˜ฎ๊ธฐ๊ธฐ ๋กœ์ง
  • ์‚ฝ์ž… ์ •๋ ฌ
  • Between ๋ฒŒํฌ ์—ฐ์‚ฐ

  1. ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ + ๋นŒ๋” ํŒจํ„ด ์‚ฌ์šฉ
  • ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฉ”์„œ๋“œ ๋ช…์„ ์ง€์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ 
  • ๋นŒ๋” ํŒจํ„ด์„ ์“ธ ๋•Œ, ์žŠ์„ ์ˆ˜๋„ ์žˆ๋Š” ํ•„๋“œ ๊ฐ’์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์œผ๋กœ ์œ„ ํŒจํ„ด ์ฑ„ํƒ

๐Ÿ˜Žย TrubleShooting!

1. ํ†ตํ•ฉ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ชป์ฝ๋Š” ์˜ค๋ฅ˜

๋ฌธ์ œ ์ •์˜ (์›์ธ)

  • ์‚ฌ์‹ค ์ˆ˜์ง‘

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 14 48 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 15 11

    ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ActiveProfiles ์…‹ํŒ…์„ ํ•ด์คฌ๋Š”๋ฐ๋„, ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ชป ์ฝ์–ด์„œ ์‹คํ–‰์ด ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 15 44

    ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์€ ์ž˜ ๋ผ์žˆ๋‹ค

    java.lang.RuntimeException: Driver org.h2.Driver claims to not accept jdbcUrl, ${TEST_DB_URL}
    at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110) ~[HikariCP-5.0.1.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) ~[HikariCP-5.0.1.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:112) ~[HikariCP-5.0.1.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:93) ~[HikariCP-5.0.1.jar:na]

  • ์›์ธ ์ถ”๋ก 
    • ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ค์–ด๊ฐ€๋Š” ํƒ€์ด๋ฐ์ด ๋‹ค๋ฅธ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ ๋œ๋‹ค.
      • ํ†ตํ•ฉ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(application run)์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ฒ€ํ†  (๋ถ„์„)

  1. @TestPropertySource ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ
  2. Configuration ํ›‘์–ด๋ณด๊ธฐ

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ตฌํ˜„ (ํ•ด๊ฒฐ + ๋А๋‚€์ )

  1. @TestPropertySource classPath ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ด๋ดค์ง€๋งŒ ๋ฏธํ•ด๊ฒฐ
  2. Configuration ํ›‘์–ด๋ณด๋‹ค๊ฐ€ Template ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฑธ ๋ฐœ๊ฒฌ
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 16 21 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 16 48 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-02 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 12 17 12

ํ•ด๊ฒฐ!


2. ์—”ํ‹ฐํ‹ฐ ์—ฐ๊ด€ ๊ด€๊ณ„ ๋งคํ•‘ ์˜ค๋ฅ˜

๋ฌธ์ œ ์ •์˜ (์›์ธ)

  • car์™€ catalog์˜ @OneToMany ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์—์„œ card save ํ›„, catalog์˜ cardlist์— card๊ฐ€ ์ž๋™ ์ €์žฅ๋˜์ง€ ์•Š์•„ cardlist๊ฐ€ empty ์ƒํƒœ์ธ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ฒ€ํ†  (๋ถ„์„)

  • ์ผ๋ฐ˜์ ์ธ @OneToMany ๊ด€๊ณ„์—์„œ๋Š” ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ cascadeType.all์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ์ด ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ fetchType์ด Lazy๋กœ ์„ค์ •๋˜๋ฉด ์—ฐ๊ด€ ์—”ํ‹ฐํ‹ฐ๋“ค์ด ์ฆ‰์‹œ ๋กœ๋“œ๋˜์ง€ ์•Š์•„ cardList๊ฐ€ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์™ธ์—๋„ JPA ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Card> cardList = new ArrayList<>();

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "catalog_id")
private Catalog catalog;

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ตฌํ˜„ (ํ•ด๊ฒฐ + ๋А๋‚€์ )

  • ๋”ฐ๋ผ์„œ card๊ฐ€ save๋œ ์ดํ›„, cardlist์— add card๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
cardRepository.save(card);
catalog.getCardList().add(card);

3.ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—์„œ Bean๋“ฑ๋ก์ด ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜

๋ฌธ์ œ ์ •์˜ (์›์ธ)

  • ์‚ฌ์‹ค ์ˆ˜์ง‘

MemberService๋‹จ ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—์„œ WebConfig์˜ ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ jwtUtil์˜ Bean์ด ๋“ฑ๋ก์ด ๋˜์ง€์•Š์•„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์›์ธ ์ถ”๋ก 

ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ ํ•ด๋‹น ์˜ค๋ฅ˜๋Š” Properties๋“ฑ์˜ ์„ค์ • ํŒŒ์ผ์˜ ์ฒ ์ž์˜ค๋ฅ˜, ๋˜๋Š” @Configuration, @Service ๋“ฑ Bean์ปจํ…Œ์ด๋„ˆ๋กœ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋“ฑ๋ก์ด ์•ˆ๋˜์žˆ๊ฑฐ๋‚˜, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋“ฑ ์—ฌ๋Ÿฌ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


์กฐ์น˜ ๋ฐฉ์•ˆ ๊ฒ€ํ†  (๋ถ„์„)

  1. jwtUtil์˜ @Configuration ์—๋…ธํƒœ์ด์…˜์ด ์ฒ ์ž์˜ค๋ฅ˜์—†์ด ์ œ๋Œ€๋กœ ๊ธฐ์ž…๋˜์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๊ฒฐ๊ณผ ์ด์ƒ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  2. Properties์™€ jwtUtil์˜ ์—ฐ๊ฒฐ์ด ์ œ๋Œ€๋กœ ์ด๋ค„์ ธ์žˆ๋Š”์ง€ ํ™•์ธ๊ฒฐ๊ณผ ์ด์ƒ์—†์ด ๊ฐ’์„ ์ž˜ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฒƒ์„ ํ™•์ธ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  3. jwtUtil์˜ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋ฉด๋ฐ€ํžˆ ํ™•์ธํ•ด๋ณธ๊ฒฐ๊ณผ @PostConstruct์—๋…ธํ…Œ์ด์…˜์ด ์‚ฌ์šฉ๋œ key init๋ฉ”์†Œ๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ตฌํ˜„ (ํ•ด๊ฒฐ + ๋А๋‚€์ )

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ™•์ธ๊ฒฐ๊ณผ ์‚ฌ์šฉ๋œ jwtSecretKeY์˜ ๊ฒฝ์šฐ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ์ธ์ฝ”๋”ฉํ•œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ• ๋•Œ "/"์ฒ ์ž๊ฐ€ ์˜ค๊ธฐ์ž…๋˜๋ฉด์„œ ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋””์ฝ”๋”ฉํ• ์ˆ˜์—†์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ฌธ์ œํ•ด๊ฒฐ๊ณผ์ •์—์„œ ๊ฐ™์€ ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ์‹ค์ œ Applicationํ™˜๊ฒฝ์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†์—ˆ๋Š”๋ฐ Applicationํ™˜๊ฒฝ๊ณผ ํ…Œ์ŠคํŠธํ™˜๊ฒฝ ๋‘˜๋‹ค ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ์—ˆ๋Š”๋ฐ ํ…Œ์ŠคํŠธํ™˜๊ฒฝ์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ผ์ผํžˆ ๋ณต์‚ฌ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๋Š” ๊ณผ์ •์—์„œ "/"๋ฌธ์ž๊ฐ€ ๊ฐ™์ด ๊ธฐ์ž…๋œ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜ค๊ธฐ์ž…๋ฌธ์ œ๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.


์ˆœํ™˜์ฐธ์กฐ ์˜ค๋ฅ˜ (spring circular reference)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-01-03 แ„‹แ…ฉแ„’แ…ฎ 3 39 52

๋ฌธ์ œ ์ •์˜ (์›์ธ)

  • ์ˆœํ™˜์ฐธ์กฐ ์˜ค๋ฅ˜(spring circular reference)
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ Database์— ๋ฐ˜์˜์ด ๋˜์—ˆ์ง€๋งŒ controller์—์„œ ์ˆœํ™˜ ์ฐธ์กฐ ์˜ค๋ฅ˜๋กœ response๋ฅผ ๋ฑ‰์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Œ

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ฒ€ํ†  (๋ถ„์„)

  1. apiResponse๋ฅผ Dto๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผํ•จ โ†’ ์ด๋ฏธ ํ•˜๊ณ  ์žˆ์Œ
  2. @Lazy ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ์ž„์˜๋กœ ํ•ด๊ฒฐ โ†’ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•
  3. ๋ฐ˜ํ™˜ํ•˜๋Š” responseDto์— member๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ์—ˆ์Œ

์กฐ์น˜ ๋ฐฉ์•ˆ ๊ตฌํ˜„ (ํ•ด๊ฒฐ + ๋А๋‚€์ )

  1. ๋ฐ˜ํ™˜๊ฐ’์„ memberId๋กœ ๋ณ€๊ฒฝ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors