본문 바로가기

DB/JPA

질문할 때 DB 테이블 구조를 깔끔하게 올리는 방법과 JPA 관계 매핑 정리

728x90

개발하면서 StackOverflow나 여러 커뮤니티에 질문할 때 DB 테이블 구조를 같이 올려야 하는 경우가 많다. 텍스트로 표를 만들기가 번거로운데, 마크다운 형식 테이블을 쉽게 만들어 주는 웹사이트를 찾아서 소개한다.

 

www.tablesgenerator.com/markdown_tables 

이 사이트에선 CSV 파일을 업로드하거나 직접 데이터를 입력해서 마크다운 테이블을 바로 만들 수 있다.

덕분에 질문 글을 훨씬 깔끔하게 작성할 수 있어 유용했음!

 

 

Markdown Tables generator - TablesGenerator.com

You can import table data by uploading file in CSV format (Comma Separated Value). Most spreadsheet software, both desktop and online, allows to save tabular data in CSV format — it is usually available in the File menu under the name "Save As..." or "Ex

www.tablesgenerator.com

 

 

 

 


JPA에서 테이블 관계 매핑의 중요성

JPA를 사용해 개발할 때 테이블 간 관계 설정이 매우 중요하다. 관계를 잘못 설정하면 데이터 조회가 꼬이거나 무한 루프가 발생하기도 때문이다.

기본적인 JPA 관계 어노테이션은 다음과 같다:

  • @OneToOne : 일대일 (1:1) 관계
  • @OneToMany : 일대다 (1:N) 관계
  • @ManyToOne : 다대일 (N:1) 관계

예를 들어, A 테이블이 여러 개의 데이터를 B 테이블과 연결하는 구조라면, A는 @ManyToOne, B는 @OneToMany 관계를 사용한다.


간단한 예제 코드

다음은 JPA로 A테이블과 B테이블 관계를 매핑한 예제다.

 // B 테이블 엔티티 (부모) @Entity public class BTestVo { @Id private Long id; @JsonManagedReference @OneToMany(mappedBy = "bVo") private List aTestVoList = new ArrayList<>(); // getters, setters } 
 // A 테이블 엔티티 (자식) @Entity public class ATestVo { @Id private Long id; @JsonBackReference @ManyToOne @JoinColumn(name = "b_id", insertable = false, updatable = false) private BTestVo bVo; // getters, setters } 

 

위에서 @JsonManagedReference@JsonBackReference는 무한 루프 방지를 위한 Jackson 어노테이션이다.

이걸 안 넣으면 JSON 직렬화 시 서로를 계속 참조하면서 에러가 나기 쉽다.


마치며

이번에 JPA를 활용해 보면서 관계 매핑의 중요성을 크게 느꼈다. 그리고 질문할 때 테이블 구조를 깔끔하게 정리하는 것도 생각보다 큰 도움이 됐다. 앞으로도 이런 부분들을 신경 써서 개발과 소통에 도움을 얻어야겠다는 생각이 들었다.

728x90
반응형