Spring 11

TIL Spring #3-3

Entity ์—ฐ๊ด€๊ด€๊ณ„ 1:1 N:1 1:N N:M ์‹ค์ œ๋กœ ํ…Œ์ด๋ธ”์„ ๋”ฑ ํ•œ๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค. DB table์˜ ์—ฐ๊ด€๊ด€๊ณ„ Entity ๊ฐ์ฒด์˜ ์—ฐ๊ด€๊ด€๊ณ„ ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ? ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ๊ฐ์ด ์Œ์‹์„ ์ฃผ๋ฌธํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹น์—ฐํžˆ ์ฃผ๋ฌธํ•˜๋Š” ๊ณ ๊ฐ ํ…Œ์ด๋ธ” ํ•˜๋‚˜, ์Œ์‹ ํ…Œ์ด๋ธ” ํ•˜๋‚˜ ์ด ๋‘๊ฐœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ณ ๊ฐ์ด ์Œ์‹์„ ์ฃผ๋ฌธํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์ฃผ๋ฌธ๊ฑด์— ๋Œ€ํ•œ๊ฑด ์œ ์ €? ์Œ์‹? ์–ด๋Š ํ…Œ์ด๋ธ”์— ๋ช…์‹œํ•ด์ค˜์•ผํ• ๊นŒ? ์ด๋ฅผ ์œ ์ €๋‚˜ ์Œ์‹ ํ…Œ์ด๋ธ”์— ๋„ฃ๊ฒŒ ๋˜๋ฉด ๋‘˜๋‹ค ์‚ฌ์šฉ์ž, ์Œ์‹ ๋‚ด์šฉ์ด ์ค‘๋ณต๋˜๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ user_id ์ปฌ๋Ÿผ์— 1๋ฒˆ 2๋ฒˆ ์œ ์ €๊ฐ€ ์ฃผ๋ฌธํ–ˆ๋‹ค. ๋ผ๋Š” ํ‘œํ˜„ ๋ฐฉ์‹๋„ ์•ˆ๋ ๊นŒ? ์ผ๋‹จ RDBMS ์ƒ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ผ๊ณ  ์ดํ•ดํ•˜์ž. - 2 row..

Spring 2023.12.18

TIL Spring #3-2

ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ตฌํ˜„ Filter 'Spring security' framwork 1-1)ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ - build.gradle JPA, MySQL ์ถ”๊ฐ€ // JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // MySQL runtimeOnly 'com.mysql:mysql-connector-j' + application.properties / ์‚ฌ์šฉํ•  DB ์—ฐ๊ฒฐ - ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ํ•„์ˆ˜ - Spring security์—์„œ ์ œ๊ณตํ•˜๋Š” ์•”ํ˜ธํ™” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•ด์ค€๋‹ค.(์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์•”ํ˜ธ๋ž‘ ์•”ํ˜ธํ™”๋œ ์•”ํ˜ธ๋ฅผ ๋น„๊ตํ•ด ์ผ์น˜์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์–ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค.) import java.util.Optional; @Service ..

Spring 2023.12.15

TIL Spring #3-1

[์ธ์ฆ๊ณผ ์ธ๊ฐ€] ์ฟ ํ‚ค์™€ ์„ธ์…˜ JWT ๋”๋ณด๊ธฐ ํ˜น์‹œ, bean์„ ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„๊นŒ? ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋‚˜ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋Š” ์ˆ˜๋™์œผ๋กœ bean์„ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (๋น„๊ต์  ๋ถ€๊ฐ€์ ์ธ ๊ฒƒ) - @Component ๋ง๊ณ  ๋ฉ”์„œ๋“œ์— @Bean ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค~! ์ธ์ฆ/์ธ๊ฐ€ ์ธ์ฆ: ํ•ด๋‹น ์œ ์ €๊ฐ€ ์‹ค์ œ ์œ ์ €์ธ์ง€ ์ธ์ฆํ•˜๋Š” ๊ฒƒ ex)๋กœ๊ทธ์ธ ์ธ๊ฐ€: ํ•ด๋‹น ์œ ์ €๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ—ˆ๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ ex)๋น„ํšŒ์›๋กœ๊ทธ์ธ - ์ผ๋ฐ˜์ „์œผ๋กœ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๊ณ , ์‹ค์ œ๋กœ ์ด ๋‘๊ฐ€์ง€๋Š” ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋‹ค. - HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ํ•˜๋Š”๋ฐ, ๊ทธ ํ†ต์‹ ์€ ๋น„์—ฐ๊ฒฐ์„ฑ๊ณผ ๋ฌด์ƒํƒœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋ช‡๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณค ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด..

