๐Ÿ’ป ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ค์ •

CR7_Fantasticยท2025๋…„ 1์›” 15์ผ
post-thumbnail

์ƒˆ๋กœ์šด ์‹œ๋ฆฌ์ฆˆ๋กœ ์ฐพ์•„๋ต™๋Š” React์™€ Spring Boot๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ• ๋•Œ ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ ค๋Š” ๋ถ„์ด์‹œ๋‚˜๊ฑฐ๋‚˜ ์ €์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด ๋ณด์‹  ์ ์€ ์žˆ์–ด๋„ ์ž๊พธ ๊นŒ๋จน์œผ์‹œ๋Š”๋ถ„์„ ์œ„ํ•œ ๊ธ€์ž…๋‹ˆ๋‹คใ…Žใ…Ž. ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ์„ธํŒ…, ์ดํ›„์—๋Š” ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์žฅ๋‹จ์ ๊ณผ ์“ฐ์ด๋Š” ์—ญํ• ์„ ํ•˜๋‚˜์”ฉ ์ง‘์–ด๋ณด๊ณ  ์ผ๋ฐ˜๋กœ๊ทธ์ธ, Kakao๋‚˜ Google ์†Œ์…œ ๋กœ๊ทธ์ธ๊นŒ์ง€ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™”์ดํŒ…!

์šด์˜์ฒด์ œ

  • OS:Mac OS
  • IDE:IntelliJ
  • Shell: Zsh

Spring Boot ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • IntelliJ์—์„œ New Projrct ํด๋ฆญ!

  • ํด๋ฆญ ํ›„ Generators์—์„œ Spring Initializr ์„ ํƒ

  • Name: ๋ณธ์ธ์ด ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ด๋ฆ„์œผ๋กœ ์ง€์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค
  • Language: Java๋กœ ์„ธํŒ…ํ•ด๋‘ก์‹œ๋‹ค.
  • Type: Gradle๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • JDK: 21 ๋ง๊ณ  ๋ฌด์กฐ๊ฑด 17!! ๋กœ ์„ค์ •ํ•ด๋‘ก์‹œ๋‹ค. 17์ด ์—†์„๊ฒฝ์šฐ JDK 17์„ ๋‹ค์šด๋ฐ›์œผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Java: ์ด ์—ญ์‹œ JDK ๋ฒ„์ „๊ณผ ๋งž๋Š” 17๋กœ ์„ค์ •ํ•ฉ์‹œ๋‹ค.

์˜์กด์„ฑ ์„ค์น˜ ๋‹จ๊ณ„

  • Spring ์ด ์ฒ˜์Œ ๋‚˜์˜ฌ๋•Œ๋Š” ์˜์กด์„ฑ์„ ์ผ์ผ์ด ๋‹ค ์žก์•„์„œ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค๋งŒ, Spring Boot๋Š” ์—ฌ๋Ÿฌ ์˜์กด์„ฑ๋“ค์„ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
  • Spring Boot Initializr์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์˜์กด์„ฑ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ Spring Boot์—์„œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฑ์ •์€ ์•ˆํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค! ๐Ÿฆพ

์ถ”๊ฐ€ํ•œ ์ดˆ๊ธฐ ์˜์กด์„ฑ

  • ์ €๋Š” ์ผ๋‹จ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ด๋ ‡๊ฒŒ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค!
  • ๊ฐ ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์กฐ๊ธˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค
    • Spring Web:
      • RESTful API ๋ฐ HTTP ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
      • ํด๋ผ์ด์–ธํŠธ(React)์™€ ํ†ต์‹ ํ•  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค!!
    • Lombok:
      • Getter/Setter, ์ƒ์„ฑ์ž ๋“ฑ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋„๊ตฌ.
    • Spring Boot DevTools:
      • ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋กœ๋“œํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ.
    • Spring Web Services:
      • SOAP ๊ธฐ๋ฐ˜ ์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”.
      • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†Œ์…œ ๋กœ๊ทธ์ธ์—๋Š” ์ง์ ‘์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ.
    • Spring Security:
      • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ.
      • OAuth2์™€ ์—ฐ๋™ํ•˜์—ฌ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
    • OAuth2 Client:
      • ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์˜์กด์„ฑ.
      • Google, Facebook, GitHub ๋“ฑ์˜ OAuth2 ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
    • Spring Data JPA:
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋ฐ ORM(Object-Relational Mapping)์„ ์ง€์›.
      • MySQL๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ ํ•ฉ.
    • H2 Database:
      • ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋‚ด์žฅํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉ.
      • ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ.
    • Validation:
      • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ์— ์‚ฌ์šฉ.
      • ์†Œ์…œ ๋กœ๊ทธ์ธ๊ณผ ๋”๋ถˆ์–ด ํผ ๋ฐ์ดํ„ฐ(์˜ˆ: ํ”„๋กœํ•„ ์ •๋ณด, ์ถ”๊ฐ€ ์ž…๋ ฅ ๊ฐ’ ๋“ฑ) ๊ฒ€์ฆ์— ์œ ์šฉ.
    • MySQL Driver:
      • MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”.
      • ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ MySQL์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์ˆ˜.

