13. jpa reader,writer 까지만 보고 질문드립니다. JpaPagingItemReader , JpaItemWriter 를 사용해서 JPA 기반으로 DB에 직접 접근해 처리할때, Writer나 Processor에서 복잡한 비즈니스 로직이 필요한 경우 에는 어떻게 설계하는 것이 좋은지 궁금합니다. 만약 주문을 처리하는 배치가 있다고 했을 때 배치 작업에서 주문을 조회 ( JpaPagingItemReader -Entity 리턴) writer에서 주문 상태 변경 주문 내역 추가 배송 테이블에 적재 등 여러 도메인을 걸치는 비즈니스 로직 수행 필요 이렇게 되면 reader에서 조회한 것을 processor에서 command와 같은 객체로 변환해서 writer에서는 service 로직을 호출하는 것이 좋을까요?
안녕하세요 토비님, 우선 강의를 통해 제가 알고 있던 헥사고날 과 DDD(도메인 주도 설계) 에 대해 다시 한번 깊이 생각해볼 수 있는 소중한 경험이 되었습니다. 좋은 강의 만들어주셔서 정말 감사합니다. 토비님께서 생각하시는 헥사고날에, DDD 과 멀티 모듈 의 바람직한 설계에 대해 궁금해서 질문을 남기게 되었습니다. 여기서의 멀티 모듈은 우선 MSA 를 제외하고 순수 멀티 모듈을 통해 시스템을 설계를 한다는 것을 전제하고 있습니다. 가장 흔하게 보이는 멀티 모듈 구성의 패턴은 Storage (JPA), External (외부 Dependency), N 개의 서비스에 해당하는 Web Server 모듈 & 기타 등이 있는 것 같은데요. 멀티 모듈을 현 강의에서 보여주고 말씀해주시는 헥사고날과 DDD 와 결합했을 때, 어떻게 구성하면 좋을지 많은 생각이 들고 또한 현업에서 비슷한 고민을 하고 있어서 토비님의 생각이 궁금해 질문을 남기게 되었습니다. 감사합니다.
Client의 close()에 synchronized를 사용하는 것은 이해가 됐습니다. ReadHanlder, WriteHandler 양쪽에서 동시에 호출할 수 있기 때문이라고 생각하면 바로 이해되는데... ReadHandler, WriteHandler의 close()에는 어떤 이유로 동기화 처리를 하는건지 궁금합니다. (해당 스레드들은 Client에서만 접근되는게 아닌가요?) 그리고 모든 IO 스트림이 Client 클래스에서 관리되는데 굳이 핸들러에도 close()를 두신 이유가 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 강의 따라하는데, indexing이 무한히 로드 중이여서 아래 문구와 같이 자동 import를 하고 싶어도 할 수가 없습니다 ㅠㅠ.. 구글링을 통해 invalidate cache 하고 restart 해보기 compiler>excludes에 해당 프로젝트 파일 제외시켜보기 appearance&behavior에서 sync기능 비활성화 시켜보기 ( https://eottabom.github.io/post/intellij-indexing/ 참고함) jdk 17로 잘 설정되어 있는지 등등 확인해보았지만 인덱싱이 무한히 실행되고 있어 어노테이션 임포트를 못하고 있습니다... 조언 부탁드리겠습니다! 😂 😂
thread1.join(); thread2.join(); 메인스레드 내에서 thread1,2를 join()을 하는데요. thread1.join()을 먼저 만났으니 메인 스레드는 thread1이 종료 될때까지 다음 코드를 실행하지 않을텐데요. 여기서 메인스레드가 thread1의 결과를 기다리는 것이므로 thread1,2는 무관하게 그대로 번갈아가며 실행 되는 것이 맞나요? CPU((코어)가 1개라고 가정했을때요. 그래서 메인은 thread1이 종료되고 결과를 기다릴뿐 thread1과 2의 종료 순서는 보장되지않는 것이 맞을까요? 따라서 thread2가 먼저 작업을 끝낸 실행일 때도 있을 수 있겠죠? 단지 메인이 thrad1의 결과를 먼저 받으려고 기다릴뿐인거죠?
클래스의 생성자 강의 내용 중에서, 1. 젤리 리스트 형식에서 jelly=[teddy_jelly('red', 'strawberry'), teddy_jelly('yellow','lemon')]의 teddy_jelly('red', 'strawberry') 이 부분은 함수의 인수로 이해하면 될까요. 그것을 젤리라는 변수에 담은 것으로요. 2. 그리고 jelly인스턴스 속성에 접근하는 방법에서 print(jelly[0].color)는 위의 리스트에서 0번째 위치의 color값을 의미할텐데 .color의 형식이 함수의 표기와 비슷합니다. 이 부분이 맨 위 매소드 작성 시 self.color=color라고 작성한 부분과 관련이 있는지, 아니면 그냥 단순 작성 규칙인 지 질문드립니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 17:13경 하신 설정이 최신 intellij와 스프링부트에서도 필요한 설정인가요? 어떤 기능을 하는 설정인지 궁금합니다. 2025년 기준 인텔리제이에서 확인할 수 없어 여쭙습니다.
안녕하세요 토비님! 좋은 강의 정말 감사드립니다. @TestConfiguration 에 대한 설명을 해주신 부분 중에서 테스트 결과와 다른 부분이 있는 것 같아 확인차 질문 드립니다. <28. 회원 애플리케이션 서비스 테스트 (2)> 의 11:38에서 " @TestConfiguration 에 어떤 Bean을 정의하면 이게 우선이 되어 돌아갑니다." 라는 말씀을 해주셨는데요. 해당 말씀이 맞는지 테스트해 보기 위해, 현재의 강의 예제 코드에서 @TestConfiguration 이 붙은 클래스의 PasswordEncoder 를 정의한 Bean 메서드의 이름을 testPasswordEncoder로 변경하고 테스트를 돌려 보니 아래와 같은 오류가 발생하였습니다. ( EmailSender 의 경우 DummyEmailSender에 @FallBack 이 붙어 있어서 @TestConfiguration 의 EmailSender Bean 메서드의 이름을 다르게 구성하더라도 테스트는 정상적으로 동작합니다.) @TestConfiguration 이 정의되었다고 해서 우선순위로 동작하지는 않는 것으로 보이고, 기존 Bean의 적용 우선순위에 따라 @TestConfiguration 에서 정의한 메서드 이름과, 이를 사용하는 곳의 필드 이름이 동일한 경우 해당 Bean을 찾아서 동작하는 것으로 보였습니다. 혹시 제가 잘못 이해하고 있거나 보완이 필요한 부분이 있다면 편히 말씀 부탁드립니다. 확인 부탁드립니다. 감사합니다 :)
킬구형, 테스트 할 때 JobLauncherTestUtils 빈을 주입받는 부분에서 궁금한 게 있어. @Autowired private JobLauncherTestUtils jobLauncherTestUtils; spring batch 테스트를 할 때 JobLauncherTestUtils 을 AutoWired 를 사용해서 필드 주입을 받으면 테스트가 잘 동작하는데, @RequiredArgsConstructor class InFearLearnStudentsBrainWashJobConfigTest { private final JobLauncherTestUtils jobLauncherTestUtils; 생성자 주입으로 받으려고 하면 아래처럼 에러가 나는 이유가 뭘까? No ParameterResolver registered for parameter [final org.springframework.batch.test.JobLauncherTestUtils jobLauncherTestUtils] in constructor ~~ 그리고 AutoWired 로 필드 주입을 받으면 동작은 잘 하지만, IDE에서 Could not autowire. No beans of 'JobLauncherTestUtils' type found. 이렇게 빨간 줄이 뜨는 건 왜일까? 인터넷 서칭해봐도 플러그인 설치를 통한 해결 방법은 있지만 해답은 못 찾았고, 지피티 설명은 이해가 안돼서 여기에 물어봐. 미리 고마워!
안녕하세요, 코드 마지막에 순열의 중복 제거를 위한 로직을 for i in range(...): ans //= fact(S.count(chr(i))) 아래처럼 직접 분모를 먼저 구하는 방식으로 구현하고 대입했는데 채점에서 풀이가 틀렸다고 나옵니다. deno = 1 for i in range(...): deno *= S.count(chr(i))) ans = int(ans/deno) 순열 공식상 순열의 개수 ans/deno는 항상 정수가 나옴이 자명함에도 왜 //=를 써야 정답이 되는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 정답 코드에서 status.getCode() 대신 status.code 사용해도 되나요? 코드는 잘 돌아가는데,, 관례상 그렇게 해도 되는건지 궁금합니다.