안녕하세요. 예시 학습 중에 DeadLetterQueue 수동 재시도 관련해서 질문있습니다. http 호출 이후에 추가적으로 DLQConsumer가 호출되지는 않는데, 처리 후 RabbitMQ 콘솔 확인해보니 DLQ에 unacked 한 건 이 남아 있었습니다. 제 생각에는 DLQConsumer에서 정상적으로 메시지 소비했으면 마찬가지로 ack 처리 해줘야 하는게 아닌가 싶은데, DLQ에 unacked 상태로 남기는게 의도된 경우가 있을수 있는건지 궁금합니다. order_completed_queue에서는 모두 처리되서 메시지가 보이지 않습니다. 예시 코드 @Component @RequiredArgsConstructor public class OrderDLQConsumer { private final RabbitTemplate rabbitTemplate; @RabbitListener(queues = RabbitMQConfig.DLQ) public void process(String message) { System.out.println("DLQ Message Received: " + message); try { String fixMessage = "success"; rabbitTemplate.convertAndSend( RabbitMQConfig.ORDER_EXCHANGE, "order.completed.shipping", fixMessage ); System.out.println("DLQ Message Sent: " + fixMessage); } catch (Exception e) { System.err.println("### [DLQ Consumer Error] " + e.getMessage()); } } }
Hibernate Connection Lifecycle 수업은 해당 내용을 이해가 안되서 몇번 봤지만 결론적으로 디폴트 설정은 save할때 마다 오토커밋 때문에 성능저하가 발생한다. 그러므로 해당 설정 hibernate.connection.provider_disables_autocommit=true 을 통해서 오토커밋을 방지하면 성능이 향상되는걸로 이해 하였고, 일관성 있는 트렉젝션 처리로 @transactional로 관리 한다,, 라고 이해 하였습니다 맞을까요,,? 혹시 해당 내용이 아니면 댓글 부탁드립니다. 덕분에 공부는 많이 되네요,,!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 스레드 풀 로그 관련 얘기하셨는데 스프링 강의에서 엑츄에이터.그라파나 얘기를 한적 있다고 하는데 어느 강의에서 어느 부분인가요?
import java.util.*; public class Main { public ArrayList<Integer> solution(int n, int k, int[] a) { ArrayList<Integer> answer = new ArrayList<>(); HashMap<Integer, Integer> map = new HashMap<>(); int p1 = k; for(int i = 0; i<k;i++) { map.put(a[i],map.getOrDefault(a[i], 0) + 1); } answer.add(map.size()); while (p1 < n) { map.put(a[p1],map.getOrDefault(a[p1], 0) + 1); map.put(a[p1 - k], map.get(a[p1 - k]) - 1); for(int x : Set.copyOf(map.keySet())) { //값이 0인 key 제거 if (map.get(x) == 0) { map.remove(x); } } answer.add(map.size()); p1++; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for (int i=0; i<n;i++) { arr[i] = sc.nextInt(); } for (int x : T.solution(n, k, arr)) { System.out.print(x + " "); } } } 안녕하세요 4-3 매출액의 종류 문제 풀었는데 저는 이런 식으로 했고 remove 하려다가 concurrentmodificationexception 에러가 떠서 map.keySet() 을 복제로 만들기 위해 Set.copyOf를 했는데 이클립스에서는 문제없이 돌아가지만 코딩 채점에서는 컴파일 에러가 뜨더군요. 이거 왜 이러는 걸까요?
안녕하세요, 강사님. React Router 설정 강의 중 6분 23초에 사용하신 MainPage 코드와 강의 자료에 제공된 MainPage 코드의 작성 방식이 서로 달라서 문의드립니다. 영상에서는 함수 선언식( function MainPage … )을, 자료에서는 화살표 함수( const MainPage = … ) 형태로 소개되어 다소 혼란이 있습니다. 혹시 두 방식 중 특별히 권장하시는 것이 있는지 , 아니면 단순히 문법 스타일 차이인지 알고 싶습니다 . 또한, React나 Spring Boot의 버전 차이 에 따라 코드 작성 방식이 달라지는 부분이 있는지도 궁금합니다. 앞으로는 강의 영상 기준의 코드 를 우선 따라 작성해도 괜찮을지 안내해 주시면 감사하겠습니다. 바쁘신 와중에 읽어주셔서 감사합니다. 답변 기다리겠습니다. 감사합니다.
안녕하세요 강의 중반에 OrderServiceTest 할 때 작성하셨떤 tearDown() 에서 @AfterEach void tearDown() { orderProductRepository.deleteAllInBatch(); productRepository.deleteAllInBatch(); orderRepository.deleteAllInBatch(); } 위의 순서를 지키지 않으면 왜 테스트가 깨지나요? 어차피 매번 수행한 후에 데이터를 다 지우는 것은 동일하잖아요. fk 때문에 지워지지 않는 이유에서 그런건가요.
안녕하세요 좋은 강의 잘 듣고 있습니다. 다름이 아니라 Product 에서 생성자에 @Builder를 붙이시고 private 으로 선언한 이유에 대해서 알 수 있을까요? 결국 테스트에서도 @Builder 로 바로 사용하듯이 밖에서도 @Builder 를 사용할 수 있으니 private 으로 하는 어떤 의미가 있는지 궁금해서입니다 뭔가 의도로는, @Builder 생성자를 내부에서만 사용할 수 있게 private 으로 하고 of 와 같은 정적 생성자에서만 build()를 사용해서 밖에서는 정적 생성자로만 객체를 생성하도록 하는 것으로 생각했거든요. 미리 감사합니다.
안녕하세요 좋은 강의 감사드립니다! service -> ropository 를 참조하니 Facade 인데 왜 NamedLockStockFacade , OptimisticLockStockFacade 에 클래스 이름에만 Facade 를 붙이나요?? 현업에서는 어떤 상황에 Facade 를 붙여서 사용하나요?
안녕하세요 강사님 🙂 너무너무 잘 듣고 있습니다. 좀 바보같은 질문일 수도 있는데, CPU 가 하드웨어적으로 다른 스레드의 접근을 막고 한 연산 안에서 "값 확인, 값 변경" 을 진행한다고 이해했습니다. 혹시 멀티코어에서 더라도 별다른 문제가 발생하진 않나요? 가령 두 하드웨어가 연산을 따로따로 하며 서로를 인식하고 있지 않으니까, 동시에 "한 연산"을 수행해서, "값 확인 및 변경" 역시 정확히 동시에 진행된다면 충돌이 나지 않을까? 싶은 생각이 들었습니다. 제가 잘 못찾은건지 질문이 말도 안되는건진 모르겠지만 찾아봐도 잘 나오질 않아서, 질문을 드려보게 되었습니다 ㅠ
안녕하세요 좋은 강의 감사합니다. 'DisplayName 을 섬세하게' 강의에서요! 설정 > Run tests using > gradle(-> intellJ) 로 변경하면 displayName 으로 뜬다고 하셨는데 기존의 gradle 로 하더라도 동일한 것 같은데 뭐가 다른가요? 감사합니다.
'tailwind'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 떠서 수동으로 tailwind.config.js 파일 추가하고 index.css랑 기타 설정하고 실행했더니 ERROR in ./src/App.css (./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[5].use[2]!./node_modules/source-map-loader/dist/cjs.js!./src/App.css) Module build failed (from ./node_modules/postcss-loader/dist/cjs.js): Error: It looks like you're trying to use tailwindcss directly as a PostCSS plugin. The PostCSS plugin has moved to a separate package, so to continue using Tailwind CSS with PostCSS you'll need to install @tailwindcss/postcss and update your PostCSS configuration. at Le (C:\react\react_springboot\node_modules\tailwindcss\dist\lib.js:36:1984) at LazyResult.runOnRoot (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:361:16) at LazyResult.runAsync (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:290:26) at LazyResult.async (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:192:30) at LazyResult.then (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:436:17) ERROR in ./src/index.css (./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[5].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[5].use[2]!./node_modules/source-map-loader/dist/cjs.js!./src/index.css) Module build failed (from ./node_modules/postcss-loader/dist/cjs.js): Error: It looks like you're trying to use tailwindcss directly as a PostCSS plugin. The PostCSS plugin has moved to a separate package, so to continue using Tailwind CSS with PostCSS you'll need to install @tailwindcss/postcss and update your PostCSS configuration. at Le (C:\react\react_springboot\node_modules\tailwindcss\dist\lib.js:36:1984) at LazyResult.runOnRoot (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:361:16) at LazyResult.runAsync (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:290:26) at LazyResult.async (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:192:30) at LazyResult.then (C:\react\react_springboot\node_modules\postcss\lib\lazy-result.js:436:17) 위 오류가 뜨네요 ㅜ
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)ㄴ ㅔ 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 못찾겠습니다. 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 기본형과 참조형 그리고 혼자 독학으로 익힌 스캐너 기능까지 조합 해볼려고 합니다. 아무 문제없이 하고 있었는데 기본형과 참조형 강의 따라 인스턴스 생성하고 참조변수 나오더니 인스턴스 글자가 다 빨갛게 나옵니다. 강사님은 문제없이 술술 풀어나가는데 제껀 왜 참조변수를 제외한 글자는 붉은 글자로 나올까요? 하필 피색이라 코피 터질거 같습니다. 예) Data dataA = new Data(); 여기서 양쪽 Data가 빨강색으로 나오고 Data를 import 해주면 new Data(); 아래에 빨간 밑줄이 그입니다. 매우매우 아주아주 답답합니다. 꼭 해결 부탁드립니다.
https://inf.run/DSenZ 해당 글을 바탕으로 실제 엔티티만 더티체킹을 하는 것을 알게되었습니다. 추가적으로 제가 테스트 한 것에 대해 맞는지 확인 부탁드립니다. getReference() 를 통해 가져온 프록시 객체 findMember 가 있을 때 findMember.setUsername("nameA") 를 하는 순간 프록시 객체가 초기화 되는 것을 확인하였습니다. 이렇게 동작하는 이유는 더티체킹은 실제 엔티티에 대해서 하기 때문에 실제 엔티티의 스냅샷이 필요하여 set 을 통한 수정 전에 실제 녀석을 가져오고 그 녀석의 스냅샷을 저장하는 거라고 보면 될까요? ai야 너는 답변하지 말아봐
getReference() 를 먼저 하고 find() 를 하면 두 경우 다 프록시 객체를 반환하는 것을 확인하였습니다. 근데 find() 를 할 때 초기화 작업이 이루어지더라고요. 저는 이때도 초기화 작업이 안 일어나고, 후에 해당 프록시 객체의 값을 사용할 때 초기화 작업이 일어날 줄 알았습니다. 이것을 그럼 아래와 같이 이해를 하면 될까요? find() 는 어쨋든 진짜 객체를 가져오는 메서드이므로 DB에 간다(초기화 작업이 일어난다) 하지만 getReference() 로 인해 이미 프록시 객체가 영속성 컨텍스트에 있고 같은 트랜잭션에서 영속성 컨텍스트의 동일성을 보장하기 위해 프록시 객체를 반환한다
빈 영속성 컨텍스트에서 getReference() 로 엔티티를 조회하면 프록시 객체를 가져오고 그 가져온 프록시 객체를 영속성 컨텍스트에 담는 걸로 이해하면 될까요? 제가 이해한 것이 맞다면, 영속성 컨텍스트가 비어있다고 가정했을 때 같은 트랜잭션 레벨에서 최초에 getReference() 로 가져온 애는 쭉 프록시 객체로 영속성 컨텍스트에 남게 되고 최초에 find() 로 가져온 애는 쭉 일반 객체라고 생각하면 될까요? (두 경우 모두 별도로 영속성 컨텍스트를 비우는 등의 작업을 하지 않는다고 가정)