3. Technical Issue - tastingcode/standard GitHub Wiki

โœ… ๋™์‹œ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

  1. ์ƒํ’ˆ ๋™์‹œ ์ฃผ๋ฌธ
  2. synchronized ์„ ์–ธ
  3. Facade Layer ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ
  4. ๋‚™๊ด€์  ๋ฝ ๋ชจ๋“œ ์ ์šฉ
  5. ๊ฒฐ๋ก  - ๋™์‹œ์„ฑ ์ด์Šˆ ํ•ด๊ฒฐ

1. ์ƒํ’ˆ ๋™์‹œ ์ฃผ๋ฌธ

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ’ˆ์„ 20๋ช…์ด ๋™์‹œ์— 5๊ฐœ์”ฉ ๊ตฌ๋งคํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜์˜ฌ ๊ฒƒ์ธ๊ฐ€?

์ƒํ’ˆ๋ช…: A ์žฌ๊ณ : 100

๐Ÿ‘‰ ์ƒํ’ˆ ๋™์‹œ ์ฃผ๋ฌธ ํ…Œ์ŠคํŠธ

๊ฒฐ๊ณผ : 20๊ฐœ์˜ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์ค‘ 3๊ฑด๋งŒ ์ฒ˜๋ฆฌ๋จ image

2. synchronized ์„ ์–ธ

  • ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋กœ์ง์— synchronized๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ •์ƒ์ ์ธ ์žฌ๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ธ๊ฐ€?

๐Ÿ‘‰ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋™๊ธฐํ™”

๊ฒฐ๊ณผ : ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ๋ฌธ์˜ ์–‘์€ ๋Š˜์—ˆ์œผ๋‚˜ ์—ฌ์ „ํžˆ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•จ image

๐Ÿšซ ์—ฌ์ „ํžˆ ๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋™์ž‘์›๋ฆฌ์— ๊ธฐ์ธํ•œ ๊ฒƒ์ด๋‹ค.


๐Ÿ“Œ @Transactional์˜ ๋™์ž‘์›๋ฆฌ

  1. @Transactional์ด ์ ์šฉ๋œ ํด๋ž˜์Šค๋Š” CGLIB์— ์˜ํ•ด์„œ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํ”„๋ก์‹œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  2. ํ•ด๋‹น ๋กœ์ง์œผ๋กœ ์ง„์ž…ํ•˜๊ธฐ ์ „/ํ›„ AOP Proxy๋ฅผ ํ†ตํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘ ๋ฐ ์ปค๋ฐ‹/๋กค๋ฐฑ์ด ์ง„ํ–‰๋œ๋‹ค.

image

  1. ์ฃผ๋ฌธ์ฒ˜๋ฆฌ ๋กœ์ง์— synchronized๊ฐ€ ์„ ์–ธ๋˜์–ด, ๋จผ์ € ๋„์ฐฉํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ๋•Œ Monitor Lock์„ ํš๋“ํ•˜๊ฒŒ ๋œ๋‹ค.
  2. Lock์„ ํš๋“ํ•˜์ง€ ๋ชปํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์€ Lock์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•œ๋‹ค.
  3. ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Thread-1 ์ด ๋กœ์ง์„ ๋งˆ์น˜๊ณ  ์ปค๋ฐ‹/๋กค๋ฐฑ ์‹œ์ ์œผ๋กœ ์ง„์ž…ํ•˜๋Š” ๊ทธ ์ˆœ๊ฐ„ ๋‹ค์Œ ์“ฐ๋ ˆ๋“œ๊ฐ€ Lock์„ ํš๋“ํ•˜๊ณ  ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ์ด ๋•Œ Thread-1์ด commit๋˜๊ธฐ ์ „์ด๋ฏ€๋กœ ํŠน์ • ์ƒํ’ˆ์˜ ์žฌ๊ณ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ฑ„ Thread-2์˜ ์ฃผ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.

๐Ÿšซ ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.


