FastCampus X Yanolja TechSchool

์•ผ๋†€์ž ํ…Œํฌ์Šค์ฟจ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ - ์ฑ„ํŒ… ๋„๋ฉ”์ธ ์„ค๊ณ„(์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜, ์ฑ„ํŒ…๋ฐฉ ์‚ญ์ œ, ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ๋‚ด์—ญ)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2024. 1. 18.

 

ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ์•ผ๋‚˜๋ฐ”๋‹ค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด์„œ, ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ๊ฐ ๊ฐ์ž์˜ ํŒŒํŠธ๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ๋Š” ํŽ˜์ด์ง€ ํ™”๋ฉด์„ ์ค‘์‹ฌ์œผ๋กœ ํŒŒํŠธ๋ฅผ ๋‚˜๋ˆ  ๊ฐ์ž ๋งˆํฌ์—… ๋‹จ๊ณ„๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.

 

์šฐ๋ฆฌ ๋ฐฑ์—”๋“œ์—์„œ๋Š” ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ๊ฐ์ž ํŒŒํŠธ๋ฅผ ๋‚˜๋ˆด๋‹ค.

๊ทธ์ค‘ ๋‚œ ์ฑ„ํŒ… ๋„๋ฉ”์ธ์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌํŒ€์€ RDS๋งŒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๊ณ , DB๋กœ๋Š” MySQL์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

 

์ดˆ๊ธฐ ์ฑ„ํŒ… ๋„๋ฉ”์ธ ERD ์„ค๊ณ„

 

์ดˆ๊ธฐ ์ฑ„ํŒ… ๋„๋ฉ”์ธ์˜ ERD๋ฅผ ์„ค๊ณ„ํ–ˆ๋‹ค. ๊ฐ€์žฅ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋งŒ์„ ๋„ฃ์–ด์„œ ํ‹€์„ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

์™„์„ฑ๋œ ์ฑ„ํŒ… ๋„๋ฉ”์ธ ERD ์„ค๊ณ„

 

๊ฐ ํ™”๋ฉด๊ตฌ์„ฑ์„ ๋ณด๊ณ  ์ •์ฑ…์„ ์„ธ์šด ๋’ค ํ™•์ •๋œ ์ฑ„ํŒ… ๋„๋ฉ”์ธ ERD ์„ค๊ณ„์ด๋‹ค. 

์ •์ฑ…์„ ๋ฐ”๊พธ์–ด ๋” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋„ฃ๋Š”๋‹ค๋ฉด, ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ์š”์†Œ๋“ค์ด ๋งŽ์ง€๋งŒ, ํ˜„์žฌ๊นŒ์ง€ ์ •ํ•ด์ง„ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ตœ์ ํ™”๋œ ERD ์„ค๊ณ„๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

๊ทธ์ „๊นŒ์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ตฌํ˜„์—๋งŒ ์ดˆ์ ์„ ๋งž์ท„๋‹ค๋ฉด, ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ์™€ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ, ์„œ๋ฒ„ ์ธํ”„๋ผ ๋‹ด๋‹น๋„ ๋˜๋ฉด์„œ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ์— ์žˆ์–ด ๊ด€์ ๊ณผ ๋งˆ์ธ๋“œ ๋ฐ”๋€Œ์–ด ์ด๊ฑธ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ์–ด ์ด๋ ‡๊ฒŒ ๊ธ€์„ ์ž‘์„ฑํ•œ๋‹ค.

์„œ๋ฒ„ ๋‹ด๋‹น์ž๊ฐ€ ๋˜๋ฉด์„œ AWS ์„œ๋น„์Šค๋“ค์„ ์ด์šฉํ•˜๋‹ˆ, ์„œ๋ฒ„๋น„์šฉ์ด ๋ถ€๊ฐ€๋˜๋Š” ๊ฑธ ๋ณด๊ณ  ์žˆ์žํ•˜๋‹ˆ ๋กœ์ง์„ ์งœ๋ฉด์„œ๋„ ๊ทธ๋ƒฅ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฒฝ์ œ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋” ๋‚ฎ์€ ๋กœ์ง, DB I/O๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•, ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ๋“ฑ ์ด๋Ÿฐ ๊ฒƒ๋“ค ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๋กœ์ง์„ ํ•œ์ค„ํ•œ์ค„ ์ž‘์„ฑํ•˜๊ฒŒ ๋๋‹ค. ์ด๋Ÿฌ๋‹ˆ ์ผ๋ฐ˜์ ์ธ ์‰ฌ์šด ๋กœ์ง๋„ ๊ณ ๋ฏผํ•ด๋ด์•ผํ•  ์‚ฌํ•ญ์ด ๋งŽ์•„์ ธ์„œ ์‰ฝ๊ฒŒ ๊ฒฐ์ •๋‚ด๋ฆฌ๊ธฐ ๋ชปํ•˜์˜€๋‹ค.

