๐ Study/Spring
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 ์ ์ฐจ์ด์ ๊ณผ ์ฅ๋จ์ ๊ทธ๋ฆฌ๊ณ ๋ญ๋ฅผ ๋๋ง์ด ์ฐ์ด๋์ง?
JUnit์ Java ์ธ์ด๋ฅผ ์ํ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. JUnit4๋ ์ด์ ์ ๋ง์ด ์ฌ์ฉ๋์๊ณ , JUnit5๋ JUnit4์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ฒ์ ์ ๋๋ค. JUnit4์ ์ฅ๋จ์ - ์ฅ์ JUnit4๋ ์์ ์ ์ด๊ณ ์ฑ์ํ ํ๋ ์์ํฌ์ ๋๋ค. ํ๋ถํ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ ๋๋ถ๋ถ์ Java ๊ฐ๋ฐ์๋ค์ด ์ต์ํฉ๋๋ค. ๋ํ ๋ค์ํ IDE์์ ์ง์๋์ด ์ฌ์ฉ์ด ํธ๋ฆฌํฉ๋๋ค. - ๋จ์ JUnit4๋ ํ์ฅ์ฑ์ด ๋จ์ด์ง๊ณ ํ ์คํธ ์ฝ๋์ ๊ตฌ์ฑ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ํ ๋ฉํฐ์ค๋ ๋ ํ ์คํธ ์ง์์ด ๋ถ์์ ํ๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. JUnit5์ ์ฅ๋จ์ - ์ฅ์ JUnit5๋ JUnit4์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ํ ์คํธ ์ธ์คํด์ค ๋ผ์ดํ์ฌ์ดํด์ ์ง์ํ๊ณ , ๋์ ํ ์คํธ๋ฅผ ์ง์ํ๋ฉฐ, ํ ์คํธ ํ๋ผ๋ฏธ..
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์ด๋?
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 ๋?
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๋ก ๊ฒ์ํ์ ๋ง๋ค๋ค๊ฐ ๊ตฌํ ์์ฃผ๋ก ์์ ์ ํ๊ณ ์๋๋ฐ ์, ์ด๋ป๊ฒ ๋์ ๊ฐ๋์ง ๊ถ๊ธํด์ ๊ตฌ์กฐ๋ฅผ ์์๋ณด๊ณ ์ ํ๋ค. 1. src/main/java ๋๋ ํ ๋ฆฌ (์ ์ผ ์ค์) ํ ๋ธ๋ก๊ทธ์์ ๋ช ํํ๊ฒ ์ ๋ฆฌํด์ค ๊ฒ ๊ฐ์ ์ฐธ๊ณ ์ฉ์ผ๋ก ๋จผ์ ์ ์ํฉ๋๋ค. ์ปจํธ๋กค๋ฌ : @Controller (ํ๋ ์ ํ ์ด์ ๋ ์ด์ด, ์น ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํจ) ๋ก์ง ์ฒ๋ฆฌ : @Service (์๋น์ค ๋ ์ด์ด, ๋ด๋ถ์์ ์๋ฐ ๋ก์ง์ ์ฒ๋ฆฌํจ) ์ธ๋ถI/O ์ฒ๋ฆฌ : @Repository (ํผ์์คํด์ค ๋ ์ด์ด, DB๋ ํ์ผ๊ฐ์ ์ธ๋ถ I/O ์์ ์ ์ฒ๋ฆฌํจ) Controller ์ ์ฌ์ง์ ์น ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํตํ ๋ ์ด๋ค ๋ก์ง์ ๊ฑฐ์ณ์ ์ ๋ณด๊ฐ ์ ๋ฌ์ด ๋๋์ง์ ๋ํ ๊ทธ๋ฆผ์ ๋๋ค. ๊ฐ์ฅ ์์ชฝ์ ๋ณด๋ฉด front-end์์ ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ ์ธก..