3. Facade Layer ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ

  • ํŠธ๋žœ์žญ์…˜์˜ ๋™์ž‘์›๋ฆฌ์— ๊ธฐ์ธํ•œ ๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก Facade Layer์—์„œ์˜ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ

๐Ÿ‘‰ ๊ธฐ์กด์˜ synchronized๋ฅผ ์ง€์šฐ๊ณ  Facade Layer์˜ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋กœ์ง์— synchronized ์„ ์–ธ

๊ฒฐ๊ณผ : Facade Layer์—์„œ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™์‹œ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•จ.


4. ๋‚™๊ด€์  ๋ฝ ๋ชจ๋“œ ์ ์šฉ

  • ์ž„๊ณ„ ์˜์—ญ๋งŒ ์ œํ•œํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋‚˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋™๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์šฐ๋ ค๋œ๋‹ค.
    • ๋ฝ ๊ฒฝํ•ฉ : ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ synchronized ๋ธ”๋ก์— ์ง„์ž…ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒ
    • ์Šค๋ ˆ๋“œ ๋Œ€๊ธฐ : synchronized ๋ธ”๋ก์— ์ง„์ž…ํ•˜์ง€ ๋ชปํ•œ ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ --> ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์™€ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€

์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์กฐ ๋ณ€๊ฒฝ

  • ์‡ผํ•‘๋ชฐ ํŠน์„ฑ ์ƒ ๋™์‹œ ์ฃผ๋ฌธ ์š”์ฒญ์— ๋”ฐ๋ฅธ ์žฆ์€ ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€ ์•Š์Œ
  • synchronized โžก @lock-optimistic

image

5. ๊ฒฐ๋ก  - ๋™์‹œ์„ฑ ์ด์Šˆ ํ•ด๊ฒฐ

โœ… ๊ฒฐ๋ก  : ์œ„์™€ ๊ฐ™์ด ์ƒํ’ˆ ์กฐํšŒ ์‹œ ๋‚™๊ด€์  ๋ฝ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๊ฒฉ๋ฆฌ์„ฑ ๋ณด์žฅ์œผ๋กœ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•จ

๐Ÿ‘‰ Issue Posting


โœ… ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ?

  1. ์นดํ…Œ๊ณ ๋ฆฌ ์„ค๊ณ„
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ด€๋ฆฌโ“๐Ÿค”
  3. Enum์œผ๋กœ ๊ด€๋ฆฌโ—๐Ÿ˜„
  4. Json์œผ๋กœ ๋ณ€ํ™˜ ๐Ÿ˜Ž
  5. ๊ฒฐ๋ก  - Enum์œผ๋กœ ๊ด€๋ฆฌ

1. ์นดํ…Œ๊ณ ๋ฆฌ ์„ค๊ณ„

  • ์ƒํ’ˆ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๊ณ„
    • ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ depth๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒํ’ˆ์˜ ์ถ”๊ฐ€๋Š” ๋งˆ์ง€๋ง‰ ์นดํ…Œ๊ณ ๋ฆฌ(๋ฆฌํ”„ ์นดํ…Œ๊ณ ๋ฆฌ)์—์„œ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒํ’ˆ์„ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ์‹œ ํ•˜์œ„ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ด€๋ฆฌโ“๐Ÿค”

  • ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋Š” ํ•œ๋ฐ...

๐Ÿšซ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ๋“ค์ด ์กด์žฌํ•จ

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋งˆ๋‹ค ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

    • ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋งค๋ฒˆ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์กฐํšŒ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚จ๋‹ค.
  2. RDB ํ…Œ์ด๋ธ”์ด ์นดํ…Œ๊ณ ๋ฆฌ ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

    • ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด depth, ๋ถ€๋ชจ, ์ž์‹ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ฐ’ ๋“ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ปฌ๋Ÿผ์œผ๋กœ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
    • ์ด๋Š” ๊ณ„์ธต ๊ตฌ์กฐ ํŒŒ์•… ๋ฐ ์›ํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์ฟผ๋ฆฌ์˜ ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  3. ๊ธฐํƒ€

    • ์ƒํ’ˆ๊ณผ ์ƒํ’ˆ์นดํ…Œ๊ณ ๋ฆฌ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ ๋ฐœ์ƒ์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ด์Šˆ
    • ์ฝ”๋“œ ๋ ˆ๋ฒจ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ๋ฒจ์—์„œ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ ๋“ฑ

