inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Người mới bắt đầu] Hãy ngâm mình! Tạo thành viên với Kotlin và Spring Security + JWT

4.1. Giấy phép được cấp khi đăng ký thành viên

1 : N 필드 `memberRole` 에 @OneToMany 옵션 cascade 미사용, 컬랙션 null 초기화 에 대한 질문입니다.

406

Truestar

68 câu hỏi đã được viết

0

class Member(
    ...
) {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "member") ⬅️Q1:"cascade 없음 이유"
    val memberRole: List<MemberRole>? = null ⬅️Q2: "null 초기화"(mutableListOf() 누락)
}

 

Q1:

cascade 미사용:
강의 컨샙에 맞춰 쉬운 예제 구성을 목적으로 컬랙션 필드에 Cascade 설정을 안하신게 아닐까 추측했지만, 한편으로 다른 구현방법에 대한 다른이유가 있으신 것인지 강의에 언급되지 않은 부분을 여쭤보고 싶었습니다.

Q2:

컬랙션 null 초기화:
일반적인 JPA 예제에서는 JpaEntity 의 1:N 관계 필드는 Collection 초기화를 하더라구요. null 로 초기화 할 때의 장점 이라던지, 다른 이유가 있는지 궁금해서 남기게 되었습니다.

 

읽어주셔서 감사합니다.

kotlin spring-boot jpa spring-security jwt

Câu trả lời 2

0

kimkimgod

안녕하세요. Truestar님 질문 남겨주셔서 감사합니다.

두가지 질문에 답변을 같이 남기자면
해당 강의가 초보자를 대상으로 Spring Security와 JWT를 한번 사용해보는 강의여서
예제가 그렇게 되었습니다.

Q1. cascade 미사용

=> cascade 를 사용하면서 설명을 하려면 영속성 컨텍스트를 같이 설명을 해야해서

해당 부분은 제외하고 서비스에서 바로 넣어주는 코드를 작성하였습니다.

다른 이유는 없고 이렇게 하는게 초보자분들이 이해하시는데 쉬울 것으로 판단했습니다.

 

Q2. 컬렉션 null 초기화

=> 이것도 내용은 동일합니다.

@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
val memberRole: List<MemberRole>? = null

해당 예제에서 memberRole을 권한 확인시 조회용으로만 쓰려고 했습니다.

회원가입시 DB에 바로 저장만 하고 끝나기에

memberRoleRepository를 사용해서 memberRole을 저장하면서 member 엔티티에 연결해주지 않았습니다.

그래서 빈 리스트로 미리 초기화할 필요가 없어서 null로 넣었습니다.

 

실제 개발을 할때는 여러가지를 고려해서 개발을 진행하지만

해당 강의는 초보자가 쉽게 따라할 수 있는 강의를 만드는데 포커싱을 두고있어서 보실때 이상한 예제가 있을 수 있을 것 같습니다.

 

다음번에는 좀 더 확실하고 쉬운 예제로 찾아뵙도록 하겠습니다.

 

감사합니다 :)

 

0

Truestar

답변 감사합니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴이에요.

Q1: cascade 미사용에 대해 여쭤보셨는데요, cascade는 연관된 엔티티의 영속성 상태 변화를 관리하는 옵션입니다. cascade를 사용하면 부모 엔티티의 상태가 변경되었을 때 연관된 자식 엔티티도 일괄적으로 상태를 변경할 수 있습니다. 예를 들어, 부모 엔티티를 삭제할 때 연관된 자식 엔티티도 함께 삭제하고 싶다면 cascade를 사용하면 됩니다. 하지만 해당 예제에서 cascade가 사용되지 않은 이유는 강의 컨셉에 맞춰 간단한 예제를 구성하기 위함일 수 있습니다. 그러나 강의에서 특별한 이유가 언급되지 않았다면 여럿의 구현 방법 중 하나를 선택한 것이라고 추측할 수 있습니다.

Q2: 컬렉션 null 초기화에 대해 여쭤보셨는데요, 일반적으로 JPA 예제에서는 1:N 관계 필드를 Collection으로 초기화하는 경우가 많습니다. 이는 null 대신 빈 컬렉션을 초기값으로 설정하는 것이 보편적인 관례입니다. 이렇게 하면 자식 엔티티를 추가할 때 null 체크를 할 필요가 없어서 편리하다는 장점이 있습니다. 하지만 예제에서 null로 초기화한 이유는 명확하게 언급되지 않았으므로, 해당 예제 작성자의 의도에 따라 null로 초기화하는 것이라고 추측할 수 있습니다.

저희가 작성한 답변이 도움이 되셨기를 바랄게요. 추가로 궁금한 점이 있으시면 언제든지 질문해주세요. 좋은 하루 되세요!

Sequence 관련 질문

1

14

2

Image Only Query

1

14

2

프롬프트, 스킬, sub-agent

0

23

0

RepositoryTest의 패키지 위치가 domain인 이유

0

17

1

도메인 모델에서 관계와 규칙을 구분하는 방법

0

32

2

16 강의 메세지 retryCount의 의도

0

17

2

validation 추가하기에 대해 질문

0

105

1

로그인 후 Token 발행 시 postman 에러메시지

0

156

1

unique 작성법

0

151

1

4.1 마지막 회원가입 실행되지만 빈화면 뜸

0

223

3

4.1강 마지막 회원가입 실행

0

153

1

2.4강에서 1:18초쯤에 <T>를하고 뭔가 추가하는 작업

0

177

2

class 와 data class

0

182

1

토큰에서 예외 발생시 처리

0

244

1

안녕하세요 선생님 rememberme 질문드립니다..!

0

245

1

Next Lv 강의에 대해서 계획중이신게 있을까요?

0

283

1

테이블 create문

0

181

1

DTO 생성 과정에서 궁금한 점이 있어요!!

0

559

3

2.5강에서 포스트맨 오류와 전에 실습한 내용에 대해 질문 드립니다

0

592

2

TokenProvider의 Key 관련하여 질문이 있습니다.

0

378

1

스프링 시큐리티 예외 RestControllerAdvice로 처리

0

443

1

loginId는 왜 변경이 안될까요?

0

420

1

memberRole필드 질문이요~

0

494

1

Validation 관련해서 질문드립니다.

1

795

2