soogoori

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ“– WIL

[๐Ÿ“– WIL] DTO, Resource, Entity

ํ‰์†Œ ํ”„๋กœ์ ํŠธํ•  ๋•Œ DTO๋Š” ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, Resource ๊ฐœ๋…์€ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์—ˆ๋‹ค.Resource๊ฐ€ ๋ญ”๋ฐ ?  ResourceRESTful API์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๐Ÿ‘‰ REST API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Resource๋ฅผ RequestBody๋กœ ๋ฐ›์€ ํ›„ DTO๋กœ ๋‹ค์‹œ convert ํ•˜๊ณ  ์žˆ์Œconvert๋œ DTO๋ฅผ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์‹œ Resource๋กœ convertํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•จ DTO (Data Transfer Object)๋ฐ์ดํ„ฐ ์ „์†ก์šฉ ๊ฐ์ฒด๋กœ, ๋„คํŠธ์›Œํฌ ๊ฐ„ ๋˜๋Š” ๋ ˆ์ด์–ด ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ์›น ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต ๋ฐ์ดํ„ฐ  Entity๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

[๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] @NotBlank, @NotNull, @NotEmpty, @DateTimeFormat ์‚ฌ์šฉ๋ฒ•

โ›” ENUM ํƒ€์ž…์—์„œ๋Š” @NotBlank ์‚ฌ์šฉ XNo validator could be found for constraint 'javax.validation.constraints.NotBlank' ENUM ํƒ€์ž…์˜ ํ•„๋“œ์— @NotBlank ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๊ณ , ์š”์ฒญ์„ ๋ณด๋ƒˆ๋”๋‹ˆ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, @NotBlank๋Š” CharSequence์—๋งŒ ์ ์šฉ๋˜๋ฏ€๋กœ Enum ํƒ€์ž…์˜ ํ•„๋“œ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. โœจ CharSequence๐Ÿ‘‰ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๐Ÿ‘‰ String, StringBuilder, StringBuffer, CharBufferโœณ๏ธ @NotBlank, @NotNull, @NotEmpty ์ฐจ์ด @NotBlank๐Ÿ‘‰ ๋ฌธ์ž์—ด ํ•„๋“œ๊ฐ€ null์ด ์•„๋‹ˆ๊ณ  ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ์–ด์•ผ ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ไธŠ

15. ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™” ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋ณด ์€๋‹‰(์บก์Šํ™”)์˜ ํ•ต์‹ฌ  ๋ชจ๋“  ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ฑ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ขํ˜€์•ผ ํ•จํŒจํ‚ค์ง€ ์™ธ๋ถ€์—์„œ ์“ธ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด package-private์œผ๋กœ ์„ ์–ธํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” package-private ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ์•ˆ์— private static์œผ๋กœ ์ค‘์ฒฉ์‹œํ‚ค๊ธฐโœจ public์ผ ํ•„์š”๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ ์ ‘๊ทผ ์ˆ˜์ค€์„ package-private ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋กœ ์ขํžˆ๊ธฐ โœณ๏ธ ์ ‘๊ทผ ์ˆ˜์ค€ private : ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ package-private : ๋ฉค๋ฒ„๊ฐ€ ์†Œ์†๋œ ํŒจํ‚ค์ง€ ์•ˆ์˜ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ์ ‘๊ทผ ์ˆ˜์ค€.pro..

Database/SQL

[Effective SQL] ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„ ไธŠ

โœจ ์ข‹์€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ์„ค๊ณ„ํ•˜๊ธฐ  1. ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ํŠน์ • row์™€ ๋‚˜๋จธ์ง€ row๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ํ…Œ์ด๋ธ”์—๋Š” ์ปฌ๋Ÿผ ํ•œ ๊ฐœ ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธํ‚ค(PK)๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. PK๋Š” row๋งˆ๋‹ค ์œ ์ผํ•ด์•ผํ•˜๋ฏ€๋กœ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ์•ˆ์ •์ ์ธ ๊ฐ’์ด์–ด์•ผ ํ•จ(๊ฐ’์„ ๊ฐฑ์‹ ํ•  ํ•„์š” X)๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์—ฌ์•ผ ํ•จ ๐Ÿ‘‰ ์ด๋Ÿฐ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• = ์˜๋ฏธ ์—†๋Š” ์ˆซ์ž ๋ฐ์ดํ„ฐ๋กœ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ์ปฌ๋Ÿผ  ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ค€์ˆ˜ํ•œ๋‹ค = null์ด ์•„๋‹Œ ์™ธ๋ž˜ํ‚ค(FK)๊ฐ€ ์„ค์ •๋œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•จ๋ณตํ•ฉ ๊ธฐ๋ณธํ‚ค๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์ŒPK๋ฅผ ์ •์˜ํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์œ ์ผ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค. ์ปฌ๋Ÿผ ๋‘..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ“– WIL

[๐Ÿ“– WIL] ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํด๋ž˜์Šค