ํ•˜์ง€๋งŒ, ๋”์šฑ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๊ณ  ํƒ„ํƒ„ํ•œ ๊ฐœ๋ฐœ์„ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋‹ˆ ๋ณด๋žŒ์ฐจ๊ณ  ๋‚˜๋ฆ„ ์ž๋ถ€์‹ฌ๋„ ๋А๊ปด์กŒ๋‹ค.  

๊ทธ๋Ÿฌ๋ฉด ํฐ ์ฑ„ํŒ…๋„๋ฉ”์ธ์„ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ  ๋กœ์ง์„ ์ƒ๊ฐํ–ˆ๋Š”์ง€ ๊ณต์œ ํ•˜๊ฒ ๋‹ค.

 

์ดˆ๊ธฐ ์„ค๊ณ„

๋จผ์ € PM๋ถ„๋“ค์ด ๋งŒ๋“ค์–ด์ฃผ์‹  ํ”ผ๊ทธ๋งˆ์˜ ์™€์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณด๊ณ  ํฌ๊ฒŒ ํ•„์š”ํ•œ API ๊ฐฏ์ˆ˜๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค. ํ™•์ •๊นŒ์ง„ ์•„๋‹ˆ๋”๋ผ๋„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด์•ผํ•  API๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์ฑ„ํŒ…๋„๋ฉ”์ธ ๋‹ด๋‹น ํ”„๋ก ํŠธ์—”๋“œ ๋ถ„๊ป˜ ์ด๋ ‡๊ฒŒ ์ด๋ ‡๊ฒŒ API๋ฅผ ํ˜ธ์ถœํ•˜์‹œ๋ฉด DTO์— ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ ‡๊ฒŒ ๋‹ด์•„์„œ ๋ณด๋‚ด์ค„ ๊ฒƒ์ด๋‹ˆ, ๋ Œ๋”๋ง์‹œ์— ํ™”๋ฉด์— ์ด๋ ‡๊ฒŒ ๋ฟŒ๋ฆฌ์‹œ๋ฉด ๋ ๊ฒƒ ๊ฐ™๋‹ค๊ณ , ํฐ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด์ค€๋‹ค. ์ด๋•Œ SSR ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํ”„๋ก ํŠธ์—”๋“œ ์ง€์‹์ด ์กฐ๊ธˆ์ด๋‚˜๋งˆ ์žˆ๋˜๊ฒŒ ๋„์›€์ด ๋๋‹ค. 

 

 

 

 

 

API๋Š” ํฌ๊ฒŒ  ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ, ์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ, ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ธ์กฐํšŒ, ์ฑ„ํŒ…๋ฐฉ ์ˆ˜์ •, ์ฑ„ํŒ…๋ฐฉ ์‚ญ์ œ ์ •๋„๋กœ ํฌ๊ฒŒ 5๊ฐ€์ง€๋กœ ๊ณ„ํš๋๋‹ค.

 

 

์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ POST /v1/chats

๋จผ์ € ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ์ด๋‹ค. ๊ฐ€๊ฒฉ์ œ์•ˆ์ด ๊ฐ€๋Šฅํ•œ ์ƒํ’ˆ ๋‚ด์—์„œ ๊ฐ€๊ฒฉ์ œ์•ˆ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…์ด ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฐ€๊ฒฉ์ œ์•ˆํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ API๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

 

