Programming Project ์ž‘์—…์‹ค/๋‚ด์šฉ ์ •๋ฆฌ

[์šฐ๋ฆฌ์ง‘ ๊ฐ€์กฑ ์ปค๋ฎค๋‹ˆํ‹ฐ ์›น ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ] Entity ์ƒ์„ฑ ๊ทธ๋ฆฌ๊ณ  enum Class

์ฃผ๋‹ˆ์“ฐ๐Ÿง‘‍๐Ÿ’ป 2021. 9. 29. 01:34
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘์ด์—์š”!

์˜ค๋Š˜๋ถ€ํ„ฐ ์ฃผ๋‹ˆํ•˜๋ž‘์ด ๊ฐ€์กฑ๋“ค์„ ์œ„ํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ํ˜ผ์ž ๋งŒ๋“ค์–ด ๋ณด๋ ค ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ง‘์— Synology NAS๋ฅผ ํ†ตํ•ด ์ €์™€ ๊ฐ€์กฑ๋“ค์„ ์œ„ํ•ด ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋งŽ์ด ์„œ๋น„์Šค ์ค‘์ธ๋ฐ, ๊ฐ€์กฑ๋“ค์ด ์•„๋ฌด๋„ ์‚ฌ์šฉ์„ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด์—์š”๐Ÿ˜ฅ

๊ทธ๋ž˜์„œ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฉ”๋‰ด์–ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด์—์š”!

 

์ฃผ๋‹ˆํ•˜๋ž‘์ด ์ž‘์„ฑํ•œ Source Code๋Š” ์—ฌ๊ธฐ Git Hub์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! 

 

 

๐Ÿ“Œ Member์™€ ๊ฒŒ์‹œํŒ ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€


 

application.properties

   

๋จผ์ € ์ฃผ๋‹ˆํ•˜๋ž‘์€ Maria DB๋ฅผ Sysnology NAS์— Docker๋กœ ๋งŒ๋“ค์–ด ๋…ผ ๊ฒƒ์ด์—์š”.

๊ทธ๋ž˜์„œ mariadb์˜ driver๋ฅผ ์„ค์ •ํ•˜๊ณ , ๊ณ„์ •์„ ์„ค์ •ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

 

         ๐Ÿ‘‰ Hibernate ์†์„ฑ ์†Œ๊ฐœ

  • hibernate.show_sql : ์‹คํ–‰ํ•˜๋Š” SQL๋ฌธ์„ Console์— ์ถœ๋ ฅ
  • hibernate.format_sql : SQL์„ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ •๋ฆฌํ•ด์„œ ์ถœ๋ ฅ
  • spring.jpa.hibernate.use-new-id-generator-mappings : JPA์— ๋งž์ถ˜ ์ƒˆ๋กœ์šด ID ์ƒ์„ฑ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ. Hibernate Legacy๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ํ•ญ์ƒ true๋กœ ์„ค์ •
  • spring.jpa.hibernate.ddl-auto : Applicatioon์ด ์‹œ์ž‘๋  ๋•Œ ํ…Œ์ด๋ธ”๊ณผ ๊ธฐํƒ€ DDL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ.

    1. create : ๊ธฐ์กด DDL์„ ์ œ๊ฑฐํ•˜๊ณ , ์ƒˆ๋กœ ์ƒ์„ฑ
    2. create-drop : create์™€ ๊ฐ™์œผ๋‚˜, Application์ด ์ข…๋ฃŒ๋  ๋•Œ, ์ƒ์„ฑํ•œ DDL ์ œ๊ฑฐ
    3. update : ํ˜„์žฌ DB DDL๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ˆ˜์ •
    4. validate : ํ˜„์žฌ ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘ ์ •๋ณด์™€ DB ์Šคํ‚ค๋งˆ๊ฐ€ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅด๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋‚จ๊ธฐ๊ณ , Application์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์„ค์ •์€ DDL ๋ฏธ ๋ณ€๊ฒฝ.

 

โš  ์ฃผ์˜ : spring.jpa.hibernate.use-new-id-generator-mappings ์ฃผ์˜์‚ฌํ•ญ

์ด ์˜ต์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” ๊ณผ๊ฑฐ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ํ‚ค ์ƒ์„ฑ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
ํ•˜์ด๋ฒ„ ๋„ค์ดํŠธ ๊ณต์‹ ๋ฌธ์„œ๋Š” true๋กœ ์„ค์ •ํ•ด์„œ JPA ํ‘œ์ค€์— ๋งž์ถ˜ ์ƒˆ๋กœ์šด ํ‚ค ์ƒ์„ฑ ์ „๋žต์„ ๊ถŒ์žฅํ•œ๋‹ค.
ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” ๊ณผ๊ฑฐ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์„ ์œ„ํ•ด ์‹ ๊ทœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด ์˜ต์…˜์„ ์„ค์ •ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

