묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
static과 templates 파일의 차이점은 무엇인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.여기서 각 패키지에 왜 같은 html 파일을 만드는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
/basic/items 페이지 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님과 똑같이 코드를 작성하고 파일 경로 설정도 했는데/basic/items 페이지가 나오지 않습니다.그리고 원래 잘못된 경로로 접근을 했다면 터미널에서 "오류 메세지"가 나와야 되는데 그것 또한 나오지 않네요왜 그런건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
생성자 주입과 스프링 빈 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 강사님께서1.BasicItemContorller가 스프링 빈에 등록이 되면서 2.생성자 주입으로 스프링 빈으로 등록되어 있는 ItempRepository가 스프링 빈에서 주입이 된다.이렇게 말씀하셨는데 아래와 같이 이해를 했는데 옳게 이해한 것이 맞나요?스프링이 실행이 되면 컨테이너에서 관리하는 빈 객체가 생성된다. ( @Controller, @Service,@Respository @Component)즉, 위의 예시에서는 BasicItemContorller 빈과 ItempRepository빈을 생성함2.@Autowired라는 어노테이션을 이용해서ItempRepository빈을 BasicItemContorller클래스에게 의존성 주입을 하게 만든다.이때, 의존성 주입을 하는 방법은 생성자와 @Autowired가 필요하다. 3.위와 같은 과정을 거치면 스프링 컨테이너 안에 ItempRepository빈과 BasicItemContorller빈이라는 객체가 생성되고 ItempRepository 객체는 BasicItemContorller객체에 의존하게 된다.이런 순서로 이해하면 옳게 이해한 것이 맞나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 build 오류
윈도우에서 빌드하면 이렇게 오류가 나요.. 왜그런것일까요?java 11 , springboot 2.7.15 입니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[강의 질문] hello-static.html 실행 관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요 수업을 따라하던 중 문제가 발생해 질문드립니다.[정적 컨텐츠] 강의 중 http://localhost:8080/hello-static.html 를 실행하면 창이 뜨는 문제가 발생합니다. 콘솔 창에 에러가 뜨지는 않고 파일 위치도 확인했습니다.직접 Application.java파일에서 초록색 재생 버튼으로 실행시 실행은 되지만 터미널에서 실행하고 싶습니다.답변부탁드립니다 아래는 깃 주소 첨부합니다hwangsungmin-00/study-spring (github.com) 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ServletRequest
실제 부모의 인스턴스를 다운캐스팅하면 자식에서 받을 수 없는걸로 알고 있는데HttpServletRequest httpRequest = (HttpServletRequest) request;이 코드는 doFilter에서 받은 부모 인스턴스를 다운캐스팅해서 자식이 받고 사용하고 있습니다. 제가 문법을 잘못 알고 있는 건가요??parent parent = new parent(); child child = (test.child) parent; child.hello();다음과 같이 간단히 테스트 해보았을 땐 class test.parent cannot be cast to class test.child (test.parent and test.child are in unnamed module of loader 'app') at test.ttttt.main(ttttt.java:286)다음과 같은 오류가 떴습니다.어떻게 캐스팅이 가능한건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
session
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);첫번째 파라미터 SessionConst.LOGIN_MEMBER는 세션 저장소의 이름 정도로 해석하면 될까요?만약 세션 저장소의 이름이라고 할 때Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER); 는 세션저장소의 이름으로 필요로하는 Member를 찾을 수 있는건가요?? 현재, HttpSession을 저장소, setAttribute를 put정도로 이해하고 있는데 맞는지 확인부탁드립니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 비즈니스 로직을 원 쿼리로 하지 않는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.스프링 MVC 2편 - 섹션6. 로그인 처리1 중 로그인 기능 강의를 수강하다가 구현 방법에 대해 궁금한 점이 생겨 질문 드립니다.강의 3:49초 부분에서 로그인 핵심 비즈니스 로직을 2단계의 과정으로 나누고 이를 코드로 작성하는 것을 학습했습니다.입력 받은 loginId와 일치하는 회원 정보가 있는 지 DB에서 조회한다loginId로 DB에서 조회한 회원 정보의 password와 입력 받은 password를 비교하여, 일치하는 회원 정보를 찾는다public Member login(String loginId, String password) { return memberRepository.findByLoginId(loginId) .filter(m -> m.getPassword().equals(password)) .orElse(null); }강의의 로직은 잘 이해하였지만,일종의 원 쿼리라고 부르는 방식으로, 한 번에 해결할 수 있을텐데, 왜 2단계로 나누어 해결하는 지 이유가 궁금합니다.강의에서는 메모리를 DB로 사용했지만 일반적인 DB를 사용한다고 가정했을 때,제가 생각한 방법은MemberRepository에 public Optional findByLoginIdAndPassword(String loginId, String password) 메서드를 정의하고loginId와 password가 모두 일치하는 (AND 조건) 회원 정보가 있으면, 그 회원 정보(Member)를 반환일치하는 회원 정보가 없으면 null 반환LoginService에서 리포지토리의 findByLoginIdAndPassword를 호출하기만 하면 되지않을까 생각했습니다.public Member login(String loginId, String password){ return memberRepository.findByLoginIdAndPassword(loginId, password); }이렇게 생각한 이유는입력한 정보와 일치하는 데이터가 DB에 있는 지 확인하기 위해 어차피 DB에 접근이 필요한 상황이고,그렇다면 자바에서 루프를 돌면서 비교하는 것보다 DB에서 WHERE 절을 통해 조건을 비교하는 것이 빠르지 않을까 싶어서 입니다.정답이 있는 건 아니겠지만, 영한님께서 로직을 2단계로 나누어 작성하신 데에는 이유가 있을 것이라 생각해서, 그 이유가 궁금합니다.저는 SI에서 근무를 했었는데, 비즈니스 로직을 모두 쿼리에 녹여내고, 대부분을 원 쿼리로 해결하는 방식의 개발 방법을 익혔었습니다.영한님 강의를 들으면서 이게 좋지 않은 방법이란 것을 알게 되었고, 보다 객체지향적으로 설계하고 개발할 수 있도록 노력하고 있습니다.그래서 로그인 로직에서도 원 쿼리보다는, 강의에서와 같이 2단계로 작성하는 것이 더 좋은 방법인 건지 궁금합니다.긴 질문 읽어주셔서 감사합니다. ^^
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Spring MVC 구조에서 IoC 개념이 적용되는 건가요?
안녕하세요 강사님! Spring MVC 구조에 대해 공부하다가 궁금한 것이 있어서 질문드립니다.DispatcherServlet에서 핸들러 어댑터를 호출하고핸들러 어댑터에서 저희가 구현한 핸들러(컨트롤러)를 호출해서 사용하는데 여기서 '스프링 프레임워크에서 사용자가 구현한 코드를 호출한다.' 라는 관점으로 보았을 때 IoC 개념이 적용되었다고 봐도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hashMap 저장순서
hashMap에서는 값이 저장되는 순서가 보장이 되지 않는 다고 알고 있습니다. Map인터페이스의 values()메서드 또한 맵에 저장된 값들을 반환하지만 순서가 유지되지 않는 다고 알고 있는데요 그런데 전체 클래스 테스트시 findAll(), findByName(),save()순으로 실행이 되는 데 findAll()과 findByName() 에서 각 멤버 인스턴들이 save가 다 되고 난 후 System.out.println(repository.findAll());추가해 이를 통해 저장된 값들을 확인해 본 결과 findAll()의 System.out.println(repository.findAll()); 에서는 [hello.hellospring.domain.Member@589b3632, hello.hellospring.domain.Member@45f45fa1] findAll()이후에 실행된 findByName()의 System.out.println(repository.findAll()); 에서는 [hello.hellospring.domain.Member@589b3632, hello.hellospring.domain.Member@45f45fa1, hello.hellospring.domain.Member@67a20f67, hello.hellospring.Member@57c758ac] 값이 나왔는데 이 처럼 메소드가 실행된 순서와 각 인스턴스들이 save된대로 저장값의 순서 유지가 되서 출력값으로 나오는데 원래라면 hashMap과 values()메서드가 저장 순서를 보장하지 않으므로 System.out.println(repository.findAll()); 실행시 마다 Map에 저장된 값들을 저장순서 상관없이 랜덤하게 출력되야 되는 거 아닌가요? 제가 어떤 부분을 잘못알고 있는 지 궁금합니다.class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); assertThat(member).isEqualTo(result); } @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(); System.out.println(repository.findAll()); assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); //hashMap 함수로 key로 id value로 member(id,name) 인스터스 저장 Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); System.out.println(repository.findAll()); assertThat(result.size()).isEqualTo(2); } }
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
강의 20 부분에서
이렇게 뜨면서 안되네요 ...... .9월 16, 2023 4:43:21 오후 org.apache.catalina.core.StandardWrapperValve invoke심각: 경로 [/MVC01]의 컨텍스트 내의 서블릿 [kr.bit.controller.MemberInsertController]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [not insert]을(를) 발생시켰습니다.javax.servlet.ServletException: not insert at kr.bit.controller.MemberInsertController.service(MemberInsertController.java:49) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 너무 답답해요 ㅠㅠㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복 회원 예외 실패라고 나오는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트 케이스 실행 시 결과값이 "이미 존재하는 회원입니다."라고 출력이 되는데, 콘솔 창에서는 tests failed 1 passed 1으로 나옵니다. 큰 오류는 아닌거같은데 failed라고 떠서 좀 찝찝한데 설정을 따로 바꾸는것인지 코드 자체 오류인지가 궁금합니다. Expacted와 Actual의 차이점도 궁금합니다. Click to see differences를 해도 무슨 차이인지 모르겠습니다...package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional public class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //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 중복_회원_예외() throws Exception { //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("이미 존재하는 회원입니다."); } } 2023-09-15T21:34:27.857+09:00 INFO 15492 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-09-15T21:34:27.999+09:00 INFO 15492 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:tcp://localhost/~/test user=SA 2023-09-15T21:34:28.001+09:00 INFO 15492 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended org.opentest4j.AssertionFailedError: expected: "이미 존재하는 회원입니다." but was: "이미 존재하는 회원입니다" Expected :"이미 존재하는 회원입니다." Actual :"이미 존재하는 회원입니다" <Click to see difference> at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at hello.hellospring.service.MemberServiceIntegrationTest.중복_회원_예외(MemberServiceIntegrationTest.java:41) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
import 관련 질문합니다.!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 import할 때마다 궁금증이 생겨 찾아봤지만 이해가 잘 가지 않아 질문드립니다...!맨 위에것으로 import 하면 되는건 알지만 왜 두가지가 뜨는걸까요?하나는 클래스, 인터페이스 두개가 어떤 차이인지 알려주시면 감사하겠습니다 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
8분20초 강의에 hello.html이 404에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]hello.html 404에러뜹니다 무엇을 건드려야할까요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp 파일이 실행이 안되고 404 whitelabel 에러가 뜨네요 ㅠ
스프링부트 3.0 이상이라 build.gradle에 pdf 그대로 복붙하고, build and run using 도 gradle로 실행 했는데도 똑같은 에러가 떠요 ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 다운로드 관련 문의
안녕하세요. 스프링 MVC 2편까지 수강한 이후에 내용을 복습하려고 1편과 2편의 내용을 통합하여 상품 관리 시스템을 만드는 중인데 파일 다운로드에서 문제가 생겼습니다.상품 등록 폼에서 상품 이미지를 포함한 상폼 정보를 저장하고 상품 상세 폼에서 상품 이미지를 불러와서 상품 정보들과 함께 나타내려고 합니다.파일을 업로드해서 로컬 컴퓨터에 저장하는 것 까지는 잘 작동이 되는데 상품 상세 폼에서 파일을 다운로드하는 것이 되지 않고 파일 src로 들어가보면 404 에러코드가 나타납니다. 저장은 잘 되는데 무엇을 잘못한 걸까요? 아무리 찾아보고 고쳐봐도 잘 모르겠네요ㅠㅠ
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
동시성 이슈 처리 질문있습니다!
DB 동시성 문제를 해결하기 위해낙관적 잠금, 유니크 제약조건, 비관적 잠금이 있는 것으로 알고있습니다.비관적 잠금은 성능상의 이유로 잘 사용하지 않는다고 알고있어서낙관적 잠금 또는 유니크 제약조건으로 동시성을 해결하고 있는데, 낙관적 잠금을 사용해야 할지, 유니크 제약 조건을 사용해야 할지 의문이 들어 질문 드립니다. 감사합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
RowMapper<Item> 질문있습니다.
수업에 나오는 RowMapper<Item>에 대해서 질문드립니다.RowMapper의 코드를 확인해보니@FunctionalInterface public interface RowMapper<T> { /** * Implementations must implement this method to map each row of data * in the ResultSet. This method should not call {@code next()} on * the ResultSet; it is only supposed to map values of the current row. * @param rs the ResultSet to map (pre-initialized for the current row) * @param rowNum the number of the current row * @return the result object for the current row (may be {@code null}) * @throws SQLException if an SQLException is encountered getting * column values (that is, there's no need to catch SQLException) */ @Nullable T mapRow(ResultSet rs, int rowNum) throws SQLException; }강의에서 구현한 (rs, rowNum) => T 의 메서드가 보이는데요 해당 메서드는 throws SQLException, 즉 체크 예외를 던지고있습니다. 검색해본결과 람다는 컴파일타임이 아니라 런타임에 실행되기 때문에 사용하는측에서 컴파일시점에 예외체크를 하지않아도 컴파일이 통가된다라고 보았습니다. (throws SQLException 라고 적혀있는데 컴파일타임에 체크되어야하는거 아닌가 라고 생각은 하면서) 질문그렇다면 제가 jdbc의 RowMapper를 실무에서 사용한다면 매번 체크 예외를 위한 예외처리를 매번 다 해줘야한다는 의미인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서버 실행에 오류가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]어제까지만 해도 잘 됐던 서버가 오늘 갑자기 안됩니다. 어제랑 다른점으로 코드를 추가한 것이이 2가지 밖에 없는데 왜 오류가 나오는지 궁금합니다.인텔리 제이는 지금 학생용 라이센스를 사용중입니다.아래 링크는 코드 압축 파일 입니다. https://drive.google.com/file/d/12BtT_YTA__LkJFnUkQ_Q2ae-X9MT4TK7/view?usp=sharing
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
Dynamic web 프로젝트를 메이븐 프로젝트로 컨버트해서 사용하는 이유가 궁굼합니다.
윤재성 강사님 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정도 수강을 하였는데요.거기서는 maven 프로젝트로 생성해서 Create a Simple project로 프로젝트를 생성했었습니다.Spring MVC5 강의에서는 Dynamic web 프로젝트를 생성하고 메이븐 프로젝트로 convert 해서 사용하시던데 메이븐 프로젝트로 처음부터 만들지 않고 컨버트해서 강의하신 이유가 궁굼합니다! 또 그 둘의 차이점도 궁굼해요!