학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] H2 database 상에는 테이블이 잘 만들어졌고 오류도 안뜨는데 콘솔창에 create table~ 이 문장들이 출력되지가 않습니다. 상관없는 것인지 아니면 뭐가 문제일까요 ?
@Repository public interface ArticleLikeRepository extends JpaRepository<ArticleLike, Long> { // 메서드 이름 기반 쿼리 생성 // JPQL로 암시적으로 생성 해줌 // SELECT a FROM ArticleLike a WHERE a.articleId = ?1 AND a.userId = ?2 Optional<ArticleLike> findByArticleIdAndUserId(Long articleId, Long userId); } 보통 Repository 부분 보면 JPQL로방식으로 native쿼리를 통해 db데이터 조회,삭제,추가,업데이트 등등 내용이 많앗는데,, 아래부분은 쿼리를 작성 안해도 명시적인 구현체 없이 메서드 이름 기반 쿼리생성을 통해서 데이터를 조회 할수 있다고 하면 될가요?? 암시적으로 메서드 이름 기반 쿼리 생성은 암시적으로 JPQL이 생성된 상태에서 조회되는건가요?? 혹시 나해서 주석으로 spring document랑 기타 자료를 찾아서 주석문을 추가 했는데, 제가 이해한 부분이 맞나 싶어서 글을 올려봣습니다
안녕하세요, 이번 실습 프로젝트 동안에 Order와 OrderItem은 N:1의 연관관계로 설계하셨습니다. OrderService의 order()안에서 OrderItem을 생성하고 Order를 생성하는 것으로 미루어 볼 때, 하나의 OrderItem이 하나의 Order와 대응되는 구조가 아닌가요? (즉 한 건의 주문 데이터는 한 건의 주문상세 데이터만 갖는 구조) 이런거라면 order에서 cancel할 때 OrderItem을 순회하며 cancel하는 것이 의미가 있는건지 궁금합니다! 즉, 일괄 주문이 안되는데 일괄 주문 취소가 의미가 있는건지 궁금합니다! 감사합니다.
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "delivery_id") private Delivery delivery; 보시는 바와 같이 Order의 생성 메서드에 필요한 파라미터에 들어가는 두 데이터입니다. 주문이 만들어지기 위해서는 OrderItem이 먼저 필요하기 때문에 인자로 주입하고 또 영속성 전이를 주는 것이 논리적이라 생각해 동의할 수 있었습니다. 그러나 Delivery 타입을 메서드로 주입받는 것은 배송이 있고 그 다음 주문이 존재한다는 흐름으로 받아들여집니다. 이 부분에 대한 조언을 얻을 수 있을까요? 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강사님 강의 잘 듣고 있습니다!! 혹시 7. 고급동기화 교안 부분 parkNanos()에서 millis가아니라 ns아닌가요?! ! 그리고 작은 오타하나도 말씀드립니당:)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니요 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 김영한님 알고리즘 강의는 없는건가요??
안녕하세요! 인프런 강의를 들으면서 요 두달정도?에 앱을 여러개 만들어봤는데 플레이콘솔 들어갈때마다 다운로드 수는 0명만 나와서 웃기만 하고 있는 상태입니다. 앱이 매력적이면 자연유입이 되는것인지, 아니면 구글애즈를 통해 광고를 집행해야 비로소 자연유입이 생기는건지? 궁금합니다. (아직 광고 집행은 겁이 나기도 하고 제 앱 자체에 확신이 없어서 구글 광고 집행 관련 영상은 아직 안 본 상태입니다 ㅎㅎ;)
비공정 모드에서는 스레드 경쟁 상태가 되어 어떤 스레드가 락을 획득 할 지 보장이 안되는건 이해가 됐습니다. 다만 교안에는 이미지 처럼 하나 깨운다 라고 되어있는데, 그러면 경쟁 상태가 의미가 있는지요? 한번에 여러 스레드가 unpark되는게 아니라면 왜 레이스 컨디션 문제가 발생하는지 궁금합니다.
package kdy.board.article.api; import MSA.board.article.service.response.ArticleResponse; import lombok.AllArgsConstructor; import lombok.Getter; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestClient; public class ArticleApiTest { RestClient restClient = RestClient.create("http://localhost:9000"); @Test void createTest() { ArticleResponse response = create(new ArticleCreateRequest( "hi", "my content", 1L, 1L )); System.out.println("response = " + response); } ArticleResponse create(ArticleCreateRequest request) { return restClient.post() .uri("/v1/articles") .body(request) .retrieve() .body(ArticleResponse.class); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } } 위와 같이 코드 쓰고 Test를 진행하면 아래와 같은 에러가 뜹니다. cmd창에서 검색해봐도 현재 9000을 쓰고 있는 서버는 없다고 뜨는데 어느 부분이 문제인 건가요? > Task :common:snowflake:compileJava UP-TO-DATE > Task :common:snowflake:processResources NO-SOURCE > Task :common:snowflake:classes UP-TO-DATE > Task :common:snowflake:jar UP-TO-DATE > Task :service:article:compileJava UP-TO-DATE > Task :service:article:processResources UP-TO-DATE > Task :service:article:classes UP-TO-DATE > Task :service:article:compileTestJava > Task :service:article:processTestResources NO-SOURCE > Task :service:article:testClasses org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:9000/v1/articles": null at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.createResourceAccessException(DefaultRestClient.java:575) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:498) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.retrieve(DefaultRestClient.java:460) at kdy.board.article.api.ArticleApiTest.create(ArticleApiTest.java:24) at kdy.board.article.api.ArticleApiTest.createTest(ArticleApiTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.net.ConnectException at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:951) at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) at org.springframework.http.client.JdkClientHttpRequest.executeInternal(JdkClientHttpRequest.java:102) at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:492) ... 6 more Caused by: java.net.ConnectException at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1041) at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:227) at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:280) at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$2(PlainHttpConnection.java:238) at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.nio.channels.ClosedChannelException at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:202) at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:786) at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:874) at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:210) at java.base/java.security.AccessController.doPrivileged(AccessController.java:571) at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:212) ... 9 more java.net.ConnectException at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:951) at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) at org.springframework.http.client.JdkClientHttpRequest.executeInternal(JdkClientHttpRequest.java:102) at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:492) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.retrieve(DefaultRestClient.java:460) at kdy.board.article.api.ArticleApiTest.create(ArticleApiTest.java:24) at kdy.board.article.api.ArticleApiTest.createTest(ArticleApiTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.net.ConnectException at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1041) at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:227) at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:280) at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$2(PlainHttpConnection.java:238) at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.nio.channels.ClosedChannelException at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:202) at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:786) at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:874) at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:210) at java.base/java.security.AccessController.doPrivileged(AccessController.java:571) at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:212) ... 9 more > Task :service:article:test ArticleApiTest > createTest() FAILED org.springframework.web.client.ResourceAccessException at ArticleApiTest.java:24 Caused by: java.net.ConnectException at ArticleApiTest.java:24 Caused by: java.net.ConnectException at Utils.java:1041 Caused by: java.nio.channels.ClosedChannelException at SocketChannelImpl.java:202 1 test completed, 1 failed > Task :service:article:test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':service:article:test'. > There were failing tests. See the report at: file:///D:/projects/MSA-board/service/article/build/reports/tests/test/index.html * Try: > Run with --scan to get full insights. BUILD FAILED in 9s 6 actionable tasks: 2 executed, 4 up-to-date
아래 코드에서 계속해서 테스트 오류가 뜹니다.. 이유가 무엇일까요? 오히려 isequalto 를 사용했을때 테스트가 성공해버려요 @Test void Clock() { Clock clock = Clock.systemDefaultZone(); LocalDateTime dt1 = LocalDateTime.now(clock); LocalDateTime dt2 = LocalDateTime.now(clock); Assertions.assertThat(dt2).isAfter(dt1); } // 오류 메세지 java.lang.AssertionError: Expecting actual: 2025-05-09T16:54:49.066025800 (java.time.LocalDateTime) to be strictly after: 2025-05-09T16:54:49.066025800 (java.time.LocalDateTime) when comparing values using 'ChronoLocalDateTime.timeLineOrder()'
위와 같이 로그가 찍혔으면, DLQ에서 ack 상태가 되어야하는것 아닐까요? @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()); } } 위의 코드인 경우 AUTO 모드로 동작해서 자동으로 DLQ에서 처리가 되면 ACK 을 받을 것이라 생각했는데, DLQ에서 unack 상태로 남아있어서 여쭤봅니다! 이후에 애플리케이션을 종료하면 DLQ에서는 다시 ready 상태가 되고, 애플리케이션을 실행하면 이를 실행하고 와 같이 로그가 찍힌 다음에 다시 unack 상태가 됩니다. 좋은 강의 감사드립니다 :)
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 4:47초에서 iterator.next()가 '현재 데이터를 반환하고 다음으로 이동'한다고 하셨고, 그것이 '다음 데이터를 반환한다' 라는 말씀이라 하셨습니다. 제가 이해가 잘 안되는데, 현재 데이터를 반환하고 다음으로 이동하는 것은 리턴값이 현재 값 이라는 것일테고 다음 데이터를 반환하는 것은 리턴값이 다음 데이터라는 말일텐데, 혹시 어느 것이 맞을까요 ..?
안녕하세요, 프로그래밍좀비님 강의 덕분에 시행착오를 줄이고 아직 얼마되지는 않지만 앱 수익화에 도움을 많이 받고 있습니다. 🙇♀ 애드몹 보고서를 보다가 의문이 생겨 질문드립니다. 일치율은 모든 국가가 100%인데, 노출률이 평균 50%~ 심하게는 0%입니다. 찾아보니 광고를 로드는 했지만 노출하지 못했을 때 이런 현상이 생길 수 있다고 하는데, 현재 광고는 스플래시 화면에서 전면광고와, 홈배너를 로드하고 이후 전면광고를 보여주고 홈화면으로 넘어가도록 되어있습니다. 스택은 expo, react-native를 사용하고, 안드로이드에만 배포되어있습니다! 저는 경험이 짧아 원인 파악에 어려움을 겪고 있는데, 혹시 이런 경험을 하셨거나 추측되는 원인이 있으실까요?