안녕하세요. Member 객체를 생성할 때, 다른 방법을 선택해 보는 것은 어떨까요? 기존에는(설계 트레이드 오프 개선 전) Member.register() 가 MemberRegisterRequest 에 직접 의존하고 있었는데, 도메인 모델이 요청 DTO를 알지 않도록 의존성을 반대로 두는 방법입니다. MemberRegisterRequest 에서 Member 객체를 직접 생성하는거죠. public record MemberRegisterRequest( ... ) { public Member toMember(PasswordEncoder passwordEncoder) { return Member.register(email, nickname, password, passwordEncoder); } } public class Member extends AbstractEntity { ... public static Member register(String email, String nickname, String password, PasswordEncoder passwordEncoder) { Member member = new Member(); member.email = new Email(email); member.nickname = requireNonNull(nickname); member.passwordHash = requireNonNull(passwordEncoder.encode(password)); member.status = MemberStatus.PENDING; member.detail = MemberDetail.create(); return member; } ... } public class MemberModifyService implements MemberRegister { ... @Override public Member register(MemberRegisterRequest registerRequest) { checkDuplicateEmail(registerRequest); Member member = registerRequest.toMember(passwordEncoder); memberRepository.save(member); sendWelcomeEmail(member); return member; } ... } MemberRegisterRequest.toMember(passwordEncoder) 에서 Member.register(email, nickname, password, passwordEncoder) 를 호출하면 Request DTO → Domain 방향으로만 의존합니다. 별도의 MemberRequestInfo 같은 파라미터 객체도 필요하지 않아 구현이 단순합니다. Request DTO를 단순 데이터 전달 객체로 유지하려면 서비스 계층에서 각 값을 꺼내 Member.register() 에 전달하는 방법도 가능합니다. (이 방법보다는 이전 방법이 서비스 계층을 간결하게 유지하는 방법이긴 합니다.) 이런 방법을 기본 개발 규칙으로 두면, 의존성 방향도 문제 없고, 추가적인 객체(예: MemberRequestInfo )를 생성할 필요도 없어서 충분한 이점이 있습니다. 다만, register() 에 전달해야 할 파라미터가 많아진다면 번거롭긴 하겠네요. 이 방법에 대한 의견도 부탁 드립니다. 감사합니다.
안녕하세요. NetworkPolicy 문제에서 allow-from-prod 를 작성할 때, 아래와 같은 설정을 답안으로 작성해 주셨습니다. spec: ... ingress: - from: - namespaceSelector: matchExpressions: - key: env operator: In values: ["prod"] 혹시 아래와 같이 작성하여도 정답이 맞을지 여쭤보고 싶어서 글 작성하게 되었습니다. 저는 문서에서 해당 파트를 참고하여 작성하였습니다.( https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource ) spec: ... ingress: - from: - namespaceSelector: matchLabels: env: prod 테스트 결과 통신은 아래와 같이 되는 것을 확인하였습니다. # pod 들의 IP와 port 확인 $ k get pod -A -o wide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES data postgres-5d6dd5946-rbz9m 1/1 Running 0 10m 192.168.1.92 node01 <none> <none> data test-pod 1/1 Running 0 10m 192.168.1.164 node01 <none> <none> default test-pod 1/1 Running 0 10m 192.168.1.99 node01 <none> <none> kube-system cilium-9cpx4 1/1 Running 1 (44m ago) 27d 172.30.2.2 node01 <none> <none> ... prod test-pod 1/1 Running 0 10m 192.168.1.184 node01 <none> <none $ k exec test-pod -it -n prod -- /bin/sh /# ping 192.168.1.164 # -n data 의 pod ------------------------------ PING 192.168.1.164 (192.168.1.164): 56 data bytes 64 bytes from 192.168.1.164: seq=0 ttl=63 time=0.070 ms 64 bytes from 192.168.1.164: seq=1 ttl=63 time=0.079 ms 64 bytes from 192.168.1.164: seq=2 ttl=63 time=0.052 ms 64 bytes from 192.168.1.164: seq=3 ttl=63 time=0.074 ms ^C --- 192.168.1.164 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.052/0.068/0.079 ms 통신과는 별개로 다른 부분에서 문제가 될 가능성이 있지 않을까 싶어서 여쭤봅니다. 감사합니다.
안녕하세요. 현재 자바 입문편, 기본편을 수강한 후 중급 1편의 예외 처리 단원까지 학습한 상태입니다. 중급 1편부터 난이도가 크게 높아졌다고 느끼고 있는데, 여기서 학습 방향에 대해 조언을 구하고 싶습니다. 강의 내용과 예제는 이해하는 데 큰 어려움이 없습니다. 다만 코드를 보고 작성하며, 정리된 내용을 읽고 이해하는 것과 실제로 지식을 완전히 체화하는 것은 다르다고 생각하여 복습의 필요성을 느끼고 있습니다. 한편으로는 앞으로 수강해야 할 강의가 많이 남아 있기 때문에, 지금 충분한 시간을 들여 복습하는 것이 좋은지 고민됩니다. 아니면 일단 다음 강의들까지 계속 학습한 뒤, 이후 심화 내용을 공부하면서 부족하거나 이해가 부족한 부분이 발견될 때 그때 다시 복습하는 방식이 더 효율적인지 궁금합니다.
안녕하세요 문제를 풀면서 항상 헷갈리는 부분이 있어 글 남기게 되었습니다. "7분 39초" 를 보면 Child c = new Child () 해서 위에 있는 Child() 로 올라가 super() 로 부모클래스 방향으로 가는건 알겠습니다 혼자 문제를 풀다보면 올라갔는데도 부모를 안하고 쭉 내려오는 경우가 있던데 그럴땐 child() 없는 경우엔 그냥 쭉 내려가도 괜찮은 걸까요? new 생성자, 위로 생성자 올라가서 () 이렇게 괄호가 있으면 무조건 부모 () <-값없는 기본 () 문장으로 올라간다! 로 이해하면 되는지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Java 17 설치했고, spring boot 버전 3.x 선택하려 하는데, 선택지에 4,x만 있네요. 어떻게 하면 좋을까요?
업캐스팅(부모 형태, 자식 생성자) 14:09 부모 기본 생성자가 있는 상황에서 자식을 호출하는 구문 내 super()가 없다면 묵시적으로 부모 기본 생성자를 출력하라라는 뜻이 있다고 아래와 같이 답변을 주셨는데 부모 기본생성자를 부르는 super() 가 생략되어 있는 것입니다. 부모 생성자를 부르는 것이 명시적으로 없으면, 묵시적으로 super() 을 Java가 넣어줍니다. 자식 필드가 초기화되기 전에는 무조건 부모 필드가 초기화 되어야하기 때문입니다. 없으면 알아서 부모의 기본 생성자를 부르고, 명시적으로 있으면 해당 부모 생성자를 부른다고 생각하시면 됩니다. 그렇다면 실제 시험에서 자식 코드 내에서 부모 기본 생성자는 있고 자식 코드 내에 super()가 없다면 부모 기본 생성자의 값은 적으면 되는건가요?
16:00분 쯤부터 사용자가 입력을 안하면 scanner.nextLine()에서 스레드가 무한대기 하기때문에 빠져나올 수 있는 방법이 없다고, 빠져 나오려면 System.in을 닫아버려야 한다고 하시는데 사용자가 입력을 안하면 그대로 대기하는게 맞지 않나요? 왜 빠져나와야 하는건가요?? 빠져 나오는게 종료를 의미하는거라면 /exit으로 빠지면 되는게 아닌가요? 해당 부분이 어떤 의미인지 잘 이해가 되지 않습니다.