๐Ÿ“š Study/Spring

    spring.jpa.hibernate.ddl-auto์˜ ์ข…๋ฅ˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

    spring.jpa.hibernate.ddl-auto์˜ ์ข…๋ฅ˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

    Exploring Different Values of `spring.jpa.hibernate.ddl-auto` in Spring Boot Spring Boot ํ”„๋กœ์ ํŠธ์—์„œ `spring.jpa.hibernate.ddl-auto` ์†์„ฑ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” `spring.jpa.hibernate.ddl-auto` ์†์„ฑ์˜ ๋‹ค์–‘ํ•œ ๊ฐ’์„ ์‚ดํŽด๋ณด๊ณ , ๊ฐ ๊ฐ’์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ์†Œ๊ฐœ `spring.jpa.hibernate.ddl-auto` ์†์„ฑ์€ Hibernate๋ฅผ ํ†ตํ•ด JPA ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ, ๊ฒ€์ฆํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค...

    User@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)๊ตณ์ด RANDOM_PORT๋ฅผ ํ•˜๋Š” ์ด์œ 

    1. ํฌํŠธ ์ถฉ๋Œ ๋ฐฉ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ๊ธฐ๋ณธ ํฌํŠธ์ธ 8080์ด ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ, ๋žœ๋ค ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌํŠธ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ™์€ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋žœ๋ค ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ @SpringBootTest ์–ด๋…ธํ…Œ์ด์…˜์€ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰์— ํ•„์š”ํ•œ ๋นˆ์„ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜์—ฌ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋žœ๋ค ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ™์€ ์„œ๋ฒ„๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ @SpringBootTest ์–ด๋…ธ..

    repository, domain, controller, service ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋‹ค ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•˜๋Š”์ง€? ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋„ ์•Œ์•„๋ณด์ž

    ์ผ๋ฐ˜์ ์œผ๋กœ Spring Boot ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Repository, Service, Controller ๋“ฑ์˜ ๊ณ„์ธต(layer)๋ณ„๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. Repository ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ CRUD(Create, Read, Update, Delete) ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต In-Memory DB(์˜ˆ: H2)๋ฅผ ์ด์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Service ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. Repository๋ฅผ Mockingํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Controller HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. MockMvc๋ฅผ ์ด์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, Domain์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋กœ, ๋ณ„๋„์˜ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜..

    junit4 ์™€ junit 5 ์˜ ์ฐจ์ด์ ๊ณผ ์žฅ๋‹จ์  ๊ทธ๋ฆฌ๊ณ  ๋ญ๋ฅผ ๋”๋งŽ์ด ์“ฐ์ด๋Š”์ง€?

    junit4 ์™€ junit 5 ์˜ ์ฐจ์ด์ ๊ณผ ์žฅ๋‹จ์  ๊ทธ๋ฆฌ๊ณ  ๋ญ๋ฅผ ๋”๋งŽ์ด ์“ฐ์ด๋Š”์ง€?

    JUnit์€ Java ์–ธ์–ด๋ฅผ ์œ„ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. JUnit4๋Š” ์ด์ „์— ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ๊ณ , JUnit5๋Š” JUnit4์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. JUnit4์˜ ์žฅ๋‹จ์  - ์žฅ์  JUnit4๋Š” ์•ˆ์ •์ ์ด๊ณ  ์„ฑ์ˆ™ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ Java ๊ฐœ๋ฐœ์ž๋“ค์ด ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์–‘ํ•œ IDE์—์„œ ์ง€์›๋˜์–ด ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - ๋‹จ์  JUnit4๋Š” ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ…Œ์ŠคํŠธ ์ง€์›์ด ๋ถˆ์•ˆ์ •ํ•˜๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. JUnit5์˜ ์žฅ๋‹จ์  - ์žฅ์  JUnit5๋Š” JUnit4์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ธ์Šคํ„ด์Šค ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ง€์›ํ•˜๊ณ , ๋™์  ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ํŒŒ๋ผ๋ฏธ..

    Thymeleaf Fragment (Fragment ๋‚˜๋ˆ„๊ธฐ)

    Thymeleaf Fragment (Fragment ๋‚˜๋ˆ„๊ธฐ)

    Fragment๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๋‚˜๋ˆ„๊ณ  ๊ฐ ํŽ˜์ด์ง€์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Fragment๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธธ์ˆ˜๋„ ์žˆ๋‹ค. Thymeleaf Fragment - 1 : Fragment๋ฅผ ๋‚˜๋ˆ„๊ธฐ Thymeleaf Fragment - 2 : ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ, ์‚ฌ์šฉํ•˜๊ธฐ Thymeleaf Fragment ๋‚˜๋ˆ„๊ธฐ ๊ฐœ๋ฐœํ™˜๊ฒฝ์€ Springboot + Thymeleaf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ Thymeleaf๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด Thymeleaf ์˜์กด์„ฑ ์ฃผ์ž…, Web์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Spring-boot-starter-web ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์•˜๋‹ค. org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-star..

    Spring์ด๋ž€?

    Spring์ด๋ž€?

    1. ์Šคํ”„๋ง(Spring)์ด๋ž€? 1.1 ์Šคํ”„๋ง์˜ ๊ฐœ๋… Spring Logo Spring์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์Šคํ”„๋ง์€ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. spring.io ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜๋ฉด ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ˜„๋Œ€ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ Configuration Model ์ œ๊ณตํ•œ๋‹ค๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Python์„ ์ด์šฉํ•œ Django, Ruby๋ฅผ ์ด์šฉํ•œ Ruby on Rails, Javascript๋ฅผ ์ด์šฉํ•œ Node.js ๊ธฐ๋ฐ˜์˜ ์›น ์„œ๋ฒ„ ๊ฐœ๋ฐœ๊ณผ ๊ฐ™์ด Java ๊ฐœ๋ฐœ์ž๋“ค์€ Spring์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring ์€ ์ˆ˜๋งŽ์€ ๊ตญ๋‚ด ๊ธฐ์—…๊ณผ ํ•ด์™ธ ๊ธฐ์—…์—์„œ ๋งค์šฐ ๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ์›น..

    ์Šคํ”„๋ง(Spring)์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Annotation ๊ฐœ๋… ๋ฐ ์˜ˆ์ œ ์ •๋ฆฌ

    1. Annotation์ด๋ž€? Spring์—์„œ๋Š” Annotation์„ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Annotation์˜ ์—ญํ• ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ์„ค๋ช…์€ ์Šคํ”„๋ง ๋นˆ(Spring Bean)์ด๋ž€? ๊ฐœ๋… ์ •๋ฆฌ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”. JAVA์—์„œ Annotation ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „์ƒ์œผ๋กœ๋Š” ์ฃผ์„์˜ ์˜๋ฏธ์ด์ง€๋งŒ Java ์—์„œ๋Š” ์ฃผ์„ ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Annotation์€ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค. ์†Œ์Šค์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹จ์ˆœ ์ฃผ์„์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Annotation์€ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Annotation์„ ํ™œ์šฉํ•˜์—ฌ Spring Framework๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ..

    DAO, DTO, VO ๋ž€?

    DAO, DTO, VO ๋ž€?

    spring์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด DTO, DAO, VO์— ๋Œ€ํ•œ ์šฉ์–ด์— ๋Œ€ํ•˜์—ฌ ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. DAO(Data Access Object) DAO(Data Access Object) ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ data์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. DataBase์— ์ ‘๊ทผ ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง & ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - Database ์ ‘๊ทผ์„ ์œ„ํ•œ ๊ฐ์ฒด์ด๋‹ค. - Data ์‚ฝ์ž…(INSERT), ์ˆ˜์ •(UPDATE), ์‚ญ์ œ(DELETE), ์กฐํšŒ(SELECT)๋ฅผ ์กฐ์ž‘/์ˆ˜ํ–‰ํ•œ๋‹ค. - ๋ณดํ†ต DB์™€ ์—ฐ๊ฒฐํ•  Connection๊นŒ์ง€ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. DTO DTO(Data Transfer Object) ๋Š” ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋กœ, DTO๋Š” ..

    [Spring Boot] ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์•Œ์•„๋ณด๊ธฐ

    [Spring Boot] ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์•Œ์•„๋ณด๊ธฐ

    spring boot๋กœ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค๋‹ค๊ฐ€ ๊ตฌํ˜„ ์œ„์ฃผ๋กœ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์™œ, ์–ด๋–ป๊ฒŒ ๋Œ์•„ ๊ฐ€๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. src/main/java ๋””๋ ‰ํ† ๋ฆฌ (์ œ์ผ ์ค‘์š”) ํ•œ ๋ธ”๋กœ๊ทธ์—์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์ค€ ๊ฒƒ ๊ฐ™์•„ ์ฐธ๊ณ ์šฉ์œผ๋กœ ๋จผ์ € ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ : @Controller (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด, ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•จ) ๋กœ์ง ์ฒ˜๋ฆฌ : @Service (์„œ๋น„์Šค ๋ ˆ์ด์–ด, ๋‚ด๋ถ€์—์„œ ์ž๋ฐ” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ) ์™ธ๋ถ€I/O ์ฒ˜๋ฆฌ : @Repository (ํผ์‹œ์Šคํ„ด์Šค ๋ ˆ์ด์–ด, DB๋‚˜ ํŒŒ์ผ๊ฐ™์€ ์™ธ๋ถ€ I/O ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ) Controller ์œ„ ์‚ฌ์ง„์€ ์›น ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ์†Œํ†ตํ•  ๋•Œ ์–ด๋–ค ๋กœ์ง์„ ๊ฑฐ์ณ์„œ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ์ด ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์œ„์ชฝ์— ๋ณด๋ฉด front-end์—์„œ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก..