학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] The dependencies of some of the beans in the application context form a cycle: memberController defined in file [C:\MyJava\study\hello-spring\out\production\classes\hello\hello_spring\controller\MemberController.class] ↓ memberService defined in class path resource [hello/hello_spring/service/SpringConfig.class] ┌─────┐ | timeTraceAop defined in class path resource [hello/hello_spring/service/SpringConfig.class] └─────┘ 이렇게 오류가 납니다 의존하는게 서로 겹친건지 수업과 똑같이 해도 오류나는 이유를 모르겠네요 https://drive.google.com/file/d/1UAbLzMZ1jvYSh7vWVDv0XIwgat0giIVu/view?usp=drive_link
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 이런 질문 해도 되는지 모르겠지만 강의에서 h2콘솔 접속하실때 초기에 보여지는 웹사이트 정보좀 알 수 있을까요? 개발관련 정보들이 많은것 같아서 알고싶습니다!
오늘 처음 강의를 듣기 시작했는데, 프로젝트 생성 편에서 open jdk 22.0.1 그래들 8.9를 사용하니 에러가 발생합니다. 정상적으로 작동하여 아래 처럼 실행이 되지만, 실행을 종료한 후에 이런 메세지가 나오는 것으로 보입니다. 해결 방법이 어떻게 될까요? +그래들로 실행하는 경우에만 발생하는 것 같습니다. 저장
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 테스트를 실행할 때마다 member 객체가 초기화되고, repository에 저장이 되는데, 그럼 db에 userName=memberA로 갖는 객체가 여러 개 저장되야 하는 거 아닌가요? 왜 테스트를 계속 실행해도 DB엔 userName=memberA인 객체 하나만 저장되어 있는 건가요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
위의 에러가 나옵니다 활성화도 제대로 된거 같은데 h2-console에 jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER를 입력하고 connect버튼을 누르면 에러가 나오고 url은 초기화 됩니다. local로 돌려도 화면상에 mysql연결이 된 거 같이 데이터는 그대로 입니다.
안녕하세요 의존성 역전에 대한 수업을 듣다가 갑자기 궁금한 사항이 생겼습니다. 인터페이스 소유권 역전에 대해서 말씀해 주셨는데요. 보통 프로젝트에 들어가 보면 아래와 같은 구조로 패키지를 구성하는데, 그럼 서비스 쪽에 인터페이스도 사용하는쪽인 controller에 위치해야 하는게 아닌가 싶어서요. 제가 이해한게 맞는지 궁금 합니다. // Before: 전통적인 계층형 구조 com.example.app ├── controller │ └── ExController.java ├── service │ ├── ExRateService.java (인터페이스) │ └── impl │ └── ExRateServiceImpl.java └── mapper └── ExMapper.java // After: DIP를 적용한 구조 com.example.app ├── controller │ ├── ExController.java │ └── ExRateService.java (인터페이스) ├── service │ └── ExRateServiceImpl.java └── mapper └── ExMapper.java
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 주문 생성 시에 매개변수로 OrderItem을 여러개 받을 수 있게 했었는데 그렇다면 주문 서비스도 ItemId를 여러 개 받게 해야 하지 않나요??
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 강의 듣다가 문득 든 의문인데 코드를 짜실 때 조건이 아닌 경우에 다른처리를 하는 것이 아니라 바로 예외를 날려서 처리를 하시는데 이유가 있을까요? 혼자 짤 때는 예외처리를 하지 않고 else로 조건 분기 시켜서 따로 따로 코드 진행시키는데 바로 예외날리시는 이유가 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Request parameter url 에 q = 이라는 쿼리를 통해 데이터 교환 GET 쿼리 파라미터방식이란게 get 방식 을 쓴다는게아니라 url 자체에서 입력된 데이터를 읽는 방식을 뜻한다고 이해하면될까요 ? 2 HTML FORM application/x-www-form-urlencoded 의 형식으로 메세지 바디에 포함되어서 요청되어서 데이터 교환 쿼리문을 저 형식으로 그냥 메세지 바디에 넣어서 요청한다고 생각하면 되나요 ? 3. HTTP api 방식 json 이나 xml 으로 데이터 교환 클라-> 서버 예를들어 postman 에서 json 파일을 보낸다 할때 json의 내용을 해석해서 데이터를 받는다 서버 -> 클라 일경우 서버에서 json 을 만들면 자바스크립트 코드나 vue 나 react 같은 프레임워크를 통해 html 로 랜더링됨 이렇게 이해하면 될까요 ? 혹시 잘못 이해한 부분이나 추가해야할 부분 알려주시면 감사하겠습니다
[질문 내용] 1. 포인트 컷이 같으면 타겟이 같으므로 하나의 프록시에 여러가지 어드바이저가 적용되지만 포인트 컷이 다르다면(execution이 다름) 각기 다른 프록시가 생성이 되는건가요? 2. 수업 내용 중 execution을 hello.proxy.aop 하위의 클래스들로 포인트 컷 설정해도 Service, Reposioty 마다 각기 다른 타켓으로 간주하고 세부 포인트컷이 다르고 같은 어드바이스를 가진 어드바이저가 생성되고 Service, Reposioty마다 각기 다른 프록시가 생성이 되는건가요?
안녕하세요 항상 양질의 강의 해주셔서 먼저 감사드립니다. 현재 코드 작성 중에 어떤게 더 나은 방법인지 궁금해서 문의드립니다. 카드 충전하는 서비스가 있다고 가정하면 컨트롤러를 통해 카드 충전 서비스를 호출할 예정입니다. class Controller { private final ChargeService chargeService; void charge() { chargeService.charge(); } } 위와 같이 충전 진행 시, 내부에서는 카드를 찾고 외부 API를 통해 충전을 진행 후 더티체킹을 통해 카드 상태를 업데이트 할 예정입니다. class ChargeService { private final CardFindService cardFindService; private final ChargeHistoryService chargeHistoryService; void charge() { var card = cardFindService.findCard(); cardApiService.charge(); // 외부 API 호출 chargeHistoryService.save(); // 충전 내역 저장 card.updateStatus(); // 카드 상태 변경 } } 여기서 궁금한게 충전을 진행하는 ChargeService 내에서 더티체킹을 통해 카드의 상태를 업데이트 하는게 좋을지, 아니면 컨트롤러단에서 ChargeService와 CardUpdateService를 각각 호출해주는게 좋을까요? class Controller { private final ChargeService chargeService; private final CardUpdateService cardUpdateService; void charge() { chargeService.charge(); cardUpdateService.updateCardStatus(); } } OSIV를 꺼둔 상태에서 진행 시 chargeService 내 하나의 트랜잭션 내에서 충전 내역과 카드 상태까지 업데이트를 하는게 편리해 보이긴 하지만, chargeService 내에서 카드의 상태를 업데이트하는 역할까지 주어지는 것 같아 고민이 됩니다. 만약 서비스 2개를 각각 호출하게 되면 cardFind도 각 서비스 내에서 1회 씩 총 2번 호출되는 점도 마음에 걸립니다. 이와 같은 상황에서는 어떤 방식이 실무에 더 적합하고 좋을지 의견 부탁드리겠습니다. 감사합니다.
RequestMatcher가 Request와 매칭되는지 확인 결과가 Y라면, entry를 호출해 authorizationManager를 통해 인가 체크. 결과가 N이라면, 다음 RequestMatcherEntry의 RequestMatcher를 살펴보는 거 아닌가요? 흐름도에는 N인데 바로 AccessDeniedException이 터진다고 되어있는데..
현재 MemberRepository test를 진행하고 있습니다. 데이터베이스 같은 경우는 mysql로 진행을 하고 있습니다. properties를 사용할 경우에는 테스트가 성공적으로 진행되는데 yml로 테스트를 진행할 경우 jdbc에서 dialect를 인식하지 못하거나 BeanCreationException 오류가 생깁니다. 분명 둘다 시스템 설정을 저장하는 파일인데 왜 이런 차이가 생기나 궁금해서 질문 남깁니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] logging.level.org.apache.coyote.http11=trace spring.servlet.multipart.enabled=false 이렇게 설정한 상태에서 서버를 띄운 후, http://localhost:8080/servlet/v1/upload에서 상품명엔 itemA, 파일엔 image.png를 선택해서 제출 버튼을 누르면 log.info("itemName = {}", itemName); log.info("parts = {}", parts); 이 로그의 결과는 강의에서와 똑같이 null, []입니다. 그런데 logging.level.org.apache.coyote.http11=trace이 코드로 인해 찍힌 로그에선 itemA와 image.png와 관련된 로그가 찍힙니다. 이 이유에 대해 강의 내용과 관련지어서 추측해 보았는데, 이 로그들은 아래 과정 중에서 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 요청이 처음으로 'WAS' 단계에 있을 땐 멀티파트 체크를 하기 전이기 때문에 itemA, image.png 관련 로그가 찍히는 것이고, 요청이 처음으로 '서블릿' 단계에 들어간 순간부터는, DispatcherServlet의 doDispatch() 코드에서 멀티파트 체크를 하는데, 만약 spring.servlet.multipart.enabled=false 코드가 있으면 RequestFacade 객체가 반환되면서 멀티파트 관련 처리를 하지 못하는 상태가 되는 거로 이해했습니다. 제 생각을 요약하면, 멀티파트 요청이 처음으로 'WAS' 단계와 '필터' 단계를 거칠 땐 itemA, image.png 관련 로그를 찍을 수 있고, 멀티파트 요청이 처음으로 '서블릿' 단계에 들어가 DispatcherServlet에서 멀티파트 체크를 한 이후부터는 멀티파트 관련 처리가 불가능해진다고 생각했습니다. 즉, spring.servlet.multipart.enabled=false 코드를 썼더라도, 필터 단계에서라면 itemA, image.png 관련 처리를 할 수 있을 줄 알았습니다. 이 부분을 직접 테스트하기 위해 다음 코드들을 새로 작성했습니다. upload 패키지 하위에 filter 패키지를 만들고, LogFilter를 만들었습니다. String itemName = httpRequest.getParameter("itemName"); log.info("Filter itemName = {}", itemName); 이 코드를 통해 itemA 관련 내용을 볼 수 있을 거라고 예상했습니다. 그리고 upload 패키지 하위에 WebConfig 파일을 만들어서 필터를 등록했습니다. 이 상태에서 서버를 띄운 후, itemA와 image.png로 제출했더니 ..~~~~LogFilter : Filter itemName = null 저는 itemA이 나올 거라 예상했었는데 null이 나옵니다. 생각해 보니 LogFilter의 다음 코드에서 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletRequest로 할 게 아니라, StandardMultipartHttpServletRequest httpRequest = (StandardMultipartHttpServletRequest) request; 이렇게 바꾸면 되지 않을까 싶어서 다시 실행해 봤습니다. 그런데 이번엔 localhost:8080에 들어가기만 해도 500 에러가 뜹니다. 에러가 뜨는 이유가 궁금합니다. 제가 생각했던 대로라면 spring.servlet.multipart.enabled=false 이 코드가 있다고 하더라도, WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 여기서 WAS, 필터까지는 itemA를 출력할 수 있을 줄 알았는데, 제 생각이 틀렸을까요? 아니면 spring.servlet.multipart.enabled=false 이 코드가 있으면, 개발자는 어느 단계에서든 itemA 같은 멀티파트 데이터를 다룰 수 없는 건가요? 아니면 제가 테스트했던 코드 자체에서 문제가 있던 건지... 궁금합니다.