์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ํ™”๋ฉด

  • create๋ฅผ ๋ˆ„๋ฅด์‹  ๋ถ„์ด๋ผ๋ฉด ์ด์ œ ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์ด ๋œจ์‹ค ๊ฒ๋‹ˆ๋‹ค! ์˜์–ด๋„ ๋งŽ๊ณ  ์กฐ์žกํ•ด ๋ณด์ด์ง€๋งŒ ์ฒœ์ฒœํžˆ ์ €ํฌ์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ์œ„ํ•ด ์ฐจ๊ทผ์ฐจ๊ทผ ์ง„ํ–‰ํ•ด๋ณด์ž๊ตฌ์š”!

Spring Boot ์‹คํ–‰

์ด์ œ ๋ฐฑ์—”๋“œ์˜ ์ดˆ๊ธฐ์„ค์ •์€ ์–ด๋А์ •๋„ ๋˜์—ˆ์œผ๋‹ˆ ์„œ๋ฒ„ ์‹คํ–‰์„ ํ†ตํ•ด ๋ฌธ์ œ์—†์ด ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

./gradlew bootRun
  • ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ณ์„œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ฑฐ๋‚˜ intellij ์˜ค๋ฅธ์ชฝ ์ƒ๋‹น์— ํ™”์‚ดํ‘œ ๋ชจ์–‘์„ ํด๋ฆญํ•ด ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค!

โ†’ ์ •์ƒ์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ด ๋˜์—ˆ์œผ๋ฉด 8080ํฌํŠธ์— ์‹คํ–‰์ด ๋˜๊ณ , ์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜ค์‹ค๊ป๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ๋”ฐ๋ผ์˜ค์…จ๋‚˜์š”?


์ด์ œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •์€ ์–ด๋А์ •๋„ ๋˜์—ˆ์œผ๋‹ˆ React ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์˜ค์„ธ์š”!

React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ„ฐ๋ฏธ๋„์„ ์ฐพ์•„๋ผ!

  • ์ผ๋‹จ, ์™ผ์ชฝ ์•„๋ž˜๋ฅผ ๋ณด์‹œ๋ฉด ํ„ฐ๋ฏธ๋„์ด๋ผ๋Š” ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ด์‹ค๊ฒ๋‹ˆ๋‹ค. ์ด๊ฑธ Click! ํ•ด์ฃผ์„ธ์š”. ์•ž์œผ๋กœ ์ €ํฌ๊ฐ€ ํ”„๋กœ์ ํŠธ์— React๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค.

  • ํ„ฐ๋ฏธ๋„์„ ๋ˆ„๋ฅด๋ฉด, ์ด๋ ‡๊ฒŒ ๋‚˜์˜คํ…๋ฐ ๋ณธ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด๋‘” ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์ €์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์  ์ธ์ง€ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

npx create-react-app frontend
  • React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ: Spring Boot ํ”„๋กœ์ ํŠธ ํด๋”์™€ ๋ณ„๋„๋กœ React ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์œ„์— ๋ช…๋ น์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์  !!!! ์žŠ์ง€๋งˆ์„ธ์š”
  • ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „๊ณผ ๊ตฌ์กฐ๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜ ์žˆ์–ด์š”!

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์„ค์น˜ ํ›„ ์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ณ€ํ™”

  • Frontend๋ผ๋Š” ํด๋”๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๊ณ  ์•ž์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ชฝ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ• ๋•Œ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ € ํด๋” ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

frontend ํด๋”๋กœ ์ด๋™

cd frontend
  • cd ๋ช…๋ น์–ด๋กœ frontend ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค!

React ์˜์กด์„ฑ ์„ค์น˜

  • ์•„๊นŒ ์Šคํ”„๋ง ๋ถ€ํŠธ ์ดˆ๊ธฐ ์„ค์ •์—์„œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ์ฃ ? ๋ฆฌ์•กํŠธ ์—ญ์‹œ ์˜์กด์„ฑ์„ ์ดˆ๊ธฐ์— ์„ค์น˜๋ฅผ ํ•˜๋Š”๋ฐ์š”(์ดํ›„์— ์˜์กด์„ฑ ์ถ”๊ฐ€ํ•ด๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค).

  • ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
