์ปค๋ฎค๋ํฐ ์ข์์ ์ํ ๋ถ์ผ์น๋ก ์ธํ 409 ์ค๋ฅ
1. ๋ฌธ์ ์ํฉ
์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ์์ ์ข์์ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ๊ฐํ์ ์ผ๋ก 409 Conflict ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฒ์์๋ ๋์์ ๊ฐ์ ์์ฒญ์ด ์ฌ๋ฌ ๋ฒ ๋ฐ์ํ๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์์ฌํ๋ค. ํ์ง๋ง ์ฌํ ์กฐ๊ฑด์ ํ์ธํด๋ณด๋ ํน์ ์ํฉ์์ ์ผ๊ด๋๊ฒ ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค.

์ปค๋ฎค๋ํฐ ๋๊ธ์ฐฝ์์ ์ข์์ ๋ฒํผ์ ํด๋ฆญํ๋ ํ๋ฉด

์ข์์ ์์ฒญ ์ดํ ํ๋ฉด์์ ํ์ธ๋ 409 Conflict ์ค๋ฅ

๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ Console์์ ํ์ธํ ์ข์์ ์์ฒญ ์คํจ ๋ก๊ทธ
2. ์์ธ ๋ถ์
์์ธ์ ์ข์์ ์ํ๋ฅผ ๋ฐฑ์๋๊ฐ ์๋ localStorage์ ์ ์ฅํด ๊ด๋ฆฌํ๊ณ ์์๊ธฐ ๋๋ฌธ์ด๋ค.

localStorage๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์์ํ ๊ฒ์๊ธ ID๋ฅผ ์กฐํํ๊ณ ์ ์ฅํ๋ ์ด๊ธฐ ์ฝ๋
๋ฌธ์ ๋ localStorage์ ๋ฐฑ์๋์ ์ค์ ์ข์์ ์ํ๊ฐ ์ธ์ ๋ ๋ถ์ผ์นํ ์ ์๋ค๋ ์ ์ด๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ํ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฏธ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒฝ์ฐ
- ๋ธ๋ผ์ฐ์ ์
localStorage๊ฐ ์ด๊ธฐํ๋ ๊ฒฝ์ฐ - ๋ฐฑ์๋ DB์ ์ข์์ ์ํ์ ํด๋ผ์ด์ธํธ ์ ์ฅ ์ํ๊ฐ ๋ฌ๋ผ์ง ๊ฒฝ์ฐ
์ฆ, localStorage์๋ ์ข์์๋ฅผ ๋๋ฅด์ง ์์ ์ํ๋ก ์ ์ฅ๋์ด ์์ง๋ง, ๋ฐฑ์๋์๋ ์ด๋ฏธ ์ข์์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ์ ์๋ค. ์ด ์ํ์์ ํ๋ก ํธ์๋๊ฐ ๋ค์ ์ข์์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ์ค๋ณต ์ข์์ ์์ฒญ์ผ๋ก ํ๋จํ๊ณ 409 Conflict๋ฅผ ๋ฐํํ๋ค.
localStorage๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋จํ ๊ฒ์ด์๋ค.3. ํด๊ฒฐ ๋ฐฉ๋ฒ
ํด๊ฒฐ ๋ฐฉ๋ฒ์ localStorage ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ฐฑ์๋์์ isLiked ํ๋๋ฅผ ์ง์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ ํํ๋ ๊ฒ์ด์๋ค.
3-1. CommunityPostResponse์ isLiked ํ๋ ์ถ๊ฐ
๋จผ์ ๊ฒ์๊ธ ์๋ต DTO์ธ CommunityPostResponse์ isLiked ํ๋๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ฅผ ํตํด ํ๋ก ํธ์๋๋ localStorage๊ฐ ์๋๋ผ ์๋ฒ๊ฐ ๋ด๋ ค์ค ์ข์์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฒํผ ์ํ๋ฅผ ๋ ๋๋งํ ์ ์๋ค.

