MemberRepositoryV0에서 직접 만든 DBConnectionUtil을 getConnection을 통해 Connection정보를 가져오는 것인데, 이를 V1에서는 직접 만든 DBConnectionUtil을 dataSource로 변경하고 실제 테스트에서 BeforeEach를 통해 Connection 정보를 주입하는 것인가요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] WARNING: A Java agent has been loaded dynamically (C:\Users\jkjin\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.10\90ed94ac044ea8953b224304c762316e91fd6b31\byte-buddy-agent-1.14.10.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 아래와 같이 오류가 발생합니다. 테스트는 잘 실행되지만, 영상에서처럼 Hibernate: 쿼리문~ 이 부분이 보이지 않네요.. 설정이 다르다는것처럼 보이는데 뭐가 문제일까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] [선생님 테스트 로직] @Test void save() { Member member = new Member("hello", 20); Member savedMember = memberRepository.save(member); Member findMember = memberRepository.findById(savedMember.getId()); assertThat(findMember).isEqualTo(savedMember); } 다음의 코드와 같이 선생님께서는 save() 테스트를 할 때 findById() 로직도 사용하시는 것을 확인할 수 있었습니다. 하지만 findById() 로직은 아직 테스트를 거쳐서 검증받지 못한 로직이므로 findById()를 쓰는 것이 아닌 순수 save()만 가지고 테스트를 해야하지 않을까 하는 궁금증이 생겼습니다! [제 테스트 로직] @Test void save() { Member member = new Member("hello", 20); Member savedMember = memberRepository.save(member); assertThat(member).isEqualTo(savedMember); } 그래서 이런 식으로 테스트 하는 것이 어떠한지 선생님께 질문 드리고 싶습니다! 들여쓰기가 안 되어서 올라갔네요 ㅠㅠ..!! 수정해서 다시 올렸습니다 !
안녕하세요! 스프링 MVC와 관련하여 궁금한 점이 있습니다. 스스로 만든 프레임워크에서는 다양한 형태의 헨들러를 다루기 위해 핸들러 어댑터 목록과 핸들러 매핑을 도입한 것으로 이해하고 있습니다. 스프링 MVC의 경우 99.9% RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter를 쓴다고 강의자료에 나와 있는데요, 그렇다면 사실상 핸들러(컨트롤러)도 하나의 통일 된 형태를 가지고 있는건가요? 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 11:54초에 보면 HandlerAdapter에 의해서 handle 메소드가 실행되고, 우리가 앞서 정의했던 핸들러가 호출이되는데 여기서 핸들러 어댑터 안에 있는 ((HttpRequestHandler) handler).handleRequest(request,response); 이 부분은 우리가 메소드를 스프링 빈에 등록해서 생성된 것인가요? 아니면 우리가 메소드 이름을 일부러 맞춰준건가요?
안녕하세요, 스프링 부트일 경우, BasicErrorController 가 자동적으로 등록되어 사용된다고 하셨는데, 부트가 아닌 일반 스프링 프레임워크일 경우, BasicErrorController 와 비슷한 역할을 해주는 Controller 가 자동적으로 등록되지는 않는 것인지요? 부트가 아닌 스프링 프레임워크에서는 개발자가 예외나 response.sendError(); 에 대해서 아무런 대비/대처 설정 (예와나 sendError 를 처리해주는 코드를 작성하지 않았을 경우) 을 해주지 않았을 경우에는 어떤 default 설정을 따라가는지 궁금합니다. 스프링 부트일 경우, WebServerFactoryCustomizer<ConfigurableWebServerFactory> 를 구현한 클래스를 작성해서 ErrorPage를 지정해주고 있는데, 부트가 아닌 스프링 프레임워크에서는 어떻게 WebServerFactoryCustomizer<ConfigurableWebServerFactory> 를 구현한 것과 동일하게 custom 을 해줄 수 있는지 궁금합니다. 감사합니다.
"회원 리포지토리 테스트 케이스 작성" 강의 중 12분쯤 findByName()을 실행할 때 findAll()에서 만든 member1,member2가 불러와져서 테스트를 통과하지 못하고 하셨는데 이 부분이 이해가 잘 가지 않습니다. findByName()의 assertThat(result).isEqualTo(member1); 부분에서 예외가 발생합니다. 그런데 왜 첫번째 줄 Member member1 = new Member(); 에서 실행을 멈추지 않고 실행이 계속되나요? 이미 같은 변수이름(findAll()에서 만들어진 member1, member2)이 있음에도 불구하고 예외가 발생해야 맞는데 왜 정상적으로 실행되어서 assertThat(result).isEqualTo(member1); 까지 내려가서 예외가 발생하나요? findByName()의 assertThat(result).isEqualTo(member1); 가 각각 어떤 객체인지 헷갈립니다. member1은 findAll()에서 만들어진 것이고, result는 findByName()의 첫번째 줄에서 만들어진건가요? 이것도 이해가 가지 않는게 clear()가 없는 상태에서 member1을 또 만들면 이름이 중복되는데 왜 예외가 발생하지 않나요?? package hello.hellospring.repository; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @Test public void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test public void findAll() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); assertThat(result.size()).isEqualTo(2); } } 그리고 memberService.join(member1); package hello.hellospring.service; class MemberServiceTest { MemberService memberService = new MemberService(); @Test void 회원가입() { //given Member member = new Member(); member.setName("spring"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } } 회원 서비스 테스트 강의에서도 비슷한 질문이 있습니다. 11분 50초 경에 memberService.join(member1);에서 예외가 발생한다고 하셨는데 그 이유를 잘 모르겠습니다. member1, member2의 이름을 spring으로 만들고나서 member1을 join할 때는 레포지토리에 아무런 값이 없으므로 예외가 발생할 이유가 있나요? 오히려 assertThrows(IllegalStateException.class, () -> memberService.join(member2)); 에서 중복으로 인해 예외가 발생해야하지 않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 회원 가입 페이지와 회원목록은 잘 나오는데 save에서 계속 500 오류가 뜨네요 ㅠㅠ 강의랑 똑같이 따라친거같은데 왜 오류가 발생하는지 모르겠습니다.오류코드는 이렇게 뜹니다. 2024-01-11T19:21:07.392+09:00 ERROR 31571 --- [nio-8080-exec-2] a.c.c.C.[.[.[.[frontControolerServletV5] : Servlet.service() for servlet [frontControolerServletV5] in context with path [] threw exception
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 테스트 코드 실행시 무한 로딩 미해결 3일차 해결 방법이 필요합니다. package hello.jdbc.connection; public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/study/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = "1318!"; }
안녕하세요. 강의 듣기 시작한 수강생 입니다 ㅎㅎ 강의 듣기전에 코드도 한번 살펴보고 검색폼 1강의도 들었는데요 아무리 봐도 View.js 파일에서 class 내부의 constructor의 매개변수로 전달되는 element가 뭔지 잘 모르겠습니다... View 클래스로 인스턴스를 만들때 인수로 전달한 것이 element로 들어가는걸로 알고 있는데 View 클래스로 생성한 인스턴스를 못 찾겠습니다ㅠㅠ 그리고 제가 JS랑 리액트를 다른 강의로 한 번 보고 복습하면서 선생님 강의를 듣고 있는데요 후기글처럼 초반 JS 부분이 어렵긴합니다 내용이나 코드가 이해는 되고 어떤 코드가 어떤 역할을 하고 어떤 코드를 이 스크립트에 작성하는지 이런건 어느정도 파악하면서 듣고 있는데요 막상 제가 이런 모듈을 만들고, 커스텀 이벤트 객체를 생성해서 자바스크립트로 프로젝트를 만들어보려고 했을때는 코드를 어떻게 쳐야 할지 막막할 것 같은데 혹시 강의를 어떤 방법으로 수강하고, 복습은 어떤식으로 하면 좋을지 조언 부탁드릴 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] java 17, gradle 8.5 를 사용하고 있는데 갑자기 실행이 안됩니다. Execution failed for task ':ServletApplication.main()'. > Process 'command '/Users/gangminhui/Library/Java/JavaVirtualMachines/corretto-17.0.9/Contents/Home/bin/java'' 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 get full insights. > Get more help at https://help.gradle.org. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 2s 3 actionable tasks: 1 executed, 2 up-to-date
파일을 들어갈때마다 중괄호가 저런식으로 길게 배치가 되더라고요 혹시 public MemberController(MemberService memberService) { this.memberService = memberService; } 이렇게 작성할 수 있게 할 수 있을까요? 궁금합니다. 그리고 김영한님 강의를 보면 자동으로 import가 되는걸 볼 수 있는데 저는 일일히 option + enter로 import시키고 있습니다. 어떻게하면 김영한님처럼 자동으로 import 할 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 강의 기준으로는 Controller에서 비즈니스 로직을 수행한다고 봐야 하나요?? 아니면 Controller안에 service매서드가 있으니 비즈니스 로직 서비스를 호출한다고 봐야 하나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 강의와 관련된 내용은 아닙니다만... HelloSpringApplication을 실행하면 다음과 같은 오류 메세지가 뜹니다. 실행하고 테스트 코드를 돌리는데는 문제가 없습니다. 버전 문제 혹은 업그레이드를 해야하는 상황이라면 하지 않아도 괜찮은가요?
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 @TestConfiguration static class TestConfig { private final DataSource dataSource; public TestConfig( DataSource dataSource ) { this.dataSource = dataSource ; } 자동화부분에서 static 클래스인 TestConfig를 생성자로 다시 호출하는데 이렇게 하는 이유와 되는 알고리즘이 무엇인지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 일반적인 문자열 데이터에 불과했던 JSON을 파싱을 통하여 객체로 변환해주어 JSON 객체로서 내부의 각 데이터에 접근할 수 있다고 알고있습니다.그런데 강의를 듣다가 매핑이란 개념도 등장하는데 JSON 매핑과 파싱에 차이가 무엇인지 궁금합니다!
Controller V3에서 Map<String,String> paramMap이 HttpServletRequest를 대체하고 있는데 이 과정이 잘 이해가 가지 않습니다. paramMap이 어떻게 매개변수를 받을 수 있는건가요? 그리고 쿼리문 말고도 Body도 받을 수 있는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 인터셉터가 호출이 안됩니다. log.infro 값들도 안찍히고 있어요