데이터베이스

datagrip으로 DB 구축 편에서 게시판 테이블과 댓글 테이블을 만들었다. 게시판 테이블과 댓글 테이블은 one-to-many 구조이고 아래와 같다.

JPA 혹은 typeORM의 중요한 개념은 DB 를 직접 다루는게 아니라 객체를 다루는 것이라고 앞에서 얘기하였다. 이 테이블 두개를 entity 설계를 해서 만들어보자.

만일 앞에서 미리 만들어진 테이블이 있다면 먼저 table을 drop 하여 DB내에 어떤 테이블도 존재하지 않도록 한다.

shift 를 두번 누르면 Navigator 검색창이 뜰것이다. database 를 입력하고 엔터를 누르면 우측에 database 탭이 보일것이다. 이 database 탭은 DataGrip과 동일한 탭이다. 앞에서 구축한 MariaDB 정보를 넣고 연결한다. board 테이블과 comment 테이블이 보이면 drop 을 한다.

entity 설계

먼저 src 아래 entity 폴더를 생성하고 Board.ts 화일을 생성한다.

클래스 위에 @Entity() 어노테이션을 붙인다. 이것은 테이블에 해당한다. 만일 테이블 명을 변경하고자 한다면 괄호안데 명시한다.

@PrimaryGeneratedColumn() 은 primary 키를 자동으로 생성해주는 어노테이션이다.

@Column()은 테이블 필드를 생성해주는 필드이고 속성은 ()안에 명시한다. varchar(100)으로 길이를 제한했다면 length: 100을 json 속성으로 명시하고 nullable이라면 nullable: true 속성을 명시해준다.

text 타입은 @Column(“text’) 로 설정한다.

@CreateDateColumn() 은 current_timestamp 를 설정해준다.

@UpdateDateColumn()은 on update current_timestamp 를 설정해주는 컬럼이다.

이제 저장하면 서버를 재구동한다. 앞에서 synchronize를 true로 설정했으므로 이 entity 정보를 읽어서 데이터베이스를 구축해준다. 재구동후 database 탭 위에 refresh 버튼을 누르면 board 테이블이 생성된 것을 알 수 있다.

board 테이블을 우클릭후 SQL scripts > SQL generator… 를 클릭하면 DDL 문이 하단에 생성되는것을 볼 수 있다.

comment 엔티티도 설정해본다.

Board와 Comment 사이에 relation 설정

MariaDB 같은 Relational database에서는 관계를 설정하기 위해서 foreign key를 설정하였다. typeORM에서는 객체 사이의 관계를 설정하면 foreign key가 자동으로 생성된다.

Board 테이블은 여러개의 Comment를 가지는 one to many 관계를 설정한다.

Comment는 하나의 Board를 가지는 many to one 관계이다.

database 탭에서 Comment 테이블을 우클릭후 SQL scripts > SQL generator… 를 클릭하면 하단에 Comment의 DDL 문을 보면 boardId 라는 필드가 자동 생성되었고 이 필드에 foreign 키가 생성된걸 볼 수 있을 것이다.