๐Ÿ’ก ์ฐธ๊ณ  :

JPA์˜ ๋™์ž‘ ํ™˜๊ฒฝ์€ ์ˆœ์ˆ˜ ์ž๋ฐ”์ธ J2SE์™€ JSEE ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” LocalContainerEntityManagerFactoryBean์„ ์‚ฌ์šฉํ•˜์—ฌ J2SE ํ™˜๊ฒฝ์˜ JPA๋ฅผ ๋งˆ์น˜ ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—๋ฎฌ๋ ˆ์ด์…˜ ํ•œ๋‹ค.

 

 

๐Ÿ“ Member Entity

 

๋จผ์ € ์ฃผ๋‹ˆํ•˜๋ž‘์€ ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด DB ์„ค๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๊ณ ๋ฏผํ•œ ๊ฒƒ์ด์—์š”.

 

ERD Cloud๋กœ ์ž‘์„ฑํ•œ ERD

 

์—ฌ๋Ÿฌ ๊ณ ๋ฏผ์„ ๋์— ์œ„์™€ ๊ฐ™์ด DB๋ฅผ ์ž‘์„ฑ ํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ต๋‹ˆ๋‹ค!

 

         ๐Ÿ‘‰ Entity Class ์ƒ์„ฑ

Member.java

@Entity 

Entity Class๋Š” Spring Data JPA์—์„œ๋Š” @Entity๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด ์นœ๊ตฌ๋Š” JPA๊ฐ€ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.
@Entity๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋ฉฐ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค์ด JPA๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค!

  • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ํ•„์ˆ˜ (๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” public ๋˜๋Š” protected ์ƒ์„ฑ์ž)
  • final ํด๋ž˜์Šค, enum, interface, inner ํด๋ž˜์Šค์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€.
  • ์ €์žฅํ•  ํ•„๋“œ์— final์„ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

 

@NoArgsConstructor

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” Annotation

 

@AllArgsConstructor

๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” Annotation

 

@Getter

๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ Getter Method๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” Annotation

 

@ToString

  • toString()์„ Override(์žฌ ์ •์˜)ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์„ (Non Static Filed)๋ฅผ ์ถœ๋ ฅ
  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
    @ToString(includeFieldNames = false)
  • ํŠน์ • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ toString()์— ํฌํ•จ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด
    @ToString(exclude={'Field ์ด๋ฆ„1',' Field ์ด๋ฆ„2'})
  • ๋ช…์‹œ์ ์œผ๋กœ ํŠน์ • ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด
    @ToString(callSuper=true)
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ toString()์„ ํ˜ธ์ถœํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด
    @ToString(callSuper=true)
  • ๊ธฐ๋ณธ์ ์œผ๋กœ getter๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น Method ํ˜ธ์ถœ์ด ๋˜๋‚˜, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ•„๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ ค๋ฉด
    @ToString(doNotUseGetter=true)

 

@Id

DB์—์„œ PK (Primary Key)๋ฅผ ์ง€์ •ํ•˜๋Š” Annotaion์ธ ๊ฒƒ์ด์—์š”.

 

@GeneratedValue

์œ„์—์„œ ์‚ฌ์šฉํ•œ strategy=GenerationType.IDENTITY๋Š” IDENTITY ์ „๋žต์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, MariaDB์™€ ๊ฐ™์€ DBMS์—์„œ ์‚ฌ์šฉํ•˜๋Š” AUTO_INCREMENT๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—์š”. ๊ฐœ๋ฐœ์ž๊ฐ€ ์—”ํ‹ฐํ‹ฐ์— ์ง์ ‘ ์‹๋ณ„์ž๋ฅผ ํ• ๋‹นํ•˜๋ฉด @Id๋งŒ ์žˆ์œผ๋ฉด ๋˜์ง€๋งŒ, ์‹๋ณ„์ž๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๋„ค๋Š @GeneratedValue๋ฅผ ํ†ตํ•ด ์‹๋ณ„์ž ์ƒ์„ฑ ์ „๋žต์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

