묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 부트 - 핵심 원리와 활용
테스트 실행시 동일 오류 3가지 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 테스트 실행시 아래의 세가지 오류가 계속해 뜹니다. 강의 자료를 복붙해도 동일하게 뜨네요 ㅠㅠ 뭐가 문제일까요 압축해서 업로드 했습니다..! https://drive.google.com/drive/folders/1M5BcvT6aVbxMq1C3xVFfoOSTyAEashKH?usp=sharing
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 관련 질문드려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]앱 프로젝트를 하다 궁금한 점이 생겨 질문드립니다. 지금 같은 경우에 상품을 post 방식으로 그때그때 필요한 것을 추가하는 식 같은데 만약에 처음부터 어떤 항목들인지 지정되어있는 경우에는 어떻게 처리하면 될까요(초기 데이터 설정)? 찾아보니 data.sqlSQL 초기화할 때 실행되는 파일이다. 여기에 SQL문을 작성해주면 된다.main/resources/db/data.sql에 생성하면 별도 설정없이도 자동으로 해당 파일을 실행해준다.insert into INTEREST (type) values ('하이킹'),('서핑'),('다이빙'),('스노클링'),('사파리'),('스키'),('자전거'), ('액티비티'),('음식 체험'),('음악 감상'),('공연 감상'),('전시회'),('예술 관람'), ('사진 촬영'),('지역 축제'),('계획형'),('즉흥형'); 이런식으로 한다고 되어있는데 맞는지 궁금합니다..이 화면을 구현하고 싶은데 @Entity @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Interest { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String type; } 이렇게 구현하면 될까요..?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
트랜잭션 질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]8:55분 즈음부터 말씀하시는 내용이 DB에 쿼리까지 다 날려서 회원가입도 되고 뭐 아이디 찾기, 멤버 찾기 등 다 되고 마지막에 테스트가 끝나면 데이터를 롤백한다고 하셨는데요.(정확히는 반영을 안함). 그래서 실제로 테스트 실행을 해보면 정상적으로 동작했다는 뜻에서 Run 창에 모두 초록불로 들어와있지만 DB에서는 아무것도 반영안되어있는게 보이는데요, 그럼 실제로 테스트 할때도 DB에는 들어갔는지 실물확인은 못한채, Run창에서 초록불로 정상적으로 동작했다는 것으로만 확인을 해야하나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
msa프로젝트에서 kafka, feignClient 테스트
안녕하세요~강의가 넘 좋습니다!! 넘 재밌게 잘 들었어요~ msa프로젝트에서 kafka, feignClient는 테스트를 어떻게 진행하는지 궁금합니다. (서비스단 테스트시 카프카를 mocking해서 테스트하는 것을 여쭙는게 아닙니당 ㅎㅎ)저 자체는 테스트하지 않으시는지..? 실제로는 서비스 여러개 띄워놓고 메세지 발행이나 api 통신이 되는지 확인하고 있는데 테스트로도 할 수 있는 방법이 있나해서요. 현업에서는 어떻게 하는지 궁금합니다~
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ModelView를 ViewModel이라고 이해해도 될까요?(feat.iOS 개발자)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. iOS 개발을 오래하다가 BE 개발 공부를 시작했습니다. iOS 개발을 하면서 MVC, MVVM 등 다양한 아키텍쳐 패턴을 사용했었는데 이번 강의에서 사용하시는 ModelView라는 건 마치 ViewModel과 같다는 생각이 들어서요!1) 현재 ModelView라고 쓰이는 객체는 흔히 말하는 ViewModel과 동일한 느낌으로 봐도 무방할까요?(ModelView는 ~View이기에 View로 보이는 한편, ViewModel ~Model이기에 Model로 느껴지는 듯합니다.)2) 혹 둘의 차이가 있다면 어떤 부분이 차이가 있을지도 궁금합니다!
-
미해결토비의 스프링 6 - 이해와 원리
[공유] 윈도우 사용자를 위한 http 명령어 오류 해결 방법
해결방법터미널(관리자자격으로 실행) > pip install httpie선행 조건pip 있어야 함환경 변수(Path) 등록되어 있어야 함 강의 수강 중 터미널에서 http 명령어 실행 시 다음 에러가 발생했습니다.윈도우 사용자 중 같은 에러가 발생한 분이 계신 것을 확인했습니다.https://www.inflearn.com/community/questions/1050950/intellij-community-edition-terminal-http-request?srsltid=AfmBOoojOaRgnRZgvYrH2Kcow38aEmRLFMGA1DsYZrPGxKMGjDekOHgT위 링크에서 토비님의 답변대로 했을 때 에러 발생하는 분은 다음 링크 참고해보세요.https://luji.tistory.com/99
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2콘솔 Member테이블이 형성되지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요 Member테이블이 형성이 안되는데 이유를 모르겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 JDBC 회원 목록 Whitelavel Error
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]비슷한 질문이 몇 개 올라와 있는데 해결되지 않아 질문합니다.H2에서 테이블 생성하고 데이터 insert한 후 서버에서 회원 목록을 클릭하면 Whitelabel Error가 뜹니다. 2025-03-17T22:19:31.466+09:00 ERROR 2315 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalStateException: java.lang.IllegalArgumentException: No DataSource specified] with root causejava.lang.IllegalArgumentException: No DataSource specifiedat org.springframework.util.Assert.notNull(Assert.java:181) ~[spring-core-6.2.3.jar:6.2.3]at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:104) ~[spring-jdbc-6.2.3.jar:6.2.3]at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) ~[spring-jdbc-6.2.3.jar:6.2.3]at hello.hello_spring.repository.JdbcMemberRepository.getConnection(JdbcMemberRepository.java:119) ~[classes/:na]at hello.hello_spring.repository.JdbcMemberRepository.findAll(JdbcMemberRepository.java:77) ~[classes/:na]at hello.hello_spring.service.MemberService.findMembers(MemberService.java:42) ~[classes/:na]at hello.hello_spring.controller.MemberController.list(MemberController.java:40) ~[classes/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.3.jar:6.2.3]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.3.jar:6.2.3]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.3.jar:6.2.3]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.3.jar:6.2.3]at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.36.jar:6.0]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.3.jar:6.2.3]at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.36.jar:6.0]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.3.jar:6.2.3]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.3.jar:6.2.3]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.3.jar:6.2.3]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.3.jar:6.2.3]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.3.jar:6.2.3]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.3.jar:6.2.3]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.36.jar:10.1.36]at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] application.properties에는spring.datasource.url = jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name = org.h2.Driver으로 작성되어 있습니다.test.mv.db를 삭제하고 다시 실행해 테이블을 만들어도 똑같은 오류가 납니다 ㅜㅜ
-
미해결스프링 부트 - 핵심 원리와 활용
강의 싱크 에러
오늘 영한님 spring boot 강의를 듣는데 싱크가 안맞느거 같습니다 ㅠㅜ 확인 필요할 거 같아요!!
-
미해결스프링 부트 - 핵심 원리와 활용
test 실행시 동일한 세가지 오류 뜸
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요memberrepositortest를 돌려보려하는데 서버 애플리케이션은 정상적으로 띄워지지만 테스트는 다른 테스트를 돌려보아도 모두 저 세가지 에러가 동일하게 뜹니다. 무엇이 문제인지 모르겠어요. gradle 캐시를 모두 삭제하고 다시 해보고 다 다시 깔아봐도 똑같습니다 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
프로젝트 실행이 안됩니다.
[질문 내용]zip파일 구글 드라이브입니다. https://drive.google.com/file/d/1ZleZzt2LirbgIQYJbj7zs7zmLnee7HFa/view?usp=sharing 강의 잘 듣고 있습니다. 본론부터 말씀드리자면 마지막 강의에서 애플리케이션 실행해서 localhost:8080/log-bemo 에 접속하는 부분부터 안됩니다.현재 압축 파일에서 풀고 실행하면 NoUniqueBeanDefinitionException으로 스프링 작동 자체가 안되는데 MemoryMemberRepository에 @Primary를 붙이면 일단 실행은 됩니다. 강의에서는 MemoryMemberRepository에 @Primary를 붙인 기억이 없어 일단 지우고 압축했습니다.실행이 되어도 /log-demo 로 들어가면16:58:17.197 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet --Exiting from "ERROR" dispatch, status 40416:58:27.583 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet --GET "/log-demo", parameters={}16:58:27.584 [http-nio-8080-exec-3] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping --Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]16:58:27.587 [http-nio-8080-exec-3] DEBUG o.s.w.s.r.ResourceHttpRequestHandler --Resource not found16:58:27.587 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver --Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource log-demo.]16:58:27.587 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet --Completed 404 NOT_FOUND16:58:27.587 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet --"ERROR" dispatch for GET "/error", parameters={}16:58:27.588 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping --Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)16:58:27.590 [http-nio-8080-exec-3] DEBUG o.s.w.s.v.ContentNegotiatingViewResolver --Selected 'text/html' given [text/html, text/html;q=0.8]16:58:27.591 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet --Exiting from "ERROR" dispatch, status 404 이런 오류가 뜨는데 왜 이렇게 되는지 이해가 잘 안됩니다..
-
해결됨스프링 핵심 원리 - 기본편
'의존'이란 개념을 어디까지 고려해야하는지 궁금합니다.
[질문 내용]안녕하세요스프링 핵심 원리 이해1 - 예제 만들기, 스프링 핵심 원리 이해2-객체 지향 원리 적용 까지 강의를 수강하고 궁금한 것이 생겨서 질문 드립니다.DIP를 지키기 위해 DI 컨테이너를 활용하여, 구현체가 추상화 인터페이스에 의존하여 결합도를 낮춘다고 이해하였습니다. 덕분에 설계할 때 객체를 유연하고 확장가능하게 만들 수 있다는 사실도 알게되었습니다. 여기에서, 궁금한 점은 첫째로, Grade와 Member와 같은 데이터를 담기 위한 객체들의 의존성은 따로 신경써도 되지 않는지 궁금합니다. 특시 Memeber는 OrderServiceImpl, MemeberServiceImpl, MemeoryMemberRepository에서 모두 사용이 되는데, 결국 저 3개의 구현체들은 Memeber를 의존한다고 볼 수 있으니, 이에 따른 side effect는 걱정하지 않아도 되는지, 만약 그렇다면 왜 그런지 궁금합니다.public enum Grade { Basic, VIP } public class Member { private Long id; private String name; private Grade grade; public Member(long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } public Long getId() { return id; } public String getName() { return name; } public Grade getGrade() { return grade; } public void setId(Long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setGrade(Grade grade) { this.grade = grade; } } 둘째로, 명칭에 관해서도 확실히 하고 싶은게, Grade와 Member는 해당 프로젝트에서 마치 타입과 같은 역할을 하니, 이를 '타입 의존성'이 불러도 되는지 궁금합니다. 감사합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
의존성 역전으로 해결한 외부의존성?
의존성과 Testability(2) 5분 10초 내용입니다.사진과 같이 해결하면 결국 SystemClockHolder의 getMillis에는 Clock이라는 의존성이 숨겨진거 아닌가요? 그럼 이 getMillis 메소드를 테스트하기 힘들어진 게 아닌가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
exceptionResolver에서 null 반환
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용] @Slf4jpublic class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (IOException e) { log.error("resolver ex", e); } return null; }}만약 HandlerExceptionResolver에서 null을 반환하게 되면은.. 그러면 스프링 기본 로직인 basicErrorController에서 /error 를 호출해서 해결하게 되는 것이 아닌가요? basicErrorController를 거치지 않고 그냥 WAS로 예외가 던져지나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 예외 상태코드
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]API 예외 처리 - HandlerExceptionResolver 시작 강의에서,"예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다." 라고 하셨는데예외가 만약 RuntimeException 과 같은 경우면 500에러로 반환 되는 것인가요?근데 만약 상태코드가 지정된 예외라면.. (ex. sendError(404) 라면 어떻게 되나요? 이 경우는 404 에러로 리턴되지 않나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
QueryDSL 소개2 해결 강의 관련 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 내용중에 "조인에 대해서도 당연히 지원한다." 라고 되어있는 ppt 내용중에서,이렇게 join을 사용하는 부분이 있는데, 여기에 있는 join이 left join이랑 다른 것이고 inner join이랑 다른 개념인건가요? “기능 살펴보기” 부분에도 그냥 join도 있고 innerjoin도 있고, left join도 있던데 그냥 join은 무슨 의미인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의가 너무 오래 된거 아닌가요
이거 너무 오래된 강의 아닌가요 강의 다시 찍어야 하는거 아닌가요 -_-;이거 하나하나 달라서 하다가 너무 빡치는 상황이 많이 나오네요 정말 질문해야 하는거 너무 많이 나올정도 입니다 로드맵으로 다 샀는데 아 정말 강의가 거의 다 그런거 같아서 너무 짜증납니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
마지막에 말씀하신 의미에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 마지막에 말씀하신생성된 걸 그대로 쓰지 말라고 하셨는데 그러면 ddl-auto는 참고만 하고, DB 생성은 직접 하는 게 좋다는 의미인 거죠? 그리고 찾아보니 ddl-auto에 create-drop라는 것도 있던데, 강의에선 create로 하셨지만 create-drop을 하는 게 테이블 참고용으로는 더 편리하려나요?
-
미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명 매칭
@Autowired 가 타입 매칭을 시도하고, 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다는 내용을 보고, 필드명을 빈 이름으로 변경해보았습니다.생성자는 롬복의 RequiredArgsConstructor를 통해서 자동으로 생성되도록 하였는데 이 때문인지 AutoAppConfigTest 에서 다음과 같은 오류 문구가 발생하면서 테스트에 실패했습니다.org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Work_KJ\Java_Projects\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy OrderServiceImpl의 코드는 다음과 같습니다.package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy rateDiscountPolicy; @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = rateDiscountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } // 테스트용 public MemberRepository getMemberRepository() { return memberRepository; } } 롬복을 통해서 생성자를 자동 생성하게 되면 @Autowired의 필드 매칭이 정상적으로 이루어지지 않는건가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
JPA 소개 강의 관련 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 1)“JPA와 상속 - 조회” 부분에서,개발자는Album album = jpa.find(Album.class, albumId);JPA는 SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID이렇게 처리해준다고 하는데, Album를 찾는거면 from album에 join이 item이 되어야 하는게 아닌건가요? 2)“지연로딩” 부분에서,실제로 team의 속성인 getName()을 사용할 때 생성되는 쿼리가 select * from team이 아니라,select * from team where member_id = ~~ 이런 쿼리가 날라가는게 맞지 않나요?