์ด๋•Œ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ ์€ ๊ฐ€๊ฒฉ์ œ์•ˆํ•˜๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ฑ„ํŒ…๋ฐฉ์ด ์ƒ์„ฑ๋๋Š”๋ฐ, ๋˜ ๋‹ค์‹œ ์ƒํ’ˆ ์ƒ์„ธ์˜ ๊ฐ€๊ฒฉ์ œ์•ˆํ•˜๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ์ฑ„ํŒ…๋ฐฉ์ด ์ด์ค‘์œผ๋กœ ์ƒ๊ธฐ์ง€ ์•Š๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ƒํ’ˆ์˜ id, ๊ตฌ๋งค์ž id, ํŒ๋งค์ž id 3๊ฐ€์ง€๋กœ ์ฑ„ํŒ…๋ฐฉ์ด ์žˆ๋Š”์ง€ ์ฐพ์•„, ์žˆ์œผ๋ฉด ๊ทธ ์ฑ„ํŒ…๋ฐฉ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์ฃผ๊ณ , ์—†๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ฑ„ํŒ…๋ฐฉ์„ ๋งŒ๋“ค์–ด์„œ DB์— ๋„ฃ๊ณ , ๊ทธ ์ฑ„ํŒ…๋ฐฉ์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ฃผ๊ฒŒ ํ–ˆ๋‹ค.

์ด๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ๋Š” ์ž์‹ ์˜ ์ƒํ’ˆ์˜ ์ž์‹ ์ด ๋„ค๊ณ ํ•  ์ˆœ ์—†์œผ๋ฏ€๋กœ ๊ตฌ๋งค์ž์™€ ํŒ๋งค์ž id๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ , ๋„ค๊ณ  ๋ถˆ๊ฐ€๋Šฅ ์ œํ’ˆ์ด๊ฑฐ๋‚˜, ์ƒํ’ˆ์˜ ์ƒํƒœ๊ฐ€ ํŒ๋งค์ค‘์ด ์•„๋‹ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ฃผ์—ˆ๋‹ค.

 

 

์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ GET /v1/chats

 

์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ์‹œ ์ฑ„ํŒ…๋ฐฉ์˜ ์š”์•ฝ ์ •๋ณด์™€ ์•ˆ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ Pageable ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ์ฃผ์—ˆ๋‹ค.

์ด๋•Œ ์ •๋ ฌ์ˆœ์„œ๋Š” ๊ฐ ์ฑ„ํŒ…๋ฐฉ์˜ ๋งˆ์ง€๋ง‰ ๋ฉ”์„ธ์ง€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ฆ‰, ์ตœ์‹ ์ˆœ์ด๋‹ค.

 

์ด ํ™”๋ฉด์—์„  ์–ด๋–ป๊ฒŒ ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ๋‹ค.

๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋– ์˜ฌ๋ž๋‹ค.

 

  1. ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์—”ํ‹ฐํ‹ฐ์— readCount๋ผ๋Š” ํ•„๋“œ๋ฅผ ๋‘์–ด ๊ธฐ๋ณธ์œผ๋กœ 2๋ฅผ ๊ฐ–๊ฒŒ ํ•˜๊ณ  ์ฝ์„๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฐจ๊ฐ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹
  2. ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋งˆ๋‹ค ์ „์†ก์‹œ๊ฐ„์„ ๊ฐ–๊ณ , ์ฑ„ํŒ…๋ฐฉ ์—”ํ‹ฐํ‹ฐ์— ํŒ๋งค์ž ๋˜๋Š” ๊ตฌ๋งค์ž ๋งˆ์ง€๋ง‰ ์ฑ„ํŒ…๋ฐฉ ํ™•์ธ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ, ๋งˆ์ง€๋ง‰ ํ™•์ธ ์‹œ๊ฐ„ ์ดํ›„๋ก  ์˜จ ๋ฉ”์‹œ์ง€๋ฅผ ์นด์šดํŠธ ํ•˜๋Š” ๋ฐฉ์‹.

