묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션 6 requestparam
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Requestparam. V2에서 username과 age를 각각 hello 20 으로 보낸 적이 없는데 왜 알아서 보내지나요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Dto와 공통되는 클래스가 있을 때
안녕하세요 Dto클래스가 있을 때, 다른 곳에서도 그와 동일한 스펙의 클래스가 필요하다면 재사용을 해도 되는지, 아니라면 각각 구현해야 하는지 궁금합니다.예를 들어 컨트롤러에서 요청을 통해, Coordinate(위도와 경도를 필드로 갖는)라는 타입으로 좌표를 받아서 사용하는데, 다른 패키지에서도 동일한 스펙을 갖는 클래스가 필요하다면 Coordinate를 재사용해도 되는 걸까요? 아니면 CoordinateForXXXXDto와 같이 동일한 스펙의 클래스를 이름만 다르게 구현하여 사용해야 할까요? webdtorequestCoordinateDto Dto로만 사용되면 위와 비슷한 구조를 가지면 된다고 생각하는데, 만약 재사용이 가능하여 Dto의 역할(계층간의 데이터 전송)이 아닌, 오로지 하나의 클래스 안에서만 사용되는 경우도 포함돼 있다면 어떤 패키지에 놓아야 할지도 궁금합니다!public class CoordinateDto { private double latitude; private double longitude; }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
id 숫자 건너뜀
다른 질문 글에도 비슷한 내용이 있길래 답변 해주신대로 블로그도 참고해봤는데 해결하지 못 했어요..(33이 아닌 36으로 뜨는 이유는 데이터를 삭제해서 그렇습니다.)
-
미해결스프링 핵심 원리 - 기본편
IllegalStateException
CoreApplicationTests를 run 했을 때 아래와 같은 에러가 발생합니다. 라이브 코딩으로 똑같이 따라했는데 왜 그러는걸까요? ㅠㅠ 구글 드라이브 링크 첨부합니다... 도와주세요 ㅠ java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@298d9a05 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@4ef37659, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@306cf3ea, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@52102734, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@4d910fd6, org.springframework.boot.test.context.SpringBootTestAnnotation@e50e93c5], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] 구글 드라이브 링크 : https://drive.google.com/drive/folders/1KhcvynthGyhTtm1G1hGlFdkD7R1eHDBN?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드에서 플러시 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @ExtendWith(SpringExtension.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member,memberRepository.findOne(savedId)); } @Test public void 중복_회원_에외() throws Exception { //given //when //then } }해당 코드에서 @Transactional 어노테이션으로 롤백이 일어나는 것은 이해했으나 이것이 Flush 자체가 일어나지 않는 다는 것이 이해 되지 않습니다. 회원가입시 em.persist()가 호출이 되면 자동으로 Flush발생했다가 다시롤백되는게 아니지 궁금해서 질문 남깁니다.
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
섹션2 인증프로세스 마지막 강의 SavedRequest 질문있습니다
강의 잘 듣고있습니다. 궁금한 점은 다음과 같습니다.로그인 성공 시, onAuthenticationSuccess 내부에서파라미터 continue를 사용하지 않고 , 다음과 같이 /home 으로 이동하도록 하였습니다.response.sendRedirect("/home")그리고 /home 요청을 처리할 때,RequestCacheAwareFilter 에서 SavedRequest 를 사용하지 않고 현재 request를 다음 필터로 넘기는 것을 보았고, 어차피 로그인이 성공되었으니, 정상적으로 /home 으로 가는 것도 확인하였습니다.SavedRequest 를 사용하면 성능상 이점이 있다고 하셨지만, 어떤 부분에서 이점이 있는지 모르겠습니다.SavedRequest 나 현재 request 는 같을텐데, 어떻게 이점이 있는지 궁금합니다 .감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA에서 H2안에 데이터가 안들어갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.일단 Hibernate 콘솔에서도 차이가 납니다. 일단은 문제없이 TestCode가 잘되서 끝까지 듣고 하는데 H2에 반영이안되었습니다. 하나하나 찾아보고 전부 다시해보았지만 똑같았습니다...H2 입니다SpringConfig 입니다.dependencies 입니다application.properties 입니다.무엇이 문제인지 알려주시면 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
어노테이션 상세 보기 단축키
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 내용]강의를 보다 보면 어노테이션이 어떻게 구현되어있는지 설명서? 를 보는 장면이 있는데, 무슨 단축키를 눌러야 볼 수 있나요?화면 캡쳐가 안되어서 강의 제목과 시간을 적습니다.엔티티클래스개발 1 22:35
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 테이블 생성 안됌
1. 강의 내용과 관련된 질문인가요?네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네프로젝트 파일https://drive.google.com/file/d/1CzJgYLZqQ724aJMnYqODWUG6MK9h1K72/view?usp=sharing로그에 테이블 생성 쿼리와 insert 쿼리까지 나갔는데도 불구하고 h2 데이터 베이스에 테이블이 보이지 않습니다.[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
의존성 주입에서 파라미터 주입과 필드 주입 관련 질문 드립니다.
안녕하세요 강사님 좋은 강의 감사드립니다.의존성 주입의 예시가 Chef의 멤버 변수에 대한 의존성 주입 예시라고 이해했는데 파라미터 주입 예시 코드에서 Chef의 멤버변수에 값을 넣어주는 코드가 없는거 같아서 잘 이해가 되지 않아 질문드립니다. 강사님께서 7분 34초에 setter와 멤버 변수를 이용해서 받는 필드 주입이 있다고 하셨는데 제가 다른 래퍼런스를 찾아본 결과 강사님께서 설명해주신 부분을 setter 주입이라고 하고 필드 주입은 @Autowired 어노테이션을 통한 주입이라고 설명하더라고요 그래서 이 부분에서 혼동이 생겨 질문 드립니다.
-
미해결스프링 기반 REST API 개발
java.lang.AssertionError: Status
안녕하세요 기선님의 강의를 보면서 스프링부트 3.x버전때로하고있는데 에러 발생되어서 문의드립니다..답글에 소스코드 올렸습니다..첫번째는 메이븐에서 <version>2.3.1</version> 을 입력 하는 경우 해당 지원 라이브러리가 지원이 안되는 경우가발생하는데 왜그러는걸까요?..두번째는 예제보고 따라하는데..아래와 같은 오류가 발생합니다..이건 왜그러는것일까요??<오류>MockHttpServletRequest:HTTP Method = POSTRequest URI = /api/events/Parameters = {}Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json", Content-Length:"403"]Body = {"id":10,"offline":false,"free":false,"eventStatus":null,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100}Session Attrs = {}Handler:Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandlerAsync:Async started = falseAsync result = nullResolved Exception:Type = org.springframework.web.servlet.resource.NoResourceFoundExceptionModelAndView:View name = nullView = nullModel = nullFlashMap:Attributes = nullMockHttpServletResponse:Status = 404Error message = No static resource api/events.Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]Content type = nullBody =Forwarded URL = nullRedirected URL = nullCookies = []MockHttpServletRequest:HTTP Method = POSTRequest URI = /api/events/Parameters = {}Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json", Content-Length:"403"]Body = {"id":10,"offline":false,"free":false,"eventStatus":null,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100}Session Attrs = {}Handler:Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandlerAsync:Async started = falseAsync result = nullResolved Exception:Type = org.springframework.web.servlet.resource.NoResourceFoundExceptionModelAndView:View name = nullView = nullModel = nullFlashMap:Attributes = nullMockHttpServletResponse:Status = 404Error message = No static resource api/events.Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]Content type = nullBody =Forwarded URL = nullRedirected URL = nullCookies = []java.lang.AssertionError: StatusExpected :201Actual :404<Click to see difference>at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59)at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122)at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:637)at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:214)at com.example.wrpi.global.events.EventControllerTest.createEvent(EventControllerTest.java:59)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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:76)at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)at org.junit.runners.ParentRunner.run(ParentRunner.java:413)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)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)Process finished with exit code -1
-
미해결토비의 스프링 6 - 이해와 원리
섹션3 학습테스트 시간 비교테스트 질문입니다.
섹션3의 학습테스트 과정 중 서로 다른 시간에 생성된 두 개의 Clock systemDefaultZone() 값을 isAfter() 로 비교 테스트 하는 중 아래와 같은 오류가 발생됩니다.검색해보니 같은 문제를 겪고 있는 분들께서 WorkAround로 테스트 안정성을 높이기 위해 ChronoUnit.SECONDS 형태와 같이 초 단위까지만 비교하여 같은지 여부를 확인하거나,Fixed Clock으로 시간을 수동으로 지정하여 검증하는 테스트 방법을 권장하고 있었습니다.참고 사이트 :https://velog.io/@weightle55/%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0-%EC%96%B4%EB%A0%A4%EC%9A%B4-%EC%98%81%EC%97%AD%EC%9D%84-%EA%B5%AC%EB%B6%84%ED%95%98%EA%B3%A0-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0강사님께서는 테스트를 바로 통과하셨는데, 차이가 무엇인지 궁금합니다.
-
미해결토비의 스프링 6 - 이해와 원리
공부한 내용을 개인 블로그에 정리해서 올려도 될까요?
안녕하세요 토비님. 우선 좋은 강의 부탁드립니다. 토비의 스프링 3.1 책으로 처음 토비님 알게되었는데, 강의도 찍으신 줄 모르고있다가 오늘 바로 구매하고 듣기 시작했습니다.다름이 아니라, 강의 내용을 개인 블로그 등에 정리해서 올려도 될까요? 일부 강의 내용 스크린샷 찍어서 올리는 건 허용되는지 궁금합니다.좋은 강의 해주셔서 감사합니다! 개인적으로 스프링에 국한되지 않은 강의도 찍어서 올려주시길 희망합니다! 경험하신 서비스들의 시스템 디자인이나, MSA 구조나, 대규모 트래픽을 받을 때 캐시나 DB설계 등등.. 토비님의 짱짱한 경력과 경험에서 오는 내용이라면, 도움이 정말 많이 될 것 같아요. 앞으로도 많은 강의활동 부탁드립니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
type=Internal Server Error, status=500
error 500이면 코드가 잘못된 거 같은데 어디가 잘못 됐는지 봐주실 수 있을까요🥺HelloControllerpackage com.example.hello_spring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @GetMapping("hello") public String hello(Model model){ model.addAttribute("data", "hello!"); return "hello"; } @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name){ return "hello" + name; } jdbcMemberRepositorypackage com.example.hello_spring.repository; import com.example.hello_spring.domain.Member; import org.springframework.jdbc.datasource.DataSourceUtils; import javax.sql.DataSource; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Optional; public class jdbcMemberRepository implements MemberRepository { private final DataSource dataSource; public jdbcMemberRepository(DataSource dataSource) { this.dataSource = dataSource; } @Override public Member save(Member member) { String sql = "insert into member(name) values(?)"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, member.getName()); pstmt.executeUpdate(); rs = pstmt.getGeneratedKeys(); if (rs.next()) { member.setId(rs.getLong(1)); } else { throw new SQLException("id 조회 실패"); } return member; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findById(Long id) { String sql = "select * from member where id = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setLong(1, id); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } else { return Optional.empty(); } } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public List<Member> findAll() { String sql = "select * from member"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); List<Member> members = new ArrayList<>(); while(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); members.add(member); } return members; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findByName(String name) { String sql = "select * from member where name = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } return Optional.empty(); } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } private Connection getConnection() { return DataSourceUtils.getConnection(dataSource); } private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (pstmt != null) { pstmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { close(conn); } } catch (SQLException e) { e.printStackTrace(); } } private void close(Connection conn) throws SQLException { DataSourceUtils.releaseConnection(conn, dataSource); } }콘솔창 오류메시지 2024-07-20T10:30:05.545+09:00 ERROR 17396 --- [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: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection] with root cause
-
미해결스프링 핵심 원리 - 기본편
DiscountPolicy null 문제
java.lang.NullPointerException: Cannot invoke "hello.core.discount.DiscountPolicy.discount(hello.core.member.Member, int)" because "discountPolicy" is null문제가 발생합니다.DIscountPolicy 를 구현한 클래스에 @Component 와 우선순위 등.. 다 했다고 생각하는데 어디서 오류가 나는지 찾을 수 없어 도움을 요청합니다.https://drive.google.com/file/d/18SR0aSD0XoEpUCw3Te4wP0r_23TViNC0/view?usp=sharing
-
미해결토비의 스프링 6 - 이해와 원리
스프링 순서 질문드려요,,
안녕하세요 토비님!! 라이브 영상이 너무 좋아서 바로 스프링 6 구매했는데요! 제가 궁금한 게 저는 자바만 열심히 판 상태이고 스프링이 처음이며 내년 상반기에는 토이프로젝트를 시도해야하는 상황입니다. 혹시 스프링 6 듣고 스프링 부트 원리를 들어야 할까요? 아니면 바로 스프링부트로 직접 프로젝트 만들어보면 될까요? 제일 좋은 건 둘 다..이겠지만 혹시라도 필수인지 궁금해서 여쭤봅니다. 그리고 번외로 강의가 진짜 몰입력 있어요!! 감사하게 보겠습니다!! ㅎㅎ
-
미해결스프링 부트 - 핵심 원리와 활용
강의를 따라했는데 매핑 정보가 등록되지 않은 것 같습니다.
public interface AppInit { void onStartup(ServletContext servletContext); } /** * 서블릿 컨테이너 모방 * 프로그래밍 방식을 서블릿 컨테이너에 등록 */ public class AppInitV1Servlet implements AppInit { @Override public void onStartup(ServletContext servletContext) { System.out.println("AppInitV1Servlet.onStartup"); // 순수 서블릿 코드 등록 ServletRegistration.Dynamic helloServlet = servletContext.addServlet("helloServlet", new HelloServlet()); helloServlet.addMapping("/hello-servlet"); } }/** * 서블릿 그 자체 * 애플리케이션 초기화 */ public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet.service"); resp.getWriter().println("hello servlet!"); } }hello.container.MyContainerInitV1 hello.container.MyContainerInitV2 이런식으로 강의를 따라 서블릿에 매핑 정보를 등록했는데, http://localhost:8080/hello-servlet을 하게 되면 404 에러가 발생합니다. 어디서 문제가 생긴걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
aop 실행에 대한 이해가 안됩니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberService에서 try/finally및 변수만 설정 해줬을 뿐인데왜 실행은 test->MemberServiceIntegration이 아니라HelloSpringApplication으로 실행을 해야 결과가 나타나게 되나요? 굳이 차이를 못느끼겠는데 왜 그런지 이해가 안가네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
첫 강의에서 만든 hello-spring 파일과 IntelliJ관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 IntelliJ에서 프로젝트 파일들을 다루는 부분이 아직 미숙하여 질문드립니다. 1강을 들으면서 실행했을 때는 강의에서 생성한 hello-spring 프로젝트를 상위 폴더인 spring에 담고 spring 폴더로 IntelliJ를 열어서 실행했습니다. 이때는 정상적으로 실행이 되었는데, 다시 실행하려고 보니 실행이 안 됩니다. 다시 다운로드 받고 검색을 해봤지만, 설정에서 idk와 grade관련된 설정만 나왔습니다. 그런데 상위 폴더인 spring이 아닌 spring 프로젝트로 생성한 hello-spring으로 IntelliJ를 실행시키니 정상적으로 폴더들(패키지들)을 인식하고 실행이 됩니다. 원래 이렇게 작동하는 것이 맞는건지 제가 설정 부분을 잘못 건드려서 발생한 문제인지 궁금합니다.
-
미해결토비의 스프링 6 - 이해와 원리
트랜잭션 테스트에서 제가 이해한 것이 맞을까요?
트랜잭션 테스트가 어려운 이유는 JPA나 JDBC에서 알아서 처리해주기 때문에 트랜잭션의 실패 지점이 어디인지를 알 수 없기 때문이고, 이를 해결하려면 트랜잭션 템플릿을 활용하는 방법이 있는 건가요?