[Proj. SARAMARA] ๐Ÿ“ ๊ฐœ๋ฐœ์ผ์ง€ 1

IToriginalยท2023๋…„ 6์›” 20์ผ
0

๋‚จ์ •๋„ค๋“ค: SARAMARA Service DEV.

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail
์นด์นด์˜ค ํด๋ผ์šฐ๋“œ ์Šค์ฟจ์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์„ ๋‹น์‹œ์— ๋ณ„๋„๋กœ ํŒ€์„ ํ˜•์„ฑํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ๊ธฐํšํ–ˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ, ๋‹น์‹œ์— ๊ต์œก๊ณผ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ‘ํ–‰ํ•˜๋Š”๋ฐ๋Š” ์ƒ๋‹นํžˆ ์–ด๋ ค์›Œ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•˜์ง€ ๋ชปํ•œ์ฑ„๋กœ ์นด์นด์˜ค ํด๋ผ์šฐ๋“œ ์Šค์ฟจ์—์„œ ์ •๊ทœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋˜์—ˆ๋‹ค. ํ˜„์žฌ๋Š” ์นด์นด์˜ค ํด๋ผ์šฐ๋“œ ์Šค์ฟจ์„ ์ˆ˜๋ฃŒํ•ด์„œ ๋‹ค์‹œ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค ํ•œ๋‹ค.
๐Ÿ”— [SARAMARA]Github:
๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ๋งคํ•  ๋•Œ ์‚ฌ์•ผํ• ์ง€ ๋ง์•„์•ผํ• ์ง€ ๊ณ ๋ฏผ๋˜๋Š” ๊ฒƒ๋“ค์„ ๊ณต์œ ํ•˜๋Š” ๊ตฌ๋งค ๊ณ ๋ฏผ๊ณผ ๊ด€๋ จ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ Saramara ํ”„๋กœ์ ํŠธ์˜ Backend ์ €์žฅ์†Œ ์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๊ณ , ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ Git Clone์„ ๋ฐ›์•„์™”๋‹ค.
๊ทธ๋Ÿฌ๋‚˜, ๋‹นํ˜น์Šค๋Ÿฌ์šด ๋นจ๊ฐ„์ค„์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐ˜๊ฒจ์ฃผ์—ˆ๋‹ค.

๐Ÿšจ JDK Version Issue

์—๋Ÿฌ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.2. ์˜ ์—๋Ÿฌ๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•œ ๊ฐ€์ง€ ๋” ํžŒํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.2 was found. The consumer was configured to find a runtime of a library compatible with Java 11, ์˜ ์—๋Ÿฌ๋กœ ํžŒํŠธ๋ฅผ ์–ป์—ˆ๋‹ค.

SARAMARA ํ”„๋กœ์ ํŠธ๋Š” Spring Boot 3.0.2 Version์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ˜น์‹œ๋‚˜ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณผ๊ฑฐ์— ์ง„ํ–‰๋˜์„œ ๊ธฐ์–ต์ด ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•˜๋‹ค๋ฉด build.gradle File์„ ํ™•์ธํ•ด๋ณด์ž.

Spring Boot 3.0 ๋ฒ„์ „ ์ดํ›„๋กœ๋Š” JDK 17์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๊ณ , ์–ด์งธ์„œ์ธ์ง€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ๋Š” JDK 11๋กœ ์„ค์ •๋˜์–ด์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋žด๋ถ€๋žด JDK 17๋กœ ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜๋‹ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๐Ÿ”จ Project ์ˆ˜์ •

๊ต์œก ์ค‘์— ์ง„ํ–‰ํ–ˆ๋˜ ์ฝ”๋“œ์—ฌ์„œ ๊ทธ๋Ÿฐ์ง€ ์ •๋ง ์—‰๋ง์ง„์ฐฝ์ด์˜€๋‹ค.

๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ ์ด ์—‰๋ง์ง„์ฐฝ์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋‹ค๋“ฌ์„ ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. (๋ณ„๋กœ ์ง„ํ–‰๋œ ์ฝ”๋“œ๋Š” ์—†์—ˆ์ง€๋งŒ..)

๐Ÿ“‚ Board Entity ํด๋ž˜์Šค ์ฝ”๋“œ ์ˆ˜์ •

  • ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐœํ–‰
  • Like Enitiy ์‚ญ์ œ
  • PK ID Colume ๋ช… ์ˆ˜์ •

1. ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋„ค์ด๋ฐ ์ˆ˜์ •

PK ๊ฐ’์ธ boardId๋ฅผ private Long id๋กœ ์ž‘์„ฑํ•˜๊ณ  @Column ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ name์„ ๋‹ฌ์•„์ค€ ๊ฒƒ์ด Spring MVC ํŒจํ„ด์—์„œ ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ @Column ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ญ์ œํ•˜๊ณ  private Long boardId ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด์ฃผ๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.

2. likes ์‚ญ์ œ

