Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
470 commits
Select commit Hold shift + click to select a range
feb3356
refactor: ๊ฒฐ์ œ ์ค€๋น„ ๋ฉ”์„œ๋“œ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ฉฑ๋“ฑํ‚ค ์ œ๊ฑฐ (#75)
kimsehee-8135 Apr 22, 2026
ca75529
feat: service test์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
8deb8a0
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
7a8d4d1
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
fd09074
refactor: my/reviewsํŽ˜์ด์ง€ ์—ฐ๋™์„ ์œ„ํ•œ href์ˆ˜์ •
jhwan1205-sys Apr 22, 2026
ec1b409
feat: ์‹œ๋‹ˆ์–ด๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์œ„ํ•œ dto,service
jhwan1205-sys Apr 22, 2026
1616a69
feat: service test์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
e91c8b1
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
941cb7c
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
738a76c
refactor: my/reviewsํŽ˜์ด์ง€ ์—ฐ๋™์„ ์œ„ํ•œ href์ˆ˜์ •
jhwan1205-sys Apr 22, 2026
44e866b
Merge remote-tracking branch 'origin/feat/#69-feedback-received-by-thโ€ฆ
jhwan1205-sys Apr 22, 2026
c512899
refactor: ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฐฉ์‹์„ queue ๋ฐฉ์‹์œผ๋กœ ์—…๋ฐ์ดํŠธ
Apr 22, 2026
87b299d
refactor: fallbackExecution = true ์ถ”๊ฐ€ ๋ฐ queue ์ „๋‹ฌ ๋ฐฉ์‹ ๊ตฌํ˜„
Apr 22, 2026
c27d857
refactor: queue ์ „๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
Apr 22, 2026
d0211a0
refactor: OrderService์— ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋ณธ๊ฐ’ ์ ์šฉ (#75)
kimsehee-8135 Apr 22, 2026
659a6a1
feat: db ์ดˆ๊ธฐํ™” ๋กœ์ง ์ถ”๊ฐ€
Apr 22, 2026
0f24020
feat: reviews ํŽ˜์ด์ง€ Pageable๊ธฐ๋Šฅ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
cc51e91
Merge remote-tracking branch 'origin/feat/#69-feedback-received-by-thโ€ฆ
jhwan1205-sys Apr 22, 2026
207c14b
Merge pull request #77 from prgrms-aibe-devcourse/feat/#66-chat-room-โ€ฆ
hsb4225 Apr 22, 2026
7d04dbf
feat: ์‹œ๋‹ˆ์–ด๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์œ„ํ•œ dto,service
jhwan1205-sys Apr 22, 2026
b020922
feat: service test์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
f598715
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
01db5bc
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
5b2c7de
refactor: my/reviewsํŽ˜์ด์ง€ ์—ฐ๋™์„ ์œ„ํ•œ href์ˆ˜์ •
jhwan1205-sys Apr 22, 2026
5b3904e
feat: reviews ํŽ˜์ด์ง€ Pageable๊ธฐ๋Šฅ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
ad5e31a
feat: Toss /success ํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์†Œ ๊ฒ€์ฆ ์ถ”๊ฐ€ (#75)
kimsehee-8135 Apr 22, 2026
9ea7a4b
refactor: ๋ฌธ์ž์—ด ๊ฒ€์ฆ StringUtils ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๋กœ ๋ณ€๊ฒฝ (#75)
kimsehee-8135 Apr 22, 2026
7ce16be
refactor: TossPaymentController๋ฅผ RestController๋กœ ๋ณ€๊ฒฝ (#75)
kimsehee-8135 Apr 22, 2026
7a4983c
Merge remote-tracking branch 'origin/feat/#69-feedback-received-by-thโ€ฆ
jhwan1205-sys Apr 22, 2026
f95b221
refactor: ์ฃผ๋ฌธ ๊ด€๋ จ ErrorCode ์„ธ๋ถ„ํ™”
kimsehee-8135 Apr 22, 2026
271f448
refactor: idempotencyKey ๊ธธ์ด ๊ฒ€์ฆ ์ถ”๊ฐ€ (#75)
kimsehee-8135 Apr 22, 2026
b782ebf
Merge pull request #80 from prgrms-aibe-devcourse/refactor/#75-toss-pโ€ฆ
kimsehee-8135 Apr 22, 2026
b1c365d
feat: ์‹œ๋‹ˆ์–ด๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์œ„ํ•œ dto,service
jhwan1205-sys Apr 22, 2026
5ab0b53
feat: service test์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
6f325e2
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
fc94837
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
068fefa
refactor: my/reviewsํŽ˜์ด์ง€ ์—ฐ๋™์„ ์œ„ํ•œ href์ˆ˜์ •
jhwan1205-sys Apr 22, 2026
9ce0b41
feat: reviews ํŽ˜์ด์ง€ Pageable๊ธฐ๋Šฅ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
52b36d8
feat: ์‹œ๋‹ˆ์–ด๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์œ„ํ•œ dto,service
jhwan1205-sys Apr 22, 2026
f8e28d4
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
c41ac3a
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
2c60434
feat: reviews ํŽ˜์ด์ง€ Pageable๊ธฐ๋Šฅ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
c051d8c
feat: ์‹œ๋‹ˆ์–ด๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์œ„ํ•œ dto,service
jhwan1205-sys Apr 22, 2026
ec7a82e
feat: service test์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
f402999
feat: my/reviews ๋ฐ›์€ ํ›„๊ธฐ๋ฅผ ์ „์ฒด ๋ชฉ๋ก
jhwan1205-sys Apr 22, 2026
6901cc0
feat: reviews ํŽ˜์ด์ง€ ๊ตฌํ˜„
jhwan1205-sys Apr 22, 2026
8682cbc
feat: ๋ณ„์  ๋ฐ˜์˜ฌ๋ฆผ ํ•œ ๊ฐ’์œผ๋กœ ๋ณ„ ํ‘œ์‹œ
jhwan1205-sys Apr 22, 2026
6499836
Merge remote-tracking branch 'origin/feat/#69-feedback-received-by-thโ€ฆ
jhwan1205-sys Apr 22, 2026
a5b9537
fix: rebase๊ณผ์ •์—์„œ ๋‚ ๋ผ๊ฐ€์„œ ๋‹ค์‹œ ์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
d8d685a
test: ์ฃผ๋ฌธ ์ƒํƒœ ์ „์ด ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ (#81)
kimsehee-8135 Apr 22, 2026
2493c95
Merge pull request #79 from prgrms-aibe-devcourse/feat/#69-feedback-rโ€ฆ
jhwan1205-sys Apr 22, 2026
22ec2a3
์œ ์ €๊ฐ„ ์‹ค์‹œ๊ฐ„ ์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€ ๋กœ์ง ์ถ”๊ฐ€
Apr 22, 2026
cd36da7
refactor: queue ์ „์†ก ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
Apr 22, 2026
34a93b9
feat: chatRoomStatus๊ฐ€ closed์ผ ๊ฒฝ์šฐ th:if๋กœ ์ฑ„ํŒ…์ฐฝ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ „ํ™˜
Apr 22, 2026
1020205
feat: ์ฑ„ํŒ…๋ฐฉ ์ฝ๊ธฐ ์ „์šฉ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ ๋ฐ model์— chatroomStatus ์ „๋‹ฌ ์ถ”๊ฐ€
Apr 22, 2026
9cf0704
Merge branch 'develop' of https://github.com/prgrms-aibe-devcourse/AIโ€ฆ
Apr 22, 2026
eede1fc
Merge pull request #83 from prgrms-aibe-devcourse/refactor/#81-order-โ€ฆ
kimsehee-8135 Apr 22, 2026
25a86da
Merge pull request #84 from prgrms-aibe-devcourse/feat/#78-chat-room-โ€ฆ
hsb4225 Apr 22, 2026
dce729f
fix: ์‹œ๋‹ˆ์–ด ์ง€์› ํŽ˜์ด์ง€์— ๋น„๋กœ๊ทธ์ธ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ˆ˜์ • (#85)
kimsehee-8135 Apr 22, 2026
fb809aa
fix: ์‹œ๋‹ˆ์–ด ์ง€์› ํŽ˜์ด์ง€์˜ CTA ์˜์—ญ์„ ์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌ ๋ Œ๋”๋ง (#85)
kimsehee-8135 Apr 22, 2026
c577bf1
fix: ํ—ค๋” ์ƒ๋‹จ์— ๊ณ ์ •, ์—ญํ•  ๋ฑƒ์ง€ UI ์ˆ˜์ • (#85)
kimsehee-8135 Apr 22, 2026
c778a8b
fix: ์‹œ๋‹ˆ์–ด ์ƒ์„ธ ํ”„๋กœํ•„ ํŽ˜์ด์ง€ UI ์ˆ˜์ • (#85)
kimsehee-8135 Apr 22, 2026
83c3ef5
feat: ๋ฉ˜ํ† ๋ง ํŽ˜์ด์ง€ ์ถœ๋ ฅ์„ ์œ„ํ•œ dto
jhwan1205-sys Apr 22, 2026
cfe3969
feat: ์ด๋‹ฌ์˜ ํ™œ๋ฐœํ•œ ์‹œ๋‹ˆ์–ด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•œ jquery์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
f1764eb
feat: ๋ฉ˜ํ† ๋ง ํŽ˜์ด์ง€ repository์ถ”๊ฐ€
jhwan1205-sys Apr 22, 2026
723041c
feat: ๋ฉ˜ํ† ๋ง ๋‚ด์—ญ ํŽ˜์ด์ง€ Controller
jhwan1205-sys Apr 22, 2026
91ccecb
feat: ๋ฉ˜ํ† ๋ง ํ›„๊ธฐ ํŽ˜์ด์ง€ html, href์ˆ˜์ •
jhwan1205-sys Apr 22, 2026
7699baa
Merge pull request #86 from prgrms-aibe-devcourse/fix/#85-senior-applโ€ฆ
kimsehee-8135 Apr 22, 2026
b17506e
Dto memberId ์ถ”๊ฐ€, ์ฑ„ํŒ…์ฐฝ ๋ฉ”์‹œ์ง€ ์ตœ์ ํ™”
devken65 Apr 22, 2026
d563308
Merge branch 'develop' into feat/#76-chatroom-redirect-load
devken65 Apr 22, 2026
2140188
Merge pull request #87 from prgrms-aibe-devcourse/feat/#82-metoring-rโ€ฆ
jhwan1205-sys Apr 22, 2026
52a51f6
fix: ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด ๋ฉ”์‹œ์ง€ ์ „์†ก ๋กœ์ง์„ Service๋กœ ์ด์ „
kimsehee-8135 Apr 22, 2026
70cff62
Merge pull request #88 from prgrms-aibe-devcourse/feat/#76-chatroom-rโ€ฆ
jhwan1205-sys Apr 23, 2026
35fb45e
feat: ์ƒ์„ฑ์ž ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€
Apr 23, 2026
89d4623
fix: STOMP ์—ฐ๊ฒฐ ์‹œ JWT ์ธ์ฆ ํ•„ํ„ฐ ์ถฉ๋Œ ์ด์Šˆ ํ•ด๊ฒฐ
Apr 23, 2026
b873777
fix: STOMP ์ „์—ญ ํ”„๋ ˆ์ž„ ์œ ์ €(Principal) ์ธ์ฆ ๋ˆ„๋ฝ ๋ฌธ์ œ ํ•ด๊ฒฐ
Apr 23, 2026
b64b1cf
test: ์ฑ„ํŒ… ๋„๋ฉ”์ธ(Message, Room) ์„œ๋น„์Šค ๊ณ„์ธต ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
Apr 23, 2026
41323e1
test: ์ฑ„ํŒ…๋ฐฉ ์‹œ์Šคํ…œ ์•Œ๋ฆผ ๋ฐœ์†ก ๋กœ์ง ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
Apr 23, 2026
2c19753
test: ์ฑ„ํŒ… ๋„๋ฉ”์ธ STOMP ์›น์†Œ์ผ“ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
Apr 23, 2026
d9ec791
Merge pull request #92 from prgrms-aibe-devcourse/feat/#73-chat-domaiโ€ฆ
hsb4225 Apr 23, 2026
e45053f
feat: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ FileStorageService์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
d5c1dd0
feat: uploadProfile service์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
3b8bc63
feat: profile upload, ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ postMapping์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
8a67fe0
feat: fileStoreage๋ฅผ ์œ„ํ•œ config
jhwan1205-sys Apr 23, 2026
3ef535a
feat: ์ด๋ฏธ์ง€ ์ˆ˜์ • ๋งค์„œ๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
c066fb6
feat: ์ด๋ฏธ์ง€ ์ˆ˜์ •์„ ์œ„ํ•œ profileImageUrl์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
1363392
feat: html์ฝ”๋“œ์—์„œ ์ด๋ฏธ์ง€, ๋‹‰๋„ค์ž„ ์ˆ˜์ • ๋ชจ๋‹ฌ ์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
c5c9fe7
fix:์ˆ˜์ • ์˜ค๋ฅ˜๋กœ ์ธํ•œ rollback
jhwan1205-sys Apr 23, 2026
33fef4d
feat: ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก dto ์ถ”๊ฐ€
Apr 23, 2026
bd106d0
refactor: error์ฝ”๋“œ ์ถ”๊ฐ€๋กœ ํšŒ์›๊ฐ€์ž…์—์„œ๋„ ์ถ”๊ฐ€ ๋ณ€๊ฒฝ
jhwan1205-sys Apr 23, 2026
7c2eb4d
feat: ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ธ ๋ทฐ ์ „์šฉ dto ์ƒ์„ฑ
Apr 23, 2026
ec54d55
feat: MemberServiceTest์ฝ”๋“œ ์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
1de02d3
refactor: ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๊ถŒํ•œ ๊ฒ€์ฆ, ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก ๋“ฑ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ
Apr 23, 2026
6cc5de9
Merge pull request #94 from prgrms-aibe-devcourse/feat/#90-member-proโ€ฆ
jhwan1205-sys Apr 23, 2026
1a01d77
refactor: ChatMessageService ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์บก์Аํ™” ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ 
Apr 23, 2026
8fbe298
refactor: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌํ•˜์—ฌ controller ๋ฆฌํŒฉํ† ๋ง
Apr 23, 2026
26a0dfc
refactor: ๋ณ€๊ฒฝ๋œ service ์ฝ”๋“œ ํ…Œ์ŠคํŠธ ๋ฐ˜์˜
Apr 23, 2026
857c837
Merge branch 'develop' of https://github.com/prgrms-aibe-devcourse/AIโ€ฆ
Apr 23, 2026
354cdc0
Merge pull request #95 from prgrms-aibe-devcourse/refactor/#93-chat-cโ€ฆ
hsb4225 Apr 23, 2026
f3cffa1
fix(design): ๊ณ ์ •๋œ ํ—ค๋” ๋•Œ๋ฌธ์— ์ฑ„ํŒ…๋ฐฉ ๊ฐ€๋ ค์ง€๋Š” ๋ถ€๋ถ„ ํ•ด๊ฒฐ (#91)
kimsehee-8135 Apr 23, 2026
56b4ee2
feat: ChatMessageResponse DTO์— ํ•„๋“œ ์ถ”๊ฐ€ (#91)
kimsehee-8135 Apr 23, 2026
dcfd447
feat: ChatEventListener์— PAYMENT_REQUESTED amount ์ฃผ์ž… (#91)
kimsehee-8135 Apr 23, 2026
12b0c16
feat: ๊ณผ๊ฑฐ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์กฐํšŒ API ์‘๋‹ต์— referenceId/amount ์ถ”๊ฐ€ (#91)
kimsehee-8135 Apr 23, 2026
60aadd5
feat: ์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ API์— ์—ญํ• /์ฃผ๋‹ˆ์–ดID/์ฃผ๋ฌธ๊ธˆ์•ก ๋ชจ๋ธ ์ „๋‹ฌ (#91)
kimsehee-8135 Apr 23, 2026
bb3c030
feat: ๊ณผ๊ฑฐ ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ๋ Œ๋”๋ง์— PAYMENT_REQUESTED ๋ถ„๊ธฐ ์ถ”๊ฐ€ (#91)
kimsehee-8135 Apr 23, 2026
3f070f9
refactor: ์ฑ„ํŒ… WebSocket ๋กœ์ง์„ chat.js๋กœ ๋‹จ์ผํ™”ํ•˜๊ณ  ๊ฒฐ์ œ ๋ฒ„ํŠผ ์—ญํ•  ๊ฐ€๋“œ ์ถ”๊ฐ€ (#91)
kimsehee-8135 Apr 23, 2026
53f18a9
feat: ์‹œ๋‹ˆ์–ด ์ „์šฉ '๊ฒฐ์ œ ์š”์ฒญํ•˜๊ธฐ' ๋ฒ„ํŠผ ์ถ”๊ฐ€ ๋ฐ chat.js ์ •๋ฆฌ (#91)
kimsehee-8135 Apr 23, 2026
0212ed5
feat: ๊ฒฐ์ œ ๊ธˆ์•ก ์„ค์ • ๋ชจ๋‹ฌ UI/CSS + ์ œ์ถœ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„ (#91)
kimsehee-8135 Apr 23, 2026
6b75d5f
refactor: ChatController ๋ฉ”์„œ๋“œ ์ด๋ฆ„, chat.js์˜ ๊ธˆ์•ก ์ƒํ•œ๊ฐ’ ๋ณ€๊ฒฝ (#91)
kimsehee-8135 Apr 23, 2026
60840dc
refactor: chat_massage์˜ message_type์„ VARCHAR(64)๋กœ ๋ณ€๊ฒฝ
kimsehee-8135 Apr 23, 2026
73f39c6
refactor: ๊ฐœํ–‰ ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ, ๋ชจ๋‹ฌ์ฐฝ UI ๊ฐœ์„  (#91)
kimsehee-8135 Apr 23, 2026
1ceb5b6
fix: rebase ํ›„ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ, ๋ˆ„๋ฝ๋œ ์ฝ”๋“œ ์ถ”๊ฐ€ (#91)
kimsehee-8135 Apr 23, 2026
7ce38ca
fix: ๋นŒ๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ • (#91)
kimsehee-8135 Apr 23, 2026
9997098
refactor: ๋ฒ„ํŠผ ํ…์ŠคํŠธ ๋ณ€๊ฒฝ ๋ฐ hover ํšจ๊ณผ ์ถ”๊ฐ€
Apr 23, 2026
caee9b3
refactor: ๋ฆฌ๋ทฐ ์นด๋“œ ๊ฒฝ๋กœ ์ˆ˜์ •
Apr 23, 2026
327037f
refactor: ๋ฉ˜ํ† ๋ง ์ธ์‚ฌ์ดํŠธ ์ œ๊ฑฐ ๋ฐ ๋ฉ˜ํ† ๋ง ๋‚ด์—ญ ๋ฆฌ์ŠคํŠธ ๋กœ์ง ๋ณ€๊ฒฝ
Apr 23, 2026
399c8d5
refactor: ์‹œ๋‹ˆ์–ด, ์ฃผ๋‹ˆ์–ด ๊ฒ€์ฆ ๊ฑฐ์ณ ์ฑ„ํŒ…์ฐฝ ๋น„ํ™œ์„ฑํ™” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ๋ฉ˜ํ† ๋ง ์ธ์‚ฌ์ดํŠธ ์ œ๊ฑฐ
Apr 23, 2026
3630abf
refacot: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •
Apr 23, 2026
938d827
Merge pull request #98 from prgrms-aibe-devcourse/feat/#91-senior-payโ€ฆ
kimsehee-8135 Apr 23, 2026
f598cea
Merge pull request #99 from prgrms-aibe-devcourse/feat/#96-senior-proโ€ฆ
hsb4225 Apr 23, 2026
eacf9f3
refactor: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ฐ ์ฐฝ ํฌ๊ธฐ ์กฐ์ •
Apr 23, 2026
1a1812d
Merge pull request #102 from prgrms-aibe-devcourse/refactor/#101-logiโ€ฆ
hsb4225 Apr 23, 2026
fe06671
feat: github apiํ˜ธ์ถœ์‹œ ํ•„์š”ํ•œ ๊ณตํ†ต์„ค์ •
jhwan1205-sys Apr 23, 2026
a98c16d
feat: github api์‘๋‹ต ๊ฐ’์„ ๋ฐ›๊ธฐ ์œ„ํ•œ dto
jhwan1205-sys Apr 23, 2026
677ef05
feat: github pr url์„ ๋ถ„์„ํ•˜๊ณ  ๊ทธ๊ฐ’์„ ์ด์šฉํ•ด ์‘๋‹ต๊ฐ’ ๋ฐ˜ํ™˜
jhwan1205-sys Apr 23, 2026
cae3d36
fix: test์ฝ”๋“œ ์ˆ˜์ •
jhwan1205-sys Apr 23, 2026
5282aad
feat: github pr url์ž˜๋ชป๋œ ๊ฒฝ์šฐ error์ถ”๊ฐ€
jhwan1205-sys Apr 23, 2026
7282e01
Merge pull request #104 from prgrms-aibe-devcourse/feat/#97-feat-githโ€ฆ
jhwan1205-sys Apr 23, 2026
d2d5917
refactor: requestPay()์˜ API ๊ฒฝ๋กœ, ๋งคํ•‘ ๋ฐฉ์‹ ๋ณ€๊ฒฝ (#100)
kimsehee-8135 Apr 23, 2026
fddfb66
fix: ์˜คํƒ€ ์ˆ˜์ • (#100)
kimsehee-8135 Apr 23, 2026
2773bfd
feat: ๊ฒฐ์ œ ์ค€๋น„ ์กฐํšŒ ๋ฐ ์‹œ๋‹ˆ์–ด ์ง๊ตฐ ์‘๋‹ต ์ถ”๊ฐ€ (#100)
kimsehee-8135 Apr 23, 2026
d59b583
feat: ๊ฒฐ์ œ ์ƒ์„ธ ๋ชจ๋‹ฌ html์— ์ถ”๊ฐ€ (#100)
kimsehee-8135 Apr 24, 2026
d2e565d
feat: ๋ชจ๋‹ฌ ์˜คํ”ˆ/ํด๋กœ์ฆˆ UX ๊ตฌํ˜„(๋ฐฑ๋“œ๋กญ ํด๋ฆญ, ESC, ์Šคํฌ๋กค ๋ฝ) (#100)
kimsehee-8135 Apr 24, 2026
bbc3020
feat: ๊ฒฐ์ œ ์ƒ์„ธ ๋ชจ๋‹ฌ UI ์ˆ˜์ •, css ์ฝ”๋“œ๋Š” ๋”ฐ๋กœ ํŒŒ์ผ ๋ถ„๋ฆฌ (#100)
kimsehee-8135 Apr 24, 2026
4b70104
feat: ์ƒ๋‹จ ํ—ค๋”์— ์ฑ„ํŒ… ํƒญ ์ถ”๊ฐ€
Apr 24, 2026
f0273ec
refactor: ๋ฉ˜ํ† ๋ง์ด ๋งˆ๊ฐ๋œ ์ฑ„ํŒ…๋ฐฉ ์ƒํƒœ ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ
Apr 24, 2026
299565b
feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ dto ์ถ”๊ฐ€
Apr 24, 2026
6aea1ba
feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ํ•„๋“œ ์ถ”๊ฐ€
Apr 24, 2026
1629f7c
feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€
Apr 24, 2026
214b989
feat: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ํ•„๋“œ ์ถ”๊ฐ€
Apr 24, 2026
9ee7346
fix: ๋นŒ๋“œ ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ • (#100)
kimsehee-8135 Apr 24, 2026
664b6c5
Merge pull request #108 from prgrms-aibe-devcourse/feat/#103-see-chatโ€ฆ
hsb4225 Apr 24, 2026
3fb2354
Merge pull request #107 from prgrms-aibe-devcourse/feat/#100-junior-pโ€ฆ
kimsehee-8135 Apr 24, 2026
2ea4b8c
feat: ๊ธฐ์กด์— ๋ฉ”์ธํ™”๋ฉด์— ์žˆ๋˜ ํ…Œ์ŠคํŠธ ๊ฒฐ์ œ ์ฝ”๋“œ ์ œ๊ฑฐ (#109)
kimsehee-8135 Apr 24, 2026
52a8c96
fix: toss-pay.js์— ๋ถˆํ•„์š”ํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ (#109)
kimsehee-8135 Apr 24, 2026
cc1e22c
feat: ์ฑ„ํŒ…๋ฐฉ html์— ํ† ์Šค SDK ๋งํฌ, ์ „์—ญ๋ณ€์ˆ˜ ์ถ”๊ฐ€ (#109)
kimsehee-8135 Apr 24, 2026
256c87c
Chat ์ปจํŠธ๋กค๋Ÿฌ์— tossClientKey ํ•„๋“œ ์ถ”๊ฐ€ (#109)
kimsehee-8135 Apr 24, 2026
1799eda
refactor: ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ ์ค‘ Knoc์— ์ (.) ์ถ”๊ฐ€ (#109)
kimsehee-8135 Apr 24, 2026
d194014
feat: ์‹œ๋‹ˆ์–ด ์ƒ์„ธํŽ˜์ด์ง€ ๋‚ด ๋ฆฌ๋ทฐ ์ถ”๊ฐ€ / ์ „์ฒด ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ์ƒ์„ฑ
devken65 Apr 24, 2026
92f3c40
feat: feat(Chat): ๋งˆ๊ฐ๋œ ์ฑ„ํŒ…๋ฐฉ ์žฌํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•œ reopen() ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
Apr 24, 2026
0105e69
feat: feat(Chat): ์ฑ„ํŒ…๋ฐฉ ์žฌ์‹œ์ž‘ ์‹œ์Šคํ…œ ์•Œ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ROOM_REOPEN ๋ฉ”์‹œ์ง€ ํƒ€์ž… ์ถ”๊ฐ€
Apr 24, 2026
2bca1c1
feat(Chat): ๋ฉ˜ํ† ๋ง ์žฌ์‹ ์ฒญ ์‹œ ๊ธฐ์กด CLOSED ๋ฐฉ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์žฌ์‹œ์ž‘ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋„๋ก ๋กœ์ง ๊ฐœ์„ 
Apr 24, 2026
5969b28
feat(Order): ํ™œ์„ฑํ™”๋œ ๊ฒฐ์ œ ๋‚ด์—ญ ํ™•์ธ์„ ์œ„ํ•œ ์ƒํƒœ ๊ธฐ๋ฐ˜(StatusIn) ์ฃผ๋ฌธ ์กฐํšŒ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
Apr 24, 2026
0161466
fix(Chat): ๊ณผ๊ฑฐ ์™„๋ฃŒ๋œ ๊ฒฐ์ œ ๋‚ด์—ญ ๋•Œ๋ฌธ์— ์žฌ์‹œ์ž‘๋œ ๋ฐฉ์—์„œ '๊ฒฐ์ œ ์š”์ฒญ' ๋ฒ„ํŠผ์ด ๊ฐ€๋ ค์ง€๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (์ง„ํ–‰ ์ค‘์ธ ์ฃผ๋ฌธโ€ฆ
Apr 24, 2026
c531d14
feat(UI): ๋งˆ๊ฐ๋œ ์ฑ„ํŒ…๋ฐฉ ์ž…๋ ฅ์ฐฝ UI ํ†ตํ•ฉ ๊ฐœ์„  ๋ฐ ์ฃผ๋‹ˆ์–ด์šฉ '๋ฉ˜ํ† ๋ง ์žฌ์กฐ์œจ' ๋ฒ„ํŠผ ์ถ”๊ฐ€
Apr 24, 2026
3580f54
feat: ์ฃผ๋‹ˆ์–ด ์ „์šฉ REVIEW_REQUESTED ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ์ถ”๊ฐ€ (#109)
kimsehee-8135 Apr 24, 2026
f1558c8
feat: ๊ฒฐ์ œ ์ƒ์„ธ CTA ํด๋ฆญ ์‹œ ํ† ์Šค ๊ฒฐ์ œ์ฐฝ ํ˜ธ์ถœ (#109)
kimsehee-8135 Apr 24, 2026
faca25e
Merge pull request #112 from prgrms-aibe-devcourse/feat/#109-toss-payโ€ฆ
kimsehee-8135 Apr 24, 2026
c78a3c8
refactor: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ฆฌํŒฉํ† ๋ง
Apr 24, 2026
69ef46e
refactor: chatController์—์„œ ์œ„์ž„ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ถ”๊ฐ€
Apr 24, 2026
90f9878
refact: repository ์ง์ ‘ํ˜ธ์ถœ ์ˆ˜์ • ๋ฐ html ์ˆ˜์ •
devken65 Apr 24, 2026
79fe075
index.html senior.introduction ์งค๋ฆผํ˜„์ƒ ์ˆ˜์ •
devken65 Apr 24, 2026
d43aa19
Merge pull request #111 from prgrms-aibe-devcourse/feat/#106-senior-aโ€ฆ
devken65 Apr 24, 2026
aee7c04
refactor: review ๊ด€๋ จ ํŒŒ์ผ ์˜ฎ๊ธฐ๊ณ , ํ•„์š”์—†๋Š” .gitkeep ํŒŒ์ผ ์ œ๊ฑฐ (#114)
kimsehee-8135 Apr 24, 2026
b9f162c
fix: CI/CD ์—๋Ÿฌ ํ•ด๊ฒฐ (#114)
kimsehee-8135 Apr 24, 2026
8b1fd58
Merge pull request #115 from prgrms-aibe-devcourse/refactor/#114-reviโ€ฆ
kimsehee-8135 Apr 24, 2026
b760551
test(Chat): ๋งˆ๊ฐ๋œ ์ฑ„ํŒ…๋ฐฉ ์žฌํ™œ์„ฑํ™”(reopen) ๋ฐ ์•Œ๋ฆผ ์ด๋ฒคํŠธ ๋ฐœํ–‰ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
Apr 24, 2026
3523300
test(Order): ์ง„ํ–‰ ์ค‘์ธ ๊ฒฐ์ œ ์š”์ฒญ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ๊ฒฐ์ œ ๊ธˆ์•ก ์ถ”์ถœ ๋กœ์ง ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
Apr 24, 2026
11716ec
Merge remote-tracking branch 'origin/develop' into feat/#110-reopen-rโ€ฆ
Apr 24, 2026
eb2f4e1
feat:workspace 2-pane๊ตฌํ˜„์„ ์œ„ํ•œ dto,service,controller
jhwan1205-sys Apr 24, 2026
7ee62e6
feat: ๋ฉ˜ํ† ๋ง ์ข…๋ฃŒ ํ›„ ์ƒํƒœ ์ „ํ™˜์„ ์œ„ํ•œ orderService์ถ”๊ฐ€
jhwan1205-sys Apr 24, 2026
bc56abf
feat: review ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„
jhwan1205-sys Apr 24, 2026
19315fd
feat: 2-pane html ๊ตฌํ˜„
jhwan1205-sys Apr 24, 2026
5febae9
fix: rebaseํ•˜๊ณ  ์ˆ˜์ •๋œ import์ˆ˜์ •
jhwan1205-sys Apr 24, 2026
5daea6b
fix: rebaseํ›„ ๋ฌธ์ œ ํ•ด๊ฒฐ
jhwan1205-sys Apr 24, 2026
9168247
feat: ์‹œ๋‹ˆ์–ด๋ฆฌํฌํŠธ ์ž‘์„ฑ์™„๋ฃŒ์‹œ ์‹œ์Šคํ…œ ๋ฉ”์„ธ์ง€ ์ถ”๊ฐ€
jhwan1205-sys Apr 24, 2026
14bf72d
refactor: ์ƒ์„ธ์ฝ”๋“œ๋ฆฌํฌํŠธ->๋ฆฌ๋ทฐ๋ฆฌํฌํŠธ
jhwan1205-sys Apr 24, 2026
36ce78e
Merge pull request #117 from prgrms-aibe-devcourse/feat/#105-workspacโ€ฆ
kimsehee-8135 Apr 25, 2026
8c310cd
fix: ๋ฆฌํฌํŠธ ์ „์†ก์‹œ ์ˆ˜์ • ๋ฒ„ํŠผ ์•ˆ๋‚˜์˜ค๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
jhwan1205-sys Apr 25, 2026
5caddb5
docs: api๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ swagger @Tag,Operation์ถ”๊ฐ€
jhwan1205-sys Apr 25, 2026
c2d3aa0
Merge pull request #119 from prgrms-aibe-devcourse/fix/#118-senior-reโ€ฆ
kimsehee-8135 Apr 25, 2026
1a830e2
Merge pull request #121 from prgrms-aibe-devcourse/docs/#120-swagger
kimsehee-8135 Apr 25, 2026
43de423
feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ๋ชจ๋‹ฌ UI ์ƒ์„ฑ (#113)
kimsehee-8135 Apr 24, 2026
3d6fc42
refactor: ๋ชจ๋‹ฌ 3๊ฐœ html ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ (#113)
kimsehee-8135 Apr 24, 2026
4166efa
feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ -> '์ƒ์„ธ' ์ œ๊ฑฐ (#113)
kimsehee-8135 Apr 25, 2026
ec6d004
feat: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ๊ด€๋ จ ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ (#113)
kimsehee-8135 Apr 25, 2026
d7852c1
Merge branch 'develop' into feat/#110-reopen-read-only-chatroom
kimsehee-8135 Apr 25, 2026
ae5734e
feat: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ๊ด€๋ จ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€ (#113)
kimsehee-8135 Apr 25, 2026
04aea00
feat: ๋ฆฌ๋ทฐ์š”์ฒญ์‘๋‹ต dto ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜์ • ํ›„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ (#113)
kimsehee-8135 Apr 25, 2026
5fb1a31
feat: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ๋ชจ๋‹ฌ ์—ด๊ธฐ/๋‹ซ๊ธฐ(ESCยท๋ฐฑ๋“œ๋กญยท์Šคํฌ๋กค๋ฝ) ๊ตฌํ˜„ (#113)
kimsehee-8135 Apr 25, 2026
82ef074
docs: API ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ Operation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ (#113)
kimsehee-8135 Apr 26, 2026
b8c7a49
feat: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ๋ชจ๋‹ฌ ์ œ์ถœ ๋กœ์ง ๋ฐ GitHub PR URL ๊ฒ€์ฆ ์ถ”๊ฐ€ (#113)
kimsehee-8135 Apr 26, 2026
0cc0b22
fix: ์‹œ๋‹ˆ์–ด ์‚ฌ์ด๋“œ๋ฐ” ์ตœ์‹  ๋ฉ”์‹œ์ง€์— ์ฃผ๋‹ˆ์–ด ์ „์šฉ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ (#113)
kimsehee-8135 Apr 26, 2026
b580b11
feat: ์‹œ๋‹ˆ์–ด์šฉ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ž…์žฅ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#113)
kimsehee-8135 Apr 26, 2026
2c13d6a
Merge pull request #123 from prgrms-aibe-devcourse/feat/#113-review-rโ€ฆ
kimsehee-8135 Apr 26, 2026
c09c237
feat: ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ๋ฆฌ๋ทฐ์š”์ฒญ์„œ ์—ฌ๋ถ€ ์ „๋‹ฌ ๋ฐ ๋ฆฌํฌํŠธ ์ž‘์„ฑ UI ์กฐ๊ฑด ๋ถ„๊ธฐ (#124)
kimsehee-8135 Apr 26, 2026
6f3aa88
refacotr: controller๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ
Apr 26, 2026
d666026
refactor: ์„œ๋น„์Šค ๊ณ„์ธต์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์œ„์ž„
Apr 26, 2026
8079584
feat: ์•„์ด์ฝ˜ ๋ฐ hover ํšจ๊ณผ ์ ์šฉ
Apr 26, 2026
bbafbfe
feat: ๋ฆฌ๋ทฐ ๋ฆฌํฌํŠธ ๊ด€๋ จ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€ ํ›„ ์ ์šฉ (#124)
kimsehee-8135 Apr 26, 2026
9603d63
chore: develop ๋ธŒ๋žœ์น˜ ์ตœ์‹  ๋‚ด์šฉ ๋ณ‘ํ•ฉ ๋ฐ ์ถฉ๋Œ ํ•ด๊ฒฐ
Apr 26, 2026
26c8e95
refactor: Swagger ์šฉ์–ด ํ†ต์ผ, ํ›„๊ธฐ ์—”๋“œํฌ์ธํŠธ ๋ฆฌํŒฉํ† ๋ง (#124)
kimsehee-8135 Apr 26, 2026
469cb91
refactor: ๋ฆฌ๋ทฐ ์š”์ฒญ, PR ๋ณ€๊ฒฝ ํŒŒ์ผ์ด ๋นˆ ์ƒํƒœ์ผ ๋•Œ ๋ฌธ๊ตฌ ์Šคํƒ€์ผ ํ†ต์ผ (#124)
kimsehee-8135 Apr 26, 2026
5a7bd74
chore: ์›๊ฒฉ ๋ธŒ๋žœ์น˜์™€ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ถฉ๋Œ ํ•ด๊ฒฐ
Apr 26, 2026
c61209e
fix: ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
Apr 26, 2026
81c5dd1
Merge pull request #125 from prgrms-aibe-devcourse/feat/#124-workspacโ€ฆ
kimsehee-8135 Apr 26, 2026
ffafb1c
fix: message type ๋ˆ„๋ฝ ์žฌ์ •์˜
Apr 26, 2026
157928c
refactor: ํ…œํ”Œ๋ฆฟ ๋ฌธ๊ตฌ ํ†ต์ผ
Apr 26, 2026
7d1a814
Merge pull request #116 from prgrms-aibe-devcourse/feat/#110-reopen-rโ€ฆ
hsb4225 Apr 26, 2026
bdadc5f
refactor: ์ •์‚ฐ ๊ด€๋ จ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€ ํ›„ ์ ์šฉ (#126)
kimsehee-8135 Apr 26, 2026
c2ddda2
feat: '๋‚˜์˜ ํ›„๊ธฐ' ์กฐํšŒ ๋ฐฑ์—”๋“œ ๋กœ์ง ๊ตฌํ˜„ (#126)
kimsehee-8135 Apr 26, 2026
dc61bd9
feat: ReviewCardDto์— orderId ํ•„๋“œ ์ถ”๊ฐ€ (#126)
kimsehee-8135 Apr 26, 2026
b8d27f2
feat: '๋‚˜์˜ ํ›„๊ธฐ' ํƒญ ํ”„๋ก ํŠธ์— ์ถ”๊ฐ€ (#126)
kimsehee-8135 Apr 26, 2026
0d29455
fix: ์ฃผ๋‹ˆ์–ด ๋‚ด ๋ฉ˜ํ† ๋ง์—์„œ ํ›„๊ธฐ ์ž‘์„ฑํ•˜๊ธฐ ํด๋ฆญํ–ˆ์„ ๋•Œ 404 ์—๋Ÿฌ ๋‚ฌ๋˜ ๊ฒƒ ํ•ด๊ฒฐ (#126)
kimsehee-8135 Apr 26, 2026
424cb2b
feat: ํ›„๊ธฐ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#126)
kimsehee-8135 Apr 26, 2026
3db5e2f
Merge pull request #127 from prgrms-aibe-devcourse/feat/126-my-feedback
kimsehee-8135 Apr 26, 2026
5dddd21
refactor: ๋‚ด ๋ฉ˜ํ† ๋ง ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง (#128)
kimsehee-8135 Apr 27, 2026
bbf54cc
Merge pull request #129 from prgrms-aibe-devcourse/refactor/#128-dashโ€ฆ
kimsehee-8135 Apr 27, 2026
ec4594e
refactor: ์ฑ„ํŒ… hover ๊ธฐ๋Šฅ ์ˆ˜์ •
Apr 27, 2026
a9f72b1
Merge pull request #131 from prgrms-aibe-devcourse/feat/#130-chat-ui-โ€ฆ
hsb4225 Apr 27, 2026
328b0fb
refactor: ํ—ค๋” '๋‚ด ๋ฉ˜ํ† ๋ง' ํ˜ธ๋ฒ„, ์•กํ‹ฐ๋ธŒ ํšจ๊ณผ (#132)
kimsehee-8135 Apr 27, 2026
2a4bd3d
Merge pull request #133 from prgrms-aibe-devcourse/refactor/#132-headโ€ฆ
kimsehee-8135 Apr 27, 2026
2270b41
fix: ์ „๋ฌธ์„ฑ ์ •๋ณด ์ˆ˜์ • ์‹œ ๋‚ด ๋ฉ˜ํ† ๋ง ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (#134)
kimsehee-8135 Apr 27, 2026
522dad9
refact: ChatController ๋ ˆ์ด์–ด ๋ฌธ์ œ ํ•ด๊ฒฐ
devken65 Apr 26, 2026
02bfc4f
refact: Order, TossPaymentController ์ˆ˜์ •
devken65 Apr 26, 2026
266e6f7
refact: ์ตœ์‹ ๋ฉ”์‹œ์ง€ N+1 ๋ฌธ์ œ ์ˆ˜์ •
devken65 Apr 27, 2026
b3d6549
refact: ์ฑ„ํŒ…๋ฐฉ ๋ฒ„๊ทธ๋กœ์ธํ•œ roomId ์ถ”๊ฐ€, read-only websocket ์—ฐ๊ฒฐ์œ ์ง€
devken65 Apr 27, 2026
30e8313
refact: index๊ด€๋ จ fragment์กฐํšŒ ๋ฐ AJAX ํ˜ธ์ถœ
devken65 Apr 27, 2026
ae25f0a
feat: ์ฑ„ํŒ…๋ฐฉ, ๋ฉ˜ํ† ๋ง ํ›„๊ธฐ์— ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋œจ๊ฒŒ ๋ณ€๊ฒฝ (#134)
kimsehee-8135 Apr 27, 2026
a5e3ac6
Merge pull request #136 from prgrms-aibe-devcourse/feat/#134-profile-โ€ฆ
kimsehee-8135 Apr 27, 2026
877ae4f
Merge pull request #135 from prgrms-aibe-devcourse/feat/#122-refact-lโ€ฆ
devken65 Apr 27, 2026
262e3b7
feat: ์ „์ฒด ๋ฉ˜ํ† ๋ง ๋‚ด์—ญ ์ „์ฒด ๋ณด๊ธฐ
Apr 27, 2026
d5e8e8b
Merge branch 'develop' of https://github.com/prgrms-aibe-devcourse/AIโ€ฆ
Apr 27, 2026
d2bdd5f
Merge pull request #140 from prgrms-aibe-devcourse/feat/#137-junior-dโ€ฆ
hsb4225 Apr 27, 2026
b253d6d
feat: ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ์ˆ˜์ • ์ง€์›, ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ css, js๋ฅผ ๊ณต์šฉ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ (#138)
kimsehee-8135 Apr 27, 2026
f1a72dd
refactor: ์ฃผ๋‹ˆ์–ด/์‹œ๋‹ˆ์–ด ๋ถ„๊ธฐ ํ›„ ๋ฌธ๊ตฌ ์ˆ˜์ • (#138)
kimsehee-8135 Apr 27, 2026
f20aaaa
feat: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ์ˆ˜์ • ๋ฐฑ์—”๋“œ ๋กœ์ง ๊ตฌํ˜„ (#138)
kimsehee-8135 Apr 27, 2026
da09a7f
test: ๋ฆฌ๋ทฐ ์š”์ฒญ์„œ ์ˆ˜์ • ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ (#138)
kimsehee-8135 Apr 27, 2026
02e4c8c
fix: ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ฆ ์ฝ”๋“œ ์ œ๊ฑฐ (#138)
kimsehee-8135 Apr 27, 2026
7ae353c
Merge pull request #141 from prgrms-aibe-devcourse/feat/#138-review-rโ€ฆ
kimsehee-8135 Apr 27, 2026
48d2c59
refactor: my/dashboard ํŒจํ‚ค์ง€ ์•ˆ ํŒŒ์ผ๋“ค์„ dashboard ํŒจํ‚ค์ง€๋กœ ์ด๋™ (#142)
kimsehee-8135 Apr 27, 2026
855cf28
refactor: ํŽ˜์ด์ง€๋ณ„ title ํ˜•์‹ ํ†ต์ผ (#142)
kimsehee-8135 Apr 27, 2026
c1acbd9
Merge pull request #143 from prgrms-aibe-devcourse/refactor/#142-pageโ€ฆ
kimsehee-8135 Apr 27, 2026
afe3404
refact: Solve DashboardService N+1
devken65 Apr 27, 2026
3d8ca52
refact: Solve ReviewFeedback N+1
devken65 Apr 27, 2026
93fa748
refact: modify DashboardServiceTest
devken65 Apr 27, 2026
058cd77
refact: index ๊ฒ€์ƒ‰ ํ•„ํ„ฐ๋ง ๋ฒ„๊ทธ ํ•ด๊ฒฐ
devken65 Apr 27, 2026
f55d000
Merge pull request #144 from prgrms-aibe-devcourse/feat/#139-solve-N+1
jhwan1205-sys Apr 28, 2026
c942152
fix: ๋น„๋กœ๊ทธ์ธ ํ™”๋ฉด ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
kimsehee-8135 Apr 28, 2026
c61ac55
Merge pull request #147 from prgrms-aibe-devcourse/fix/#146-nonLogin-โ€ฆ
jhwan1205-sys Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .env.example

This file was deleted.

32 changes: 32 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.16'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
developmentOnly 'org.springframework.boot:spring-boot-docker-compose'
Expand All @@ -37,6 +38,37 @@ dependencies {
testCompileOnly 'org.projectlombok:lombok'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testAnnotationProcessor 'org.projectlombok:lombok'

// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'

// ์ธ์ฆ ๋ฉ”์ผ
implementation 'org.springframework.boot:spring-boot-starter-mail'

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
}

// Qํด๋ž˜์Šค ๊ฒฝ๋กœ์„ค์ •
def generated = 'src/main/generated'

// ๊ฒฝ๋กœ์— ์ €์žฅ
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}

// ์†Œ์Šค ํด๋” ์ธ์‹
sourceSets {
main.java.srcDirs += [generated]
}

clean {
delete file(generated)
}

tasks.named('test') {
Expand Down
Empty file modified gradlew
100644 โ†’ 100755
Empty file.
4 changes: 4 additions & 0 deletions src/main/java/com/knoc/KnocApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableJpaAuditing
@EnableScheduling
@SpringBootApplication
public class KnocApplication {

Expand Down
62 changes: 62 additions & 0 deletions src/main/java/com/knoc/auth/controller/AuthController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.knoc.auth.controller;

import com.knoc.auth.dto.SignUpDto;
import com.knoc.global.exception.BusinessException;
import com.knoc.member.service.MemberService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Tag(name="Auth-Controller",description = "ํšŒ์› ์ธ์ฆ ๊ด€๋ จ API")
@Controller
@RequestMapping("/auth")
@RequiredArgsConstructor
public class AuthController {

private final MemberService memberService;

@Operation(summary = "๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์กฐํšŒ", description = "๋กœ๊ทธ์ธ ํผ ํ™”๋ฉด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.")
@GetMapping("/login")
public String loginForm() {
return "auth/login";
}

@Operation(summary = "ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ์กฐํšŒ", description = "ํšŒ์›๊ฐ€์ž… ํผ ํ™”๋ฉด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.")
@GetMapping("/signup")
public String signUpForm(Model model) {
model.addAttribute("signupDto", new SignUpDto());
return "auth/signup";
}

@Operation(summary = "ํšŒ์›๊ฐ€์ž… ์ฒ˜๋ฆฌ", description = "์ „๋‹ฌ๋ฐ›์€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํšŒ์›๊ฐ€์ž…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.")
@PostMapping("/signup")
public String processSignUp(@Valid @ModelAttribute("signupDto") SignUpDto dto, BindingResult bindingResult, Model model, RedirectAttributes redirectAttributes) {

if (dto.getPassword() != null && !dto.getPassword().equals(dto.getPasswordConfirm())) {
bindingResult.rejectValue("passwordConfirm", "passwordInCorrect", "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}
// ํผ ํ˜•์‹ ๊ฒ€์ฆ ์—๋Ÿฌ ์ฒ˜๋ฆฌ (๋น„๋ฐ€๋ฒˆํ˜ธ ์ž๋ฆฌ์ˆ˜, ์ด๋ฉ”์ผ ํ˜•์‹ ๋“ฑ)
if(bindingResult.hasErrors()) {
return "auth/signup"; // ์—๋Ÿฌ๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
}
// ์ด๋ฉ”์ผ, ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ
try {
memberService.registerMember(dto);
redirectAttributes.addFlashAttribute("successMessage", "ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!");
return "redirect:/auth/login"; // ์„ฑ๊ณต ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
} catch(BusinessException e) {
model.addAttribute("errorMessage", e.getMessage());
model.addAttribute("signupDto", dto);
return "auth/signup"; // ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ํ™”์›๊ฐ€์ž… ํŽ˜์ด์ง€ ์œ ์ง€
}
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/knoc/auth/dto/SignUpDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.knoc.auth.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class SignUpDto {
@NotBlank(message = "๋‹‰๋„ค์ž„์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.")
@Size(min = 2, max = 10, message = "๋‹‰๋„ค์ž„์€ 2~10์ž๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
private String nickname;

@NotBlank(message = "์ด๋ฉ”์ผ์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.")
@Email(message = "์˜ฌ๋ฐ”๋ฅธ ์ด๋ฉ”์ผ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.")
private String email;

@NotBlank(message = "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.")
@Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}", message = "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 8~16์ž ์˜๋ฌธ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.")
private String password;

@NotBlank(message = "๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์€ ํ•„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.")
private String passwordConfirm;
}
79 changes: 79 additions & 0 deletions src/main/java/com/knoc/auth/jwt/JwtAuthenticationFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.knoc.auth.jwt;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;
import java.util.Arrays;

@RequiredArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {

private final JwtTokenProvider jwtTokenProvider;
private final UserDetailsService userDetailsService;

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {

String accessToken = getCookieValue(request, "accessToken");
String refreshToken = getCookieValue(request, "refreshToken");

// access token ์‚ด์•„์žˆ์œผ๋ฉด ํ†ต๊ณผ
if(accessToken != null && jwtTokenProvider.validateToken(accessToken)) {
setAuthentication(jwtTokenProvider.getEmailFromToken(accessToken));
}
// access token ๋งŒ๋ฃŒ, refresh token์ด ์œ ํšจํ•˜๋ฉด access token ์žฌ๋ฐœ๊ธ‰
else if(refreshToken != null && jwtTokenProvider.validateToken(refreshToken)) {
String email = jwtTokenProvider.getEmailFromToken(refreshToken);
UserDetails userDetails = userDetailsService.loadUserByUsername(email);
String role = userDetails.getAuthorities().iterator().next().getAuthority();

String newAccessToken = jwtTokenProvider.createAccessToken(email, role);
Cookie newCookie = new Cookie("accessToken", newAccessToken);
newCookie.setPath("/");
newCookie.setHttpOnly(true);
newCookie.setMaxAge(60 * 30);
response.addCookie(newCookie);

setAuthentication(email);

}
filterChain.doFilter(request, response);

}
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
String path = request.getRequestURI();
// /ws ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ์š”์ฒญ์€ HTTP ๋‹จ๊ณ„์—์„œ ํ† ํฐ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
return path.startsWith("/ws");
}

// ์ฟ ํ‚ค ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ด
private String getCookieValue(HttpServletRequest request, String cookieName) {
if(request.getCookies() == null) return null;
return Arrays.stream(request.getCookies())
.filter(c -> c.getName().equals(cookieName))
.map(Cookie::getValue)
.findFirst()
.orElse(null);

}

private void setAuthentication(String email) {
UserDetails userDetails = userDetailsService.loadUserByUsername(email);
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}

}
67 changes: 67 additions & 0 deletions src/main/java/com/knoc/auth/jwt/JwtHandshakeInterceptor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.knoc.auth.jwt;

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.jspecify.annotations.Nullable;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;

@Component
@RequiredArgsConstructor
public class JwtHandshakeInterceptor implements HandshakeInterceptor {
/** WebSocket ํ•ธ๋“œ์…ฐ์ดํฌ ์ธํ„ฐ์…‰ํ„ฐ
* ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์ „ ์ฟ ํ‚ค์—์„œ JWT๋ฅผ ์ถ”์ถœํ•ด ๊ฒ€์ฆํ•˜๊ณ ,
* ์ธ์ฆ ์ •๋ณด๋ฅผ attributes์— ์ €์žฅํ•˜์—ฌ Principal๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
* ๊ฒ€์ฆ ์‹คํŒจ ์‹œ false ๋ฐ˜ํ™˜ โ†’ ์—ฐ๊ฒฐ ๊ฑฐ๋ถ€
*/

private final JwtTokenProvider jwtTokenProvider;
private final UserDetailsService userDetailsService;

@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
// ์ฟ ํ‚ค -> JWT๊ฒ€์ฆ -> ์ธ์ฆ์ •๋ณด ์ €์žฅ
if (request instanceof ServletServerHttpRequest servletRequest){
HttpServletRequest httpRequest = servletRequest.getServletRequest();
String accessToken = null;
Cookie[] cookies = httpRequest.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("accessToken".equals(cookie.getName())){
accessToken = cookie.getValue();
break;
}
}
}

if(jwtTokenProvider.validateToken(accessToken)){
String email = jwtTokenProvider.getEmailFromToken(accessToken);

UserDetails userDetails = userDetailsService.loadUserByUsername(email);

UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());

attributes.put("principal", authentication);

return true;
}
}

return false;
}

@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, @Nullable Exception exception) {
// ํ•ธ๋“œ์…ฐ์ดํฌ ์™„๋ฃŒ ํ›„ ๋ณ„๋„ ์ฒ˜๋ฆฌ ์—†์Œ
}
}
67 changes: 67 additions & 0 deletions src/main/java/com/knoc/auth/jwt/JwtTokenProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.knoc.auth.jwt;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.security.Key;
import java.util.Date;

@Slf4j
@Component
public class JwtTokenProvider {
private final Key key;
private final long accessTokenValidityTime = 1000L * 60 * 30; // 30๋ถ„
private final long refreshTokenValidityTime = 1000L * 60 * 60 * 24 * 7; //7์ผ

// Access Token ์ƒ์„ฑ
public JwtTokenProvider(@Value("${jwt.secret:vmsqi69s1iq93p01dnscms938s9d10s2j3nzmcl0s9}")String secretKey) {
this.key = Keys.hmacShaKeyFor(secretKey.getBytes());
}

public String createAccessToken(String email, String role) {
Claims claims = Jwts.claims().setSubject(email);
claims.put("role", role);
Date now = new Date();

return Jwts.builder()
.setClaims(claims)
.setIssuedAt((now)) // ๋ฐœ๊ธ‰ ์‹œ๊ฐ„
.setExpiration(new Date(now.getTime() + accessTokenValidityTime)) // ๋งŒ๋ฃŒ ์‹œ๊ฐ„
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}

// refreshToken ์ƒ์„ฑ(์ˆ˜๋ช… 7์ผ, ์ด๋ฉ”์ผ ์ €์žฅ)
public String createRefreshToken(String email) {
Date now = new Date();
return Jwts.builder()
.setSubject(email)
.setIssuedAt(now)
.setExpiration(new Date(now.getTime() + refreshTokenValidityTime))
.signWith(key, SignatureAlgorithm.HS256)
.compact();

}

public boolean validateToken(String token) {
try {
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
return true;
} catch (Exception e) {
log.error("JWT ๊ฒ€์ฆ ์‹คํŒจ: {}", e.getMessage());
return false;
}
}

// ํ† ํฐ์—์„œ ์ด๋ฉ”์ผ ์ถ”์ถœ
public String getEmailFromToken(String token) {
return Jwts.parserBuilder().setSigningKey(key).build()
.parseClaimsJws(token).getBody().getSubject();
}

}
Loading
Loading