@ToString(doNotUseGetters = true)toString() ๋ฉ”์„œ๋“œ ์ž๋™ ์ƒ์„ฑgetter ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•„๋“œ์˜ ๊ฐ’์„ ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ toString() ๋ฉ”์„œ๋“œ ์ƒ์„ฑ @VersionJPA/Hibernate์—์„œ ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๐Ÿ‘‰ @Version์ด ๋ถ™์€ ํ•„๋“œ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ„DB ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋‚™๊ด€์  ๋ฝ(Optimistic lock) ์ง€์›์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ DB์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ, ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „์ด ์ด์ „์— ๋กœ๋“œ๋œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•œ์ง€ ํ™•์ธ ๋งŒ์•ฝ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋จผ์ € ์ˆ˜์ •ํ–ˆ์œผ๋ฏ€๋กœ OptimisticLockException ๋ฐœ์ƒ โœณ๏ธ ๋‚™๊ด€์  ๋ฝ (Optimistic Locking) ์ด๋ž€ ?๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ ไธ‹

13. clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰Cloneable : ๋ณต์ œํ•ด๋„ ๋˜๋Š” ํด๋ž˜์Šค์ž„์„ ๋ช…์‹œํ•˜๋Š” ์šฉ๋„์˜ ์ธํ„ฐํŽ˜์ด์ŠคObject์˜ protected ๋ฉ”์„œ๋“œ์ธ clone์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฒฐ์ • Cloneable์€ ์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜๋œ protected ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝ์ƒ์† ๊ด€๊ณ„์˜ ๋‘ ํด๋ž˜์Šค ์ค‘ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ super.clone์„ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ์ž˜๋ชป๋œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ ๐Ÿ‘‰ ํด๋ž˜์Šค B๊ฐ€ ํด๋ž˜์Šค A๋ฅผ ์ƒ์†ํ•  ๋•Œ, ํ•˜์œ„ ํด๋ž˜์Šค์ธ B์˜ clone์€ B ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ. ํ•˜์ง€๋งŒ A์˜ clone์ด new A(...)๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด, B์˜ clone๋„ A ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜.โœณ๏ธ ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” Stack ํด๋ž˜์Šค ๋ณต์ œํ•˜๊ธฐ public class Stack { private..

Java/๐Ÿ“• Effective Java

[Effective Java] ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ ไธŠ

10. equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜equals๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ...๐Ÿ‘‰ ๋‘ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€์ง€(๊ฐ์ฒด ์‹๋ณ„์„ฑ)๊ฐ€ ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ƒ์œ„ ํด๋ž˜์Šค์˜ equals๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๋น„๊ตํ•˜๋„๋ก ์žฌ์ •์˜๋˜์ง€ ์•Š์„ ๋•Œ  โœณ๏ธ ์ผ๋ฐ˜ ๊ทœ์•ฝ ๋Œ€์นญ์„ฑ : x.equals(y)๊ฐ€ true์ด๋ฉด, y.equals(x)๋„ true์ถ”์ด์„ฑ : x.equals(y)๊ฐ€ true์ด๊ณ , y.equals(z)๋„ true์ด๋ฉด, x.equals(z)๋„ true์ผ๊ด€์„ฑ : x.equals(y)๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด ํ•ญ์ƒ true ๋˜๋Š” false ๋ฐ˜ํ™˜โœณ๏ธ equals ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•== ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•ด ์ž…๋ ฅ์ด ์ž๊ธฐ ์ž์‹ ์˜ ์ฐธ์กฐ์ธ์ง€ ํ™•์ธ ๐Ÿ‘‰ ์ž๊ธฐ ์ž์‹ ์ด๋ฉด true ๋ฐ˜ํ™˜instanceof ์—ฐ์‚ฐ์ž๋กœ ์ž…๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€..

Java/๐Ÿ“• ์˜ค๋ธŒ์ ํŠธ : ์ฝ”๋“œ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„

[์˜ค๋ธŒ์ ํŠธ : ์ฝ”๋“œ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„] ํ˜‘๋ ฅ, ์ฑ…์ž„, ์—ญํ• 

โœจ ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ์˜ ํ•ต์‹ฌ  : ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์•ž์„œ ๋งํ–ˆ๋˜ ํด๋ž˜์Šค, ์ƒ์†, ์ง€์—ฐ ๋ฐ”์ธ๋”ฉ์ด ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์•„๋‹ˆ์ง€๋งŒ, ์ด๋“ค์€ ๊ตฌํ˜„ ์ธก๋ฉด์— ์น˜์šฐ์ณ์ ธ ์žˆ๋‹ค.  ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ํ•ต์‹ฌ์€ ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์ด๋‹ค. ํ˜‘๋ ฅ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ , ์ ์ ˆํ•œ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.  ํด๋ž˜์Šค์™€ ์ƒ์†๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ์ฑ…์ž„๊ณผ ํ˜‘๋ ฅ์ด ์–ด๋Š ์ •๋„ ์ž๋ฆฌ๋ฅผ ์žก์€ ํ›„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ๊ฒƒ์ด๋‹ค.    ํ˜‘๋ ฅ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ ๐Ÿ‘‰ ๋ฉ”์‹œ์ง€ ์ „์†ก (์š”์ฒญ๊ณผ ์‘๋‹ต)์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€์˜ ๋„์›€์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ ์ ˆํ•œ ๊ฐ์ฒด์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†กํ•ด์„œ ํ˜‘๋ ฅ ์š”์ฒญ ๐Ÿ‘‰ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ–‰๋™๊ณผ ์ƒํƒœ..

soogoori
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (7 Page)