묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
memberId 맴버변수를 String 으로 잡은 이유
도메인의 Member 클래스 의 memberId 맴벼변수 타입이 String인 이유가 궁금합니다 jbdc에 대표 id 등록은 숫자형 타입이 아닌 문자형으로 해야 하는지 궁금합니다
-
미해결토비의 스프링 부트 - 이해와 원리
섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)
안녕하세요 선생님.섹션7 자동구성 정보파일 분리 수업 듣던와중에 문득 강의 이해하는 도중 질문이 있어서요.질문 1). @MyAutoConfiguration 어노테이션을 만드신 후,DispatcherServletConfig 과 TomcatWebServerConfig 클래스에다가 이걸 붙혀주셨어요. 그리고 그 목적은 @MyAutoConfiguration 에 @Configuration 이 작성되어있기때문에 @MyAutoConfiguration을 어떤 클래스에 붙히면 @Configuration 클래스를 선언한것과 동일한 효과를 갖는다는걸 보여주기 위함이라고 말씀하셨고 그렇게 이해를 했는데요.@MyAutoConfiguration 를 붙힌 다른 목적과 이유도 있을까요 ? 질문2) 그리고 그 이후에 Test 파일중 ConfigurationTest.java 안에 있는 클래스에 @Configuration 와 proxyBeanMethods = false 속성값을 적용해서 예시로든 생성자가 다르다고 출력되는걸 구현해주셨는데,저 속성값을 Test 파일이 아닌 일반 java 패키지에 있는 DispatcherServletConfig 나 TomcatWebServerConfig 에 @Configuration 이 붙어있다면, 여기다가도 프록시빈메서드 속성값을 적용시키는 경우도 있을 수 있을까요 ? 질문3). 스프링을 실무에서 사용하지 않아서 학습하고 있는데, 점점 후반부로 갈 수록 구조에 대한 이해보다는 구조 자체를 암기를 해야 그나마 강의를 따라가는 느낌이 드는데,반복 수강만이 답일까요 ??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
close() 에 실패한 자원의 처리
finally { if ( rs != null ) try{rs.close();}catch(Exception e){} if ( pstmt != null ) try{pstmt.close();}catch(Exception e){} if ( conn != null ) try{conn.close();}catch(Exception e){} }자원을 해제하는 도중 예외가 발생하면 나머지 자원이 해제되지 않을 수 있기에 다음과 같은 try 문으로 감싸주어야 한다고 이해했습니다. 그러면 예외가 발생해 해제에 실패한 자원에 대해서는 다시 close()를 하거나 다른 조치를 취하지 않아도 메모리 누수나 다른 문제가 없는 건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
sql-error-codes.xml에 없는 DB 종류를 사용할 경우
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 파일을 커스터마이징 해야 하나요 ? 예를 들어 티베로 + 스프링 조합으로 개발을 하게 되면 예외 처리를 개발자가 직접 해줘야 한다고 생각하면 될까요 ?
-
미해결토비의 스프링 부트 - 이해와 원리
WebApplicationContext를 DispatcherServlet에 this로 넘기는 것
안녕하세요.스프링 강의 먼저 듣고 부트 강의를 듣고 있습니다.이번 강의에서 초반에는 this가 아니라 applicationContext 변수를 넘겼기 때문에 변수의 타입에 Web을 추가해서 넘겨줬었는데요.후반에는 this로 GenericWebApplicationContext를 넘겨주니까 applicationContext 변수의 타입은 다시 GenericApplicationContext로 하는 것도 괜찮은 방법일까요? 확인해보니까 registerBean 메서드는 GenericApplicationContext의 메서드여서 질문드려봅니다.해당 클래스는 인터페이스 클래스가 아니어서 뭘 써도 상관이 없는걸까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Transactional 질문 있씁니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 재직중인 직장 소스를 보면 트랜잭션을 걸어야하는 서비스단 메서드에 @Transactional의 격리 수준이 READ UNCOMMITTED 로 모두 되어있습니다. 하나도 빠짐없이.. 상사분의 말로는 테이블 락 발생을 방지하기 위해 이렇게 한다는데... 영한님의 의견이 궁금합니다. 제가 생각했을때 이는 적합하지 않은 방법같거든요. 정합성이 깨질뿐더러 테이블 락은 다른 방법으로 해결해야지 이건 아닌것 같더라구요.. 답변 기다리겠습니다!
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
try-with-resources 구문 사용 관련 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]해당 강의에서는 save(Member member)를 작성하면서 try-catch구문을 썼는데 아래처럼 try-with-resources구문을 사용하면 생길 수 있는 문제가 있어서 try-catch구문을 쓰는건가요?try (Connection con = getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; } catch (SQLException e) { log.error("db error", e); throw e; }제가 혼자 생각해봤었을 때의 이때의 생길 수 있는 문제점은 try(...)안의 자원들의 close()가 호출될 때가 아닌 생성될 때의 오류가 생기면 그걸 catch로 잡거나 그러지 못할수도 있다는 것이었습니다.실제로 h2데이터베이스를 끄고 실행해봤었을 때,Connection con = getConnection(); 부분에서 예외가 발생했고, catch로 잡지 못하는 모습이었습니다. 이처럼 자원 생성에서부터 예외가 발생할 때 try-with-resources를 사용하는 것은 적절치 않다고 생각하면 되는걸까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
try catch
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.현재 '데이터베이스와 연결' 3:57를 보고있는데요화면과 똑같이 작성한 후 알트+ 엔터로 선생님과 같이 Surround로 시작하는 try/catch를 적용하려는데 저는 위 화면처럼 try catch가 아닌 try with resource block이 나오는데저걸 누른 후에도이런식으로 이해하기 어려운 제안이 생기고 catch가 없이 나오는데요어떤 연유로 이런식으로 되는건지 궁금합니다지금 이대로 가면 강의와 제가 쓴 코드가 다를 것 같아 직접 쳐보려고 하는데 뭐가 어떻게 바뀌어서 이렇게 되는지 알려주세요그리고 받아적는 와중에도이렇게 되는데 누르면강의처럼 cath(SQLException e) {e.printStackTrace();}이렇게가 아니라이렇게 되네요 도대체 뭐가 어떻게 바뀐거고 뭐가 맞는건지 모르겠습니다 ㅠ이부분에서 런타임익셉션으로 떤진다고 하셨는데 정작 적은 건 IllegalStateException(e);인데저는 런타임 익셉션으로 나옵니다 ㅠ
-
해결됨토비의 스프링 부트 - 이해와 원리
인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.
스캐닝을하는 어노테이션으로 하위 config정보를 갖고있는@EnableMyAutoConfiguration를 갖고있는걸 알고 있는데요.이 어노테이션에는 2개의 config를 갖고있습니다.각각의 config들은 동일한 어노테이션을 지니고 있습니다.@Configuration궁금한건 스캔 하는 부분인 MySpringBootApplication에서는 직접적으로 빈을 선언하지 않더라도 @configuration를 소스상에 추가되어 있는데요. 직접빈을 주입하지 않더라도 @configuration 어노테이션을 필수로 넣어줘야하나요? 사실 여기서 어노테이션을 빼고 실행해봤는데 정상적으로 실행되는 것을 확인 했습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
질문드립니다.
스프링부트 3.4.1 버전이 현재 25.1.13기준으로 스프링이니셜라이저에서 기본으로 선택되는데요.현 강의에서 사용하는 방식대로 강의 따라가도 될까요?이니셜라이저에서 프로젝트 생성후에 강의에서 사용된 소스 임포트 후에 javax => jakarta로 변경하고,eclipse temurin jdk23 버전을 사용해서 강의 따라가도 될런지요?혹시 build.gradle 정보가 스프링부트 3.4.1 기준으로 작성된 파일 공유 부탁드려도 될까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
spring boot 3.3.7로 학습중입니다.
강의상에서는 @RestController 어노테이션을 넣지 않더라도 문제없이 매핑되는걸 확인할 수 있는데요.혹시 버전이 최신버전으로 바뀌면서 이 어노테이션을 넣지 않으면 매핑이 안되고 그런걸까요??일단 3.3.7에서는 [에노테이션 매핑 정보 사용] 이 강의편에서 나온 것 처럼 @RestController를 빼고 하면 매핑정보를 못 찾는 듯 싶습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도
과목명 : 프로퍼티 빈의 후처리기 도입 개요 : 프로퍼티를 객체로 추출하여 사용할 때 TomcatServerConfig에 @Import(ServerProseties.class)를 사용하는 이유와 이를 제거하였을 때 ServerProperties 클래스를 주입받지 못하는 이유가 궁금합니다. 세부 :ServerProperties.java의 경우 @MyConfigurationProperties 메타 어노테이션을 통해 @Component 어노테이션이 설정되어 Bean으로써 등록이 가능하다고 생각하였습니다. 그러므로 ServerProperties.java는 서비스내에서 유일하게 선언된 ServerProperties 객체이기 때문에 굳이 @import문을 별도로 선언해줄 필요 없다고 생각하였습니다. 따라서 Spring이 기동 될 때 TomcatServerConfig의 servletWebServerFactory에 자동으로 의존성이 주입 될 것이라 생각하였습니다. 그래서 실제로 @ImportServerProperties.class)를 TomcatServerConfig.java에서 지우고 서비스를 기동하였을 때 다음과 같은 에러가 발생하면서 서비스 구동에 실패 하였습니다. 2025-01-13T06:55:22.586+09:00 ERROR 1088 --- [tobySpringBoot] [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method servletWebServerFactory in tobyspringboot.config.autoConfig.TomcatWebServerConfig required a bean of type 'tobyspringboot.config.autoConfig.ServerProperties' that could not be found. Action: Consider defining a bean of type 'tobyspringboot.config.autoConfig.ServerProperties' in your configuration. 이러하여 해당 부분에 왜 Import를 선언하는지 질문 드립니다!!
-
해결됨토비의 스프링 부트 - 이해와 원리
spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.
예제 초반부를 진행하고자 하는데요..혹시 3.x버전 대를 사용해도 큰 문제가 없는걸까요? 참고로 현재 선택 가능한 가장 하위버전은 3.3.7입니다^^;
-
미해결토비의 스프링 부트 - 이해와 원리
Springboot 3.2 이상에서 파라미터 추론관련
스프링부트 3.3.7 버전으로 실습하다가 DispatcherServlet 이 hello() 메서드의 파라미터 String name을 못가져오는 에러를 겪었습니다.검색좀 해보니 부트 3.2, 스프링6.x 이상부터는 더이상 파라미터 추론을 기본으로 하지 않는다고 하네요. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes 컴파일 시 -parameters 옵션을 사용하거나@RequestParam() 어노테이션을 사용하여 해결가능합니다 !
-
미해결토비의 스프링 부트 - 이해와 원리
binding error
질문 전 말씀드리면, Kotlin + Spring Boot를 사용하고 있습니다. Datasource Connection Test 코드를 작성하고 테스트할 때 application.yml에서 properties 객체로의 binding시 이슈가 있습니다.정확하게는 prefix가 존재할 때 binding시 String에서 Properties 객체로 binding을 시도하다가 에러가 발생하고 있고, application.properties 해당 문제가 발생하지 않음과 달리 application.yml에서 prefix 존재하는 경우 발생하고 있습니다.혹시, 강의에서 진행해주셨던 postProcessAfterInitialization의 내부 로직에서 application.yml + prefix 조합에서의 별도 처리가 필요한걸까요?binding error를 확인하기 위해 작성한 테스트 코드는 아래와 같습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
Arrays.copyOf 메서드의 타입 세이프
컬렉션을 어레이로 만들때 3가지 방법을 보여주셨는데, Arrays.copyOf 메서드가 유일하게 타입 세이프가 되지 않는 메서드고 나머지가 타입세이프 되는걸로 알고있어서요. 혹시나 다른 학습자분들 참고 하시길 바랍니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
체크 예외 -> 런타임 예외 변환 시 생성자
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서비스 계층의 순수성을 위해 체크 예외를 런타임 예외로 변환해서 던지고, 런타임 예외로 변환 시 반드시 기존 체크 예외를 포함하여 던져야 한다.왜냐하면 예외 발생 시 어떤 예외 때문에 해당 예외가 발생했는지 스택 트레이스를 참고하기 위해서이다. 그러면 차라리 런타임 예외 클래스의 생성자에서 예외를 포함하도록 강제하면 예외를 포함하여 던져야 한다. 는 부분이 해결 될 것 같은데요강의에서는 다음과 같이 파라미터가 없는 기본 생성자를 만드는 특별한 이유가 있는 것인지 아니면 중요한 주제가 아니라 남기셨는지 궁금합니다. public class MyDbException extends RuntimeException { public class MyDbException() { // 이 부분을 없애고 다음의 생성자만 남김 } public class MyDbException(Throwable cause) { // 이 생성자만 강제하면 반드시 예외를 포함하여 던져야 하므로 문제가 해결됨 } }
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV3_2Test에서 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.영한님과 똑같이 했는데 왜 오류가 날까요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV2Test.java 에서 findById 메서드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 분명 MemberServiceV2에서 매개변수로 Connection con을 추가 해주어서, Test시에도 findById에서 con을 같이 추가해줘야 할 것 같은데, 영한님께서는 아무것도 안던지고 바로 테스트를 해서 정상 작동이 되었네요. 아마도 V1에 con부분은 없어서 정상작동 된거같은데, con을 넣어주어야 맞는거 아닌가요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
2024년 11월 기준 설치 방법입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]오랜만에 다시 복습하러 들어와서 처음부터 보는데 역시 설정이 반이네요 ㅎㅎh2 측에서 DB 자동 create를 막아두면서 시작부터 막히신 분들이 많은것같습니다.h2에서 제공하는 데이터베이스 직접 생성 방식을 사용하는 것을 권장드립니다.링크강의와 동일하게 진행하기 위해서는 URL 입력부분만 잘 입력해주시고나머지 모두 엔터로 넘어가신 후에 quit로 탈출하시면 됩니다.