๋ชฉ๋กServer/Java & Spring (8)

๐ŸŒฑ → ๐ŸŒณ

JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€?

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์ด์  1. 1์ฐจ ์บ์‹œ ์กฐํšŒ JPA๋Š” DB๋ฅผ ์ง์ ‘ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 1์ฐจ ์บ์‹œ, ์ฆ‰ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ DB์˜ I/O ๋ถ€๋‹ด์ด ์ ๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์˜ ์ด์ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด JPA์˜ ์žฅ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ JPA๋Š” Entity์˜ PK๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹๋ณ„์„ ํ•˜๊ฒŒ ๋˜๋ฉฐ, 1์ฐจ ์บ์‹œ์—๋Š” ๊ณ ์œ  ์‹๋ณ„์ž ๊ฐ’์œผ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. JPA์˜ findById() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ์šฐ์„ , 1์ฐจ ์บ์‹œ์—์„œ ์‹๋ณ„์ž ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ Entity๋ฅผ ์ฐพ๊ณ  1์ฐจ ์บ์‹œ์— ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด DB์— ์ง์ ‘ ์กฐํšŒํ•ด 1์ฐจ ์บ์‹œ์— ์ ์žฌํ•œ ํ›„ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. 2. ๋™์ผ์„ฑ ๋ณด์žฅ 3. ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ 4. ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking) J..

