๐Ÿง‘โ€๐Ÿ’ป ์Šคํ”„๋ง๋ถ€ํŠธ MySQL ์—ฐ๋™ํ•˜๊ธฐ ๐Ÿ“–

J_m2nยท2023๋…„ 10์›” 9์ผ
0
post-custom-banner

์Šคํ”„๋ง๋ถ€ํŠธ์™€ MySQL ์—ฐ๋™ํ•˜๊ธฐ



์…‹ํŒ… ํ™˜๊ฒฝ

  • IntelliJ
  • SpringBoot
  • MySQL ver 8.0.33
  • Gradle



๊ณต๋ถ€ํ•˜๋Š” ์ฑ…์—์„œ๋Š” H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ ํœ˜๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ ค๊ณ  H2 ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋Š”๊ฒŒ ๋„ˆ๋ฌด ๊ท€์ฐฎ์•„์„œ ์˜ˆ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ด์˜ค๋˜ MySQL์„ ์—ฐ๋™ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1. build.gradle์— MySQL ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ธฐ

build.gradle ํŒŒ์ผ์˜ dependencies{}์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ๊ทธ๋ž˜๋“ค ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•ด์ค€๋‹ค.

implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

๋‹ค๋ฅธ ๋ถ„๋“ค์€ 'mysql:mysql-connector-j' ๋‚˜ 'mysql:mysql-connector-java'๋กœ๋„ ํ•˜์‹œ๋˜๋ฐ ์ €๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๊ตฌ์š”.. ๊ทธ๋ž˜์„œ ์ €๋Š” 'mysql:mysql-connector-java:8.0.33'์œผ๋กœ ์‚ฌ์šฉ์ค‘์ธ MySQL ๋ฒ„์ „๊นŒ์ง€ ์ž…๋ ฅํ•ด์คฌ์Šต๋‹ˆ๋‹ค.


2. application.properties ํŒŒ์ผ์— MySQL ์„ค์ • ์ถ”๊ฐ€ํ•˜๊ธฐ

MySQL ์„ค์ •

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  spring.datasource.url=jdbc:mysql://[IP]:[ํฌํŠธ๋ฒˆํ˜ธ]/[DB์ด๋ฆ„]?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
spring.datasource.username=[๋ณธ์ธ๊ณ„์ •์ด๋ฆ„]
spring.datasource.password=[๋ณธ์ธ๊ณ„์ •๋น„๋ฐ€๋ฒˆํ˜ธ]

#true ์„ค์ • ์‹œ jpa ์ฟผ๋ฆฌ๋ฌธ ํ™•์ธ ๊ฐ€๋Šฅ
spring.jpa.show-sql=true

#DDL ์ •์˜์‹œ DB์˜ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
spring.jpa.hibernate.ddl-auto=update

# JPA์˜ ๊ตฌํ˜„์ฒด์ธ Hibernate๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ SQL์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์คŒ
spring.jpa.properties.hibernate.format_sql=true

๋ฐ‘์— ์„ธ ๊ฐœ ์ฝ”๋“œ๋„ ์ถ”๊ฐ€ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด,

ํ”„๋กœ์ ํŠธ์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ, ์ˆ˜์ •ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ๋ฌธ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์„ค์ •์„ true๋กœ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ…”๋ฆฌ์ œ์ด ์ฝ˜์†”์—์„œ ์ฟผ๋ฆฌ๋ฌธ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋”ฐ๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์ฃผ์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์—”ํ‹ฐํ‹ฐ์— ๋งž๋Š” ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค!





++ ์ถ”๊ฐ€

2๋ฒˆ spring.jpa.hibernate.ddl-auto=[ย  ] ์— ์ถ”๊ฐ€ํ•  ๋‚ด์šฉ

  • createย  :ย  ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ [ DROP + CREATE ]
  • create-dropย  :ย  CREATE ์†์„ฑ์— ์ถ”๊ฐ€๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ข…๋ฃŒํ•  ๋•Œ ์ƒ์„ฑํ•œ DDL์„ ์ œ๊ฑฐย  [ DROP + CREATE + DROP ]
  • updateย ย :ย  DB ํ…Œ์ด๋ธ”๊ณผ ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘ ์ •๋ณด๋ฅผ ๋น„๊ตํ•ด์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ˆ˜์ • [ ํ…Œ์ด๋ธ”์ด ์—†์„ ๊ฒฝ์šฐ CREATE ]ย 
  • validateย ย :ย  DB ํ…Œ์ด๋ธ”๊ณผ ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘์ •๋ณด๋ฅผ ๋น„๊ตํ•ด์„œ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ
  • noneย ย :ย  ์ž๋™ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    ์ถœ์ฒ˜: https://dev-coco.tistory.com/85 [์Šฌ๊ธฐ๋กœ์šด ๊ฐœ๋ฐœ์ƒํ™œ:ํ‹ฐ์Šคํ† ๋ฆฌ]

์ •๋ฆฌ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค...!!!ใ… ใ… 

๊ทธ๋ฆฌ๊ณ  Entity ํŒŒ์ผ์—์„œ ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ!!

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Table(name="writing")
@Entity
  • @Data : @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode์„ ํ•œ๊บผ๋ฒˆ์— ์„ค์ •
    ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ Getter Setter๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  final์ด๋‚˜ @NonNull ํ•„๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , toString, equals, hasCode ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.

  • @Getter : Getter ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  @Builder๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

  • @Builder : @Builder๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด @AllArgsConstructor์™€ @NoArgsConstructor๋ฅผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•ด์•ผ ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ.

  • @Entity : ํ…Œ์ด๋ธ”์„ ๋œปํ•จ (๋ฐ˜๋“œ์‹œ ํ•ด์ค˜์•ผ ํ•จ)

  • @Table : ํ…Œ์ด๋ธ” ๋ช…์‹œ (ํ…Œ์ด๋ธ”๋ช…์ด ํด๋ž˜์Šค๋ช…๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ ์ƒ๋žต ๊ฐ€๋Šฅ)

  • @ID : PK๋ฅผ ๋œปํ•จ

  • @GeneratedValue : PK์˜ ์ƒ์„ฑ ๋ฐฉ์‹ ์ •ํ•  ๋•Œ ์‚ฌ์šฉ
    • GenerationType.IDENTITY : MySQL์˜ AUTO_INCREMENT ๋ฐฉ์‹ ์‚ฌ์šฉ(๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ๋งˆ๋‹ค ๊ฐ’์ด ์ €์ ˆ๋กœ ์ฆ๊ฐ€, ์ฆ๊ฐ€๊ฐ’๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ(+1,+2...))
    • GenerationType.AUTO(default) : JPA๊ฐ€ ์ƒ์„ฑ ๋ฐฉ์‹์„ ๊ฒฐ์ •
    • GenerationType.SEQUENCE : SEQUENCE๋ฅผ ์ด์šฉํ•ด์„œ ํ‚ค๋ฅผ ์ƒ์„ฑ, @SequenceGenerator์™€ ๊ฐ™์ด ์‚ฌ์šฉ
    • GenerationType.TABLE : ํ‚ค ์ „์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ, @TableGenerator์™€ ๊ฐ™์ด ์‚ฌ์šฉ

  • @Column : ์ปฌ๋Ÿผ ๋ช…์‹œ
profile
์ฝ”๋”ฉ ์ดˆ์งœ์ž…๋‹ˆ๋‹ค
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€