1๋ฒˆ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ๋งค์šฐ ์ ์€ ์ƒํ™ฉ์—์„  ํฌ๊ฒŒ ๋ฌธ์ œ์—†๊ฒ ์ง€๋งŒ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค๋Š” ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ์ข‹์ง€ ์•Š์€ ์„ค๊ณ„ ๊ฐ™๋‹ค. ์ฝ์„๋•Œ ๋งˆ๋‹ค ์ฑ„ํŒ…์„ ์ฝ์—ˆ์Œ์„ ํ‘œ์‹œํ•˜๊ณ  1์”ฉ ๊ฐ์†Œ์‹œํ‚ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜ ๋งˆ๋‹ค DB I/O๋ฅผ ํ•ด์„œ ํ•„๋“œ๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์ค˜์•ผํ•˜๋ฏ€๋กœ DB ์—๋„ ๋งŽ์€ ๋ฌด๋ฆฌ๋ฅผ ์ฃผ๋Š” ํ–‰์œ„๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋˜ ์ดํ›„์— ๋งํ•˜๊ฒ ์ง€๋งŒ ์ฑ„ํŒ…์„ ์›น์†Œ์ผ“์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ํ•˜๋Š”๋ฐ, ์ฝ์Œ ์ˆซ์ž ๊ฐ์†Œ์‹œํ‚ค๊ธฐ ์œ„ํ•œ HTTP ์š”์ฒญ์„ ๋˜ ๋ณด๋‚ด๋Š”๊ฒŒ ์›น์†Œ์ผ“์„ ์“ฐ๋Š” ์˜๋ฏธ๋ฅผ ํ‡ด์ƒ‰์‹œํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

2๋ฒˆ ๊ฐ™์€ ๊ฒฝ์šฐ ๋งค๋ฒˆ ์ฝ์—ˆ๋‹ค๊ณ  ์ˆซ์ž๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋˜๊ณ , ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ˜๋ณต๋ฌธ์„ ํƒ€์•ผํ•˜๋Š” ๊ฑด ๋˜‘๊ฐ™์œผ๋ฏ€๋กœ 2๋ฒˆ์ด ํ›จ์”ฌ ๊ฒฝ์ œ์ ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. 

๋‹จ์ ์œผ๋กœ๋Š” ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ์ฆ‰ ์ฑ„ํŒ…๋ฐฉ์—์„œ ๋ฒ—์–ด๋‚ ๋•Œ ๋งˆ์ง€๋ง‰ ์ฑ„ํŒ…๋ฐฉ ํ™•์ธ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•˜๋Š”๋ฐ, ๊ธฐ๊ธฐ๋ฅผ ๋‘๊ฐœ ์ผœ๋‘๊ณ  ํ•œ์ชฝ ๋ฐฉ์—” ์ฑ„ํŒ…์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฝ์œผ๋ฉด์„œ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋ฉด ์•„์ง ๋งˆ์ง€๋ง‰ ํ™•์ธ ์‹œ๊ฐ„์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์•ˆ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋กœ ์นด์šดํŠธ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

๊ฐ๊ฐ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ํŒŒ์•…ํ–ˆ๊ณ , ํ›„์ž๊ฐ€ ์ข€๋” ๊ฒฝ์ œ์ ์ด๋ผ ์ƒ๊ฐํ•ด์„œ ํ›„์ž์˜ ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง์„ ์งฐ๋‹ค.

 

 

์ฑ„ํŒ…๋ฐฉ์ด ์ฑ„ํŒ…๋ฉ”์‹œ์ง€๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ, ์ฒ˜์Œ์—” OrederBy ๋กœ ์ „์†ก์‹œ๊ฐ„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค.

์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ŠคํŠธ๋ฆผ์€ ์ •๋ฐฉํ–ฅ ์ˆœํšŒ ๋ฐ–์— ์•ˆ๋˜๋ฏ€๋กœ for๋ฌธ์„ ์จ์„œ ๊ฐ€์žฅ ์ตœ์‹  ๋ฉ”์‹œ์ง€๋ถ€ํ„ฐ ์ฆ‰ ๋ฆฌ์ŠคํŠธ์˜ ๋๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์•ž์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ isAfter() ํ•จ์ˆ˜๋ฅผ ์จ์„œ ๋งˆ์ง€๋ง‰ ํ™•์ธ ์‹œ๊ฐ„๊ณผ ๋ฉ”์‹œ์ง€ ์ „์†ก์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์—ฌ ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜ ์นด์šดํŠธ๋ฅผ ๋Š˜๋ ธ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋Ÿด ํ•„์š” ์—†์ด, ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ธ์กฐํšŒ์‹œ์—๋„ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฉ”์‹œ์ง€๋ถ€ํ„ฐ ์ค˜์•ผ๋˜๊ณ , ์ ์€ ์–‘์˜ ์ฑ„ํŒ…๋ฉ”์‹œ์ง€์—์„  OrederBy ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์˜ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ๋‹ค๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ „์†ก๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ์‹ ์ˆœ, ์ฆ‰ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๊ณ , ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜ ์นด์šดํŠธ๋„ ์ŠคํŠธ๋ฆผ์„ ์จ์„œ ์ •๋ฐฉํ–ฅ ์ˆœํšŒ๋ฅผ ํ•˜์˜€๋‹ค. ๋งˆ์ง€๋ง‰ ์ฑ„ํŒ… ๋‚ด์šฉ์˜ ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ(0๋ฒˆ์งธ) ๊ฐ’์„ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค.

 