Server/Java & Spring 2023. 6. 1. 20:37
[Java] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์ด๋ž€? ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ: OOP(Object Oriented Programing) ์ ˆ์ฐจ์ง€ํ–ฅ์  -> ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ฐ์ฒด: ๋Œ€์ƒ (๋ถ•์–ด๋นต)ํด๋ž˜์Šค: ๊ณตํ†ต๋œ ์†์„ฑ๋“ค์˜ ์ •์˜ (๋ถ•์–ด๋นต ํ‹€) OOP: ๊ฐ์ฒด๋“ค์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ OOP์˜ 4๊ฐ€์ง€ ํŠน์ง• ์ถ”์ƒํ™” ์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต๋œ ํŠน์ง•์„ ํŒŒ์•…ํ•ด ์ •์˜ํ•ด ๋†“์€ ์„ค๊ณ„ ๊ธฐ๋ฒ• ๋ชฉ์ ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์ด๋‹ค. ์บก์Šํ™” ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๊ทธ ๊ฐ์ฒด๊ฐ€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ์ถœ ์ˆ˜ ์žˆ์Œ: ์ •๋ณด์€๋‹‰(private) ์ƒ์† ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ์„ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฌผ๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋‹จ์ผ ์ƒ์† (๋‹ค์ค‘ ์ƒ์†์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชฉ์ ์€ ์•„๋‹ˆ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹ค..

Server/Java & Spring 2023. 5. 31. 11:30
[Spring boot] properties ์‚ฌ์šฉ์‹œ "Could not resolve placeholder" ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‚ฌ์ง„, ๋™์˜์ƒ๊ณผ ๊ฐ™์€ ๋ฏธ๋””์–ด ํŒŒ์ผ๋“ค์„ AWS์˜ S3์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•˜์—ฌ application.yml ํŒŒ์ผ์— S3์— ๊ด€๋ จ๋œ ์ธ์ฆ ์ •๋ณด๋“ค์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๋Š”๋ฐ github actions๋ฅผ ํ†ตํ•ด ci/cd ๊ตฌ์ถ•ํ•˜์ž ๋ฌธ์ œ ๋ฐœ์ƒ ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™๋‹ค ๊ทผ๋ฐ ์ผ๋‹จ ๋ฐฐํฌ๋Š” ์ž˜ ๋จ codedeploy์—์„œ๋„ ์„ฑ๊ณต ps -ef | grep jar ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์ค‘์ธ jar ํŒŒ์ผ ํ™•์ธ ์ฒ˜์Œ์—๋Š” ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š” ๋“ฏ ํ–ˆ์œผ๋‚˜ 10์ดˆ ์ •๋„ ๋’ค์— ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๋ฉด ๊บผ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค ์•„ .. ์ด๊ฑฐ ์ง€๊ธˆ application์ด ๋Œ์•„๊ฐ€๋Š”๋ฐ ์‹คํŒจํ•œ๊ฑฐ๊ตฌ๋‚˜ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ java ์‹คํ–‰์‹œ์ผœ๋ณด์ž ์—ญ์‹œ๋‚˜ .. application run failed ์˜€๊ตฌ๋‚˜ ^^ . . . ๋ชจ๊ฐ€ ๋ฌธ..

Server/Java & Spring 2023. 5. 28. 10:46
[Spring] save() vs saveAndFlush()

Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ JPA(Java Persistense API)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ๋•Œ save()์™€ saveAndFlush() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“save() ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ์ง€์—ฐ์‹œํ‚ด ์ฆ‰, ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ธฐ ์ „๊นŒ์ง€ ์—”ํ‹ฐํ‹ฐ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋จ ์ด ๋•Œ๋ฌธ์— save() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“saveAndFlush() ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ”๋กœ ์ €์žฅํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰ ์ฆ‰, saveAndFlush() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ฐ˜์˜๋จ ์ด ๋•Œ๋ฌธ์— saveAndFlush() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜๋Š” ์‹œ์ ์„ ๋”..

Server/Java & Spring 2023. 3. 22. 10:30
[Spring] IoC, DI๋ž€?

IoC(Inversion of Control)๋ž€? IoC๋Š” Inversion of Control์˜ ์ค„์ž„ ๋ง๋กœ, ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๋Š” ๋œป์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํ”„๋ ˆ์ž„์›ค์ด ์ง์ ‘ ์ œ์–ด๋ฅผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์˜์กด ๊ด€๊ณ„ ๊ฒฐ์ •(Component dependency resolution), ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(life cycle)์™€ ๊ฐ™์€ ์ผ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค. ํ”ํžˆ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›ค์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Bean์„ ์‚ฌ์šฉ ํ•  ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์š”์ฒญ์— ์•Œ๋งž์€ Bean์„ ์ƒ์„ฑํ•ด์„œ ํ•„์š”ํ•œ ์ผ์„ ํ•˜๋„๋ก ์‹œํ‚จ๋‹ค. ํ•ด๋‹น Bean์ด ํ•  ์ผ์„ ๋งˆ์น˜๋ฉด Bean์„ ์‚ญ์ œํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ œ์–ด ํ• ..

Server/Java & Spring 2023. 3. 22. 10:21
[Spring] ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์—์„œ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

private final ProductService productservice ๋ฌธ๋“ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๋‹ค๊ฐ€ final์„ ์จ์ฃผ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค . ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์—์„œ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ถˆ๋ณ€์„ฑ(Immutability) final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™”๋œ ์ดํ›„์—๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ถˆ๋ณ€ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ(Immutability)์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์—์„œ๋Š” ์ฃผ์ž…๋œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ˆ์ •์„ฑ(Safety) final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™” ์—ฌ๋ถ€๋ฅผ..

Server/Java & Spring 2023. 3. 22. 10:17
[Java] Java์˜ ๋“ฑ์žฅ

์–ด์…ˆ๋ธ”๋ฆฌ : ๊ธฐ๊ณ„ ๋ช…๋ น์–ด์™€ ์ผ์ƒ ์šฉ์–ด๋ฅผ ์ผ๋Œ€์ผ๋กœ ๋งค์นญํ•˜๋Š” ๊ธฐ๊ณ„์–ด์™€ ๋‹ˆ๋ชจ๋‹‰์˜ ๋งค์นญ ์ฝ”๋“œํ‘œ CPU ๋งˆ๋‹ค ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ๋‹ฌ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋„ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์Œ ์–ด์…ˆ๋ธ”๋Ÿฌ : ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด C์–ธ์–ด์˜ ๋“ฑ์žฅ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ๋Š” ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์†Œ์Šค ํŒŒ์ผ์„ ๊ฐ ๊ธฐ๊ณ„์˜ ์ข…๋ฅ˜๋งŒํผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์ง€๋งŒ C์–ธ์–ด์˜ ๋“ฑ์žฅ์œผ๋กœ ์†Œ์ŠคํŒŒ์ผ์„ ๋‹จ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด๋„ ๋˜๋Š” ์‹œ๋Œ€๊ฐ€ ๋˜์—ˆ์Œ ํ•˜์ง€๋งŒ, ์šด์˜์ฒด์ œ๋“ค์˜ ๊ฐ ํŠน์„ฑ๋ณ„๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ Java์˜ ๋“ฑ์žฅ Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด (Class) ๋‹จ ํ•˜๋‚˜์˜ ์†Œ์Šค ํŒŒ์ผ๋กœ ๋ชจ๋“  ๊ธฐ์ข…์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ ๐Ÿ’ก ์ปดํŒŒ์ผ์ด๋ž€? ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ณผ์ • ์ฃผ์–ด์ง„ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ..

Server/Java & Spring 2023. 2. 14. 18:11