묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DataSourceUtils.getConnection() 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님께서 설명하신 내용 중에 DataSourceUtils.getConnection()는 트랙잭션 동기화 매니저에서 관리하는 커넥션이 있으면 해당 커넥션을 반환한다고 말씀하셨습니다.근데 여기서 제가 궁금한 부분은어떤 커넥션인지 구분하는 부분이 없는데 어떻게 구별해서 커넥션을 반환하는 건가요?예를 들어, A통장에 대한 트랙잭션을 시작한 뒤에 A통장 커넥션이 트랙잭션 동기화 매니저에 존재할 때,동시에 B 통장도 트랙잭션을 시작하고 B 통장의 커넥션이 트랙잭션 동기화 매니저에 존재하는 상황에서 데이터 접근 로직에서 트랙잰션 매니저에 접근해서 커넥션을 가져오는 과정에서 어떻게 A 커넥션, B 커넥션을 구분해서 반환하는 건가요??설명 부탁드립니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
spring bean 에 대해서 질문 있습니다.
bean 등록 기준이 있을까요? 1안public class ExcelExtractor { private final File file; public List<Data> excetued() { // extract logic } } 2안@Component public class ExcelExtractor { public List<Data> excetued(File file) { // extract logic } } 1안은 스프링 빈 등록 없이 사용하는 코드입니다. 2안은 빈으로 등록하여 사용합니다. 빈으로 등록했을 때 장점은 의존성 주입을 통해서 어떤 객체를 의존하는지 한 눈에 알 수 있다고 생각합니다.1안으로 사용하면 ExcelExtractor 객체는 서비스 클래스의 메소드 안에서 생성됩니다. 의존성이 숨겨져 있다고 생각합니다.2안으로 사용하면 서비스 클래스 의존성에 ExcelExtractor을 추가해서 명시적으로 표시할 수 있습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Component
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MemberRepositoryV1 에 @Repository 나 @Component를 해줘야 스프링빈에 등록이 되고MemberServiceV1 에서 @AutoWired로 의존성주입이 가능한게 아닌가요? 헷갈려서 질문 남깁니다.아니면 현재 실제 서버를 띄우는게 아닌 TEST 만 진행 중이라서사용을 안하고 있는건가요?
-
미해결토비의 스프링 부트 - 이해와 원리
독립 실행형 스프링 애플리케이션까지 본 수강생입니다. 질문있습니다.
질문은 다음과 같습니다...!====Spring Container 제작시, 자기자신을 Bean으로 등록하는 이유==== 코드를 수정했습니다.Servlet Container, DispatcherServlet을 Bean으로 등록하는 코드를 config 패키지의 클래스로 따로 빼버렸습니다.[ :이유:ComponentScan은 자기자신을 탐색범위에 넣지 않는다->클래스 내부의 Configuration을 찾지 못한다-> Configuration만 외부로 빼면 자기자신을 Bean으로 등록하지 않아도 된다] Spring Container를 만드는 과정에 Servlet Container를 만들지 않습니다. 분리시켰습니다.(순서대로 만들어진다는 느낌을 받기위해...) 다음은 제가 작성한 main 문의 코드입니다.@ComponentScan public class DemoApplication { public static void main(String[] args) { //Spring Container 구성정보 AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); // Bean 등록 applicationContext.register(DemoApplication.class); //Spring Container 실행(초기화) applicationContext.refresh(); // ========================================= //Servlet Container 구성정보 ServletWebServerFactory serverFactory = applicationContext.getBean(ServletWebServerFactory.class); //servlet 만들기 DispatcherServlet dispatcherServlet = applicationContext.getBean(DispatcherServlet.class); dispatcherServlet.setApplicationContext(applicationContext); //Servlet Container 인스턴스 WebServer webServer = serverFactory.getWebServer(servletContext -> { servletContext.addServlet("dispathcerServlet", dispatcherServlet).addMapping("/*"); }); //서버 실행 webServer.start(); } }1번의 이유로,// Bean 등록 applicationContext.register(DemoApplication.class);이걸 주석처리했습니다.같은 클래스내에 ApplicationContext가 있고, 생성도 완료한 시점이기 때문에, 본인이 Bean에 직접 접근해서 꺼내 써도 된다고 생각했습니다.실제로도 직접 Bean을 꺼내서 주입시켜버립니다. ServletWebServerFactory serverFactory = applicationContext.getBean(ServletWebServerFactory.class); DispatcherServlet dispatcherServlet = applicationContext.getBean(DispatcherServlet.class); 따라서 저는, Spring Container가아래 2줄의 코드에서 Bean을 다 생성하고 DI까지 완료한줄 알았습니다.//Spring Container 구성정보 AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); // Bean 등록 //applicationContext.register(DemoApplication.class); //Spring Container 실행(초기화) applicationContext.refresh();어차피 서블릿 환경 설정도 저 어딘가에서 ComponentScan 해서 Bean으로 등록하기 때문에자기자신을 Bean으로 등록하는건 필요 없는줄 알았습니다. 그리고 발생한 에러 입니다.No qualifying bean of type 'org.springframework.boot.web.servlet.server.ServletWebServerFactory' available =======주석만 풀면 잘 돌아갑니다. 왜이럴까요...?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Jpa애서 jdbc의 commit을 안쓰고 따로 commit의 구현체를 만든 이유가 무엇일까요?
제가 이해하고 있기로는 jpa이 jdbc위에 올려져 db의 종류에 구애받지 않고 자바 코드로 쿼리를 짤 수 있는 도구라고 알고 있습니다. Jpa도 jdbc를 쓴다면 jpa에서 트랜잭션 구현체가 따로 있는것의 필요성이 의아해져서 질문드립니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DataSource 구현체를 변경하는 일이 잦나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요!강의를 듣고 DataSource의 최대 장점이 추상화라고 이해했습니다.사용하는 입장에서는 구현부에 의존하지 않아도 된다는 것인데요.그런데 실무에서는 과연 DataSource 구현체를 갈아끼우는 일이 잦은지 궁금합니다.여러 후보군들 사이에서 HikariCP와 같은 커넥션 풀이 압도적으로 우세하다면, 커넥션 개수와 같은 DataSource 설정을 변경하는 일은 있을 수 있어도 DataSource 구현체 자체를 변경하는 일은 적지 않을까 생각이 들어서요!
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 ACID 에 대한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용]ACID 중 일관성에 대한 질문이 있습니다.자료를 보면 "데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야한다" 라고 작성되어 있는데요. name 컬럼을 가진 테이블이 있고 해당 컬럼은 null 값을 허용하지 않는다는 제약조건을 가진다고 가정하겠습니다. 트랜잭션이 진행되는 과정에서 name 이 null 로 변경되었다가 최종적으로 트랜잭션이 종료되기 전에 name 에 값이 채워진다면 이 부분도 일관성을 만족하지 못한다고 할 수 있을까요? 아니면 트랜잭션이 종료되는 시점에는 제약조건을 만족했으니 일관성을 만족한다고 보는걸까요? 만약 일관성을 만족하지 못하는 것이라면 해당 트랜잭션은 rollback 되나요?
-
미해결토비의 스프링 부트 - 이해와 원리
의존성 주입과 NullPointerException
안녕하세요, 토비님.강의를 수강하다가 문득 의문이 들어서 토비님 말씀을 듣고 싶어서 질문을 드립니다.의존성 주입을 생성자가 아닌 Setter나 필드 인젝션(변수 위에 @Autowired 붙이기)으로 하면, 1) 빈이 생성되는 시점이 아닌 런타임에 의존성 주입이 이루어지고, 2) 따라서 NullPointerException이 발생하는 경우가 생길 수 있을까요?예를 들어서 @RestControllerclass UserController { @Autowired UserService service;} 같은 코드가 있으면, 빌드할 때 UserController 빈이 만들어지고, service의 메소드를 사용하려는 시점에 의존성 주입이 이루어지게 되는 것일까요?따라서 이런 경우 NullPointerException이 발생할 수 있을까요?검색을 통해 찾아보아도, 어떤 내용이 정확한지도 불분명해서 질문을 드리게 되었습니다.혹시 추천해 주실 글이 있으신지요?읽어주셔서 감사드립니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
키워드 final에 대한 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]private final MemberRepositoryV1 memberRepository;위 코드에서 MemberRepositoryV1의 객체 memberRepository에final이라는 키워드를 사용하는 이유는 아래와 같다라고 이해하면 되나요?"final 키워드를 붙인 객체 memberRepository를 생성함으로써 MemberServiceV1의 클래스 내에선MemberRepositoryV1의 객체는 memberRepository가 유일하고, MemberRepositoryV1의 객체는 객체를 더 이상 생성할 수 없다."이렇게 이해했는데 옳게 이해한 것인지 모르겠습니다.설명 부탁드립니다.항상 친절한 답변 감사합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV1 @RequiredArgsConstructor 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님께서 코드에서@RequiredArgsConstructor은final이 붙거나 @NotNull이 붙은 필드의 생성자를 자동생성해주는 롬복 어노테이션이라고 알고 있습니다.근데, 이 코드에서 @RequiredArgsConstructor가 사용된 이유가 무엇인가요?private final memberRepositoryV1 memberRepository;를 사용하는 이유는 싱글톤으로 코드를 작성하기 위해(즉, memberRepositoryV1이라는 하나의 객체를 사용)이라고 이해하고 있습니다.혹시, @RequiredArgsConstructor를 사용한 이유가 싱글톤 코드를 작성하기 위한 것과 연관이 있는 것인가요?항상 친절한 답변 감사합니다.
-
미해결토비의 스프링 부트 - 이해와 원리
안녕하세요 강의 질문 드립니다
안녕하세요,프로버티 빈의 후처리기 도입 강의 내용 질문드립니다. 질문 :ServerPropeites에 @Component 자체가 없어도 되지 않나요??애초에 @Component 있어도 ComponentScan 대상이 아니라고 판단했습니다.. 패키지가 분리되어있다고 판단했습니다..아래 부분만 있어도 되는것 아닐까요? @Import(ServerProperties.class) public class TomcatWebServerConfig {
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
출력 로그 중 Pool stats가 출력되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강사님과 출력 로그를 동일하게 만들기 위해서 강의 자료에서 제시한 대로 설정을 마쳤습니다.근데 강사님의 출력 로그엔 Pool stats가 있는데 저는 그 부분이 출력되지 않습니다어떻게 출력할 수 있나요?항상 친절한 답변 감사합니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
[오타문의] 스프링 JdbcTemplate 예시
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예외를 확인하기가 편리하다. 인 것 같습니다! 감사합니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
db1 - 스프링과 문제해결 예외처리,반복 강의 관련
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 예외 추상화 이해 파트 부분 강의에서 스프링이 제공하는 예외 변환기 부분에서 test 코드 짜실때 DataSource dataSource;@BeforeEachvoid init(){ datasource = new DriverManager~();}이런 식으로 작성하셨는데 @BeforeEach 안쓰고 @Test 코드 작성하기 전에 테스트 클래스 상위에 DataSource dataSource = new DriverManager~();이런식으로 작성하는건 안되나요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
db1 - 트랜잭션 매니저 강의 관련 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]트랜잭션 매니저 관련 강의를 듣고 있는데요 예를 들어 private final PlatformTransactionManager transactionManager;이렇게 해서 트랜잭션 매니저를 주입받는다고 했는데 이 클래스가 빈으로 등록된것도 아닌데 어떻게 주입받는건가요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀의 세션 처리
안녕하세요 강의 잘 듣고있습니다.커넥션 풀과 세션처리에 관해서 궁금증이 생겨 질문드립니다.커넥션이 맺어질때 클라이언트와 DB 간에 세션이 생성되고 커넥션이 종료되면 세션도 닫힌다고 이해했습니다. 그렇다면 커넥션을 닫는게 아닌 풀에 반환할때도 세션이 닫히나요? 만약 닫힌다면 어떻게 세션을 다시 열 수 있는건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
h2의 JdbcConnection 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님 자료에서h2 커넥션은 JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현하고있다.라고 나와있습니다.혹시,1.JDBC 표준 커넥션 인터페이스인 Connection 인터페이스가 존재한다.2.h2 Connection은 JDBC 표준 커넥션 인터페이스인 Connection 인터페이스를 상속 받아서 실질적인 기능을 구현한다.3.즉, h2 Connection은 JDBC 표준 커넥션 인터페이스인 Connection 인터페이스의 구현체이다.이런 순서로 이해하면 옳게 이해한 것이 맞나요? 항상 친절한 답변 감사합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
JDBC와 API 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 라고 말씀하셨습니다.근데 API의 정확한 의미가 무엇인가요?API는 애플리케이션 프로그램 인터페이스로 누군가가 코딩을 쉽게 할 수 있도록 만들어 놓은 것이라고 이해하고 있습니다.예를 들어, 계산기 API를 만들어 놓으면 다른 사람들이 계산기 API를 가져와서 사용하면 계산기를 쉽게 구현하고 사용할 수 있는 것입니다.근데 데이터 API처럼 공공 데이터를 사용할 때, 데이터베이스처럼 인증 키를 받아서 데이터를 가져올 수 있는 것도 API라고 하던대 어떤 설명이 맞는건가요?2개다 옳은 설명인건가요?아니면 데이터 API란 "해당 데이터를 가져오는 기능"을 가진 API라는 의미로 이해하면 되나요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DB1 - JDBC 개발 조회 강의 관련 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jdbc 개발-조회 강의에서 MemberRepositoryV0Test 에서 findById 에서 isEqualTo()에서 결과가 참인 이유가 롬복의 @Data 가 equals()를 오버라이딩해서라고 하셨는데 롬복의 @Data 를 만약 안쓰면 isEqualTo() 값이 false가 되나요??@Data 안 써도 isEqualTo() 자체가 자바의 equals() 랑 비슷해서 참이 되어야 하는거 아닌가요??
-
해결됨토비의 스프링 부트 - 이해와 원리
PropertySourcesPlaceholderConfigure 등록
안녕하세요. 좋은 강의 잘 보고 있습니다.토비님이 저술하신 토비의 스프링 3.1의 내용을 보면 BeanFactoryPostProcessor를 구현한PropertySourcesPlaceholderConfigure를 Bean으로 등록할 때는 static 메소드를 통해 등록해야 한다고 봤었습니다.현재 보고 있는 스프링 부트 강의에서는 이를 일반 메소드로 등록하셔서 사용하시던데,스프링 부트에서는 static 메소드로 등록하지 않아도 문제가 없을까요?