์ฑ„ํŒ…๋ฐฉ ์ƒ์„ธ์กฐํšŒ GET /v1/chats/{chatRoomCode}

 

 

์ฑ„ํŒ…๋ฐฉ ์ƒ์„ธ์กฐํšŒ๋Š” ์ฑ„ํŒ…๋ฐฉ ์ฝ”๋“œ๋ฅผ PathVariable ๋กœ ๋ฐ›์•„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.

๊ธฐ์กด์—” ๋ชจ๋“  ๊ฑธ id๋กœ ์กฐํšŒํ•˜์˜€์ง€๋งŒ, ํ”„๋ผ์ด๋น—ํ•œ ์ •๋ณด์ด๊ธฐ๋„ ํ•˜๊ณ , ์‹ค๋ฌด์—์„œ๋„ ๊ณ ์œ ํ•œ ์ฝ”๋“œ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฑธ ์•Œ๊ธฐ์— ์ƒ์„ฑ์‹œ๊ฐ„๊ณผ UUID ๋ฅผ ์ปค์Šคํ…€ํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

์ฑ„ํŒ…๋ฐฉ ๋‚ด์— ์œ„์— ์ƒํ’ˆ ์ •๋ณด๋Š” ํ”„๋ก ํŠธ์—๊ฒŒ ์ƒํ’ˆ ์ƒ์„ธ์ •๋ณด API ํ˜ธ์ถœํ•ด์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๊ณ , ์ฑ„ํŒ…๋‚ด์—ญ๋งŒ DTO์— ๋„ฃ์–ด์„œ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค. ์ด๋•Œ ๋ฉ”์‹œ์ง€์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ์— size๋Š” ํ”„๋ก ํŠธ์™€ ํ˜‘์˜ ํ›„ 20์œผ๋กœ ์„ค์ •ํ–ˆ๊ณ , 0๋ฒˆ์งธ๋ถ€ํ„ฐ 20๊ฐœ ๋‹จ์œ„๋กœ ๋Š์–ด์„œ Pageable์„ ์ด์šฉํ•˜์—ฌ ๋ณด๋‚ด์ฃผ๊ณ , ํ”„๋ก ํŠธ์—์„  ํ™”๋ฉด์— ์•„๋ž˜์—์„œ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ๊ณ  ํ•˜์˜€๋‹ค.

ํŠนํžˆ ๋ฆฌ์•กํŠธ์—์„œ map์„ ๋Œ๋ฆด๋•Œ key๋ฅผ ๋ณด๊ณ  ๋ Œ๋”๋ง์„ ํ•˜๋Š”๋ฐ, ๊ณ ์œ ํ•œ ํ‚ค๋ฅผ ๊ฐ–์„ ์ˆ˜ ์žˆ๋„๋ก ์ „์†ก์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๊นŒ์ง€ ๋ณด๋‚ด์ฃผ์–ด ์—๋Ÿฌ ์—†์ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค. 

๋˜ํ•œ ํ”„๋ก ํŠธ ์ธก์—์„œ ๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒ์˜ id๋ฅผ ์•Œ๊ณ ์žˆ์œผ๋ฏ€๋กœ senderId๋ฅผ ์ฃผ์–ด ๊ฐ™์œผ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •๋ ฌ ๋‹ค๋ฅด๋ฉด ์ƒ๋Œ€๋ฐฉ์ด๊ธฐ๋•Œ๋ฌธ์— ์™ผ์ชฝ ์ •๋ ฌํ•ด๋‹ฌ๋ผ ํ•˜์˜€๋‹ค.

์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฑ„ํŒ…์„ ๋ณด๋‚ด๊ณ  ๋ฐ›๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ ๋”์šฑ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ฒ ๋‹ค.

 

์ฑ„ํŒ…๋ฐฉ ์ˆ˜์ • PUT /v1/chats

 