3. Enum์œผ๋กœ ๊ด€๋ฆฌโ—๐Ÿ˜„

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ Enum์œผ๋กœ ๊ด€๋ฆฌ
    • ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋ณ€๊ฒฝ๋  ์ผ์ด ๊ฑฐ์˜ ์—†์Œ
    • DB๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ ์‹œ ํ•œ ๋ˆˆ์— ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ

๐Ÿ‘‰ Enum : Category


4. Json์œผ๋กœ ๋ณ€ํ™˜ ๐Ÿ˜Ž

Enum ํƒ€์ž…์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ Json์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. ObjectMapper๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋…ธ๋“œ ์ƒ์„ฑ
  2. ๊ธฐ๋ณธ ์†์„ฑ ์ถ”๊ฐ€ - code, name
  3. ํ•˜์œ„ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ฒ˜๋ฆฌ

๐Ÿ‘‰ @Service : CategoryService

๋ฐ˜ํ™˜๋˜๋Š” CategoryNode๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3์ฐจ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

5. ๊ฒฐ๋ก  - Enum์œผ๋กœ ๊ด€๋ฆฌ

โœ… ๊ฒฐ๋ก  : ์ •์  ๋ฐ์ดํ„ฐ์— ๊ฐ€๊นŒ์šด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ Enum์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


โœ… ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ

  1. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ณ ๋ฏผ
  2. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ์„ค๊ณ„
  3. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ตฌํ˜„
  4. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ํ…Œ์ŠคํŠธ
  5. ๊ฒฐ๋ก  - ๋‹คํ˜•์„ฑ ๊ตฌํ˜„

1. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ณ ๋ฏผ

  • ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ…œํ”Œ๋ฆฟํ™” ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์›น์—์„œ ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐํšŒํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ ํŽ˜์ด์ง€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
    • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง• ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ฉด ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
    • โœ… ์ˆœ์ˆ˜ํ•œ ์—”ํ‹ฐํ‹ฐ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ…œํ”Œ๋ฆฟํ™” ํ•˜์—ฌ ์ƒํ’ˆํ‰์„ ์กฐํšŒํ•ด๋ณด์ž!

2. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ์„ค๊ณ„

  • ํŽ˜์ด์ง• ๋ฐ์ดํ„ฐ๋Š” dto ๋ชฉ๋ก๊ณผ ํŽ˜์ด์ง• ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ dto ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ œ๋„ค๋ฆญ๊ณผ Function ๊ฐ์ฒด๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค!

3. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๊ตฌํ˜„

๋‹ค์Œ๊ณผ ๊ฐ™์ด PageResultDto๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋„ค๋ฆญ๊ณผ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๐Ÿ‘‰ PageResultDto

4. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ํ…Œ์ŠคํŠธ

ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋œ ์ƒํ’ˆํ‰๋“ค์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค.

  • ์ƒํ’ˆ์ •๋ณด์™€ pageable์„ ์ด์šฉํ•ด ํŽ˜์ด์ง• ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ๋ฅผ dto๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŽ˜์ด์ง• ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ PageResultDto๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

image ๐Ÿ‘‰ Method : getReviewList

PageResultDto๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ’ˆํ‰ ์กฐํšŒ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ชจ๋‘ ์ •์ƒ ํ†ต๊ณผํ•˜์˜€์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. image ๐Ÿ‘‰ Test : getReviewList


5. ๊ฒฐ๋ก  - ๋‹คํ˜•์„ฑ ๊ตฌํ˜„

โœ… ๊ฒฐ๋ก  : ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•œ PageResultDto์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ’ˆํ‰์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

แ„‰แ…กแ†ผแ„‘แ…ฎแ†ทแ„‘แ…งแ†ผ แ„Œแ…ฉแ„’แ…ฌ