Spring 2023.12.14

TIL Spring #2-5

SpringBoot JPA Spring data JPA ์ถ”๊ฐ€์ ์ธ ์• ๋„ˆํ…Œ์ด์…˜: @PersistenceContext, @Transactional ์ž๋ฐ”ํ™˜๊ฒฝ์ด ์•„๋‹Œ Spring boot์—์„œ JPA๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘๋ ์ง€ ์‚ดํŽด๋ณด์ž (memo PJ) - ์šฐ์„  bulid.gradle ๊ณผ application.properties ์— JPA ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (ddl-auto=update) - Memo ํด๋ž˜์Šค ๋˜ํ•œ entity ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด @Entity ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€. - spring ํ™˜๊ฒฝ์—์„œ๋Š” application.properties ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ emf, em ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. (java ํ™˜๊ฒฝ์—์„œ๋Š” persistence.xml์„ ๋งŒ๋“ค์—ˆ์Œ) ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ @PersistenceContext ์• ..

Spring 2023.12.13

TIL Spring #2-4

JPA Entity ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ 1. JPA๋ž€ ๋ฌด์—‡์ธ๊ฐ€? : ์˜ˆ๋ฅผ ๋“ค์–ด ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ(ORM์ด ์—†๋Š” ํ™˜๊ฒฝ) ์–ด๋–ค ์ปฌ๋Ÿผ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๊ทธ์— ๋”ฐ๋ฅธ ์ถ”๊ฐ€์ ์ธ SQL ์ˆ˜์ •์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์•„์ง„๋‹ค. ์ด๋กœ ์ธํ•ด ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ๋ณด๋‹ค SQL ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ORM ์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. Object Relational Mapping์˜ ์ค„์ž„๋ง๋กœ ์ž๋ฐ” ํด๋ž˜์Šค์™€ DB data ๋ฅผ mapping ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์„ ORM์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. (์ง์ ‘ DB๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์•„๋„ ๋จ~) # JPA๋Š” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ช…์„ธ - ๊ทธ๋ฆฌ๊ณ  JPA๋ฅผ ๊ตฌํ˜„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ์ด 'ํ•˜์ด๋ฒ„๋„ค์ดํŠธ' ์ด๋‹ค! (์ž์ฃผ ๋“ฑ์žฅ ์˜ˆ์ •) 2. Entity๋ž€ ๋ฌด์—‡์ผ๊นŒ? : JPA์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜..

Spring 2023.12.12

TIL Spring #2-3

IoC / DI IoC Container & bean - ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ์šฐ์„ ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์–ด๋””์— ์ƒ์„ฑํ• ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ๊นŒ? ์ด๊ฒƒ์„ Spring์—์„œ ๋„์™€์ค€๋‹ค! bean: Spring์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด IoC Container: Bean ์„ ๋ชจ์•„๋‘” ์ปจํ…Œ์ด๋„ˆ - ๋“ฑ๋ก๋ฐฉ๋ฒ•? ๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค ์œ„์— @Component ์• ๋„ˆํ…Œ์ด์…˜์„ ์ž‘์„ฑํ•ด์ค€๋‹ค! ์ด๋ ‡๊ฒŒ ์• ๋„ˆํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค์— ํ•œํ•ด Spring์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค. Spring ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฑฐ๊ธฐ์— @ComponentScan ์ด๋ผ๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด ์žˆ๋‹ค! ๊ทธ๋ž˜์„œ @Component ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜์ด ์žˆ๋Š” ํŒจํ‚ค์ง€์™€ ํ•˜์œ„ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ๋Œ์•„๋‹ค๋‹ˆ๋ฉด์„œ ์• ๋„ˆํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ bean์œผ๋กœ ๋“ฑ..

Spring 2023.12.12

TIL Spring 2-2

