๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(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..