IDENTITY ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @GeneratedValue์˜ strategy ์†์„ฑ๊ฐ’์„ GenerationType.IDENTITY๋กœ ์ง€์ •ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด JPA๋Š” ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์–ป์–ด์˜ค๊ธฐ ์œ„ํ•ด DB๋ฅผ ์ถ”๊ฐ€๋กœ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

  • ์ž๋™ ์ƒ์„ฑ : ๋Œ€๋ฆฌ ํ‚ค ์‚ฌ์šฉ ๋ฐฉ์‹
    • IDENTITY : ๊ธฐ๋ณธ Key ์ƒ์„ฑ์„ DB์— ์œ„์ž„
    • SEQUENCE : DB ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธ ํ‚ค ํ• ๋‹น
    • TABLE : Key ์ƒ์„ฑ Table ์‚ฌ์šฉ
  • ์ง์ ‘ ํ• ๋‹น : ๊ธฐ๋ณธ ํ‚ค๋ฅผ Application์— ์ง์ ‘ ํ• ๋‹น

 

@Enumerated(EnumType.STRING)

๋จผ์ € @Enumerated๋Š” JAVA์˜ enum Type์„ Mappingํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์†   ์„ฑ ๊ธฐ    ๋Šฅ ๊ธฐ  ๋ณธ  ๊ฐ’
value โ— EnumType.ORDINAL : enum ์ˆœ์„œ๋ฅผ DB์— ์ €์žฅ
โ— EnumType.STRING : enum ์ด๋ฆ„์„ DB์— ์ €์žฅ
EnumType.ORDINAL

 

enum Class๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

enum RoleType {
	ADMIN, USER
}

 

์•„๋ž˜๋Š” enum ์ด๋ฆ„์œผ๋กœ Mappingํ•˜๋Š” ๊ฒƒ์ด์—์š”.

@Enumerated(EnumType.STRING)
private RoleType roleType;

 

enum์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

// DB์— ๋ฌธ์ž ADMIN์œผ๋กœ ์ €์žฅ
number.setRoleType(RoleType.ADMIN);

 

@Enumerated๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ enum Tyupe์„ DB์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

EnumType.ORDINAL์€ enum์— ์ •์˜๋œ ์ˆœ์„œ๋Œ€๋กœ ADMIN์€ 0, USER๋Š” 1 ๊ฐ’์ด DB์— ์ €์žฅ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

  • ์žฅ์  : DB์— ์ €์žฅ๋˜๋Š” Data ํฌ๊ธฐ๊ฐ€ ์ž‘๋‹ค.
  • ๋‹จ์  : ์ด๋ฏธ ์ €์žฅ๋œ enum์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

 

EnumType.STRING์€ enum ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ADMIN์€ 'ADMIN', USER๋Š” 'USER'๋ผ๋Š” ๋ฌธ์ž๋กœ DB์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด์—์š”.

  • ์žฅ์  : ์ €์žฅ๋œ enum์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜, enum์ด ์ถ”๊ฐ€ ๋˜์–ด๋„ ์•ˆ์ „ํ•˜๋‹ค.
  • ๋‹จ์  : DB์— ์ €์žฅ๋˜๋Š” Data ํฌ๊ธฐ๊ฐ€ ORDINAL์— ๋น„ํ•ด์„œ ํฌ๋‹ค.

 

๐Ÿ’ก ์ฐธ๊ณ  :

๊ธฐ๋ณธ๊ฐ’์ธ ORDINAL์€ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉ ํ•  ๊ฒƒ!

ADMIN(0๋ฒˆ), USER(1๋ฒˆ) ์‚ฌ์ด์— enum์ด ํ•˜๋‚˜ ์ถ”๊ฐ€๋˜์–ด ADMIN(0๋ฒˆ), NEW(1๋ฒˆ), USER(2๋ฒˆ)์œผ๋กœ ์„ค์ •๋˜๋ฉด ์ด์ œ๋ถ€ํ„ฐ USER๋Š” 2๋กœ ์ €์žฅ๋˜๋‚˜, ๊ธฐ์กด DB์— ์ €์žฅ๋œ ๊ฐ’์€ ์—ฌ์ „ํžˆ 1๋กœ ๋‚จ์•„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” EnumType.STRING์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์œ„์˜ Annotation๋“ค์„ ์‚ฌ์šฉํ•ด์„œ Member๋ผ๋Š” Entity๋ฅผ ๊ตฌ์„ฑํ–ˆ๊ณ , ํšŒ์› ๋“ฑ๊ธ‰๊ณผ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋™์˜์„œ์— ๋Œ€ํ•œ ๋‚ด์šฉ๋“ค์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์ด์—์š”.

 