private Long likes ๊ฒŒ์‹œ๋ฌผ์˜ ์ข‹์•„์š”๋ฅผ ๋‚˜ํƒ€๋‚ผ Colume์œผ๋กœ ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.
์ด ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž์˜ ์ข‹์•„์š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์ค‘๋ณต๋˜๋Š” ์ƒํ™ฉ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ likeForBoard์˜ ํ…Œ์ด๋ธ”์„ ํ˜•์„ฑํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์— ํ•ด๋‹น ์˜๊ฒฌ์„ ํŒ€์— ์ „๋‹ฌํ•˜๊ณ  ์ดํ›„์— ์ž‘์—…์— ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ์ œ๊ฑฐํ–ˆ๋‹ค.
(์ง€๊ธˆ ๋ณด๋‹ˆ likeCount๋กœ ๊ฐฏ์ˆ˜๋ฅผ ์ •๋ฆฌํ•ด์ค„ Colume์ด ํ•„์š”ํ•œ๋ฐ ์ด ๋ถ€๋ถ„์œผ๋กœ ์ˆ˜์ •์„ ํ•˜๊ณ  ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋ฉด ๋๋‹ค.. ํ•˜์ง€๋งŒ, ๊ทธ๊ฑฐ๋‚˜ ๊ทธ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.๐Ÿ‘€)

๐Ÿ“‚ BoardRepository ํด๋ž˜์Šค ์ฝ”๋“œ ์ˆ˜์ •

  • ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐœํ–‰
  • getBoardWithComment ๋ฉ”์„œ๋“œ ์‚ญ์ œ
  • Query๋ฌธ ๋‚ด์— id์˜ ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝ๋œ boardId ์ปฌ๋Ÿผ์œผ๋กœ ์ˆ˜์ •

1. getBoardWithComment ๋ฉ”์„œ๋“œ ์‚ญ์ œ

์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌํ• ๊นŒ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋‹ค. ํ•˜์ง€๋งŒ Board์˜ ์ž‘์—…์ด ์–ด๋А์ •๋„ ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Comment ๋ถ€๋ถ„์€ ๊ณผ๊ฐํ•˜๊ฒŒ ์‚ญ์ œํ–ˆ๋‹ค. ์ดํ›„์— Comment์˜ ๊ฐœ๋ฐœ ์ง„ํ–‰์— ๋งž์ถฐ์„œ ๋ณ„๋„๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์ค„ ์˜ˆ์ •์ด๋‹ค.

2. Query๋ฌธ ๋‚ด์— id์˜ ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝ๋œ boardId ์ปฌ๋Ÿผ์œผ๋กœ ์ˆ˜์ •

์•ž์„œ Board Entity์—์„œ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•œ ์ˆ˜์ •์ด๋‹ค.

๐Ÿ“‚ BoardService ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ BoardServiceImpl ํด๋ž˜์Šค ์ฝ”๋“œ ์ˆ˜์ •

  • DTOtoEntity ์ฃผ์„์ฒ˜๋ฆฌ: ModelMaper ๋„์ž…์„ ๊ณ ๋ ค
  • BoardPageResponseDTO ์š”์ฒญ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

BoardService


DTOtoEntity EntitytoDTO ์™€ ๊ฐ™์€ ๋ณ€ํ™˜ ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์›Œ์„œ ํ˜„์žฌ ModelMapper๋ฅผ ๋„์ž…ํ•  ๊ณ„ํš์ค‘์ด๊ณ  ๊ทธ์— ๊ฐ€๊น๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ์— ๋งž๊ฒŒ ํ•„์š”์—†๋Š” ์ฝ”๋“œ๊ฐ€๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

BoardServiceImpl

BoardPageResponseDTO ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜„์žฌ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๊ณ ๋ฏผ์—†์ด ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์— ์žˆ์–ด ์ด์œ ์—†๋Š” ์ฝ”๋“œ๋กœ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ผ ํŒ๋‹จํ–ˆ๊ณ , ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ณผ๊ฐํ•˜๊ฒŒ ์‚ญ์ œํ–ˆ๋‹ค.
(์•„์ง ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ์˜ ๊ธฐ๋ณธ์ ์ธ CRUD๋„ ์ง„ํ–‰์ด ์ œ๋Œ€๋กœ ์™„๋ฃŒ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ•„์š”์—†๋Š” ๋ฉ”์„œ๋“œ๋ผ ํŒ๋‹จ!)


๊ฒŒ์‹œ๋ฌผ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ๋ฒ„๋ฆด๊ป€ ๋ฒ„๋ ธ๋‹ค.
์™„์„ฑ๋œ ์ฝ”๋“œ์˜€๋‹ค๋ฉด ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ–ˆ์„ ๊ฒƒ์ด์ง€๋งŒ, ์ง„ํ–‰์ด ๊ทน๊ทน๊ทน ์ดˆ๋ฐ˜์˜ ๊ฐœ๋ฐœ์ƒํƒœ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๊ธฐ๋ฐ˜์„ ์žก์€ ๊ฒƒ์ด๋‹ค.
๊ธฐํšํ–ˆ๋˜ ์•„์ด๋””์–ด๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์‹œ ์‚ด๋ ค๋ณธ๋‹ค๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กญ๊ณ , ๊ฐœ์ธ๊ณต๋ถ€์™€ ๋ณ‘ํ–‰ํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ธฐ์—๋„ ํž˜๋“  ์‹œ๊ฐ„์ด ๋˜๊ฒ ์ง€๋งŒ, ๋ถ„๋ช… ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋Œ€๋œ๋‹ค!๐Ÿคฉ
profile
๐Ÿ‘พISTP์˜ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€