묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨K6로 배우는 Spring Boot 부하 테스트 입문
그라파나 화면 관련하여 궁금한게 있습니다.
현재 화면에는 p90, p95만 있는데 p99도 보고 싶으면 어떻게 해야하나요?
-
미해결Next.js with Spring Boot
revalidatePath('/product/catalog/1')
revalidatePath('/product/catalog/1')쉽게 얘기해서 새로된 캐시데이터를 가져온다는 얘기인거죠?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
기본 생성자
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]JPA의 기본 스펙은 엔티티에 기본 생성자가 필수라고 했는데다른 엔티티는 다 생략되어있고 왜 Address에서만 명시를 하는건가요?
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법
안녕하세요 제미니님 유튜브랑 인프런 강의 잘 듣고 있습니다. 항상 감사합니다. 😃다름이 아니라 강의를 보고 사이드 프로젝트를 해보고 있는데,도메인과 엔티티를 분리해서 엔티티는 단순 DB 매핑용으로만 쓰고 모든 비즈니스 로직을 도메인에서 처리해보려 하고 있습니다.그러다 보니 '수정'같은 경우(예를 들면 state를 예약에서 취소로 변경하는)에는 id로 엔티티를 찾고 도메인으로 매핑해서 도메인 내부에서 검증과 로직을 처리해야 하는데, 매핑하는 과정에서 수정하는 데 불필요한 List<같은 격벽 하위 도메인> 들도 다 조회를 해서 세팅을 해줘야 하더라구요. 1 : N 관계라 쿼리도 많이 나가게 되고 수정에 불필요한 필드들을 세팅하는 거라서 비효율적이라 생각해서 개선을 해보려 합니다.강의 예제 코드에서는 단순 update는 entity 에서 처리하는 것 같던데, 저는 도메인과 엔티티 계층을 엄격히 분리해서 service 내에서 entity를 의존하는 것이 불가능한 상황입니다. 또한 비즈니스 로직도 엔티티가 아닌 도메인 내부에 놓고 싶습니다. 수정에 필요한 필드만 가지고 있는 수정용 도메인을 만들어서 처리할까 생각도 해보았는데, 비즈니스 로직이 흩어지는 것도 이상하고, 얕은 지식이지만 애그리거트 루트에서 데이터 변경이 이루어져야 한다는 생각이 있습니다.그렇다고 도메인 내부의 하위 도메인 리스트를 nullable하게 가자니 제미니님이 OrderSummary 관련 강의 때 말씀하신 null을 허용하는 도메인을 웬만해서는 선호하지 않는다에 공감이 가서 고려를 안하고 있습니다. 조언을 주시면 정말 감사하겠습니다 ㅜ.ㅜ 😢
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
도메인 객체와 엔티티 객체 사용
안녕하세요, 강의랑 유튜브 너무 잘 보고있습니다.강의를 보면서 여러 인사이트를 얻었습니다!궁금한 점은 코틀린이 아닌 자바를 사용할 경우엔 엔티티 객체를 도메인 객체로 변환해서 return 해줄 때 코드가 다소 지저분해지는데요 ㅠㅠ어떤 방식이 가장 유효할지 의견 부탁드립니다! 엔티티 객체에 toDomain() 과 같은 도메인 객체 변환 메서드 생성Mapper 클래스 생성 (ex. ProductMapper.toDomain(entity)) (생성 한다면 어느 모듈, 위치에..?)추가적으로 도메인 객체를 사용한다면, 엔티티 -> 도메인 -> 클라이언트 응답 DTO 와 같은 변환 과정을 거의 필수적으로 거쳐가야하는데, 이 부분에 대해서 도메인 객체와 엔티티 객체의 분리 시점이 재미니님은 있으신건가요?아니면 프로젝트 시작부터 도메인과 엔티티는 구분해서 사용할 것이다! 라고 정하고 시작하시는 편이신가요? 물론 프로젝트의 규모와 도메인의 복잡도 등에 따라 유연하게 변해야 한다고 생각하지만, 해당 경험이 없다시피 하다보니 현재 프로젝트 구조에서 구현 레이어 밖으로 나갈때 도메인 객체로 변환의 이점과 트레이드 오프에 대해 어떻게 생각하시는지 궁금합니다!
-
해결됨K6로 배우는 Spring Boot 부하 테스트 입문
그라파나에 뜨는 화면 관련해서 질문 있습니다
localhost:3000 띄우고 강의에서 시키는 대로 한 후 grafana 화면 들어가니 전부 NA 만뜨고 한번은 우측 상단에 Unexpected Error 라는 문장이 뜬적이 있는데 왜 그런가요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
Remote Partitioning
킬구형 6장 작전3에 첫번째 예제 Manager 노드 실행 명령까지 전체 코드를 볼 방법이 있어?
-
미해결실습으로 배우는 선착순 이벤트 시스템
ApplyService와 Consumer서비스의 db공유?
안녕하세요 강의 잘 듣고 있습니다.ApplyService와 Consumer서비스의 db관련 질문을 하려 합니다.9:30분쯤부터 ApplyService와 컨슈머서비스를 분리해서 테스트를 진행하는데 AppliServiceTest를 보면 자신의 CouponRepository에서 count개수가 100개인지 체크하는것 같습니다. 저는 쿠폰생성 및 저장 로직을 전부 컨슈머서비스로 옮겨서 여기서 쿠폰테이블을 관리한다고 생각했는데 어떻게 ApplyService가 자신이 이전에 사용하던 CouponRepository에서 count 체크가 가능한건지 궁금합니다. 혹시 두 서비스가 하나의 db를 공유하는건가요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
Study 개설하는 로직에 대해서 궁금점이 있습니다.
현재보면 repository에 저장하고 나서 manager등을 set하게 되는데 이렇게 되면 쿼리수가 늘어나서 set을 먼저하고 repository에 저장을 해주는게 효율적이지 않을까요? 다른 특별한 이유때문에 순서를 save를 하고 set으로 결정하셨는지 궁금합니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
킬구형 실무에서는 JPA ItemReader / ItemWriter를 더 선호해? 아니면 JDBC itemReader/ItemWriter를 더 선호해?
킬구형, 히사시 부리데쓰요야 JPA ItemReader와 ItemWriter를 배워보니 생각보다 복잡하고 여러 고려사항들이 많이 보이는 것 같아, 물론 JPA와 통합이 되서 좋지만 JPA를 쓰고 있어도 Jdbc ItemReader/ItemWriter가 훨씬 더 간단해보이고 별다른 추상화도 많이 없어서 성능도 괜찮아 보이는데, 실무에서는 어때? JPA ItemReader / ItemWriter를 더 많이 써 Jdbc ItemReader/ItemWriter를 더 많이써? PS: 킬구형 어떻게 이렇게 자세한 내용들을 알 수 있는거야? spring batch 공식 docs를 봐도 내용이 없던데 ㅋㅋㅋ 킬구형 없었으면 큰일 날뻔했자너~
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
혹시 뭐가 문제인지 알 수 있나요?
Execution failed for task ':org.zerock.mallapi.MallapiApplication.main()'.> Process 'command 'C:\Users\User\.jdks\temurin-21.0.9\bin\java.exe'' finished with non-zero exit value 1* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to generate a Build Scan (powered by Develocity).> Get more help at https://help.gradle.org.
-
미해결실전! 스프링 데이터 JPA
MemberRepository 구현체
MemberRepository의 구현체는 프록시 객체라고 배웠습니다 그렇다면 해당 프록시 객체 안에서 SimpleJpaRepository와 MemberCustomRepositoryImpl 등을 필드로 갖고 있는 형태인가요?
-
미해결백엔드 개발자 성능 개선 초석 다지기
script Validate가 안됩니다.
계속해서 똑같은 오류만 나오고있습니다. 오류를 몇시간씩 찾아봤고, 테스트의 버전을 변경하고, 다 지우고 다운로드를 다시받고,jdk버전을 홈 기준 11로도 맞춰보고 다 해봤지만 계속해서 같은 오류가 나는데 어떻게 해결할 수 있을까요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요 혹시 프론트 코드 제공받을 수 있을까요?
안녕하세요 강의 잘 보고있습니다.다름이 아니라 프론트쪽 코드가 궁금해서 리액트 코드좀 받고싶은데 받을 수 있을까요?메일:ad0362320@naver.com 입니다. 항상 감사드립니다!!
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
일정 삭제 시 예외 발생 질문과 이전 질문에 대한 추가질문드립니다.
// 컨트롤러 메서드 @DeleteMapping("/plan/{no}") public ResponseEntity<Map<String, Object>> removePlan(@PathVariable(value = "no") int no){ Map<String, Object> resultMap = plannerService.removePlan(no); return ResponseEntity.ok(resultMap); } // 서비스 메서드 @Transactional public Map<String, Object> removePlan(int no) { System.out.println("no :" + no); log.info("removePlan"); Map<String, Object> resultMap = new HashMap<>(); int result = plannerRepository.deleteByPlanNo(no); if(result > PLAN_DELETE_FAIL){ log.info("REMOVE PLAN SUCCESS"); }else{ log.info("REMOVE PLAN FAIL"); } resultMap.put("result", result); return resultMap; } // 레퍼지토리 메서드 int deleteByPlanNo(int planNo); // 삭제된 행의 개수 첫번째 질문위 코드처럼 작성을 하고 delete 버튼을 클릭하면2025-12-21 20:36:32 ERROR [[dispatcherServlet]] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class com.office.calendar.planner.jpa.PlannerEntity cannot be cast to class java.lang.Integer (com.office.calendar.planner.jpa.PlannerEntity is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @34790124; java.lang.Integer is in module java.base of loader 'bootstrap')] with root causejava.lang.ClassCastException: class com.office.calendar.planner.jpa.PlannerEntity cannot be cast to class java.lang.Integer (com.office.calendar.planner.jpa.PlannerEntity is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @34790124; java.lang.Integer is in module java.base of loader 'bootstrap') at jdk.proxy4/jdk.proxy4.$Proxy153.deleteByPlanNo(Unknown Source) ~[?:?] at com.office.calendar.planner.PlannerService.removePlan(PlannerService.java:124) ~[main/:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) ~[spring-tx-6.2.11.jar:6.2.11] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) ~[spring-aop-6.2.11.jar:6.2.11] at com.office.calendar.planner.PlannerService$$SpringCGLIB$$0.removePlan(<generated>) ~[main/:?] at com.office.calendar.planner.PlannerController.removePlan(PlannerController.java:123) ~[main/:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) ~[spring-web-6.2.11.jar:6.2.11] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) ~[spring-web-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:991) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:896) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:936) ~[spring-webmvc-6.2.11.jar:6.2.11] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:596) ~[tomcat-embed-core-10.1.46.jar:6.0] at...위 예외가 발생하면서 planner_fetch.js의 fetchRemovePlan 함수에서 catch 문에 걸리면서alert('일정 삭제 중 오류가 발생했습니다.'); 이 실행됩니다.서비스에서 deleteByPlanNo를 호출할 때 문제가 발생한 것 같은데찾아보니 레퍼지토리 메서드에 @Modifying을 붙여보라고 해서 해봤는데 해결은 안됐습니다.어떤 원인으로 위 같은 예외가 발생한거고, 어떻게 해결할 수 있는지 질문드립니다. 두번째 질문 이전 질문에서<script src="planner_fetch.js"></script><script src="planner.js"></script>위 코드는 브라우저에서 다음과 같이 처리됩니다.1. planner_fetch.js를 읽고 실행2. 그 다음 planner.js를 읽고 실행3. 이 두 파일은 각각 다른 파일이지만, 브라우저에서는 하나의 JavaScript 실행 공간에서 실행결과적으로 파일이 나뉘어 있어도 "같은 공간"에서 실행되기 때문에 서로의 전역 변수, 함수 등을 공유할 수 있습니다.하나 더 중요한 사실이 있는데요, 로딩 순서가 중요합니다.<script src="planner_fetch.js"></script><script src="planner.js"></script>위와 같은 순서라면, planner_fetch.js가 먼저 실행되고 planner.js에서 planner_fetch.js 안의 함수를 사용할 수 있습니다.하지만, 로딩 순서를 변경하면<script src="planner.js"></script><script src="planner_fetch.js"></script>다음과 같은 에러가 발생할 수 있습니다.fetchPlans(); // 에러 (아직 정의되지 않음)즉, 먼저 로드 된 파일의 함수만 사용할 수 있습니다.이렇게 답변을 주셨는데추가적으로 궁금한 점은planner.js가 나중에 로드 되어서 planner.js에 있는 함수나 변수를 planner_fetch.js에서 사용하면 정의 되지 않아서 사용을 못해야 할텐데 코드에서는 planner.js에 있는 showDetailPlanView 함수라든지 current_year같은 변수를 사용하고 있는데 에러가 발생하지 않습니다. 이 부분 질문드립니다.
-
해결됨멀티 모듈 아키텍처로 구현하는 은행 서버 핵심 기능 [ Kotlin & Spring ]
비동기 전송을 위한 Thread 관리 에서 Executor 설명 오류
안녕하세요! 유익한 강의 감사합니다.Executor 설명 중 한 가지를 정정드리고 싶습니다.강의에서 설명해주신 내용은 maxPoolSize까지 바로 스레드가 생성되는 것으로 이해될 수 있는데,실제 동작은 먼저 corePoolSize만큼 스레드를 생성하고,그 이후 요청은 큐에 쌓이며,큐가 가득 찼을 때 maxPoolSize까지 확장되는 구조입니다.물론 강의 흐름상 의도적으로 설명을 단순화하신 것일 수도 있습니다만,혼동될 수 있는 부분이라 참고용으로 댓글 남깁니다!
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
챕터: React-Router 설정
React-Router 설정 강의다름이 아니고요강의 내용을 보면생성위치가 PS: C\r2025\front\ch2 폴더 (당연히 ch2 겠지만요...^^)로 되어있는데요 ch1 프로젝트에서 계속 진행하면 안되나요?아니면 ch2 로 다시 만들어서 진행해야 할까요?그리고 ch2 만들때 특이 사항이 없는지..갑자기.. frontend/ch2 폴더에서 진행을 하셔서요... (ch2 프로젝트 하나 생성해서 따라하면 땡이지만...ㅋㅋㅋ) 살짝 궁금해서 질문 드립니다.
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
CouponService 의존성 의문
CouponService쪽에선 다른 Service와 다르게 Implement Layer를 의존안하고, DataAccess Layer의 Repository 계층에 의존하고 있던데, 왜 그런걸까요?
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
7.React UI구현하기 에서 css파일을 어디서 다운받나요?
강의를 수강하면서 실습하고 있는데요.7.React UI구현하기 강의 중 css파일을 복사해서 붙여넣기 하시는데 깃자료에서 css파일 다운로드 하는 위치를 못찾겠어요. 위치를 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
이번 강의에서 영한님이 기본적으로 트랜잭션을 시작할 때 커넥션을 가져온다고 말씀해 주셨습니다. 주문 api 관련 내용에서는 바로 리포지토리를 참조하여 @Transactional 없이 사용했는데요그럼 이런 경우는 커넥션을 어느 타이밍에 가져오나요?