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이 존재하지 않는다는 오류 메세지를 받게 되었다
왜 생성이 되지 않았는지 알아보기 위해 여러 삽질을 거진 끝에 Postgres에서 user
는 reserved 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
어노테이션에 대한 자세한 설명은 이 곳 에서 볼 수 있다.
'Back-end' 카테고리의 다른 글
Go gRPC 튜토리얼 #2 - Server Streaming RPC (0) | 2021.01.14 |
---|---|
Go gRPC 서버에 REST API 요청 주고 받기 [grpc-gateway] (0) | 2020.12.31 |
JPA, Postgres earthdistance를 이용하여 사용자 근처 가맹점 조회 API 구현하기 (0) | 2020.07.24 |
WSL환경에서 Docker-compose 사용하기 (0) | 2020.04.26 |
alembic을 이용해 DB 마이그레이션 하기 (2) (2) | 2020.03.18 |
댓글