묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
h2 설치과정
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 모든 글들을 찾아본 결과 제가 원하는 답변들이 없어서 질문합니다 군인으로 지금 사지방에서 개발을 진행하고 있는데 h2 데이터베이스에서 항상 막혀 질문합니다.h2.bat 실행이 막혀있어 진행이 불가능합니다 혹시 이러한 해결책을 아시는지 궁금합니다. 의존성으로 추가해서 하는 방법이 있던데 yml 방식과 예전버전이라 방법이 안통하는것 같습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Test클래스에서 repository를 찾지를 못하는것 같아요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]사진처럼 MemberRepositoryV1과 MemberRepositoryV1Test 가 각각 있습니다그리고 이렇게 MemberRepositoryV1 repository = new MemberRepositoryV1(); 으로 객체 생성을 하면정상적으로 아래 crud 메서드가 실행이 되는데,해당 객체 생성을이렇게 @Autowired로 바꾸면 아래의 repository.save(member)부분에서 nullpointException이 발생합니다..repository에는 @Repository를 붙여놨고 해당 test 클래스는 @component와 @service여러개 다 해봤는데도고쳐지지가 않습니다..혹시 @ComponentScan 클래스가 main 패키지에 위치해서 test패키지까지는 범위가 닿지 않아서 그런걸까요??도와주세요..ㅠ
-
미해결토비의 스프링 부트 - 이해와 원리
스프링부트 내장톰캣이 아닌 별도 웹서버 설치 가능 여부 문의
스프링부트 내장톰캣이 아닌 별도 웹서버 설치 가능 여부 문의 토비님 안녕하세요~여전히 공공기관 프로젝트 참여중입니다관리하시는 총괄 PL 께서 혹시 스프링부트 사용하면서 내장톰캣이아닌 다른 웹서버를 설치 해서 사용 가능한지를물어보시더라구요내장톰캣이 아닌 웹로직이던, 다른제품을 두고웹로그분석기나 다른 솔루션을 같이 웹서버에언져서 사용하고 싶은가 보더라구요 1.이게 가능한지 문의 드립니다. 만약 가능하다면 제가 구글링이나, 스프링문서에서 어느 부분을 찾아 보면 될까요? 2.실전에서 내장톰캣이 아닌 별도 웹서버 설치해서 연동하는 이유는 어떤것 들이 있는지도 궁금하네요급한부분 아니니 한가 하실때 알려주시면 감사하겠습니다. 수고하세요김동희 드림
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Assertion가 작성이 되지 않습니다.
package hello.jdbc1.conncection; import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import org.assertj.core.api.Assertions; @Slf4j public class DBConnectionUtilTest { @Test public void aa() { Assertions } } Assertions를 사용하려닌깐 이렇게 오류가 발생하는데 어떻게 해결해야 하나요??
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
추상화, 의존성 주입 질문 드립니다!
안녕하세요 강의를 보다가 질문 드리고 싶은 부분이 있어 작성하게 되었습니다.강의자료 2.커넥션풀과 데이터소스 이해 마지막 부분에서"외부에서 DataSource 를 주입 받아서 사용한다." 라고 설명을 해주셨는데DataSource 의 구현체를 DriverManagerDataSource를 주입 받을지 HikariDataSource를 주입 받을지 어떻게 정해지는건지 궁금합니다. 라이브러리에 현재 h2 데이터 베이스만 등록되어있어DriverManager에 h2 Driver가 의존성 주입이 되고h2 Driver 구현체를 사용함으로써DataSource에 자동으로 DriverManagerDataSource 의존성 주입이 되고DriverManagerDataSource 을 구현체를 사용함으로써 PlatformTransactionManager에 자동으로DataSourceTransactionManager 구현체를 주입 받고 MemberServiceV3_1 에서도 자동으로private final PlatformTransactionManager transactionManager;DataSourceTransactionManager를 외부로 자동으로 주입 받는게 맞을까요?? 그러면 혹시 나중에 라이브러리에 DB가 2개 이상 존재하게 되면 인터페이스에 어떤 구현체를 주입하게 되는지특정 config 에서 드라이버 및 데이터 소스, 트랜잭션 매니저 주입을 설정하게 되는건지 질문드립니다. MemberServiceV3_1Test에서 아래와 직접 같이 의존성 주입을 하는 것과 마지막에 트랜잭션 문제 해결 - 트랜잭션 매니저2 정리 부분을 설명을 듣던 중 갑자기 질문을 생각하게 되었습니다.DriverManagerDataSource dataSource= new DriverManagerDataSource(URL, USERNAME, PASSWORD); memberRepository= new MemberRepositoryV3(dataSource); PlatformTransactionManager transactionManager= new DataSourceTransactionManager(dataSource);memberService= new MemberServiceV3_1(transactionManager, memberRepository);너무 뻔한 질문이라면 죄송하다는 말씀 드리겠습니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
isEqualTo 관련 Java 동등성/동일성 판단
[질문 템플릿]1. 예 2. 예 3. 예[질문 내용]Java에서 동일성(identity)와 동등성(equality) 개념에 관련하여 강사님께서 언급하신 내용에 대해 올바르게 이해하고 있는지 질문하려고 합니다. == 의 경우 두 객체가 같은지(주소값이 동일한지) 즉, 동일한지를 판단하기 위해 사용하고,equals() 의 경우 두 객체가 같은 정보를 가지는지 즉, 동등한지를 판단하기 위해 사용합니다. // findMember Member findMember = repository.findById(member.getMemberId()); // findById 메서드 일부 발췌 Member member = new Member(); member.setMemberId(rs.getString("member_id")); member.setMoney(rs.getInt("money")); return member; // member Member member = new Member("memberV0", 10_000); findMember와 member의 경우 애초에 같은 인스턴스가 아니기 때문에 동일성 판단 시 false인 것은 당연합니다.-> 서로 다른 곳에서 new 연산자를 통해 인스턴스를 생성했으므로, 주소값이 같을 수가 없음. 동등성 판단을 위해 isEqualTo 메서드를 이용하여 판단하는데, 원래대로라면 equals() 메서드를 overriding 하여 판단해야하지만 @Data(엄밀히 말하면 @EqualsAndHashCode) 가 equals()메서드를 overriding하기 때문에 동등성 판단이 제대로 이루어져서 true 로 제대로 판단하는 것으로 이해했습니다.-> equals()메서드를 overriding 해야하는 이유는 Object 클래스의 equals()메서드를 까보면public boolean equals(Object obj) { return (this == obj); }이렇게 동일성 판단을 하는 것으로 구현되어 있기 때문에 동등성 판단을 하도록 overriding 해야 합니다. 제가 알고 있는 지식을 통해서인스턴스 간 equals()와 ==의 결과값이 다른 것을 보여주신 이유에 대해 정리한 건데, 틀리거나 빠진 내용이 있을까 싶어서 질문글 작성하게 되었습니다. 감사합니다!
-
미해결토비의 스프링 부트 - 이해와 원리
imports확장자 인식이 안됩니다. ㅜㅜ
이거 저만 그럴까요..? ㅜㅜ 하위 디렉토리도 맞습니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
url만 희한하게 null이 나옵니다..
테스트 실패해서 디버깅 돌리는데,이상하게 다른 거 다 잘 들어오는 거 같은데 url만 null이 찍히네요.. 원인이 무엇인지 모르겠습니다.. DataSourceTest의 connect() 메소드입니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Exception 예외를 지양해야되는 이유에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 Exception 예외를 지양해야되는 이유로 어떤 예외를 잡을건이 어떤 예외는 안잡을건지 알 수 없기 때문이라고만 설명해주셨는데, 그냥 다 잡아버리면 안되는 이유가 있을까요??Exception이면 의존 관계도 문제될거 없어보이는데 자세한 이유를 알 고 싶습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
MydataSourceProperties를 작성하고 DataSourceConfig를 작성하는 도중 에러가 발생했습니다.
자동 배선을 할 수 없습니다. 'MyDataSourceProperties' 유형의 빈을 찾을 수 없습니다. 라는 에러가 나오는데 해결을 못 하고 있습니다. @MyConfigurationProperties(prefix = "data") public class MyDataSourceProperties { private String driverClassName; private String url; private String username; private String password; public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }tobyspring.config.autoconfig.TomcatWebServerConfig tobyspring.config.autoconfig.JettyWebServerConfig tobyspring.config.autoconfig.DispatcherSetvletConfig tobyspring.config.autoconfig.PropertyPlaceholderConfig tobyspring.config.autoconfig.PropertiesPostProcessorConfig tobyspring.config.autoconfig.DataSourceConfigdependencies { implementation('org.springframework.boot:spring-boot-starter-web') implementation('org.springframework:spring-jdbc') testImplementation 'org.springframework.boot:spring-boot-starter-test' }어디가 문제인지 안보이네요...
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀 초기화 시점 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의자료 2p 에 커넥션 풀 초기화 부분을 보면 애플리케이션을 시작하는 시점에 커넥션 풀을 미리 확보해 보관한다고 쓰여있는데, 참고 질문의 답변을 보면 실제 커넥션을 조회할때 풀이 초기화 되는것 같습니다. 커넥션 풀의 초기화는 실 커넥션을 조회할때 되는 것 일까요?맞다면 강의자료에 있는 "애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관한다"라는 문구는 어떤 의미로 사용된 말인지 궁금합니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
이 테스트 코드가 통과하는 이유
@Test void test(){ Controller controller = new Controller(); Assertions.assertThatThrownBy(()->controller.controller()) .isInstanceOf(RuntimeSQLException.class); } ***************** static class Service{ Repository repository = new Repository(); NetworkClient networkClient = new NetworkClient(); public void service() { repository.call(); networkClient.call(); } } 지금 서비스 로직에서 메서드 두개를 호출했는데 하나는 RuntimeConnectionException이 throw되고 다른 하나는 RuntimeSQLException이 throw가 되는데 테스트 코드가 성공할 수 있나요??
-
미해결토비의 스프링 부트 - 이해와 원리
스프링 spring get/post 보안 관련 문의 드립니다
스프링 spring 보안 관련 문의 드립니다 토비님 안녕하세요 ~여전히 공공기관 프로젝트에 참여 중 인데요스프링 보안 관련 해서 문의 드립니다현재 기 구축되어 있는 프로젝트 소스에서 고도화 및 신규 프로그램 개발 중입니다그러던 중 공공기관 관리자 담당자가보안 관련 지적을 하셨습니다 -.공무원 담당자 지적사항 내용 https://www.url.com?paramA=파라미터a¶mB=파라미터b => 현재 일반 조회는 스프링 겟 매핑 방식 으로 하고 있습니다사이트를 사용하는 일반 유저가브라우저 url 주소창에 파라미터만 수정해가면서 조회 하면조회 결과가 달라져 나오는데 이거 보안상 문제 있는거 아니냐고 따져 지적을 합니다 기 구축되어 있는 소스에는 request 할때따로 인코딩/디코딩이 되어 있지 않는데토비님이 경험해오신 스프링 get/post 보안관련 지적 사항이 나오지 않을려면저희 프로젝트에서 어떻게 전체 소스(js, java ) 에 어떤 보안 관련 기능을 추가 할 수 있을까요? 참고로 구글도 검색어에 '토비' 라고 치고개발자 도구 열어서 payload 보면 한글 그대로 넘어가던데이게 공무원 담당자가 보안 관련 지적 하는게 맞는 건지도저는 모르겠습니다한가하실 때 시간 나시면 조언 부탁 드립니다감사합니다 수고하세요~ 김동희 드림 #토비#토비의스프링#spring#스프링#보안#get#post#parameter#파라미터#문제
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
JDBC 인터페이스와 데이터 소스
둘다 java.sql에 있고"JDBC 인터페이스는 커넥션을 생성하는 방법을 추상화" "데이터소스는 생성된 커넥션을 획득하는 방법을 추상화 " 이 차이가 맞나요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀 설정 관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]강의 잘 보고 있습니다현업에서 보통 와스에서 커넥션 설정시 어떤 프로퍼티를 주로 설정하는지 알고 싶습니다. 그리고 maximumPoolSize = minimumIdle 같은값으로 명시적으로설정하나요?? minimumIdle 을 설정하지 않으면 default 가 maximumPoolSize 와 같으니 설정을 안하는게 맞는지요??(제가 개발자가 아니라 테스트는 못해보고 문의드립니다 .)
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
[제안] H2 데이터베이스 설정
JDBC 이해.pdf 강의 자료 중 H2 데이터베이스 설정 부분에 대해 다음과 같이 추가 제안드립니다. h2 설치 파일을 다운로드 하면 h2.sh 파일을 바로 확인할 수 없어 당황했는데, 강의 영상에서 터미널 path를 보고 bin 디렉토리 안에 파일이 있다는 것을 유추할 수 있었습니다. 이에, 아래와 같이 명시적으로 디렉토리 이동에 대한 내용을 추가하면 다른 수강생분들에게 도움이 될 것 같습니다:)[기존]MAC, 리눅스 사용자 권한 주기: chmod 755 h2.sh 실행: ./h2.sh[추가]MAC, 리눅스 사용자 디렉토리 이동 : cd bin 권한 주기: chmod 755 h2.sh 실행: ./h2.sh
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
예외 복구 처리 시 런타임 예외로 전환 필요성
체크 예외를 런타임 예외로 전환하는 것에 대해 의문점이 있습니다.리포지토리에서 체크 예외인 SQLException을 런타임 예외인 MyDBException으로 변환하는 것은 서비스의 SQLException에 대한 의존을 제거하기 위함인데특정 케이스의 예외(중복 키 발생)인 경우 복구를 위해 레퍼지토리에서 에러코드로 SQLException을 분리하고 코드에 따라 다른 런타임 예외를 만들어서 던집니다.이 때 서비스에서는 해당 에러 복구를 위해 try-catch로 결국 해당 런타임 예외를 잡는 코드를 추가해야 합니다. -> 런타임 예외에 대한 종속이 생김 그렇다면 이렇게 예외 처리에 대한 목적이 분명한 경우 SQLException 예외 코드에 따라 (Exception)을 상속받은 체크 예외를 만들어서 던지게 되면 예외를 누락할 위험성도 없고 더 좋은것 아닌가요?-> 어차피 직접 생성한 예외에 대한 종속이 서비스에서 발생하였으므로 왜 굳이 런타임 예외를 상속받은 예외를 생성해서 던지는 지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 풀 사용 시 세션 생성 시점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]커넥션 풀이 10개의 커넥션을 생성하면 세션도 10개가 만들어진다고 하셨는데, 커넥션 풀에 커넥션을 생성하는 시점에 세션이 만들어지는 것인지 아니면 클라이언트가 커넥션 풀의 커넥션을 꺼내서 사용할 때 세션이 만들어지는 것인지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
h2 database 연결 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]h2 데이터베이스와 스프링을 연결할 때, application.yml 파일에 datasource 정보를 넣어 연결하는 방법과 해당 강의에서 진행하는 DBConnectionUtil 클래스를 만들어 직접 연결하는 방법이 같은 기능을 수행하는 건가요?
-
미해결토비의 스프링 부트 - 이해와 원리
스프링 검색 유입 경로 pc or 모바일 구분 방법 문의 드립니다
안녕하세요~ 토비님 참여중인 프로젝트가 현재 포탈 사이트 성격입니다 해당프로젝트에서 커뮤니티 기능이 있는데커뮤니티 기능 중에 접속 유입 경로를 따져통계 조회를 해야 하는 기능이 있습니다 개발하는 커뮤니티에 pc 로 접속 할 수 있고 모바일로 접속 할 수 있습니다 PC or 모바일 중어느 기기를 통해서 해당 포탈 커뮤니티에 접속해서 검색했는지따질려면 스프링의 어느 기술 라이브러리를이용해서 따지면 되는지 문의 드립니다감사합니다 수고하세요. 김동희 드림 #sping#스프링#pc#모바일#접속 #구분