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

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(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..
[spring boot] HttpMessageConverters HttpMessageConverters HTTP ์š”์ฒญ ๋ณธ๋ฌธ์„ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด๋ฅผ HTTP ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , ์Šคํ”„๋ง mvc์˜ ์ผ๋ถ€๋ถ„์ด๋‹ค. ์˜ˆ์‹œ) ์ปจํ…์ธ ํƒ€์ž…์ด json์ธ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค๋ฉด json message converter๊ฐ€ User๋ผ๋Š” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. {“username”:”keesun”, “password”:”123”} User ๋ฆฌํ„ด ํƒ€์ž…์ด String์ด๋ฉด String message converter๊ฐ€ ์‚ฌ์šฉ์ด ๋œ๋‹ค. @ReuqestBody ์™€ @ResponseBody๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. @Controller public class UserController2 { @GetMapping("/hello") public @Re..
[spring boot] Test ์˜์กด์„ฑ์„ ํ™•์ธํ•˜์ž spring-boot-starter-test๊ฐ€ test ๊ธฐ๋Šฅ์„ ํ•ด์ค€๋‹ค. scope์€ test๋กœ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค. org.springframework.boot spring-boot-starter-test test test ๋งŒ๋“ค๊ธฐ ๋‹จ์ถ•ํ‚ค: Alt+Insert @SpringBootTest @SpringBootTest๋Š” Spring main application, ์ฆ‰ @SpringBootApplication์„ ์ฐพ์•„๊ฐ€์„œ ์ดํ•˜์˜ ๋ชจ๋“  ๋นˆ์„ ์Šค์บ”ํ•˜๊ณ  test์šฉ application์— ๋“ฑ๋กํ•œ๋‹ค. ์–ด๋งˆ์–ด๋งˆํ•œ ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์— ๋‚˜์˜ค์ง€๋งŒ, MockBean๋งŒ ๊ต์ฒดํ•ด์ค€๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ…Œ์ŠคํŠธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. import org.junit.runner.RunWith; import org.s..
[spring boot] ๋กœ๊ฑฐ๋ฅผ Log4j2๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging “How-to” Guides Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th docs.spring.io org...
[spring boot] logging ์ปค์Šคํ„ฐ๋งˆ์ด์ง• https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html “How-to” Guides Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th docs.spring.io Customize log file Logback: ํŒŒ์ผ..
[spring boot] logging ๊ธฐ๋ณธ ์„ค์ • log: (ํƒ€๋™์‚ฌ) ์ผ์ง€์— ๊ธฐ๋กํ•˜๋‹ค (๋งˆ์ง€๋ง‰ ํ™”์‚ดํ‘œ) JUL(java util logging)์€ SLF4j API๋กœ ๋ณด๋‚ธ๋‹ค. (์ค‘๊ฐ„ ํ™”์‚ดํ‘œ) Log4J๋„ SLF4j API๋กœ ๋ณด๋‚ธ๋‹ค. (์ฒ˜์Œ ํ™”์‚ดํ‘œ) Logback์ด SLF4j์˜ ๊ตฌํ˜„์ฒด์ด๋‹ค. Commons Logging, SLF4j๋Š” ์‹ค์ œ ๋กœ๊น…์„ ํ•˜๋Š” ์• ๋“ค์ด ์•„๋‹ˆ๋ผ ๋กœ๊ฑฐ API๋ฅผ ์ถ”์ƒํ™”ํ•ด๋‘” interface ์ด๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Commons Logging์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ฒฐ๊ตญ SLF4j์„ ์‚ฌ์šฉํ•˜๊ณ , SLF4j๋Š” ๊ตฌํ˜„์ฒด์ธ Logback์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊น…(๊ธฐ๋ก)์„ ํ•œ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ Logback์„ ์“ด๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ ๋กœ๊น…์˜ ๊ธฐ๋ณธ ํฌ๋งท ๋‚ ์งœ ์‹œ๊ฐ„ / ๋กœ๊ทธ ๋ ˆ๋ฒจ / PID / Thread ์ด๋ฆ„ / full package๊ฒฝ๋กœ.class์ด๋ฆ„ / ๋ฉ”์„ธ์ง€ ๋””๋ฒ„๊น… ..
@Profile Spring Framework์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ํŠน์ •ํ•œ ํ”„๋กœ ํŒŒ์ผ์—์„œ๋งŒ ํŠน์ •ํ•œ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ๋‹ค๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ํŠน์ •ํ•œ ํ”„๋กœํŒŒ์ผ์—์„œ ๋นˆ ์„ค์ •์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์“ด๋‹ค. @Profile @Profile("prod") // ์„ค์ •ํŒŒ์ผ ์ž์ฒด๊ฐ€ "prod"๋ผ๋Š” ํ”„๋กœํŒŒ์ผ์ผ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ hello ๋นˆ๋„ ๋ชป์“ด๋‹ค. @Configuration public class BaseConfiguration { @Bean public String hello(){ return "hello"; } } @Profile("test") // ์„ค์ •ํŒŒ์ผ ์ž์ฒด๊ฐ€ "test"๋ผ๋Š” ํ”„๋กœํŒŒ์ผ์ผ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. @Configuration public class TestConfiguration { @Bean publi..
[spring boot] ์™ธ๋ถ€ ์„ค์ • https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config ์™ธ๋ถ€ ์„ค์ •์ด๋ž€? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์„ค์ • ๊ฐ’๋“ค์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ ๋˜๋Š” ๋ฐ–์—๋‹ค๊ฐ€ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ application.properties ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค์ • ํŒŒ์ผ์€ application.properties ํŒŒ์ผ์ด๋‹ค. spring boot๊ฐ€ ์ž๋™์œผ๋กœ ๋กœ๋”ฉํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ, ๊ทœ์•ฝ(convention)์ด๋‹ค. key value ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค. ๋‹ค ๋ฌธ์ž์—ด์ด๋‹ค. springboot intializr ์‹œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ๋กœ, ๋ฐ‘์˜ ์šฐ์„ ์ˆœ์œ„์—์„œ 15์ˆœ์œ„์— ํ•ด๋‹นํ•œ๋‹ค. Spring Boot์˜ ์™ธ๋ถ€ ์„ค์ • ์ข…๋ฅ˜ propertie..
JPA ํ”„๋กœ์ ํŠธ Spring Quick Start(์ฑ…)์˜ Day5 class04~05 ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์Šตํ•œ ์ฝ”๋“œ์˜ ๋งํฌ์ž…๋‹ˆ๋‹ค. JPA๋ž€? ORM ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์— ๋Œ€ํ•œ ํ‘œ์ค€ํ™” ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ JPA์ด๋‹ค. JPA(Java Persistence API)๋Š” ๋ชจ๋“  ORM ๊ตฌํ˜„์ฒด(ORM ํ”„๋ ˆ์ž„์›Œํฌ)๋“ค์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. JDBC๋Š” Oracle, Mysql, H2 ๋“ฑ ํŠน์ • DBMS์— ์ข…์†๋˜์ง€ ์•Š๋Š” DB ์—ฐ๋™ ๊ตฌํ˜„์„ ์ง€์›ํ•œ๋‹ค. ์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JPA API(javax.persistence)๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๋‹น์‹œ์—๋Š” Hibernate๋ฅผ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋Š” TopLink๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ===== JPA ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ๋ฐฉ๋ฒ• ===== 1. maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ 2...
Mybatis ํ”„๋กœ์ ํŠธ Spring Quick Start(์ฑ…)์˜ Day5 class01~02 ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์Šตํ•œ ์ฝ”๋“œ์˜ ๋งํฌ์ž…๋‹ˆ๋‹ค. Mybatis ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ค‘์š”ํ•œ ํŠน์ง• ํ•œ ๋‘์ค„์˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ dB ์—ฐ๋™์„ ์ฒ˜๋ฆฌํ•œ๋‹ค SQL ๋ช…๋ น์–ด๋ฅผ java ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ XML ํŒŒ์ผ์— ๋”ฐ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. Mybatis ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ Data Mapper๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Mybatis๋Š” xmL ํŒŒ์ผ์— ์ €์žฅ๋œ SQL ๋ช…๋ น์–ด๋ฅผ ๋Œ€์‹  ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ VO ๊ฐ™์€ ๊ฐ์ฒด์— ์ž๋™์œผ๋กœ ๋งคํ•‘๊นŒ์ง€ ํ•ด์ค€๋‹ค. ====Mybatis ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ๋ฐฉ๋ฒ•==== 1. pom.xml์— dependency ๋“ฑ๋กํ•˜๊ธฐ mysql mysql-connector-java 8.0.21 org.mybatis mybatis 3.5.6 org.apache.ibatis..
์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์˜ service() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ณผ์ • ๐Ÿ’ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์˜ service() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ณผ์ • ๐Ÿง€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ http ์š”์ฒญ์ด ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋Š” ์ˆœ๊ฐ„ ๐Ÿง€ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  HTTP ํ”„๋กœํ† ์ฝœ์— ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ HttpServletRequest ๊ฐ์ฒด์— ์ €์žฅํ•œ๋‹ค. (doGet(), doPost(), service() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์ƒ์œผ๋กœ ํ˜ธ์ถœ๋˜๋ ค๋ฉด HttpServletRequest ์™€ HttpServletResponse ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.) ๐Ÿง€ ์ด HttpServletRequest ๊ฐ์ฒด๋ฅผ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์ค€๋‹ค. ๐Ÿง€ ๊ทธ๋ž˜์„œ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.