묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 기본 - UnexpectRollbackException 관련 질문
만약에 @Transactional 어노테이션을 사용해서 트랜잭션을 만들었을때내부 트랜잭션에서 롤백이 발생했다는건 일반적인 상황에서는 database에서 뭔가 예외가 발생해서 그런거라고 생각되는데,그러면 예외처리기에서 알아서 runtimeException을 상속받은 예외로 바뀔것이고외부 트랜잭션에서도 롤백이 발생한다는건이 경우는 database에서 발생했던 예외가 외부 트랜잭션까지 넘어와서 자연스럽게 롤백된거라고 생각합니다.그래서 UnexpectRollbackException이 발생하지 않는다고 생각됩니다. 제 생각이 맞나요?그러면 UnexpectRollbackException 이 발생할 수 있는 경우는 뭐가 있나요? 강의에서 처럼 의도적으로 문제를 일으키는게 아니면 생각나는 경우가 딱히 없습니다.하지만 제가 생각하지 못하는 것이지 예외가 발생한다는 경우가 있긴 있다는것이겠죠? 그렇다면 트랜잭션을 이용하는 순간부터는 그냥@ControllerAdvice 에서@ExceptionHandler로 UnexpectRollbackException을 캐치해줘서 처리하는 코드를 거의 무조건 작성해야할까요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로젝트 파일 오타 발견
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]basic/operation.html에서<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li>산술 연산 <ul> <li>10 + 2 = <span th:text="10 + 2"></span></li> <li>10 % 2 == 0 = <span th:text="10 % 2 == 0"></span></li> </ul> </li> <li>비교 연산 <ul> <li>1 > 10 = <span th:text="1 > 10"></span></li> <li>1 gt 10 = <span th:text="1 gt 10"></span></li> <li>1 >= 10 = <span th:text="1 >= 10"></span></li> <li>1 ge 10 = <span th:text="1 ge 10"></span></li> <li>1 == 1 = <span th:text="1 == 10"></span></li> <li>1 != 1 = <span th:text="1 != 10"></span></li> </ul> </li> <li>조건식 <ul> <li>(10 % 2 == 0)? '짝수':'홀수' = <span th:text="(10 % 2 == 0)? '짝수':'홀수'"></span></li> </ul> </li> <li>Elvis 연산자 <ul> <li>${data}?: '데이터가 없습니다.' = <span th:text="${data}?: '데이터가 없습니다.'"></span></li> <li>${nullData}?: '데이터가 없습니다.' = <span th:text="${nullData}?: '데이터가 없습니다.'"></span></li> </ul> </li> <li>No-Operation <ul> <li>${data}?: _ = <span th:text="${data}?: _">데이터가 없습니다.</span></li> <li>${nullData}?: _ = <span th:text="${nullData}?: _">데이터가 없습니다.</span></li> </ul> </li> </ul> </body> </html> <li>1 == 1 = <span th:text="1 == 10"></span></li> <li>1 != 1 = <span th:text="1 != 10"></span></li>이 부분이 잘못 나와있습니다.<li>1 == 10 = <span th:text="1 == 10"></span></li><li>1 != 10 = <span th:text="1 != 10"></span></li>1을 10으로 변경을 해야 합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
RedirectAttributes
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]addItemV6 메서드에서 RedirectAttributes를 사용해서 status를 true로 만들고 등록 폼에서 저장하면 상세 화면에 "저장 완료!" 문구가 화면에 나오는 것처럼수정 폼에서 수정을 하면 "수정 완료!" 문구가 화면에 나오게 하고 싶은데 status를 조건으로 하면 조건의 허용 갯수가 true로 한정적이라 만들 수 없었습니다.이런 경우 조건을 어떻게 설정해서 이 조건일 때는 저장 완료 문구 이 조건일 때는 수정 완료 문구로 html에 적용시킬 수 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
올려주신 코드 오류가 있습니다(RequestHeaderController)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. RequestHeaderController 클래스에 headers메소드의 파라미터가 아래와같이 HttpServletRequest, HttpServletResponse,... 을 받아야하나 request, response를 모두 HttpServletRequest로 받고 있습니다.정상 코드HttpServletRequest request, HttpServletResponse response 예제 파일 코드HttpServletRequest request, HttpServletRequest response
-
미해결스프링 부트 - 핵심 원리와 활용
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 스프링부트 톰캣 내부에 서블릿 컨테이너도 있고 스프링 컨테이너도 같이 존재하는 건가요?그래서,API 호출이 오면 서블릿 컨테이너 내부의 DispatcherServlet이 스프링 컨테이너로 연결시켜서 컨트롤러 빈으로 매핑하도록 한다고 보면 될까요?
-
미해결스프링 부트 - 핵심 원리와 활용
Thread Config Max 패널 설정 변경 질문
tomcat_threads_config_max_threads로 설정을 했는데 왜 200이 안뜨고 계속 N/A 로 되어있는지 의문입니다. 서버, 프로메테우스도 다 켜져있는데 뭐가 문제일까요?
-
미해결스프링 부트 - 핵심 원리와 활용
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
yml 파일에서 이렇게 shutdown 기능을 활성화 시켰는데Deprecated configuration property 'management.endpoint.shutdown.enabled'이렇게 나오는데 'Deprecated' 된 건지 아니면 제가 잘못 설정을 한 건지 궁금합니다. 기능은 정상적으로 작동하는데 저 경고는 무시해도 되는 건가요?management: endpoint: shutdown: enabled : true
-
미해결어쩌다보니 스프링부트
혹시 강의 기간은 무제한으로 해주실수 있나요?
가끔 기본이 기억안날때 보러오고 싶은 강의인데 기간이 제한되어있어서 아쉬운거 같아요. 기간을 무제한으로 그게 무리라면 기간을 좀 길게 만들어 주실수 있을까여?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링 sql오류
insert부분이랑 select부분에 저렇게 네모로 표시가 되고 오류가 떠서 웹에 사용자를 등록하면 서버 오류라고 뜨네용 ㅠㅠ
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
Webflux의 Non-Blocking 특성에 대해 문의 드립니다.
WebFlux의 Non-Blocking의 장점이"여러 작업에 대해서 단일 스레드로 이벤트 루프 방식으로 Blocking 없이 여러 작업을 번갈아 가며 처리 가능하다"라고 이해를 했습니다. 강의의 예제도 보았고 또 여러 예제를 만들어 돌려 보아도,단일 스레드로 여러 subscribe() 요청을 번갈아가면서 처리하는 것을 확인하지를 못하였습니다. 물론 publishOn이나 subscribeOn, parallel을 이용 혹은flatMap과 delayElements를 사용하여 별도의 스레드를 띄워 구현한다면여러 스레드가 병렬로 동시에 여러 요청의 작업을 처리 할 수 있다는 것은 알고 있습니다.하지만 이 방법은 결국 다수 스레드를 생성하여 각각의 스레드가 각각의 작업을 처리 하는 구조가 되어Tomcat기반의 동기 MVC 방식에서의 Blocking 멀티스레드와 별반 차이를 체감하지 못하였습니다. 예를 들어 reactor.netty.ioWorkerCount=1 로 설정하고Rest API "/api/stream" 를 만들어 클라이언트 A가 GET 호출로 구독 시클라이언트 B는 A가 연결을 끝날때 까지 대기하였습니다. (Blocking MVC와 동일 동작)(기대한 것은 단일 스레드로 클라이언트 A와 B의 요청을 번갈아가며 처리) 또다른 테스트로main메소드에서 퍼블리셔에 대해 2개의 subscriber가 거의 동시 구독하였을 경우먼저 시작한 subscriber의 처리가 다 끝나고 그다음 subscriber가 처리 진행하였습니다.(물론 스케줄러나 delayElements, webclient 등 내부적으로 별도 스레드를 띄우면 병렬 처리 됨)[제가 테스트한 결과 1 - 단일 스레드 순차 수행][main] WebFluxExample - main - A1 시작[main] WebFluxExample - main - A2 완료[main] WebFluxExample - main - A3 완료[main] WebFluxExample - main - A 체인 최종 결과: A1 -> A2 -> A3[main] WebFluxExample - main - B1 시작[main] WebFluxExample - main - B2 완료[main] WebFluxExample - main - B3 완료[main] WebFluxExample - main - B 체인 최종 결과: B1 -> B2 -> B3[제가 테스트한 결과 2 - 멀티 스레드 병렬 수행][main] DEBUG reactor.util.Loggers - Using Slf4j logging framework[boundedElastic-1] WebFluxExample - boundedElastic-1 - A1 시작[boundedElastic-2] WebFluxExample - boundedElastic-2 - B1 시작[boundedElastic-1] WebFluxExample - boundedElastic-1 - A2 완료[boundedElastic-2] WebFluxExample - boundedElastic-2 - B2 완료[boundedElastic-1] WebFluxExample - boundedElastic-1 - A3 완료[boundedElastic-2] WebFluxExample - boundedElastic-2 - B3 완료[boundedElastic-1] WebFluxExample - boundedElastic-1 - A 체인 최종 결과: A1 -> A2 -> A3[boundedElastic-2] WebFluxExample - boundedElastic-2 - B 체인 최종 결과: B1 -> B2 -> B3 [원하는 결과 - 단일 스레드 병렬 수행][동일스레드] WebFluxExample - 동일스레드- A1 시작[동일스레드] WebFluxExample - 동일스레드- B1 시작[동일스레드] WebFluxExample - 동일스레드- A2 완료[동일스레드] WebFluxExample - 동일스레드- B2 완료[동일스레드] WebFluxExample - 동일스레드- A3 완료[동일스레드] WebFluxExample - 동일스레드- B3 완료[동일스레드] WebFluxExample - 동일스레드- A 체인 최종 결과: A1 -> A2 -> A3[동일스레드] WebFluxExample - 동일스레드- B 체인 최종 결과: B1 -> B2 -> B3하여 진정한 Webflux의 Non Blocking, 즉 단일 스레드로 (동시 병렬이 아닌) 여러 작업을 번갈아가며 처리하는 것이 가능하다면 처리하는 예제와 결과를 보여주시면 감사하겠습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
강의 2:29 ItemMapper itemMapper
강의 2분 29초 부분public class MyBatisConfig {private final ItemMapper itemMapper;,,,} 강의에서는 에러가 생기지 않지만, 이 부분에서 itemMapper에 컴파일 에러가 뜹니다.(Could not autowire. No beans of 'ItemMapper' type found.) ItemMapper가 스프링 컨테이너에 스프링 빈으로 등록되지 않아서 생기는 에러가 맞나요?등록되어있지 않기 때문에 ItemMapper를 주입할 수 없어 컴파일 오류가 나는건지 궁금합니다. 그럼에도 불구하고 메모리db로 하는 테스트와, 서버를 띄워서 하는 테스트 모두 성공하는 이유가 궁금합니다. MyBatisConfig클래스 위에 @MapperScan(basePackages = "hello.itemservice.repository.mybatis")를 하니 컴파일 에러가 사라지긴 합니다. @MapperScan을 통해 ItemMapper를 Bean으로 수동으로 등록하니 컴파일 오류가 생기지 않는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
7강 관련 질문
7강에서 유저 생성 APi를 만들때 user클래스를 따로 또 만드는데 전에 덧셈이나 곱셈 api에서는 객체를 dto에서 바로 만들어서 가져왔는데 여기서는 domain-user처럼 따로 또 클래스를 만들어서 객체를 호출하는 이유가 있을까요?
-
미해결스프링 핵심 원리 - 기본편
초기화 콜백과 생성자 DI
[질문 템플릿]1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 빈 생명주기 콜백에서 질문이 생겨 여쭤봅니다.이전 강의에서는 '생성자 주입'을 사용하는 것이 좋다고 하셨는데, 이번 NetworkClient 클래스에서는 setter로 DI를 하시면서 스프링 빈의 이벤트 라이프사이클을 설명해주고 계십니다.그러면, 생성자 주입으로 의존관계를 주입할 경우 이번 강의 주제인 '초기화 콜백'은 동작하지 않는 것일까요 ?설명해주신 스프링 빈의 이벤트 라이프사이클이 생성자DI 기준에서는컨테이너 생성 -> 빈 생성,의존관계 주입 -> 사용 -> 종료가 되는 것일까요 ? 혹여나 제가 잘못 이해하고 있는 부분이 있다면 지적 부탁드립니다, 좋은 강의 제공해주셔서 항상 감사드립니다 !!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
중복_회원_예외 에서 예외가 안터지는 문제 + 터미널에서 해보세요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]선생님 질문이 있는데요중복 회원 예외에서예외가 안터지고 그냥 테스트를 성공해버립니다 뭐가 문제일까요? 아래 구글 드라이브 링크 걸어뒀습니다.@Test public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.join(member1); memberService.join(member2); //then fail("예외가 발생해야 한다."); }예외가 발생하지 않습니다. 코드 압축해서 드라이브에 올렸습니다. https://inf.run/CFDK6
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
화면 한글깨짐 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.인텔리 제이에서 한글 깨짐 문제 정상적으로 한글 값이 저장되는거 같습니다. 하지만 화면에 표시할 때 오류가 발생합니다. 인텔리 제이 인코딩 설정 은 다음과 같습니다
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
Rest API - 많이하는 실수 에서 복수형
회사 컨벤션마다 다르긴한데 생각보다 단수로도 많이 사용하지 않나요? 단일 데이터를 생성하는것과 여러 데이터를 생성하는 것을 구분하는 경우도 많은 것으로 알고있습니다. 실제로 naver, kakao의 많은 부서에서도 이런 컨벤션을 지키는것으로 아는데 반드시 복수형으로 쓰면 안되는것일까요? 참고 공식자료가 있을까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
강의 버전 정보
프로그램 버전 정보가 없는데 어디서 찾아요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
프로젝트 실행 에러
안녕하세요?강의는 이미 구입하였으나 그동안 다른일로 바빠서 수강을 미루다가 이제서야 들을려고 하는데 공유해주신 샘플 프로젝트를 다운받아서 실행할려고 하니 다음과 같은 에러가 발생해서 문의드립니다.Execution failed for task ':com.group.libraryapp.LibraryAppApplication.main()'.> Process 'command 'C:/Program Files/Amazon Corretto/jdk17.0.14_7/bin/java.exe'' finished with non-zero exit value 1다른 버전의 JDK나 아마존에서 배포하는 JDK를 다운받아서 실행해보아도 동일한 에러가 계속 반복되어서 문의드립니다. 참고로 사용중인 IDE는 IntelliJ IDEA 2024.3입니다. 감사합니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
stubbing을 해줘야 하는 이유
안녕하세요https://inf.run/QwLTR위의 링크와 연계되는 질문입니다. 복습을 하다 보니 언제 when()으로 stubbing 을 해 줘야할까에 대해 헷갈려져서, 저의 사고 흐름을 정리해봤습니다컨트롤러에서는 서비스 단 하위로는 모킹을 한다.모킹하는 객체들은 테스트에서 주 관심사가 아니며, 항상 잘 동작한다고 가정한다.모킹해오는 객체들은 stubbing을 해주지 않는다면 기본 값들을 반환하는 정책을 따른다.위 질문 링크의 "판매 상품을 조회한다." 테스트에서는 모킹 객체인 productService의 메소드가 어떤 리턴값을 반환하든 presentation 레이어에서 검증하고 싶은 내용이 아니기 때문에, 검증을 수행하지 않았고, productService.getSellingProducts()에 대한 stubbing도 굳이 필요 없다."메일 전송 테스트" 에서 mailSendClient.sendEmail()에 대한 stubbing이 필요한 이유모킹 객체인 mailSendClient.sendMail()이 기본 값 반환 정책이 false이어서, 테스트 하고자 하는 mailService.sendMail()에 영향을 미치기 때문이다. (여기서 기본 값 반환 정책이 true였다면 굳이 stubbing 해주지 않아도 된다 -> "메일 전송 테스트"에서 검증하고자 하는 대상이 아니기 때문에)이런식으로 테스트에 검증하고자 하는 대상에 집중하다 보면 모든 동작을 제대로 stubbing했다고 보장하기 어려워 진다 -> Mockist의 치명적인 단점 제가 정리해 본 내용이 적절한지 알려주시면 감사합니다.테스트의 세계는 정말 헷갈리네요..
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트코드 범위
안녕하세요 선생님 질문이 생겨서 글 남깁니다.! 선생님이 생각하시는 가장 이상적인 테스트 코드 범위는 어디 까지인가요??예를들어 controller,service,repository가 있다고 가정하고 선생님 강의처럼 각각 레이어별로 테코를 짜고 service 쪽도 repo를 mock처리하여 단위테스트까지도 진행 하여야하나요?제 질문을 정리하자면 controller,service,repository 각각 단위테스트 작성후 service + repo로 통합테스트 하는게 옳은 이상적인 범위인가 궁금합니다감사합니다