묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
logback mdc 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 마지막에 Logback MDC에 관한 내용이 나와서 적용을 해보았는데요. 설정 방법이 다양하고, 확인이 필요하여 여쭤봅니다. MDC구글링해보니 어플리케이션 요청에서 처음 만나는 filter에 설정해주는 것이 좋다하여 LogFilter doFilter 메소드 try-catch문에 아래와 같이 적용해주었구요.@Override public void doFilter(중략) { ..중략 try { log.info("REQUEST [{}][{}]", uuid, requestURI); MDC.put("requestId", uuid); //추가 chain.doFilter(request, response); MDC.clear();//추가 } catch (Exception e) { throw e; } finally { log.info("RESPONSE [{}][{}]", uuid, requestURI); } } log pattern 설정로그 패턴 설정이 logback-spring.xml, base.xml, properties 등 가이드가 여럿 있었지만,resources 밑에 logback-spring.xml 생성했습니다.<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%d{yyyy.MM.dd HH:mm:ss.SSS}] - [%-5level] - [%X{requestId}] - [%logger{5}] - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="consoleAppender"/> </root> </configuration> items/add 호출하여 error log 출력localhost:8080/items/add 호출하여 공백으로 save 시 로그 패턴 설정해준 위치에 uuid 찍히는 것 확인됐습니다. [2023.12.17 00:51:15.335] - [INFO ] - [] - [h.l.w.f.LogFilter] - REQUEST [b67de768-0ef9-49cb-a4f6-65d9d5983b6f][/items/add] [2023.12.17 00:51:15.434] - [INFO ] - [b67de768-0ef9-49cb-a4f6-65d9d5983b6f] - [h.l.w.i.ItemController] - errors=org.springframework.validation.BeanPropertyBindingResult: 3 errors Field error in object 'item' on field 'price': rejected value [null]; codes [NotNull.item.price,NotNull.price,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.price,price]; arguments []; default message [price]]; default message [must not be null] Field error in object 'item' on field 'itemName': rejected value []; codes [NotBlank.item.itemName,NotBlank.itemName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.itemName,itemName]; arguments []; default message [itemName]]; default message [must not be blank] Field error in object 'item' on field 'quantity': rejected value [null]; codes [NotNull.item.quantity,NotNull.quantity,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [must not be null] [2023.12.17 00:51:15.441] - [INFO ] - [] - [h.l.w.f.LogFilter] - RESPONSE [b67de768-0ef9-49cb-a4f6-65d9d5983b6f][/items/add] 질문위와 같은 설정 중 보완할 부분이 있을까요.?logback-spring.xml, base.xml, application.properties 중 어떤 방식을 주로 실무에서 많이 사용하나요? 환경에 따라 다를까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jakarta.persistence가 import 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제목 그대로 import가 되지 않습니다. import문을 지우고 나서 자동 임포트를 하려고 @Entity를 직접 타이핑 하여 해봐도 cannot resolve symbol이라는 메시지만 나오는데 어떡해야 할까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Request의 getLocale()
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Request 객체의 getLocale()은 Accept-Language에서의 가장 높은 우선순위를 뽑는다고 이해했습니다. getLocale()의 정확한 의미가 궁금합니다.클라이언트가 보낸 요청 메시지의 Accept-Language에 써진 언어인 동시에, 서버에서 지원하는 언어들 중 가장 우선순위 높은 걸 뽑는 건가요?아니면 서버에서 지원을 하는 언어든 아니든, 요청 메시지의 Accept-Language에서 가장 우선순위가 높게 설정된 것을 선택하는 건가요? +) getLocale() 같은 건 스프링 공식 문서 가면 자세한 설명을 볼 수 있을까요? 자바 공식 문서랑 다르게 메서드 설명 찾기가 어렵네요..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Thymeleaf 기본 객체들 강의 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]기본 객체들 중 request response session servletContent는 더이상 사용이 안된다고 에러 메시지가 나오던데요 확인 가능할까요? The 'request','session','servletContext' and 'response' expression utility objects are no longer available by default for template expressions and their use is not recommended. In cases where they are really needed, they should be manually added as context variables. at org.thymeleaf.standard.expression.StandardExpressionObjectFactory.buildObject(StandardExpressionObjectFactory.java:207) ~[thymeleaf-3.1.2.RELEASE.jar:3.1.2.RELEASE] 공식 문서를 보니깐 ctx.session 이런식으로 붙이라고 나와서 붙이니깐 에러는 안뜨는데 request response servletContent는 내용이 안뜨네요 세션은 뜨는데 좀 다르게 뜨고
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
런 버튼 비활성화
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]jdk 17, 스프링부터 3.2 모두 강의자료에 나온대로 설치 후 진행하는데, 동작확인 부분에서 실행(run)버튼이 안나옵니다.삭제 후 재설치 해도 안되는데뭐가 문제일까요? 무료버전입니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DTO를 작성할 때 lombok 어노테이션 대신 record를 사용해도 되나요?
이번에 자바를 공부하면서 record에 대해서 알게 되었는데요DTO를 작성할 때 사용할 목적으로 만들어졌다고 하더라구요그렇다면 lombok 어노테이션 대신 record를 사용해도 되는건가요?spring에서 사용해도 괜찮은지 모르겠어서 질문드려요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 무료 버전에서의 무한 로딩은 정상인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다른 분들 질문을 보니 인텔리제이 무료 버전에선 서버를 종료하면 에러 뜨는 게 정상이라고 하더라고요.서버를 실행하는 동안 무한 로딩 현상이 뜨는 것도 무료 버전에선 당연히 있는 현상이라고 이해하면 될까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
폼 데이터 포맷터가 안되요
여기서 폼 제출하면 문자열"10,000"을 Integer로 변환할 수 없다고 나와요
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
ConnectException이 잡히지 않는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]checked() 테스트에서 아래와 같이 isInstanceOf(SQLException.class)를 ConnectException.class로 변경하면 왜 테스트가 통과되지 않는지 궁금합니다 ! @Test void checked() { Controller controller = new Controller(); Assertions.assertThatThrownBy(() -> controller.logic()) .isInstanceOf(ConnectException.class); }public void logic() throws SQLException, ConnectException { service.logic(); } service.logic()에서 두 예외가 다 밖으로 던져졌으니 테스트에서도 ConnectException가 발생하는게 아닌가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
JPAQueryFactory 스프링 빈으로 등록하고 사용 시 질문
[질문 내용]JPA와 SPRING DATA JPA 모두 동적 쿼리 작성에 문제에 어려움이 있었고 이를 위해 querydsl을 적용하는것이기에 무의식적으로 JpaItemRepositoryV2를 복사해서 동적 쿼리 작성하는 부분만 변경하려했습니다. 테스트는 잘통과합니다만 위와 같이 JPAQueryFactory를 빈으로 등록하고 사용하는 것이 맞는걸까요? 아직 빈 등록 및 의존관계 주입하는 게 익숙치 않아서 스스로 확신이 안듭니다. 위 코드에서 빈으로 등록하고 주입되는 과정은 나름 알고있으나 좀 더 구조적?으로 개선될 방향이 있는지 궁금합니다.(문법적으론 문제가 없으나 이렇게 하면 더 좋다) 감사합니다
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
urlPatterns의 에러에 대한 질문
강의를 듣다가 갑자기 에러가 발생하여 유심히 봤다가 urlPatterns의 매핑이 잘못 되었다는 오류가 발생했습니다. 오류는 해결하였지만, 갑자기 드는 생각이 urlPatterns의 / 의 유무인데, URL 매핑도 서블릿이 알아서 해결해주는 것 같은데, 정확하게 어떻게 스스로 URL 매핑을 하는지 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DB
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전 강의인 Jdbc강의는 따라하지 않아도 된다고 하셔서 h2 데이터베이스 관련 라이브러리 추가와 연결 설정 추가만 따라하고 이 강의로 넘어왔습니다. 이번 강의 전까지는 문제없이 실습을 따라했는데 이번 강의부터 따라하던 중 막힌 부분이 생겨서 질문 남깁니다!5:53 쯤에 회원가입만 테스트 돌렸을 때 h2 데이터베이스에 남아있어야하는데 저는 아무것도 남아있지 않습니다. Jdbc를 따라하고 넘어왔어야하는걸까요?ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost 8080 Whitelable Error Page 에러발셍
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. View 환경설정 강의 따라하고 있는데 localhost:8080은 잘 동작 하지만 localhost:8080/hello 는 오류 발생하네요.동일 오류 발생한 사람들의 사례를 찾아봤지만,도저히 해결방법을 모르겠어서 올립니다ㅜㅜ
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
테스트 recoverException_fail메서드 UnexpectedRollbackException
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.테스트케이스 recoverException_fail 를 실행했을때 테스트가 실패하여 질문 남깁니다. 해당 테스트 케이스를 실행하면 실패 로그가 나오고java.lang.Exception: exception just for purpose of providing stack trace at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:310) ~[hibernate-core-6.3.1.Final.jar:6.3.1.Final] java.lang.AssertionError: Expecting actual throwable to be an instance of: org.springframework.transaction.UnexpectedRollbackExceptionbut was: java.lang.RuntimeException at hello.springtx.propagation.LogRepository.save(LogRepository.java:26) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ...(108 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed) at hello.springtx.propagation.MemberServiceTest.recoverException_fail(MemberServiceTest.java:135) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) UnexpectedRollbackException 을 기대하지만 RuntimeException가 나온다고 메세지가 나오는데 설명 해주신 대로면 UnexpectedRollbackException 예외가 나오는게 맞는거 아닌가요..?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
GET 요청에서 동일한 파라미터 이름에 여러 값을 전달하는 올바른 방법은 무엇인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, "HTTP 요청 데이터 - GET 쿼리 파라미터" 강의를 듣다가 GET 요청에서 동일한 파라미터 이름에 여러 값을 전달하는 방법에 대해 궁금증이 생겨 질문을 올립니다. 특히, 실무에서 흔히 사용되는 방법과 그 이유에 대해 알고 싶습니다.예를 들어, 같은 파라미터에 다수의 값을 전달하는 방식으로 다음 두 가지 예시를 봤습니다:http://server/action?id=a&id=bhttp://server/action?id=a,b이 스택오버플로우 포스트에 따르면 이와 관련된 표준이 명확히 정의되어 있지 않다고 언급되어 있습니다. 이에 실무에서는 어떤 방식을 주로 사용하는지, 그리고 그러한 선택의 이유가 무엇인지 궁금합니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Item 클래스에서 사용되는 멤버변수에 대해서 질문이 있습니다.
멤버변수를 생성할 때, 기본 타입이 아닌 래퍼 클래스로 사용하는 이유가 있을까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HTTP 프로토콜 질문
정적, 동적 리소스, HTTP API 3가지 방식 모두 HTTP 프로토콜 기반의 통신을 하나요? 아니면 HTTP API 방식만 HTTP 프로토콜로 통신을 하는건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
WAS의 스레드풀은 초기 스레드 수가 0이 아닌 다른 숫자인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스레드풀의 장점에 써진 다음 내용에 대해 추가적으로 궁금한 점이 있습니다. '쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 비용(CPU)이 절약되고, 응답 시간이 빠르다.' WAS에서의 스레드풀은 HTTP 요청이 오기도 전에, 미리 스레드들을 최대치만큼 만들어 두나요? 자바 문법에선 Executors.newCachedThreadPool()Executors.newFixedThreadPool(int n)두 메서드 모두 초기 스레드 수는 0으로 알고 있습니다. 작업이 생길 때마다 스레드를 생성시키는 거로 알고 있는데, WAS에서의 스레드풀은 요청이 오기도 전부터 스레드를 미리 만들어 두나요? 즉, 초기 스레드 수가 0이 아닌 다른 숫자인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청마다 스레드 생성할 시, 같은 프로세스 내의 스레드인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]요청마다 스레드를 생성하는 이 그림에선 2개의 스레드가 서로 다른 요청1, 2를 처리하고 있잖아요? 근데 이 두 스레드는 하나의 프로세스 내에 있는 건가요? 아니면 서로 다른 프로세스에 있는 스레드들인가요?만약 하나의 프로세스 내에 2개의 스레드가 있는 경우라면, 스레드1에서 오류가 나면 스레드2도 영향을 받는다고 운영체제 공부하면서 배운 것 같은데 그럼 위 그림은 서로 다른 프로세스에서 생성된 스레드라고 생각하면 될까요? 그런데 스레드가 생성될 때마다 프로세스가 생성된다면 프로세스가 수십 수백 개가 될 수도 있다는 말인데 이건 말이 안 되는 것 같기도 해서.. 헷갈리네요. (학습 자료에 나온 요청마다 스레드 생성의 장점으로 '하나의 쓰레드가 지연되어도, 나머지 쓰레드는 정상 동작한다.'라는 말이 있어서 갑자기 궁금해졌네요. 물론 지연이랑 오류랑 다른 거긴 하지만요)
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
강의내용대로 실행중인데 boardForm.do가 안나옵니다.
어디가 잘못된건지 못 찾겠습니다. 일단 boardList.jsp 에 boardForm.do를 작성했는데 저는 계속해서 404에러와 아래 문구가 콘솔창에 찍힙니다. 도와주세요. 제 눈에는 잘못된 부분이 보이지 않습니다.... 현재 화면을 캡처해서 올립니다.servlet-context.xmlBoardControllerboardList.jspboardForm.jsproot-context.xml결과창 : boardList는 잘 나옵니다.