์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฑ„ํŒ…๋ฐฉ ๋งˆ์ง€๋ง‰ ํ™•์ธ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์ด๋•Œ ๋งˆ์ง€๋ง‰ ํ™•์ธ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•ด์ฃผ๋Š” ๊ฑธ ์ด ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ๋•Œ ์ˆ˜์ •ํ•˜๊ธฐ๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค. ์ € ๋ฒ„ํŠผ ์™ธ์— ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์—†์—ˆ๊ณ , ๋ฆฌํ€˜์ŠคํŠธ๋กœ ์ฑ„ํŒ…๋ฐฉ ์ฝ”๋“œ๋งŒ์„ ๋ฐ›์•˜๋‹ค. Spring Security์˜ Principal๋กœ ๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒ์˜ memberId๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ฑ„ํŒ…๋ฐฉ์˜ ๊ตฌ๋งค์ž์ธ์ง€ ํŒ๋งค์ž์ธ์ง€ ๋น„๊ตํ•˜์—ฌ ๊ตฌ๋งค์ž๋ฉด ๊ตฌ๋งค์ž ๋งˆ์ง€๋ง‰ํ™•์ธ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•˜๊ณ  ํŒ๋งค์ž๋ฉด ํŒ๋งค์ž ๋งˆ์ง€๋ง‰ ํŒ๋งค์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

 

์ฑ„ํŒ…๋ฐฉ ์‚ญ์ œ DELETE /v1/chats

 

 

 

์ฑ„ํŒ…๋ฐฉ ๋‚˜๊ฐ€๊ธฐ๋ฅผ ํ•˜๋ฉด ์ผ๋‹จ ํŒ๋งค์ž์ธ ๊ฒฝ์šฐ ๊ตฌ๋งค์ž๊ฐ€ ์ฑ„ํŒ…๋ฐฉ์„ ๋‚˜๊ฐ”๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์•ˆ ๋‚˜๊ฐ”๋‹ค๋ฉด ํŒ๋งค์ž์˜ ํ•„๋“œ๊ฐ’๋งŒ true๋กœ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

์ด์œ ๋Š” ํŒ๋งค์ž๊ฐ€ ์ฑ„ํŒ…๋ฐฉ ๋‚˜๊ฐ€๊ธฐ๋กœ ์ฑ„ํŒ…๋ฐฉ์„ ์‚ญ์ œ ํ–ˆ๋”๋ผ๋„ ๊ตฌ๋งค์ž๊ฐ€ ์‚ญ์ œํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ตฌ๋งค์ž๋Š” ์ฑ„ํŒ…๋ฐฉ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— soft delete ํ•ด์ค˜์•ผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

์ƒ๋Œ€๋ฐฉ๋„ ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ, ์ƒ๋Œ€๋ฐฉ๋„ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด hard delete๋ฅผ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด soft delete ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ HTTP Method ๊ฒฝ์šฐ๋„ POST์— ๋” ๊ฐ€๊นŒ์šธ ์ˆ˜๋„ ์žˆ๋‹ค. ์‹ค๋ฌด์—์„œ๋„ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ POST๋ฅผ ์“ด๋‹ค๊ณ  ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ๋‚˜๋Š” ๋ฐฐ์šฐ๋Š” ์ž…์žฅ์ด๊ธฐ๋•Œ๋ฌธ์— ์ •์„์— ๋” ๊ฐ€๊น๊ฒŒ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒํ•  ๊ฑด์ง€ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ DELETE๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

์ฑ„ํŒ…๋ฐฉ ์‚ญ์ œ์—ฌ๋ถ€๊ฐ€ TRUE๊ฐ€ ๋๋‹ค๋ฉด ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก ์กฐํšŒ์‹œ์—๋„ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. 

 

 

๐Ÿค” ๋” ๊ฐœ์„ ํ•ด๋ณผ๋งŒํ•œ ์ 