npm install react-router-dom axios @mui/material @emotion/react @emotion/styled
  • ์šฐ์„ ์ ์œผ๋กœ, ์ €๋Š” React Router, axios, Material-ui(MUI)๋ฅผ ์„ค์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • React Router: ํŽ˜์ด์ง€ ์ด๋™์„ ์œ„ํ•œ ๋ผ์šฐํ„ฐ์ž…๋‹ˆ๋‹ค.
    • axios: ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ HTTPํ†ต์‹ ์œผ๋กœ ์ด์–ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • Material-UI (MUI): ๊ฐ„๋‹จํ•œ UI ๊ตฌ์„ฑ.
  • ์ €๋Š” ๋” ๋‹ค์–‘ํ•œ ๋ฆฌ์•กํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ ์ž ์ถ”๊ฐ€์ ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ ํ•˜์˜€์Šต๋‹ˆ๋‹ค! ์ €์™€ ๊ฐ™์ด ํ•จ๊ป˜ ํ•˜์‹ค ๋ถ„์€ ๋”ฐ๋ผ์™€ ์ฃผ์„ธ์š”๐Ÿ˜ƒ

์ƒํƒœ๊ด€๋ฆฌ ๊ด€๋ จ

  • Redux
    • ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ์„ธ์…˜, ํ…Œ๋งˆ ๋˜๋Š” ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
npm install @reduxjs/toolkit react-redux
  • Zustand
    • Redux๋ณด๋‹ค ๋” ๊ฐ€๋ฒผ์šด ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
npm install zustand

์Šคํƒ€์ผ๋ง ๊ด€๋ จ

  • Styled-components
    • CSS-in-JS ๋ฐฉ์‹์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์Šคํƒ€์ผ๋งํ•ฉ๋‹ˆ๋‹ค.
    • CSS ์™€ JavaScript๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ React ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
npm install styled-components
  • Tailwind CSS
    • ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜์˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
    • ๋น ๋ฅด๊ณ  ์ผ๊ด€๋œ ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init

HTTP ์š”์ฒญ ๊ด€๋ฆฌ

  • React Query (TanStack Query)
    • ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์บ์‹ฑ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • Axios๋ณด๋‹ค ๋” ํšจ์œจ์ ์œผ๋กœ API ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์บ์‹ฑ ๋ฐ ๋ฆฌํŒจ์นญ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
npm install @tanstack/react-query

ํผ ๊ด€๋ฆฌ

  • React Hook Form
    • ํผ ์ƒํƒœ์™€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ๊ฐ™์€ ํผ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•œ API๋กœ ํผ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
npm install react-hook-form

์•„์ด์ฝ˜ ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ

  • React Icons
    • ๋‹ค์–‘ํ•œ ์•„์ด์ฝ˜์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
npm install react-icons
  • Moment.js ๋˜๋Š” Day.js
    • ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ(์˜ˆ: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์‹œ๊ฐ„)๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
npm install dayjs

ํ…Œ์ŠคํŠธ

  • Jest + Testing Library
    • React ์ปดํฌ๋„ŒํŠธ์™€ API์˜ ๋‹จ์œ„ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
npm install --save-dev jest @testing-library/react @testing-library/jest-dom

์• ๋‹ˆ๋ฉ”์ด์…˜

  • Framer Motion
    • ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์ „ํ™˜ ํšจ๊ณผ ๊ตฌํ˜„์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
npm install framer-motion

๋ฆฌ์•กํŠธ ์‹คํ–‰

์ด์ œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ๋ฆฌ์•กํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธ์„ ํ•ด๋ด์•ผ๊ฒ ์ฃ ??

npm start

์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฆฌ์•กํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ฆฌ์•กํŠธ์˜ ํฌํŠธ๊ฐ€ ์ •์ƒ์ ์ด๊ณ , ๋ฆฌ์•กํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์—ˆ๋‹ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋ฐ‘์— ์ด๋ฏธ์ง€ ํ™”๋ฉด์ด ๋‚˜์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด Spring Boot์™€ React์˜ ์ดˆ๊ธฐ ์„ค์ •๊ณผ ์‹คํ–‰์€ ์™„๋ฃŒ๋˜์—ˆ๊ณ , ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ Spring Boot์™€ React์˜ ์—ฐ๋™ ์ค€๋น„ ๊ณผ์ •์— ๋Œ€ํ•ด ํฌ์ŠคํŒ… ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค โฃ๏ธ

profile
์šฐ์งํ•œ, ๋‚˜๋ฌด๊ฐ™์€ ๊ฐœ๋ฐœ์ž

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