강의

멘토링

커뮤니티

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

비오님의 프로필 이미지
비오

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

코드 느끼기

getOwnedCoupons 의 null 처리

해결된 질문

작성

·

11

1

coupon 데이터 처리시 !! 연산자 처리하는 부분에 질문이 있습니다.

논리적으로 현재 기획상으로는 null 일리 없음.
-> !! 연산자를 사용
이 상황으로 코드를 이해하긴 했어요.

하지만, 이러한 방식은 일종의 암묵지라서 버그가 발생할 여지가 있어보이는데요.
특히 쿠폰처럼 사람이 개입하는 경우에 어드민에서 상태를 변경하는 경우 기존의 전제가 성립하지 않을 때가 있잖아요. (쿠폰을 비활성화 한다거나)
이런 경우 몇가지 선택지가 있을거 같아요.
1. 쿠폰은 임의로 비활성화하지(or 다른 상태도 불변) 않는다.

2. 쿠폰이 비활성화 되는 경우, 소유 쿠폰에서 제거 된다.

이런 경우,, 기획에 따라 다르다라고 이해해야할까요?
저 같은 경우, 이미 발급된 소유 쿠폰 자체를 불변처리 하는쪽으로 얘기하는 편이 심플해보이긴 합니다만, 재민님 의견도 궁금합니다.

답변 2

1

제미니님의 프로필 이미지
제미니
지식공유자

안녕하세요 질문 감사드립니다

우선 현재 예제 기준으로 couponMap상태를 포함하여 조회(findAllById 사용)하고 있지 않습니다!
그래서 적어주신 것 처럼 어드민에서 상태를 변경한다 하여도 예외가 발생하지 않는 형태입니다

다만 누군가 HardDelete를 해버리면 문제는 발생 할 수 있긴합니다만, 이건 의도가 아닌 이상 발생하지 않게 잘 관리 해야할 것 같습니다 (디비 권한 부터..)


별개로 적어주신 것 기준으로 보면 기획 의도와 비즈니스 상황에 따라 다르다고 봐야할 것 같습니다
다만 기획과 운영팀과 협의하여 기준을 명확히 정리해야하는 부분이라고 생각합니다

1번의 경우 현실적으로 운영을 하다보면 운영팀 입장에선 상태 변경이 필요하다보니 불변을 강제하기 어려울 수 있을 것 같습니다 😢 (외부 가맹점에서 클레임이 있을 수도 있구요, 정말 설정 오류일 수도 있구요)

2번의 경우 쿠폰을 비활성화 했다고 해서 소유 쿠폰이 제거되면 안 될 것 같습니다! 이건 고객 입장에서 민원으로 직결 될 수 있는 부분 같습니다


결과적으로 두개의 선택지 모두 다시 재고해봐야하는 전략 같습니다
그래서 현재 예제에서는 무조건 Coupon메타데이터 성으로 상태 상관없이 가져오도록 되어있습니다

다만 강의에서 설명했듯 이런 부분이 애매하다 판단되거나 이슈가 있다면 OwnedCoupon 이 메타 데이터를 직접 가지고 있게하는 것도 방법이 될 수 있을 것 같습니다!

모쪼록 답이 되었길 바랍니다! 감사합니다!

비오님의 프로필 이미지
비오
질문자

"상태를 포함하여 조회(findAllById 사용)" 이 부분이 사실 최초에 잘 이해가 안가는 부분이긴했어요. soft delete 를 위한 것으로 이해했는데, 그렇다면 유저가 접근하는 도메인에서는 사실상 비활성화되어있다고 봐야할거 같다고 생각했거든요.
그래서, active 만 조회한다는 가정하에 질문드렸던 건데 이를 메타데이터 성격으로 사용했다고 하니 이해가 되네요!
그렇다면 쿠폰의 정책이나 상태가 바뀌는 것에 OwnedCoupon 이 어떻게 대응될지는 기획의 영역이 되겠네요. 감사합니다!

0

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

쿠폰 데이터를 처리하면서 !! 연산자를 사용하는 부분에 대한 질문을 주셨네요. !! 연산자는 Kotlin에서 null 가능성을 명시적으로 제거하기 위해 사용되지만, 실제로 null이 발생할 가능성이 있으면 오류가 발생할 수 있는 위험이 있는 방식입니다.

고려해야 할 사항

  1. 기획의 일관성 유지:

    • 기획에 따라 쿠폰의 상태가 변하지 않는다는 전제가 있다면, !! 연산자를 사용하는 것은 문제없을 수 있습니다. 하지만 이 전제가 깨질 가능성이 있다면, 오류를 방지하기 위한 보완이 필요합니다.
  2. 쿠폰의 상태 변화:

    • 쿠폰이 비활성화되거나 상태가 변경될 가능성이 있는 경우, 소유 쿠폰에서도 이 변경 사항을 반영하는 것이 안전한 설계입니다.
    • 기획에 따라 쿠폰의 비활성화 기준을 명확히 하고, 비활성화 시 소유 쿠폰에서 어떻게 처리할지를 정의해 두는 것이 좋습니다.
  3. 비즈니스 로직의 명확화:

    • 모든 소유 쿠폰을 불변 처리하여 변경되지 않도록 통제하는 방법이 운영상 관리하기 쉬울 수 있다면 이 방향으로 진행할 수 있습니다. 다만, 이는 기능적으로 제한을 가할 수 있습니다.

관련 예제 및 해결 방법

현재 상황에서 비즈니스 로직에 맞는 최적의 해결책은 각 서비스의 요구사항에 따라 달라질 수 있음을 유념하셔야 합니다. 각각의 선택지는 나름의 장단점이 있으니 기획 및 요구사항과 맞추어 결정하는 것이 중요합니다.

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

비오님의 프로필 이미지
비오

작성한 질문수

질문하기