본문 바로가기
Back-end

JPA User 테이블, Postgres reserved keyword 해결하기

by 노아론 2020. 8. 12.

JPA, Postgres 환경 상에서 User테이블이 생성되지 않은 문제를 @Table 어노테이션을 통해 해결하였던 방법을 다룬 글입니다.

한국외대의 학식 서비스인 훕포메이션의 구조를 변경하면서, Postgresql과 Spring Boot, JPA로 구성된 백엔드 환경에서 유저정보를 담은 테이블의 명칭을 user로 정하게 되었다.

@Entity
public class User {

    public enum Campus {seoul, global}

    @Id
    @GeneratedValue
    private Long id;

    @Column(length=10)
    @Enumerated(EnumType.STRING)
    private Campus campus;


}

 

서버를 실행시켜 DB 동작을 확인해보니 Postgres 상에선 내가 원하는 User Table이 존재하지 않는다는 오류 메세지를 받게 되었다

 

reserved keyword에 포함된 USER

왜 생성이 되지 않았는지 알아보기 위해 여러 삽질을 거진 끝에 Postgres에서 userreserved keyword라는 것을 알게 되었고 select * from user;를 하면 Postgres에 존재하는 유저 목록이 나옴을 확인하였다

 

my-db=# select * from user;
  user
---------
 roharon
(1 row)

 

따라서, users, user_entity와 같은 이름으로 테이블 이름을 지정한다면 테이블 생성이 반영될 것이다

User 클래스에 @Table(name = "user_entity")어노테이션을 추가시켜 테이블 이름을 변경하였다

@Entity
@Table(name = "user_entity")
public class User {

    public enum Campus {seoul, global}

    @Id
    @GeneratedValue
    private Long id;

    @Column(length=10)
    @Enumerated(EnumType.STRING)
    private Campus campus;


}

 

user 테이블의 이름이 user_entity 로 변경되어 생성된 것을 확인할 수 있다

my-db=# \d
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+---------
 public | test | table | roharon
 user_entity | test | table | roharon
(2 row)

 

Table 어노테이션에 대한 자세한 설명은 이 곳 에서 볼 수 있다.

댓글