CommunityPostResponse์ isLiked ํ๋๋ฅผ ์ถ๊ฐํ๊ณ , from() ๋ฉ์๋์์ ์ข์์ ์ํ๋ฅผ ํฌํจํด ์๋ตํ๋๋ก ์์ ํ ์ฝ๋๋ค.
3-2. ๋ชฉ๋ก ์กฐํ ์ N+1 ๋ฐฉ์ง
๊ฒ์๊ธ ๋ชฉ๋ก์ ์กฐํํ ๋ ๊ฒ์๊ธ๋ง๋ค existsByPostIdAndUserId()๋ฅผ ํธ์ถํ๋ฉด ๊ฒ์๊ธ ์๋งํผ ์ข์์ ์กฐํ ์ฟผ๋ฆฌ๊ฐ ์ถ๊ฐ๋ก ๋ฐ์ํ๋ค. ์ด๋ ์ ํ์ ์ธ N+1 ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ์ข์์ํ ๊ฒ์๊ธ ID๋ฅผ ํ ๋ฒ์ ์กฐํํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.

์ฌ์ฉ์๊ฐ ์ข์์ํ ๊ฒ์๊ธ ID ๋ชฉ๋ก์ ํ ๋ฒ์ ์กฐํํ๋ findPostIdsByUserId() ์ฟผ๋ฆฌ ๋ฉ์๋๋ค.

getPosts()์์ ์ฌ์ฉ์๊ฐ ์ข์์ํ ๊ฒ์๊ธ ID๋ฅผ Set์ผ๋ก ๋ณํํ ๋ค, ๊ฐ ๊ฒ์๊ธ์ isLiked ๊ฐ์ ์ผ๊ด ์ฒ๋ฆฌํ๋ ์ฝ๋๋ค.
Set์ผ๋ก ํ์ธํ๋ฉด N+1 ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์๋ค.3-3. ํ๋ก ํธ localStorage ์ ๊ฑฐ
ํ๋ก ํธ์๋์์๋ ๊ธฐ์กด์ localStorage ๊ธฐ๋ฐ ์ข์์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ค. ๋์ ๋ฐฑ์๋ ์๋ต์ ํฌํจ๋ isLiked ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ข์์ ๋ฒํผ ์ํ๋ฅผ ๋ ๋๋งํ๋๋ก ์์ ํ๋ค.


์์ ํ toggleLike ํจ์๋ค. ์ข์์ ์ํ๋ฅผ localStorage๊ฐ ์๋๋ผ ๋ฐฑ์๋์์ ๋ด๋ ค์ค isLiked ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํ๋ค.
4. ์ ์ฉ ๊ฒฐ๊ณผ
- ์ข์์ ํ ๊ธ ์ ๋ฐ์ํ๋
409 Conflict์ค๋ฅ๊ฐ ํด์๋์๋ค. - ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ข์์ ์ํ๊ฐ ์ ํํ๊ฒ ๋ฐ์๋์๋ค.
- ๋ชฉ๋ก ์กฐํ ์ ๋ถํ์ํ ๊ฐ๋ณ ์ข์์ ์กฐํ ์ฟผ๋ฆฌ๋ฅผ ์ค์ฌ N+1 ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ค.
- ํด๋ผ์ด์ธํธ ์ํ๊ฐ ์๋๋ผ ์๋ฒ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก UI๋ฅผ ๋ ๋๋งํ๊ฒ ๋์๋ค.
localStorage์์ ๋ฐฑ์๋ ์๋ต์ isLiked๋ก ๋ณ๊ฒฝํ๋ฉด์, ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ์ํ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.5. ๋ฐฐ์ด ์
์ข์์์ฒ๋ผ ์๋ฒ ์ํ์ ๋๊ธฐํ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ ํด๋ผ์ด์ธํธ ์ ์ฅ์๋ง์ผ๋ก ๊ด๋ฆฌํ๋ฉด ์ ๋๋ค. localStorage๋ ์ธ์ ๋ ์ด๊ธฐํ๋ ์ ์๊ณ , ์ฌ๋ฌ ๊ธฐ๊ธฐ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผํ ๊ฒฝ์ฐ ์ํ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ฒ ์ํ๋ ์๋ฒ๊ฐ ๋ด๋ ค์ฃผ๋ ๊ฐ์ ์ ๋ขฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์์ผ ํ๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์๋ต์ ๋ฐ์ UI๋ฅผ ๋ ๋๋งํ๊ณ , ์ฌ์ฉ์ ์ก์ ์ ๋ฐ๋ผ ์๋ฒ์ ๋ณ๊ฒฝ ์์ฒญ์ ๋ณด๋ด๋ ์ญํ ์ ์ง์คํ๋ ๊ฒ์ด ์์ ํ๋ค.