ํšŒ์› ๊ฐ€์ž…์‹œ์— ํšŒ์› ๊ณ ์œ  ๋ฒˆํ˜ธ(id), ํšŒ์› Email ์ฃผ์†Œ(email), ํšŒ์› ๋น„๋ฐ€๋ฒˆํ˜ธ(password), ํšŒ์› ์ด๋ฆ„(name), ํšŒ์› ๋ณ„๋ช…(nick_name), ํšŒ์› ์ „ํ™”๋ฒˆํ˜ธ(phone), ํšŒ์› ๋“ฑ๊ธ‰(grade), ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋™์˜์„œ(agree)๋ฅผ ๋ฐ›์„ ๊ฒƒ์ด์—์š”.

 

 

   ๐Ÿ“ MemberGrade

MemberGrade.java

 

ํšŒ์› ๋“ฑ๊ธ‰์€ ์œ„์™€ ๊ฐ™์ด ADMIN, FAMILY, GUEST๋กœ ๋‚˜๋ˆ„์—ˆ๊ณ , DB์— ๋“ค์–ด๊ฐˆ ๋•Œ๋Š” ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์ด์—์š”.

 

 

 

 

   ๐Ÿ“ private_information_essential_agree

private_information_essential_agree.java

 

์œ„์˜ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋™์˜๋„ ๋˜‘๊ฐ™์ด ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์ด์—์š”!

 

 

 

   ๐Ÿ“ SystemUseManual Entity

SystemUseManual. java

 

 

@Column

๋ฉค๋ฒ„ ๋ณ€์ˆ˜(ํ•„๋“œ)๋ฅผ ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ฃผ๋‹ˆํ•˜๋ž‘์€ name ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ SystemUseManul ์—”ํ‹ฐํ‹ฐ์˜ regdate ํ•„๋“œ๋ฅผ SystemUseManul ํ…Œ์ด๋ธ”์˜ regdate ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•œ ๊ฒƒ์ด๊ณ , mode ํ•„๋“œ๋ฅผ moddate ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•œ ๊ฒƒ์ด์—์š”.

์ €๊ธฐ ์†์„ฑ์— updatable = false๋Š” ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์ด ์ˆ˜์ •์ด ๋  ๋•Œ, ์ž‘์„ฑ์ผ์€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์†์„ฑ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ๋ชปํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค.

 

LocalDateTime ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์— ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

 

์†   ์„ฑ ๊ธฐ   ๋Šฅ ๊ธฐ  ๋ณธ  ๊ฐ’
name ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ์ด๋ฆ„ ์ •์˜ ๊ฐ์ฒด์˜ ํ•„๋“œ ์ด๋ฆ„
๋ฐ˜์‘ํ˜•

 

@LastModifiedDate

์กฐํšŒํ•œ Entity์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ, ๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 @ManyToOne

Member Entity์™€์˜ 1:N ๊ด€๊ณ„๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๊ฒƒ์ด์—์š”.

ํ•œ ๋ช…์˜ ํšŒ์›์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฒŒ์‹œ๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๊ณ , ์ด๊ฒƒ์€ 1:N์˜ ๊ด€๊ณ„์ธ ๊ฒƒ์ด์—์š”.

๊ทผ๋ฐ ์™œ? @OneToMany๊ฐ€ ์•„๋‹ˆ๊ณ , @ManyToOne์ผ๊นŒ์š”?

๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ํ•ด๋‹น Entity ๊ธฐ์ค€์œผ๋กœ ๋ฐ”๋ผ๋ณด๊ณ  ์„ค์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ์ฆ‰, SystemUseManul Entity ๊ธฐ์ค€์œผ๋กœ Member Entity์™€์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•จ์ด์—์š”.

 

์ด๋ ‡๊ฒŒ ํ•ด์ค˜์•ผ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•œ ์ž‘์„ฑ์ž ์ •๋ณด ๋“ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

 

๊ฒŒ์‹œํŒ์—์„œ๋Š” ๊ฒŒ์‹œ๊ธ€ ๊ณ ์œ  ๋ฒˆํ˜ธ(id), ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ(title), ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ(contents)์™€ ์ž‘์„ฑ์ผ(reg_date), ์ˆ˜์ •์ผ(mod_date) ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์„ฑ์ž ๋‹‰๋„ค์ž„์ด ๋‚˜์˜ค๋„๋ก ํ•  ๊ฒƒ ์ด๋ž๋‹ˆ๋‹ค!

 

 

   ๐Ÿ“ SystemUseManualComment Entity

SystemUseManualComment.java

 

 

 

   ๐Ÿ“ SystemUseManualHashTag

SystemUseManualHashTag.java

 

 

 

   ๐Ÿ“ SystemUseManualImage

SystemUseManualImage.java

 

 

์ด๋ ‡๊ฒŒ Entity๋“ค์„ ๊ตฌ์„ฑํ•œ ๊ฒƒ์ด์—์š”!

 

 

 


 

 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€ ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ช…๋ก์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•