강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

eovnfjfpa님의 프로필 이미지
eovnfjfpa

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

33강. 조금 더 객체지향적으로 개발할 수 없을까?

궁금한게 있습니다.

작성

·

17

0

ManyToOne 이 N : 1이라는관계를 표현한다는건 이해가 가는데 그게 어떻게 User 객체와 user_id bigint 컬럼과 매핑이 되는지 잘 모르겠습니다. 대출기록이 여러개고 User 가 1개 라는 것과 저것이 무슨 연관인지 이해가 안갑니다ㅜ

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 🙂 질문 주셔서 감사합니다~

1 : N 이란 표현은 이해해주셨는데요~~ 이렇게 생각하시면 되어요!

  • A 데이터가 B 데이터 N개와 연결될 수 이으면 1 : N 관계이다.

  • 즉, 한 유저는 대출 기록 여러개를 가질 수 있죠

  • 반대로 한 유저는 주민등록번호를 반드시 1개만 가질 수 있으므로 1 : 1 관계라고 할 수 있을거에요!

 

자 다음으로

그게 어떻게 User 객체와 user_id bigint 컬럼과 매핑이 되는지 잘 모르겠습니다

라고 해주셨는데요!

JPA를 사용하게 되며

@Entity가 붙은User 클래스는 테이블과 매핑이 됩니다.

객체에서는 long id 로 표현된 데이터가 실제 데이터베이스에는 bigint id 로 저장되는 것이죠


여기까지 이해가 되셨다면, 이제 1번 유저가 있다고 생각해 보겠습니다.

User 클래스의 id 필드에는 1이 들어 있고, user 데이터베이스 id 필드에도 1이 들어 있습니다.

 

이 유저가 100번 책과 110번 책 2권을 빌렸다면 대출 기록은 이렇게 생겼을거에요!

단순화한 대출 기록 스키마 = (user_id, 책 id)

  • (1, 100) -> 1번 유저가 100번 책을 빌렸다

  • (1, 105) -> 1번 유저가 105번 책을 빌렸다

이렇게 되면 유저 테이블에는 데이터가 1줄 들어 있겠고, 대출 기록 테이블에는 데이터가 2줄 들어있겠네요~

 

많은 개념이 동시에 들어오며 1:N 이라는 워딩, 그것이 데이터베이스에서 표현되는 방법론에 대해서 질문 주신 것 같아요! 답변의 흐름을 따라 하나씩 이해해보고, 직접 실행하며 데이터를 확인해보시면 이해가 더욱 잘 되실거에요!

답변이 도움이 되었으면 좋겠습니다. 감사합니다. 🙇

 

0

안녕하세요, 인프런 AI 인턴입니다. eovnfjfpa님.

ManyToOne 관계에서의 매핑은 객체 지향 프로그래밍에서 자주 사용되는 개념으로, 데이터베이스에서 외래 키(Foreign Key)를 통해 연결된 테이블 간의 관계를 표현합니다. 이 관계는 User 객체가 여러 대출기록(Entity)과 연결될 수 있다는 것을 의미합니다.

ManyToOne 설명:
- ManyToOne: 여러 개의 대출기록(UserLoanHistory) 엔티티가 하나의 User 엔티티와 연관될 수 있는 관계입니다. 예를 들어, 한 명의 사용자가 여러 권의 책을 빌릴 수 있는 상황을 상상해 볼 수 있습니다. 이 때, 각 대출 기록은 특정 사용자를 참조하게 됩니다.

매핑 설명:
- 객체 매핑: 스프링에서 JPA를 사용하여 ManyToOne 관계를 매핑할 때, User 클래스 내 user_id는 외래 키로서 여러 UserLoanHistory 엔티티에서 참조됩니다. 이로써 여러 대출기록이 각각 동일한 사용자와 연결되어 있는 구조가 됩니다.
- SQL 테이블 및 컬럼: 데이터베이스에서는 각각의 UserLoanHistory 테이블에 user_id라는 컬럼이 주어져 User 테이블의 기본 키와 관계를 맺고 있습니다. 이 컬럼을 통해 데이터베이스는 여러 대출기록이 하나의 사용자와 연관성을 갖게 됩니다.

관련된 개념에 대한 보다 자세한 설명이 필요하시다면, 아래 유사한 질문을 참조해보시는 것도 도움 될 것입니다.
- JPA 연관관계 질문입니다.

이 링크에서는 연결된 테이블 간의 관계와 매핑 과정을 자세히 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

eovnfjfpa님의 프로필 이미지
eovnfjfpa

작성한 질문수

질문하기