โ—๏ธ์—๋Ÿฌ ๋ฉ”์‹œ์ง€


Error executing DDL "drop table if exists user cascade " via JDBC [Syntax error in SQL statement "drop table if exists [*]user cascade "; expected "identifier";]

 

 

 

 

 

๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝ


  • Framework : Spring Boot3.2.3
  • DB : MySQL(๋กœ์ปฌ), H2(ํ…Œ์ŠคํŠธ)
  • Library : JPA, QueryDSL5.0.0
  • Test : JUnit

 

 

 

 

 

๐Ÿ”Ž ์›์ธ


Spring์—์„œ JPA Repository ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

DB๋Š” ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด MySQL์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๋‚ด์žฅํ˜• ์ธ๋ฉ”๋ชจ๋ฆฌ DB์ธ H2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  @BeforeEach์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์…‹์—…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.

์—๋Ÿฌ๋Š” User Entity์™€ ์—ฐ๋™๋œ userRepository์—์„œ deleteAll()์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

@DataJpaTest
@Import(QueryDSLConfig.class)
class XXXRepositoryTest {

    @Autowired
    UserRepository userRepository;
    
    ...

    @BeforeEach
    public void setUp() {
        /* ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‚ญ์ œ */
        userRepository.deleteAll(); //์—ฌ๊ธฐ์„œ ์—๋Ÿฌ ๋ฐœ์ƒ

        ...
    }

    ...
}

 

 

 

 

 

Error executing DDL "drop table if exists user cascade " via JDBC [Syntax error in SQL statement "drop table if exists [*]user cascade "; expected "identifier";]

 

 

 

 

user ํ…Œ์ด๋ธ”์„ ๋“œ๋กญํ•˜๋Š” ๊ณผ์ •์—์„œ SQL ๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

์‹๋ณ„์ž๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ(')๋‚˜ ํฐ ๋”ฐ์˜ดํ‘œ(")์— ๋ฌถ์—ฌ์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” user๊ฐ€ H2์˜ ์˜ˆ์•ฝ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์•ฝ์–ด๋กœ ์ธ์‹๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ…Œ์ด๋ธ”๋ช…์œผ๋กœ user๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

MySQL์—์„œ๋Š” ํ…Œ์ด๋ธ”๋ช…์œผ๋กœ user๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ, H2์—์„œ๋Š” ์•„๋‹ˆ๋‹ค. 

 

 

H2 ๊ณต์‹๋ฌธ์„œ์˜ Advanced ์„น์…˜์— ๊ฐ€๋ฉด ์˜ˆ์•ฝ์–ด(Keywords) ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

๐Ÿ’ก ํ•ด๊ฒฐ


๋ฐฉ๋ฒ•1) User Entity ์ด๋ฆ„ ๋ณ€๊ฒฝ

๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜ค๋Š” ํ•ด๊ฒฐ์ฑ… ์ค‘ ํ•˜๋‚˜๋กœ User Entity์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ผ๊ณ  ํ•œ๋‹ค.

Entity ํด๋ž˜์Šค์— @Table ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์„œ ๋ณต์ˆ˜ํ˜•์ธ Users๋‚˜ ๋น„์Šทํ•œ ๋œป์˜ ์ด๋ฆ„์ธ Member๋กœ ๋ณ€๊ฒฝํ•˜๋ผ๊ณ  ํ•œ๋‹ค.

@Table(name = "users")
public class User {
	...
}

 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด User๋กœ ๋ฐ”๋€Œ์–ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ตฌ์ถ•ํ–ˆ๋˜ DB์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. User ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋˜ ํ…Œ์ด๋ธ”์—์„œ FK๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. (๊ธฐ์กด ์ฝ”๋“œ์— ๋งคํ•‘์ด user๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด๋“ค์„ users๋กœ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ ์•ˆํ•ด์ค˜์„œ ๊ทธ๋ ‡๋‹ค.)

 

๊ธฐ์กด์— ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋˜ DB์™€ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๋ฉด ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค. ํ…Œ์ŠคํŠธ์˜ ์„ค์ • ํŒŒ์ผ(application.yml)์—์„œ user๊ฐ€ ์˜ˆ์•ฝ์–ด๊ฐ€ ์•„๋‹˜์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚ด ํ™˜๊ฒฝ์—์„œ๋Š” ์•ˆ๋จนํžŒ๋‹ค. ํ•ด๊ฒฐ์ด ์•ˆ๋œ๋‹ค.

spring:
  datasource:
    url: jdbc:h2:mem:testdb;NON_KEYWORDS=USER

 

 

 

 

 

๋ฐฉ๋ฒ•2) ์˜ˆ์•ฝ์–ด๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์‹ซ์–ด์„œ User๋ฅผ Entity์˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์˜ˆ์•ฝ์–ด๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์•ฝ์–ด๋ฅผ ๊ฐ์‹ธ๋ฉด ์‹๋ณ„์ž๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

H2 ์˜ˆ์•ฝ์–ด์ธ user๋ฅผ @Table ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ๋ฐฑํ‹ฑ(`)์œผ๋กœ ๊ฐ์‹ธ์ค˜์„œ ์ •์˜ํ•ด์ฃผ์ž.

@Table(name = "\"user\"")

 

 

 

 

 

๐Ÿ“– ์ฐธ๊ณ 


 

giraffe_