๊ฐ์์ฑํ
๋ฐฉ ๋ฉ์ธ์ง ์ฝ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ๋ง์ง๋ง์ผ๋ก ์ฝ์ ๋ฉ์ธ์ง๋ฅผ ์ถ์ ํ์ฌ, ์ฝ์ง ์์ ๋ฉ์ธ์ง์ ๊ฐ์๋ฅผ ํ์ธํ๊ณ ๊ฐ ๋ฉ์ธ์ง์ ๋ํด '์ฝ์ง ์์ ๊ฐ์ (Unread Count)'๋ฅผ ํ์ํฉ๋๋ค. ๊ธฐ์กด์ ๋ฉ์ธ์ง ์ฝ์ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ ๊ฐ ๋ฉ์ธ์ง๋ง๋ค ํด๋น ๋ฉ์ธ์ง๋ฅผ ์ฝ์ ์ ์ ์ ID ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋กํ๊ณ , ์ฝ์ ์ ์ ID ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ํตํด '์ฝ์ง ์์ ๊ฐ์ (Unread Count)'๋ฅผ ๊ณ์ฐํ์ต๋๋ค. ํ์ง๋ง ์ฌ์ฉ์๊ฐ ๋ง์ ์ฑํ
๋ฐฉ์ ์ฌ์ฉ์๊ฐ ์ ์ ์ฑํ
๋ฐฉ์ ๋นํด ๋ ๋ง์ ๋ฉ์ธ์ง๊ฐ ์ค๊ฐ๋ฏ๋ก, ์์ ํด์ผํ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ์ธ์ง ์ฝ์ ์ฒ๋ฆฌ ๋ก์ง์ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ์กด์ ๋ฉ์ธ์ง ์ฝ์ ์ฒ๋ฆฌ ๋ก์ง๋จผ์ , ๊ธฐ์กด์ ์ฑํ
์์คํ
์ ๋ฉ์ธ์ง ์ฝ์ ์ฒ๋ฆฌ ๋ก์ง์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ ์ค..
๋ค์ด๊ฐ๋ฉฐ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ๋ํด ๊ณ ๋ฏผ์ด ์์์ต๋๋ค. ํ ํ๋ก์ ํธ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ, ์ฌ๋ฌ ๋ช
์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์์
์ ์์ํ๊ฒ ๋์๊ณ , ํ๋ก์ ํธ๋ฅผ GitHub์์ ํด๋ก ํ ๋ค, ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ์์ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์ ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๊ธฐ์๋ ๊ฐ ๊ฐ๋ฐ์๊ฐ Redis, MySQL, MongoDB์ ๊ฐ์ ์ธ๋ถ ๋ฐ๋ชฌ์ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ณ , ๊ทธ๋ก ์ธํด ์ค์ ์๋ง ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฑฐ๋, ํ๊ฒฝ ์ธํ
์ ํ์ง ๋ชปํ ์ฑ๋ก ์งํ๋๋ ๊ฒฝ์ฐ๋ ์์์ต๋๋ค. ๋ฐ๋ผ์, ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ํ ๋ฐ๋ก ์คํ ๊ฐ๋ฅํ ํ๊ฒฝ์ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ์ด๋ฅผ ์ํด ๋ก์ปฌ์์ ๋
๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์๋ ๊ธฐ์ ์ด ํ์ํ๋ค๊ณ ํ๋จํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ..
๋ค์ด๊ฐ๊ธฐ ์์ํ๋ก์ ํธ๋ฅผ ์งํ ์ค, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ถ ๊ป์ ๋ณ์ ๊ธฐ๋ฅ์์ ๋ณ์ ๊ฐ์ด ์ ๋๋ก ์
๋ฐ์ดํธ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์
จ์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ ํํ ํ์
ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ, ๋์ผํ ๋ณ์ ๋ฐ์ดํฐ๊ฐ 2๊ฐ ์ ์ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. public RatingCreateResponse createRating(Long userId, RatingCreateServiceRequest request) { User user = userRepository.findById(userId) .orElseThrow(() -> new BusinessException(USER_NOT_FOUND)); Book book = bookRepository.findById(request.getBookIsbn()) ..
๋ค์ด๊ฐ๊ธฐ ์์์ ํฌ ํ๋ก์ ํธ์์๋ ๋งค์ผ ์ค์ 4์์ ๋ฒ ์คํธ ์
๋ฌ ๋์ 100๊ถ์ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ์ฌ ์๋ฒ์ ์ ์ฅํ๋ ์์
์ ์ํํด์ผ ํ์ต๋๋ค. ์ฒ์์๋ ๋๊ธฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด ์์
์ ํ
์คํธํด ๋ณด์์ผ๋, ์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ์ดํฐ ํฌ๋กค๋ง์ ๋ง์ ์๊ฐ์ด ์์๋์๊ณ , ์ ์ฒด ํ๋ก์ธ์ค ํจ์จ์ฑ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ด์ ๋ฐ๋ผ, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CompletableFuture๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ์ฉํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ์ ์๋ํ์ต๋๋ค. ์ด ๊ธ์์๋ ๊ธฐ์กด ๋๊ธฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์์ ๊ฒช์๋ ๋ฌธ์ ์ ๊ทธ๋ก ์ธํด ๋ฐ์ํ ์ง์ฐ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ๋ ํจ์จ์ฑ์ ๋ํด ๊ณต์ ํ๋ ค ํฉ๋๋ค. ๋ฌธ์ ์ํฉ@Component@RequiredArgsConstructorpublic..