์ ์ฒด ๊ธ (135) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Entity Life Cycle reference ์คํํธ ์คํ๋ง ๋ถํธ - ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ New(๋น์์) Java์์ญ์ ๊ฐ์ฒด๋ง ์กด์ฌํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋๋ ์ ์ด ์๋ ์ํ. ์ํฐํฐ ๋งค๋์ ์ ๊ด๋ฆฌํ์ ์๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์์ํ Java ๊ฐ์ฒด Managed(์์) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๊ณ , ๋ฉ๋ชจ๋ฆฌ์์์๋ ๊ฐ์ ์ํ๋ก ์กด์ฌํ๋ ์ํ. ๊ฐ์ฒด๋ ์์ ์ปจํ ์คํธ ๋ด์ ๋ค์ด๊ฐ๊ฒ ๋๊ณ , id(PK)๊ฐ์ ํตํด์ ํ์ํ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. Removed(์ญ์ ) ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ์ญ์ ๋ ์ํ. ๊ฐ์ฒด๋ ๋ ์ด์ ์์ ์ปจํ ์คํธ์ ์กด์ฌํ์ง ์์ต๋๋ค. Detached(์ค์์) ์์ ์ปจํ ์คํธ์์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ ์ฌ์ฉํ๋ ์ํ. ์ค์์ ์ํ์ ๊ฐ์ฒด๋ ๊ณ ์ ํ id(PK)๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์.. Entity, Entity Manager reference ์คํํธ ์คํ๋ง ๋ถํธ - ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ Entity Entity ์ฉ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ๋ฐ์ดํฐ๋ก ๊ด๋ฆฌํ๋ ๋์์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ‘์ํ’, ‘ํ์ฌ’, ’์ง์’ ๋ฑ๊ณผ ๊ฐ์ด ๋ช ์ฌ์ด๋ฉด์ ์ ๋ฌด์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ํฐํฐ๋ก ๊ท์ ํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ํฐํฐ๋ฅผ ์ํด์ ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ์ ์ค๊ณํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ ๊ฒ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ ‘์ธ์คํด์ค’ ํน์ ‘๋ ์ฝ๋’๋ผ๋ ์ฉ์ด๋ก ๋ถ๋ฆฐ๋ค. Entity Manager ์ฌ๋ฌ Entity๋ค์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด ์์ ์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค์ ‘์์ ์ปจํ ์คํธ(persistence context)’๋ด์ ๋ณด๊ดํ๊ณ ๊ฐ์ฒด์ life cycle์ ๊ด๋ฆฌํ๋ค. Data source ์ค์ , JPA ๊ด๋ จ ์ค์ reference ์คํํธ ์คํ๋ง ๋ถํธ - ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ ์คํ๋ง ๋ถํธ ๊ฐ๋ ๊ณผ ํ์ฉ - ๋ฐฑ๊ธฐ์ application.properties ๋๋ application.yml ํ์ผ์ ์ค์ ํ ์ ์๋ค. DataSource ์ค์ ํ๊ธฐ JPA๋ MySQL๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ฉด Spring Boot๋ ์๋์ผ๋ก ์ค์ ์ ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ DataSource ์ค์ ์ด ํ์ํ๋ค. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/__dbname__?useSSL=false&serverTimezone=Asia/Seoul spring.datasource.user.. JPA Annotation reference ์คํํธ ์คํ๋ง ๋ถํธ - ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ www.datanucleus.org/products/accessplatform/jpa/annotations.html code ๊ธฐ๋ณธ์ ์ผ๋ก lombok ์ ์ฌ์ฉํ์์ต๋๋ค. import ๋ฌธ๋ ๊ฐ์ด ๋ณผ ์ ์๋๋ก ์ฒจ๋ถํ์์ต๋๋ค. package org.zerock.domain; import java.sql.Timestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.h.. JPA reference ์คํํธ ์คํ๋ง ๋ถํธ - ๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ ์คํ๋ง ๋ถํธ ๊ฐ๋ ๊ณผ ํ์ฉ - ๋ฐฑ๊ธฐ์ ๋ JPA ์๊ฐ ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํ ์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ์ ์ฌํ๋ค๋ ๊ฒ์์ ์์ JDBC๋ก ์ฒ๋ฆฌํ๋ ์์ ์ ํ๋์ ์ถ์ํ๋ ๊ณ์ธต ์ถ๊ฐ ORM, JPA, Spring Data JPA์ ๊ด๊ณ ORM(Object Relational Mapping) ๊ฐ์ฅ ์์ ๊ฐ๋ ์ ํด๋นํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ RDBMS๊ตฌ์กฐ์ ์ฐ๊ฒฐ์์ผ ๊ฐ๋ฐํ์๋ ์ฌ์์ ๋ดํฌํ๊ณ ์๋ค. JPA(Java Persistence API) ORM์ ์ํ ์๋ฐ (EE) ํ์ค์ด๋ค. Java์ธ์ด๋ฅผ ์ด์ฉํด์ ORM์ ๊ตฌํํ๋ ค๊ณ ํ ๋ ์ง์ผ์ผ ํ๋ ์คํ์ด๋ผ๊ณ ํ ์ ์๋ค. Hibernate JPA์ ๊ตฌํ์ฒด๋ค ์ค์์ ํ๋์ ์ ํ์ด๊ณ spring boot์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก Hibe.. [spring boot] HATEOAS ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๊ธฐ HATEOAS ๋? Hypermedia As The Engine Of Application State ์ ์ฝ์์ด๋ค. rest API์์, ์๋ฒ๋ ํ์ฌ ๋ฆฌ์์ค์ ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๋ค. ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด: Relation Hypertext Reference; HATEOAS ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๊ธฐ spring-boot-starter-hateoas ์์กด์ฑ ์ถ๊ฐ org.springframework.boot spring-boot-starter-hateoas Entity ์์ฑ @Getter @Setter @noargsconstructor public class Hello { private String prefix; private Strin.. [spring boot] ์์ฃผ ๊ฐ๋จํ๊ฒ Thymeleaf ์ฌ์ฉํด๋ณด๊ธฐ ํ ํ๋ฆฟ ์์ง์ด๋? ํ ํ๋ฆฟ ์์๊ณผ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์ ๋ ฅ ์๋ฃ๋ฅผ ๊ฒฐํฉํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ ์ํํธ์จ์ด(๋๋ ์ปดํฌ๋ํธ)๋ฅผ ๋งํ๋ค. ์ฃผ๋ก View๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค. ๋์ ์ปจํ ์ธ ๋ฅผ ์์ฑํด์ ์ ๊ณตํด์ผํ ๋ ํ ํ๋ฆฟ ์์ง์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. Code Generation / Email Template ๋ฑ์ ์ฌ์ฉ๋๋ค. ์คํ๋ง ๋ถํธ๊ฐ ์๋ ์ค์ ์ ์ง์ํ๋ ํ ํ๋ฆฟ ์์ง FreeMarker Groovy Thymeleaf (์ถ์ฒ) ใ ก> ๋น๊ต์ ์ต๊ทผ์ ๋ง๋ค์ด์ง ํ ํ๋ฆฟ ์์ง์ด๋ค. Mustache JSP๋ฅผ ๊ถ์ฅํ์ง ์๋ ์ด์ spring boot๊ฐ ์งํฅํ๋ ๋ฐ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ๋ชปํ๋ค. spring boot๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๊ฐ๋ฅํ embeded tomcat์ผ๋ก application์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด ๋ฐฐํฌ.. [spring boot] index.html, favicon ์ฐ์ปด ํ์ด์ง application์ root๋ก ์์ฒญํ์ ๋ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ด๋ค. 1. ๊ธฐ๋ณธ ๋ฆฌ์์ค ์์น์์ index.html ์ฐพ์ ๋ณด๊ณ ์์ผ๋ฉด ์ ๊ณตํ๊ณ 2. index.ํ ํ๋ฆฟ ์ฐพ์ ๋ณด๊ณ ์์ผ๋ฉด ์ ๊ณตํ๊ณ 3. ๋ ๋ค ์์ผ๋ฉด ์๋ฌ ํ์ด์ง๋ฅผ ๋ณด๋ด์ค๋ค. favicon ๋ธ๋ผ์ฐ์ ์ฐฝ ์ ๋ชฉ ์์ ์์ด์ฝ์ ์๋ฏธํ๋ค. favicon.ico ์ด๋ฆ์ผ๋ก ํด๋์ ์ถ๊ฐํ๋ค. ์ฝ๊ฒ favicon ๋ง๋ค๊ธฐ ์ฌ์ดํธ: https://favicon.io/ favicon์ด ์ ์ฉ์ด ๋์ง ์์ ๋๋ "๊ฐ๋ ฅํ ์๋ก๊ณ ์นจ(control + shift + R)"์ ํด๋ณด์ ! ! ! ๋๋ resources/static/ ์ ์ ์ฅํด๋์๋ค. ๋ด๊ฐ ์ ์ฉํ ๋ชจ์ต์ด๋ค. [spring boot] WebJars ์ค jquery ์ถ๊ฐํด๋ณด๊ธฐ WebJars๋? ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋ ์น๋ผ์ด๋ธ๋ฌ๋ฆฌ(jquery, bootstrap, React.js, Vue.js, Angular ๋ฑ) ๋ฅผ *JAR* ํ์ผ ์์ ํจํค์งํ ๊ฒ์ด๋ค. ์คํ๋ง ๋ถํธ๋ WebJars์ ๋ํ ๊ธฐ๋ณธ mapping์ ์ ๊ณตํ๋ค. ์ฝ๊ฒ ๋งํด WebJars๋ฅผ ์ถ๊ฐํ ์ ์๋ค. mvn repository์ ์ฌ๋ผ์์๊ธฐ ๋๋ฌธ์ ๊ฒ์ํด์ pom.xml์ ์ถ๊ฐํ๊ณ ์ธ ์ ์๋ค. org.webjars.bower jquery 3.5.1 ๋ฒ์ ์๋ตํ๊ณ ์ฌ์ฉํ๋ ค๋ฉด webjars-locator-core ์์กด์ฑ ์ถ๊ฐํ๋ฉด ๋๋ค. org.webjars webjars-locator-core 0.46 [spring boot] ์ ์ ๋ฆฌ์์ค ์ง์ ์ ์ ๋ฆฌ์์ค๋? ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์์ ๋, ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์์ด์ ๊ทธ๋๋ก ๋ณด๋ด์ฃผ๋ฉด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๊ธฐ๋ณธ ๋ฆฌ์์ค ์์น “/**”์ด mapping์ ์ํด ์๋์ 4๊ฐ์ง ํด๋์ ์์ค์ ์ฐ๊ฒฐ์ด ๋๋ค. classpath:/static classpath:/public classpath:/resources/ classpath:/META-INF/resources ์์) /hello.html => /static/hello.html ๋งตํ ์ค์ ๋ณ๊ฒฝ ๊ฐ๋ฅ spring.mvc.static-path-pattern ์์) spring.mvc.static-path-pattern: /static/** => http://localhost:8080/static/hello.html ๋ฆฌ์์ค ์ฐพ์ ์์น ์ถ๊ฐ ๊ฐ๋ฅ We.. ์ด์ 1 2 3 4 5 6 7 8 ยทยทยท 14 ๋ค์