๐ŸŒฟSpring

์ฃผ์š” ์ฐจ์ด์ 1. Java ๋ฒ„์ „ ์š”๊ตฌ์‚ฌํ•ญSpring Boot 2.x: ์ตœ์†Œ Java 8์„ ์š”๊ตฌํ•˜๋ฉฐ, ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ Java 11์„ ์ง€์›Spring Boot 3.x: ์ตœ์†Œ Java 17์„ ์š”๊ตฌ ์ด๋Š” ์ตœ์‹  Java ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์ด ๊ฐœ์„ ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.2. Jakarta EE๋กœ์˜ ์ „ํ™˜Spring Boot 2.x: Java EE 8์„ ๊ธฐ๋ฐ˜Spring Boot 3.x: Jakarta EE 9 ์ด์ƒ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด javax์—์„œ jakarta๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, javax.servlet์€ jakarta.servlet๋กœ ๋ณ€๊ฒฝ3. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„ ์ Spring Boot 3.x: ๋‹ค์–‘ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„ ์ ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ๋กœ์šด ..
ํ”„๋ ˆ์ž„์›Œํฌ ์‹œ์ž‘ ํด๋ž˜์Šค๋ชจ๋“  Spring Boot ํ”„๋กœ์ ํŠธ์—๋Š” @SpringBootApplication.@SpringBootApplication ๊ณต์šฉ ํด๋ž˜์Šค Application { public static void main (String[] args) throws Exception { SpringApplication.run(Application.class, args); } }๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ์‚ดํŽด๋ณด๋ฉด SpringApplication.run์ „์ฒด ์‹œ์ž‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ SpringBootApplication ์ƒ์„ฑ์ž ์™€ run ๋ฉ”์†Œ๋“œ ์‹คํ–‰์ด๋ผ๋Š” ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .public static ConfigurableApplicationContext run (..
์ €๋ฒˆ ์‹œ๊ฐ„์— Spring Data JPA ๋ฌด์—‡์ธ๊ฐ€์™€ ๊ฐ„๋‹จํ•œ ํ•ต์‹ฌ์ „๋žต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค๋‹ค. ์ด์–ด์„œ Spring Data JPA์˜ ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜์ธ OSIV ์ „๋žต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 2024.01.22 - [๐ŸŒฟSpring/Spring JPA] - [Spring JPA] JPA๋ž€? [Spring JPA] JPA๋ž€? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JPA(Java Persistence API)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ์ด๋‹ค. ๊ทธ ๋ง์€ ์ฆ‰, ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„ ๋œ ๊ฒƒ์ด ์•„ boom-94.tistory.com OSIV (Open Session In View) ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต ์ค‘..
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JPA(Java Persistence API)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ์ด๋‹ค. ๊ทธ ๋ง์€ ์ฆ‰, ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„ ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์™€ ๋งคํ•‘์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค๋กœ๋Š” Hibernate๊ฐ€ ์žˆ๋‹ค. JPA(Java Persistence API) ๋ž€? Java ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ธํ„ฐํŽ˜์ด์Šค ์ด๊ธฐ ๋•Œ๋ฌธ์— Hibernate, OpenJPA ๋“ฑ์ด JPA๋ฅผ ๊ตฌํ˜„ํ•จ ์žฅ์  ๊ฐ„ํŽธํ•œ CR..
์ธํ„ฐ๋„ท ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋‹ค๊ฐ€ Thymeleaf์˜ Decoupled Logic ์— ๊ถ๊ธˆํ•˜์—ฌ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ž‘์„ฑ์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Decoupled logic์ด ๋ฌด์—‡์ผ๊นŒ? decoupled (๋ถ„๋ฆฌ๋œ) logic์€ thymeleaf์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. HTML์™€ XML ํ…œํ”Œ๋ฆฟ์— ๋งˆํฌ์—…๊ณผ ๋กœ์ง์ด ๋“ค์–ด๊ฐ„ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ ๋”ฐ๋ผ์„œ ๋””์ž์ด๋„ˆ์™€ ํ˜‘์—…์ด ์‰ฌ์›Œ์ง ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ํ…œํ”Œ๋ฆฟ ๋กœ์ง์ด ๋ณ„๋„์˜ ๋กœ์ง ํŒŒ์ผ(ํŒŒ์ผ์ผ ํ•„์š”๋Š” ์—†์œผ๋ฏ€๋กœ ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋กœ์ง resource์— ํ•ด๋‹น)์— ์ •์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋กœ์ง ๋ฆฌ์†Œ์Šค๋Š” ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์œ„์น˜(์˜ˆ: ํด๋”)์— ์žˆ๋Š” ์ถ”๊ฐ€ ํŒŒ์ผ๋กœ, ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ํ™•์žฅ์ž๊ฐ€ .th.xml์ธ ํŒŒ์ผ /templates +->/home.html +->/home.th.xml ์˜ˆ์ œ ์˜ˆ๋ฅผ ๋“ค์–ด home.html..
Thymeleaf ๋ž€? Thymeleaf๋Š” ์„œ๋ฒ„ ์ธก ์ž๋ฐ” ์›น ํ…œํ”Œ๋ฆฟ ์—”์ง„ HTML, XML, JavaScript, CSS๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ํ…œํ”Œ๋ฆฟ ์—”์ง„ ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ Thymeleaf์˜ ๋ชฉํ‘œ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šด ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์ œ๊ณต ์‹ค์ œ๋กœ ํ…œํ”Œ๋ฆฟ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” (HTML์˜ ๊ตฌ์กฐ๋ฅผ ๊นจ์ง€ ์•Š๊ณ , ๊ธฐ์กด HTML ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ง๋ถ™์ด๋Š” ์ฝ”๋“œ) ๋ฐฉ์‹์„ ์‚ฌ์šฉ Natural Templates ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜ ์ด๋ฅผ ํ†ตํ•œ ๋””์ž์ธ ํŒ€๊ณผ ๊ฐœ๋ฐœ ํŒ€๊ฐ„์˜ ๊ฐˆ๋“ฑ๊ณผ ๊ฒฉ์ฐจ ํ•ด์†Œ๋ฅผ ๊ธฐ๋Œ€ Thymeleaf ์ฃผ์š” ํŠน์ง• ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ๋ฒ•: Thymeleaf๋Š” HTML ๋ฌธ์„œ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋Š” ๋ฌธ๋ฒ•์„ ์ œ๊ณต. ์ด๋Š” HTML์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค..
1. Transction ์ด๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ ์‹œํ‚ค๋Š” ์ž‘์—… ๋˜๋Š” ํ•œ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๋Š” ์—ฐ์‚ฐ๋“ค์„ ์˜๋ฏธ ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด Commit ๋˜๋Š” Rollback ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. 2. Transction์˜ ๋™์ž‘ ์›๋ฆฌ 1) ์šฐ์„ ์ˆœ์œ„ - ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ > ํด๋ž˜์Šค > ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ > ์ธํ„ฐํŽ˜์ด์Šค ์ˆœ์œผ๋กœ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ณตํ†ต์ ์ธ ํŠธ๋žœ์Šค ๊ทœ์น™ > ํด๋ž˜์Šค (Class) ํŠน๋ณ„ํ•œ ํŠธ๋žœ์Šค ๊ทœ์น™ > ์ธํ„ฐํŽ˜์ด์Šค(Interface) 2) ํŠธ๋žœ์žญ์…˜(Transction) ๋ชจ๋“œ ๋ฐ˜๋“œ์‹œ publice ๋ฉ”์†Œ๋“œ์— ์ ์šฉ protected, private ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ์„ ์–ธ๋˜์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋„ ๋™์ž‘๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. @Transaction์ด ์ ์šฉ๋˜์ง€ ์•Š์€ public์—์„œ @Transaction์ด ์ ์šฉ๋œ public์„..
Spring์€ ๊ณตํ†ต์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ ์ค‘์— ํ•„ํ„ฐ(Filter)์™€ ์ธํ„ฐ์…‰ํ„ฐ(Interceptor)์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. ํ•„ํ„ฐ(Filter) 1) ํ•„ํ„ฐ(Filter) ๋ž€? - ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ - ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ•„ํ„ฐ๋กœ ์ธ์ฆ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋‹ˆ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ์˜ ํ•„ํ„ฐ์— ๋Œ€ํ•ด ๊ธฐ๋ก - Spring Framework๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด Dispatcher Servlet์— ์˜ํ•ด Controller์— ๋งคํ•‘ - Filter์˜ ์š”์ฒญ์ด Dispatcher Servlet์— ์˜ํ•ด ๋‹ค๋ค„์ง€๊ธฐ ์ „, ํ›„์— ๋™์ž‘ 2) ํ•„ํ„ฐ(Filter)๋Š” ์–ด๋””์— ์‚ฌ์šฉํ•˜๋‚˜? 2-1) ํ•„ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ 3๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ i..
Boom's
'๐ŸŒฟSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก