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

Truestar님의 프로필 이미지
Truestar

작성한 질문수

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

4.1. 회원가입시 권한 부여

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

작성

·

321

·

수정됨

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 로 초기화 할 때의 장점 이라던지, 다른 이유가 있는지 궁금해서 남기게 되었습니다.

 

읽어주셔서 감사합니다.

답변 2

0

김대디님의 프로필 이미지
김대디
지식공유자

안녕하세요. 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로 넣었습니다.

 

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

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

 

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

 

감사합니다 :)

 

Truestar님의 프로필 이미지
Truestar
질문자

답변 감사합니다!

0

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

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

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

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

Truestar님의 프로필 이미지
Truestar

작성한 질문수

질문하기