์ง€๊ธˆ ํ”„๋กœ์ ํŠธ์—์„  RDS๋งŒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ•„์„ ๊ฐ๋‹นํ•˜๊ธฐ ์œ„ํ•ด MSA๋กœ ์ „ํ™˜ ๋œ๋‹ค๋ฉด ์ฑ„ํŒ…์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋‘๊ฒŒ ๋ ํ…๋ฐ, ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ๊ฒฝ์šฐ NoSQL ์„ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋กœ์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ๋” ํ™•์žฅ์„ฑ์— ์šฉ์ดํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๊ด€๋ฆฌ์ž ๋ฉ”์‹œ์ง€๋‚˜ ์ƒํ’ˆ ์นด๋“œ๋„ ์ฑ„ํŒ…์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ์ง€๊ธˆ์˜ ์„ค๊ณ„๋Œ€๋กœ๋ผ๋ฉด senderId์— ๊ฐ’์„ ๋„ฃ๊ธฐ ์• ๋งคํ•ด์ง„๋‹ค.

 

 

๋„ค๋น„๋ฐ”์˜ ์ฑ„ํŒ…์— ๋ณด์ด๋Š” ์•ˆ ์ฝ์€ ์ฑ„ํŒ… ๊ฐฏ์ˆ˜๋Š” ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก์—์„œ ์•ˆ์ฝ์€ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ˆ˜์˜ ํ•ฉ์‚ฐ์˜ ๊ฐ’์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์•Œ๋ฆผ์œผ๋กœ FCM์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๊ณ , ์ฑ„ํŒ…์‹œ์—๋„ ์•Œ๋ฆผ์œผ๋กœ FCM ํ‘ธ์‹œ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ FCM ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์ด ์˜ค๋ฉด ๊ทธ๋•Œ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ฌ๊ธฐ์— ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ •๋ณด๋ฅผ ๋ฆฌํ”„๋ ˆ์‰ฌ ํ•ด์ฃผ๊ธฐ๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„์— ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๊ณ„์† ์š”์ฒญ์„ ๋ณด๋‚ผ์ผ๋„ ์—†๊ณ , SSE ๊ฐ™์€ ์„œ๋ฒ„์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ ๋•Œ ๋ณด๋‚ด์ค„ ํ•„์š”๋„ ์—†์œผ๋‹ˆ ์„œ๋ฒ„ ๋ถ€ํ•˜๋„ ๋œ์–ด๋‚ด ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๋‚ด FCM ์•Œ๋ฆผ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์„ ํƒ์— ์˜ํ•ด ON/OFF ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด OFF๋กœ ํ–ˆ์„์‹œ ์ฑ„ํŒ… ๋ณด๋ƒˆ์„ ๋•Œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์‚ฌ๋ผ์ ธ ๋ฒ„๋ ธ๋‹ค.

์ด๋•Œ๋Š” ์•ˆ ์ฝ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜ ๋ฆฌํ”„๋ ˆ์‰ฌ๋Š” ํ’€๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ 2์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

 

ํ•œ ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๊ด€์ ๋ณด๋‹ค ๋น„์ง€๋‹ˆ์Šค์ ์ธ ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ๋ณด๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ดํƒˆํ•˜์ง€ ์•Š๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด์„œ ์ผ์œผํ‚ฌ ๋Œ๋ฐœ์ƒํ™ฉ๋“ค์„ ์—ฌ๋Ÿฌ ์ผ€์ด์Šค๋กœ ์ชผ๊ฐœ๊ฐ€๋ฉฐ ์„ค๊ณ„๋ฅผ ํ•˜๊ณ  ๋กœ์ง์„ ์งœ๋‹ˆ ์ทจ์ค€์ƒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ •๋ง ์‹ค๋ฌด์—์„œ ์ผํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๊ฐ™์€ ๋А๋‚Œ์ด ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  ์‹ค๋ฌด์—์„  ๋”์šฑ ๋นก๋นกํ•œ ์ผ€์ด์Šค์™€ ์—ฌ๋Ÿฌ ๊ธฐ์ƒ์ฒœ์™ธํ•œ ์˜ˆ์™ธ์ƒํ™ฉ์ด ๋งŽ์„ํ…Œ์ง€๋งŒ, ์ด๋Ÿฐ ๋งˆ์Œ๊ฐ€์ง๊ณผ ์‹œ์•ผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉด ์ž˜ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ๋Š” ์ž์‹ ๊ฐ๋„ ๋“ค๊ธฐ๋„ ํ–ˆ๋‹ค.

๋‹ค์Œ์—” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.(๊ฐ€์žฅ ์• ๋กœ์‚ฌํ•ญ์ด ๋งŽ์•˜๋˜....ใ…œใ…œ)

๋Œ“๊ธ€