IoC&DI ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๊ธฐ # IoC&DI ๋Š” Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ ๊ฐ๊ฐ ์„ค๊ณ„ ์›์น™, ๋””์ž์ธ ํŒจํ„ด์„ ๋œปํ•œ๋‹ค. ์™œ ์ด๊ฒƒ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•œ๋‹ค. ๋”๋ณด๊ธฐ ๋…ผ๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•ด์•ผ ํ•œ๋‹ค. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ํ‘œํ˜„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•˜๋”๋ผ๋„ ํฌ๊ฒŒ ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ์ด ์—†์–ด์•ผ ํ•œ๋‹ค. ์ด ํŒŒํŠธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ‚ค์›Œ๋“œ๋Š” ์˜์กด์„ฑ, ์ฃผ์ž… ์ด ๋‘๊ฐ€์ง€์ด๋‹ค! ๊ฐ•ํ•œ๊ฒฐํ•ฉ์ผ์ˆ˜๋ก ์ฝ”๋“œ ๋‚ด์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ฝ”๋“œ๋ฅผ ๋Š์ž„์—†์ด ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. (๋น„ํšจ์œจ์ ) #์˜์กด์„ฑ ๊ทธ๋ž˜์„œ ์ด ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์•ฝํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. interface ๋‹คํ˜•์„ฑ์˜ ์›๋ฆฌ๋ฅผ ํ†ตํ•ด ์•ฝํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค! - ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ - ์ธํ„ฐํŽ˜..

Spring 2023.12.08

TIL Spring 2-1

Spring์˜ 3 Layer Architecture - Controller ํด๋ž˜์Šค ํ•˜๋‚˜๋กœ ๋ชจ๋“  API๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค! - ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์„œ๋ฒ„์—์„œ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ Controller, Service, Repository ๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค. 1. 3 Layer Architecture Controller : ํด๋ผ์ด์–ธํŠธ์˜ HTTP Request๋ฅผ ๋ฐ›์•„ Service์— ์ „๋‹ฌํ•œ๋‹ค. (๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ์— ์žˆ๋‹ค๋ฉด ํ•จ๊ป˜ ์ „๋‹ฌ) - Service์—์„œ ์ฒ˜๋ฆฌ ์™„๋ฃŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•œ๋‹ค. Service : ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. (๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„) - DB๊ด€๋ จ ์ž‘์—…์€ Repository์—๊ฒŒ ์š”์ฒญ Repository : DB์™€ ๊ด€๋ จํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. - D..

Spring 2023.12.07

TIL Spring 1-3

CRUD ๊ตฌํ˜„! ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ, index ํŒŒ์ผ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์ž! ํ•ด๋‹น html ํŒŒ์ผ์€ .html์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  localhost:8080 / ์ฃผ์†Œ๋งŒ์œผ๋กœ๋„ return ๋œ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ? Spring ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น URL ์ด ๋“ค์–ด์˜ค๋ฉด ์ž๋™์œผ๋กœ ํด๋” ๋‚ด์— index.html ํŒŒ์ผ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. ํ•ด๋‹น ์„ค์ •์€ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค! CRUD Create - PostMapping Read - GetMapping Update - PutMapping Delete - DeleteMapping CREATE / READ ๊ตฌํ˜„ - ๊ฐ๊ฐ @PostMapping, @GetMapping ์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. - dto ๋“ฑ์žฅ! ์ž๋ฐ” ๋ณด์กฐ ํด๋ž˜์Šค๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ์ด๋™์„ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. - Request์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜..

Spring 2023.12.06

TIL Spring 1-2

1. ์ •์ ํŽ˜์ด์ง€, ๋™์ ํŽ˜์ด์ง€ 2. ๋ฐ์ดํ„ฐ๋ฅผ client ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• 3. Path Variable & Request Param 4. HTTP ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ 1. html ํŒŒ์ผ ๋ฐ˜ํ™˜ # ์ •์ ํŽ˜์ด์ง€ @Controller public class HtmlController { //์ •์ ํŒŒ์ผ, static ํด๋”์— ์œ„์น˜! @GetMapping("/static-hello") public String hello(){ return "hello.html"; } @GetMapping("/html/redirect") public String htmlStatic(){ return "redirect:/hello.html"; } //thymeleaf ํ™˜๊ฒฝ์—์„œ controller ๋ฅผ ๊ฑฐ์น˜๋Š” ๋ฐฉ์‹ //์ •์ ํŒŒ์ผ, temp..

Spring 2023.12.05