๐Ÿ๏ธ Spring

@Transient ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์˜์† ๋Œ€์ƒ์—์„œ ์ œ์™ธ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์— ์ž„์‹œ๋กœ ์–ด๋–ค ๊ฐ’์„ ๋ณด๊ด€ํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @Entity public class Member { @Id private String id; private Stirng username; private Stirng password; @Trasient private Stirng checkPassword; } ๐Ÿ“” Reference ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๋ณธ..
@Basic ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š”? ์• ๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ผ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ค๋ช… The simplest type of mapping to a database column. The Basic annotation can be applied to a persistent property or instance variable of any of the following types: Java primitive types, wrappers of the primitive types, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Ti..
@Lob ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ BLOB, CLOB ํƒ€์ž…๊ณผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. @Lob์—๋Š” ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ๋งคํ•‘ํ•˜๋Š” ํ•„๋“œ ํƒ€์ž…์ด ๋ฌธ์ž๋ฉด CLOB์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” BLOB์œผ๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. (Lob์€ Large Object์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค) CLOB : ๋ฌธ์ž ๋Œ€ํ˜• ๊ฐ์ฒด, BLOB : ์ด์ง„ ๋Œ€ํ˜• ๊ฐ์ฒด (์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ๋“ฑ) @Lob ์ฃผ์„์€ @Basic ํ˜น์€ @ElementCollection ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mysql์˜ TEXT ๋งคํ•‘ํ•˜๋Š” ๋ฒ• @Column(columnDefinition = "TEXT") Reference ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„..
์‹œ์ž‘์— ์•ž์„œ ์ž๋ฐ” 8๋ถ€ํ„ฐ LocalDate, LocalDateTime์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, @Temporal ์–ด๋…ธํƒœ์ด์…˜์„ ์ƒ๋žตํ•˜์—ฌ๋„ LocalDate์™€ LocalDateTime์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Entity public class Member{ @Id private Long id; private LocalDateTime createdDate; } @Temporal ๋‚ ์งœ ํƒ€์ž…(java.util.Date, java.util.Calendar)์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์˜ Date ํƒ€์ž…์—๋Š” ๋…„์›”์ผ ์‹œ๋ถ„์ดˆ๊ฐ€ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” date(๋‚ ์งœ), time(์‹œ๊ฐ„), timestamp(๋‚ ์งœ์™€ ์‹œ๊ฐ„)๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ํƒ€์ž…์ด ๋ณ„๋„๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. @Temporal์„ ์ƒ๋žตํ•˜..
@Enumerated ์ž๋ฐ”์˜ enum ํƒ€์ž…์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ ์†์„ฑ ๊ธฐ๋Šฅ ๊ธฐ๋ณธ๊ฐ’ value EnumType.ORDINAL : enum ์ˆœ์„œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ EnumType.STRING : enum ์ด๋ฆ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ EnumType.ORDINAL ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด EnumType.STRING์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ enum RoleType { ADMIN, USER } @Enumerated(EnumType.STRING) private RoleType roleType; EnumType.ORDINAL enum์— ์ •์˜๋œ ์ˆœ์„œ๋Œ€๋กœ, ADMIN์€ 0, USER์€ 1๊ฐ’์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์žฅ์ • : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ž‘์Šต๋‹ˆ๋‹ค. ๋‹จ์  : ์ด๋ฏธ ์ €์žฅ๋œ enum์˜..
๐Ÿง @Column @Column์€ ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ์†์„ฑ ์†์„ฑ ๊ธฐ๋Šฅ ๊ธฐ๋ณธ๊ฐ’ name ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. ๊ฐ์ฒด์˜ ํ•„๋“œ ์ด๋ฆ„ insertable (๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ) ์—”ํ‹ฐํ‹ฐ ์ €์žฅ ์‹œ ์ด ํ•„๋“œ๋„ ๊ฐ™์ด ์ €์žฅํ•œ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด ์ด ํ•„๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. false ์˜ต์…˜์€ ์ฝ๊ธฐ ์ „์šฉ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค true updateable ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • ์‹œ ์ด ํ•„๋“œ๋„ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. false ์˜ต์…˜์€ ์ฝ๊ธฐ ์ „์šฉ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค true table (๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ) ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์— ๋งคํ•„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.(@SecondaryTable ์‚ฌ์šฉ) ์ง€์ •ํ•œ ํ•„๋“œ๋ฅผ ๋‹ค๋ฅธ ํ…Œ..
@Entity JPA์—์„œ ์—”ํ‹ฐํ‹ฐ๋ž€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด, DB ํ…Œ์ด๋ธ”์— ๋Œ€์‘ํ•˜๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity๋ฅผ ๊ผญ ๋ถ™์—ฌ์•ผ๋งŒ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. @Entity๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ช‡๊ฐ€์ง€ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜์‚ฌํ•ญ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ public ํ˜น์€ protected ์ธ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ๋˜๋Š” ๊ฒƒ๋„ ์žˆ์œผ๋‚˜, ์ŠคํŽ™์ƒ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. final ํด๋ž˜์Šค, enum, interface, inner ํด๋ž˜์Šค์—๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ์ €์žฅํ•˜๋ ค๋Š” ์†์„ฑ์€ final์ด๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ๋˜๋Š” ๊ฒƒ๋„ ์žˆ์œผ๋‚˜, ์ŠคํŽ™์ƒ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด๋‘์—ˆ..
ํ”Œ๋Ÿฌ์‹œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋Š” ์ˆœ๊ฐ„์— ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด "์“ฐ๊ธฐ ์ง€์—ฐ ์ €์žฅ์†Œ"์— ๋ชจ์•„๋’€๋˜ INSERT, UPDATE, DELETE SQL๋“ฑ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ DB์— ๋ฐ˜์˜ํ•จ์œผ๋กœ์จ DB์™€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking) ์ˆ˜์ •๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ๋“ฑ๋ก ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „์†ก(๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ) ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• em.flush() - ์ง์ ‘ ํ˜ธ์ถœ ..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (20 Page)