묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
빈이 없다고 뜹니다..
구글드라이브 링크https://drive.google.com/file/d/1gq1a-0nrQ9vHo0W2zv8Oo4gEK9pxp5jA/view?usp=sharingCould not autowire. No beans of 'ItemMapper' type found. 이런 에러가 발생했습니다. 무시하고 테스트 돌려보니 3개 모두 오류가 발생합니다.java.lang.IllegalStateException: Failed to load ApplicationContextjava.lang.IllegalStateException: Failed to load ApplicationContextjava.lang.IllegalStateException: Failed to load ApplicationContext
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Service에서 @transactional을 왜쓰는건가요? 안써도 되지않나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]트랜젝션을 쓰지 않아도 크게 상관이없지않을까요?왜쓰는건지 궁금하고트랜젝션을 쓰지않을때는 도메일 모델 패턴으로쓰는데도메일 모델 패턴은 왜 트렌젝션을 어노테이션으로 달지않나요?야생형으로 듣다보니 의문형이 생기네요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
생성 메서드 질문! Static을 왜 붙이는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]생성메서드의 용도가 갑자기 까먹었는데그냥 생성자로 넣어주려는걸로 아는데Static으로 정적으로 왜쓰는건가요?Static 빼면 안되나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JDBC 연동오류
https://drive.google.com/file/d/1GmEDrs703xOvPzwZo3G7XQ8PomDtwyqn/view이름을 저장하면 에러가 발생합니다.템플릿으로해도 똑같은 오류가 발생합니다.이런 오류도 발생합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ExceptionHandler 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@ExceptionHandler 부분을 혼자 따라해 보고 있는데user-ex 요청을 해도 bad 요청에 대한 ExceptionHandler가 사용됩니다. 혼자 찾아보다가 못 찾겠어서 질문드립니다 https://drive.google.com/file/d/12UUOw564__WSLm2jmEHyD7bQz6A9YOgO/view?usp=sharing
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
급 @Repositroy 질문
@Repository가 Data Access layer 계층에 있고 선언만하면 Bean으로 등록이되서 spring container가 관리해주는것으로 알고있습니다. 여기서 질문인게 DB-1편 자료를 읽고와보니 PlatformTransactionManager를 썼을때 코드상에 @Repositroy를 안붙이셨는데 굳이 @Respository를 붙이지 않아도 되나요?저는 꼭 붙여야만 저장소로 인식이 되는줄알아서요 정확한답변 부탁드립니다@Slf4j public class MemberRepositoryV1 { private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource) { this.dataSource = dataSource; } public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values (?, ?)"; Connection con = null; PreparedStatement pstmt = null; 코드는 일부만 발췌했습니다! 지금 MemberRepository1~4까지 확인해보니 위에 전부다 @Repository를 붙이시지 않았더라구요!제가 잘 알지못해서 정확하게 답변듣고싶습니다
-
미해결스프링 핵심 원리 - 기본편
설정 관련
강의 노트에서 build and run using과 run tests using 설정에서 spring3.2 이상부터는 Gradle을 설정하라고 하셨는데검색했더니 run tests using를 IntelliJ로 설정해야 테스트 코드를 실행했을 때 성공테스트 목록이 보인다고 하는데run tests using만 intelliJ로 설정해도 코드가 돌아가는데 이상이 없을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
회원목록 확인 시 jasper exception
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]V2에서 가입, 저장은 잘 되는데 회원목록 확인할 때 500 에러가 나고 인텔리제이에서는 org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application재스퍼익셉션이 뜨는데 구글에 찾아보니까 jsp에서 taglib이 적용이 안돼서 그런 것 같은데 build.gradle에서 dependency 문제인지 해결하지 못해서 질문 남깁니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Spring과 MySQL연동 실패 ..
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'com.h2database:h2' runtimeOnly 'mysql:mysql-connector-java:8.3.0' testImplementation 'org.springframework.boot:spring-boot-starter-test'}위와 같이 dependencies를 설정했고 밑은 application.yml입니다. spring: datasource: url: "jdbc:mysql://loca lhost/library" username: "root" password: "비밀번호" driver-class-name: com.mysql.cj.jdbc.Driver비밀번호는 알아서 설정했습니다. 오류가 생겨서 dependencies에서 runtimeOnly 'mysql:mysql-connector-java:8.3.0'로 설정했습니다.밑에는 에러 표시입니다. Execution failed for task ':LibraryAppApplication.main()'.> Could not resolve all files for configuration ':runtimeClasspath'. > Could not find mysql:mysql-connector-java:8.3.0. Required by: project :Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html > Task :LibraryAppApplication.main() FAILEDExecution optimizations have been disabled for task ':LibraryAppApplication.main()' to ensure correctness due to the following reasons: - Type 'org.gradle.api.tasks.JavaExec' property 'classpath' cannot be resolved: Could not resolve all files for configuration ':runtimeClasspath'. Reason: An input file collection couldn't be resolved, making it impossible to determine task inputs. Please refer to https://docs.gradle.org/7.5/userguide/validation_problems.html#unresolvable_input for more details about this problem.Execution failed for task ':LibraryAppApplication.main()'.> Could not resolve all files for configuration ':runtimeClasspath'. > Could not find mysql:mysql-connector-java:8.3.0. Required by: project :Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html Could not find mysql:mysql-connector-java:8.3.0.Required by: project :Search in build.gradle files뭐가 에러인가요..? 만약 Runtimeonly뒤에 version을 따로 기입하지 않는다면, Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure라는 에러가 뜹니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DispacherServlet 의 WebApplicationContext 관련 질문입니다!
DispatcherServlet 에 대해 개인적으로 공부를 하다 아래와 같은 사진이 많이 보여서 처음에는 DispatcherServlet 에서 의존성 주입을 받을 때 Servlet WebApplicationContext Container 에서 주입받고 없으면 Root WebApplicationContext 까지 검색하여 주입하는 것으로 이해를 했습니다. 그리고 Root WebApplicationContext 에는 웹과 관련 없는 객체들이 등록하여 사용한다고 하여 그런줄 알았는데 실제로 디버깅을 해보니 SpringApplication.run 메서드 내에서 createApplicationContext 메서드가 호출되어 AnnotationConfigServletWebServerApplicationContext 객체가 생성된 후, localhost:8080/xxx 로 HTTP Request 를 보내니 FrameworkServlet 의 initServletBean 메서드에서 initWebApplicationContext 메서드를 호출해서 Root WebApplicationContext 를 가져와서 FrameworkServlet 의 webApplicationContext 에 참조를 저장하는데 이렇게 되면 사진에서의 Root ApplicationContext 와 Servlet WebApplicationContext 가 동일한 객체인걸로 생각이 되는데 실제로 두 객체가 같은 것인지, 아니면 뭔가 다른 무언가를 제가 하지 않아서 같은 참조를 가지는 건지 궁금하여 질문남깁니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 로직 테스트 오류
https://drive.google.com/drive/folders/1unulH1E9G7a--c4InEpy_4NwIEKrvH4b?usp=sharing회원가입 로직 테스트 오류가 납니다. 필요:hello.demo.domain.Member@f48a080실제 :hello.demo.domain.Member@1d3a03fe<클릭하여 차이점 확인>org.opentest4j.AssertionFailedError: expected: hello.demo.domain.Member@f48a080 but was: hello.demo.domain.Member@1d3a03fe at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
-
미해결스프링 핵심 원리 - 기본편
request 스코프] CoreApplication 오류 납니다.
build.gradle에 웹 라이브러리 추가하고 dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'jakarta.inject:jakarta.inject-api:2.0.1' //web 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-web'CoreApplicaton을 돌렸더니, 아래와 같은 오류 메세지가 뜹니다. 대충 어떤 오류인지는 알겠는데.....어떻게 찾아서 고쳐야 할지는 모르겠네요? Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\SpringBoot\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]This may be due to missing parameter name informationAction:Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumedEnsure that your compiler is configured to use the '-parameters' flag.You may need to update both your build tool settings as well as your IDE.
-
미해결스프링 핵심 원리 - 고급편
ContextV1 은 템플릿 콜백 패턴이 아닌가요?
ContextV2는 템플릿 콜백 패턴이라고 하셨는데ContextV1 은 템플릿 콜백 패턴이 아닌가요?
-
해결됨스프링 핵심 원리 - 기본편
빈 생명 주기 콜백에서 생성자 주입 -> setter 주입으로 코드 변경 시 이벤트 라이프 사이클 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 강의에서 섹션 8 부분 ( 빈 생명 주기 콜백 시작 ~ 애노테이션 @PostConstruct, @PreDestroy)를 수강하던 중에 궁금한 점이 생겼습니다. Q. 생성자 주입 방식에서 Setter 메소드 주입 방식으로 코드를 변경 했을 때강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클 과실제 프로그램 실행 과정이 일치하는지 확인해보았는데일치하지 않는 것 같아서 관련 내용 문의 드립니다. ( 실제 강의에서는 setter 방식으로 변경하는 내용은 나오지 않았습니다.setter 메소드 주입으로 바꿨을 때 실제 라이프 사이클이 어떻게 돌아가는지 궁금해서제가 임의로 코드 변경하였습니다..혹시 이런 질문이 안된다면 글 삭제하겠습니다 ㅠㅠ참고로 setter 로 변경한 코드는 댓글에 남겨두었습니다.) [강사님께서 말씀하셨던 스프링 빈의 이벤트 라이프 사이클]스프링 컨테이너 생성 → 스프링 빈 생성 → 의존 관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 [생성자 -> setter 로 변경 후 실행했을 때 결과값] 의존 관계 주입 되기 전에 초기화 콜백이 먼저 호출되는데 그러면 이벤트 라이프 사이클을 벗어나는 내용 아닌가요? 혹시 제가 setter 로 주입하는 코드를 제대로 구현하지 못해서 이런 일이 발생한 것일까요?ㅠㅠ ( + 사실 setter 방식일 때 의존 관계가 주입되는 시점이 정확히 어떤 부분인지에 대해서도 제대로 이해를 못한 것 같습니다. )
-
해결됨스프링 핵심 원리 - 기본편
스프링이 제공하는 인터페이스에 의존하면 안되는 이유 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] "스프링 핵심 원리 - 기본편" 강의에서커리큘럼 = 인터페이스 InitializingBean, DisposableBean에서3:45 부터 김영한 강사님께서 하신 말씀에 대해 궁금증이 생겨 질문 남깁니다. 강사님께서 스프링이 제공하는 어노테이션까진 괜찮지만 인터페이스까지 의존하게 되면 너무 부담스럽다고 말씀하셨는데 혹시 이유가 뭔지 알 수 있을까요? 이미 어노테이션에 의존했다면스프링에 의존적인 것은 피할 수 없는 일인데왜 어노테이션은 되고 인터페이스는 안되는 건가요?
-
미해결스프링 핵심 원리 - 기본편
실습관련 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 보며 실습을 진행하던 중 Test폴더에서 진행하는 코드에 에러가 발생해서 해결방법을 알고싶어 질문합니다두 파일에서 메소드를 확인할 수 없다는 에러가 발생해서 해결방법을 찾다가 해결하지 못했습니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
PATH 에러입니다..
[질문 내용]여기에 질문 내용을 남겨주세요. openjdk 22버전을 다운받아서 programfiles에 있는데다운 받은거를 어떻게 연동 시켜야하나요..?!
-
미해결Practical Testing: 실용적인 테스트 가이드
PK값으로 테스트 할 때 질문입니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 우선, 덕분에 테스트 코드를 작성하는데 많은 도움이 됐습니다! 현재 토이프로젝트 진행 중에 PK 값을 Long 타입으로 두고 @GeneratedValue(strategy = GenerationType.IDENTITY) 이 전략을 사용하니, tearDown을 해도, 전체 테스트에서는 create하고 삭제를 하니, PK인 Long이 1L인 것을 보장을 못하더라구요.그래서 create하는 메서드의 반환을 void로 했다가 Long 타입으로 반환하는데, 이렇게 하는 것도 좋은 코드인가요..?@DisplayName("사용자를 조회하면 사용자의 이름, 직업, 전화번호, 성별을 조회한다.") @Test void getUserInfo() { //given Register register = Register.builder() .name("name") .job(Jobs.STUDENT) .phone("010-0000-0000") .man(true) .build(); Long id = usersService.registerUser(register); //when UserResponse userInfo = usersService.getUserInfo(id); // then assertThat(userInfo.name()).isEqualTo("name"); assertThat(userInfo.job()).isEqualTo(Jobs.STUDENT); assertThat(userInfo.phone()).isEqualTo("010-0000-0000"); assertThat(userInfo.man()).isEqualTo(true); } // 단건 조회 public UserResponse getUserInfo (Long id){ Users user = usersRepository.findById(id). orElseThrow(IllegalArgumentException::new); return UserResponse.of(user); } 입니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig required a single bean, but 2 were found:
[질문 내용]여기에 질문 내용을 남겨주세요. Parameter 0 of constructor in hello.hellospring.SpringConfig required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\Users\Han\IdeaProjects\hello-spring\out\production\classes\hello\hellospring\repository\MemoryMemberRepository.class] - springDataJpaMemberRepository: defined in hello.hellospring.repository.SpringDataJpaMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfigurationspringconfig에 빈이 2개있어서 그런거 같은데어느 파일을 수정해야할까요 @Configuration public class SpringConfig { private MemberRepository memberRepository; private EntityManager em; @Autowired public SpringConfig(MemberRepository memberRepository) { this.memberRepository = memberRepository; } // @Autowired // public SpringConfig(DataSource dataSource) { // this.dataSource = dataSource; // } @Bean public MemberService memberService() { return new MemberService(memberRepository); } // @Bean // public MemberRepository memberRepository() { // return new MemoryMemberRepository(); // return new JdbcMemberRepository(dataSource); // return new JpaMemberRepository(em); // } } 생성자 주입을 못받고 있다고 합니다.@Autowired public SpringConfig(MemberRepository memberRepository) { this.memberRepository = memberRepository; }
-
미해결스프링 핵심 원리 - 기본편
PrototypeBean 클래스는 Static 영역과 Heap 영역 모두에 존재하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]너무 기초 질문인가 싶지만 제가 맞게 이해하고 있는지 확신이 안 돼서 질문드립니다. 제가 이해하고 있는 내용들을 적었습니다. 아래 코드에서 static class PrototypeBean으로 되어 있는 PrototypeBean 클래스는 클래스 로더가 클래스들을 로딩할 때 Method Area(Static Area)에 적재되며, 이 Method 영역에선 인스턴스 객체들처럼 여러 개로 존재하는 것이 아니다. getBean(PrototypeBean.class)을 통해 조회할 때마다 생성되는 프로토타입 빈들은 Heap 영역에 생성되는 객체들이다.(마치 PrototypeBean이 static 클래스가 아닌 것처럼)결론적으로 PrototypeBean은 static임에도 불구하고 Heap 영역에 객체 형태로도 여러 개 존재한다.(조회되는 만큼) 혹시 위 내용들 중에 제가 잘못 이해하고 있는 부분이 있을까요? 자바 기본 문법을 배웠을 땐 static으로 지정하는 것들은 Method Area에만 있고, 객체별로 관리되는 게 아니기 때문에 Heap 영역엔 없는 거로 이해하고 있었는데, PrototypeBean의 경우엔 static임에도 Heap 영역에도 있어서 좀 생소하긴 합니다. 그래도 이 강의를 들으면서 프로토타입 스코프에 대해 이해한 대로면 위에 정리한 1, 2, 3처럼 생각되기는 하는데 제가 혹시 이해를 잘못한 부분이 있나 해서 확인받고 싶습니다. public class PrototypeTest { @Test public void prototypeBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); System.out.println("find prototypeBean1"); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); System.out.println("find prototypeBean2"); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); System.out.println("prototypeBean1 = " + prototypeBean1); System.out.println("prototypeBean2 = " + prototypeBean2); assertThat(prototypeBean1).isNotSameAs(prototypeBean2); prototypeBean1.destroy(); prototypeBean2.destroy(); ac.close(); } @Scope("prototype") static class PrototypeBean { @PostConstruct public void init() { System.out.println("PrototypeBean.init"); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }