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를 사용하려닌깐 이렇게 오류가 발생하는데 어떻게 해결해야 하나요??
안녕하세요 이렇게 좋은 Spring Security에 애를 많이 먹던 도중 늦게나마 열심히 듣고 있는 사람입니다. 강의를 들으면서 Spring Security 6.0 이상 버전으로 혼자 마이그레이션 해보며 공부를 진행하는데요.. 다른 분들은 모르겠지만 저는 6.0 이상 버전에서의 다중 보안 설정에서 애를 좀 먹어서.. 혹시나 저 같으신 분들이 있으실까봐 글을 남깁니다..! 다름이 아니라 Spring Security 6.0 이상 버전에서는 먼저 오버라이드해서 함수를 구현하는 것이 아니라 컴포넌트화 시켜서 진행합니다. 또한 HttpSecurity 안의 내용을 구현하는데 변경점이 있다는 것이 가장 큰 차이점인 것 같습니다. 예를 들어 UserSecurityConfig, AdminSecurityConfig를 만들어서 각 경우에 따라 다른 설정을 적용하고 싶은 경우에 두 가지의 config 파일을 만들 수 있다고 가정하면.. 저의 경우에는 AdminSecurityConfig에서 지정한 부분이 권한 정보에 따라 접근이 막히지 않고 다 접근이 가능한 ("/admin/pay"를 user가 접근 가능) 상황이었습니다. 뭐가 문제인지 한참을 찾던 도중 https://docs.spring.io/spring-security/reference/servlet/configuration/java.html 공식 문서를 통해 답을 찾았습니다. 간략하게 해결법부터 말씀드리자면 path로 접근 제한을 하는 경우에 http.securityMatcher()를 사용해야 한다는 점 입니다. 이렇게 하면 아주 잘 구분이 되더군요..! 혹시나 저처럼 하시는 분이 계실까봐 남깁니다..! @Bean @Order(0) public SecurityFilterChain adminFilterChain(HttpSecurity http) throws Exception{ http .securityMatcher("/admin/pay") .authorizeHttpRequests(request -> request.anyRequest().hasRole("ADMIN")); return http.build(); } @Bean @Order(1) public SecurityFilterChain systemFilterChain(HttpSecurity http) throws Exception{ http .securityMatcher("/admin/**") .authorizeHttpRequests(request -> request .anyRequest().hasAnyRole("SYS", "ADMIN")); return http.build(); } @Bean @Order(2) public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ http .authorizeHttpRequests(request -> request .requestMatchers(antMatcher("/user/**")).hasRole("USER") .anyRequest().authenticated());
안녕하세요 강의를 보다가 질문 드리고 싶은 부분이 있어 작성하게 되었습니다. 강의자료 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); 너무 뻔한 질문이라면 죄송하다는 말씀 드리겠습니다.
좋은 강의 너무 감사합니다. 강의를 보며 궁금한 점이 생겨서 질문 드립니다. named lock을 통해 동시성 문제를 해결하는 예시를 보았을 때, 비관적 락과 무엇이 다른 것인지 큰 차이를 느끼지 못했습니다. named lock이 비관적 락에 비해 가지는 장단점에 비해 찾아보니, timeout 설정이 좀 더 간편하다는 내용 말고는 유의미한 차이를 찾지 못했습니다. (그러나 비관적 락 + queryhint 를 사용하면 비관적 락 사용 시에도 딱히 어려움 없이 timeout을 설정할 수 있었습니다.) 혹시 named lock이 비관적 락에 비해 지니는 장단점과, 어떤 경우에 비관적 락 대신 Named lock을 통해 분산락을 구현하시는지 궁금하여 질문드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 찾아도 안나오는데 CamelCaseToUnderscoresNamingStrategy 이걸로 바뀐 것 같네요.
[질문 템플릿] 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()와 ==의 결과값이 다른 것을 보여주신 이유에 대해 정리한 건데, 틀리거나 빠진 내용이 있을까 싶어서 질문글 작성하게 되었습니다. 감사합니다!
안녕하세요. 강의 잘 보고 있습니다! 다른 분 질문에 궁금한 것이 해소되지 않아 질문드립니다. https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1&unitId=24297&category=questionDetail&q=30892&tab=community 정적 팩토리 메소드 사용 이유중에 static 메모리에 올라가기때문에 새로운 객체를 생성하지 않는 장점이 있는 거라고 알고 있습니다. 이 예제의 경우 static을 빼도 JPA가 엔티티로 관리하면서 어차피 사용할 수 있는 부분아닌가요..? 라는 질문에서 강사님께서는 static을 빼보면 이해될 거라고 답변하셨습니다. 제가 생각하기로는 정적 팩토리 메서드 안에서 생성자를 통해 인스턴스를 생성하는 것은 똑같아 보이고, 호출할 때 new가 아닌 Order.createOrder()로 호출하는 것 외에는 차이점을 못 느꼈습니다. 조금 더 상세한 가르침을 주시면 감사하겠습니다!
안녕하세요, 김영한 님. Querydsl SQLExpressions에 listagg 관련하여 질문이 있습니다. 현재 Projections.constructoer 방식으로 조회한 결과를 Dto로 받고있는데요, SQLExpressions.listagg(컬럼, ",").withinGroup().orderBy(컬럼).getValue().as("listaggs") 로 select후 Dto에서 String으로 못받는데 String으로 받으려면 어떻게 해야 될까요? 방법이 없는걸까요? 이미 같은 질문을 남긴 글이 있는데 미해결 상태라 다시 한번 글 올려 봅니다. 이방법을 사용하는 이유는 A 테이블, B 테이블이 있는데 1:N의 관계 입니다) A테이블 조회시 Response에는 B테이블의 컬럼 하나도 추가로 목록에 보여줘야 하는데 그럴때 B테이블의 해당 컬럼의 값이 다른 데이터가 2개 이상일시 A정보가 2건이 나오게 되서 (페이징 처리시에도 총 카운트와 페이징 처리가 제대로 되지 않습니다.) 한 row로 보여지게 하기 위해 사용하려 Querydsl SQLExpressions에 listagg 사용하려는데, String으로 받을수가 없더군요... 혹 Querydsl SQLExpressions에 listagg 아니더라도 다른 방법이 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 Exception 예외를 지양해야되는 이유로 어떤 예외를 잡을건이 어떤 예외는 안잡을건지 알 수 없기 때문이라고만 설명해주셨는데, 그냥 다 잡아버리면 안되는 이유가 있을까요?? Exception이면 의존 관계도 문제될거 없어보이는데 자세한 이유를 알 고 싶습니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
현재 코드에서는 name을 기준으로 delete를 하는데요, findByName(name)을 이용한 코드에서 DB 안에 같은 이름의 회원이 2명 이상인 경우엔 오류가 생깁니다. 그 이유가 find는 return 개수가 1건이기 때문에 rollback 된다고 생각했습니다. 이 버그를 수정하기 위해서 deleteUser의 파라미터는 Long id 로 수정했는데, 또 안 되더라고요...? findAll을 쓰면 같은 이름을 가진 모든 회원이 삭제될 것 같고... 어떻게 하면 동명이인의 회원 중에서 내가 원하는 한 회원만 삭제할 수 있나요? + 추가 방금 다른 학생분의 질문과 답변을 읽었습니다. 같은 내용의 질문인 것 같네요! 그러면 파라미터를 Long id 로 변경하되, 현재 실습 중인 UI에서도 코드를 수정해야하는 부분이 있기에 삭제가 안 되는 게 맞다고 이해하면 될까요?
안녕하세요. 강의 잘 보고 있습니다. 의문이 생겨 질문을 남깁니다. 트랜잭션 전파속성을 REQUIRES_NEW로 해서 새로 생성한 이유가 있을까요? 그냥 REQUIRED로 하면 안되나요?? 강의 내에서 데이터소스를 분리하는 것을 추천해주셨는데, 커넥션 풀 사이즈를 늘리면 안되나요?? 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강의자료 2p 에 커넥션 풀 초기화 부분을 보면 애플리케이션을 시작하는 시점에 커넥션 풀을 미리 확보해 보관한다고 쓰여있는데, 참고 질문 의 답변을 보면 실제 커넥션을 조회할때 풀이 초기화 되는것 같습니다. 커넥션 풀의 초기화는 실 커넥션을 조회할때 되는 것 일까요? 맞다면 강의자료에 있는 "애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관한다" 라는 문구는 어떤 의미로 사용된 말인지 궁금합니다.
@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 보안 관련 문의 드립니다 토비님 안녕하세요 ~ 여전히 공공기관 프로젝트에 참여 중 인데요 스프링 보안 관련 해서 문의 드립니다 현재 기 구축되어 있는 프로젝트 소스에서 고도화 및 신규 프로그램 개발 중입니다 그러던 중 공공기관 관리자 담당자가 보안 관련 지적을 하셨습니다 -.공무원 담당자 지적사항 내용 https://www.url.com?paramA= 파라미터a ¶mB= 파라미터b => 현재 일반 조회는 스프링 겟 매핑 방식 으로 하고 있습니다 사이트를 사용하는 일반 유저가 브라우저 url 주소창에 파라미터만 수정해가면서 조회 하면 조회 결과가 달라져 나오는데 이거 보안상 문제 있는거 아니냐고 따져 지적을 합니다 기 구축되어 있는 소스에는 request 할때 따로 인코딩/디코딩이 되어 있지 않는데 토비님이 경험해오신 스프링 get/post 보안관련 지적 사항이 나오지 않을려면 저희 프로젝트에서 어떻게 전체 소스(js, java ) 에 어떤 보안 관련 기능을 추가 할 수 있을까요? 참고로 구글도 검색어에 '토비' 라고 치고 개발자 도구 열어서 payload 보면 한글 그대로 넘어가던데 이게 공무원 담당자가 보안 관련 지적 하는게 맞는 건지도 저는 모르겠습니다 한가하실 때 시간 나시면 조언 부탁 드립니다 감사합니다 수고하세요~ 김동희 드림 #토비 #토비의스프링 #spring #스프링 #보안 #get #post #parameter #파라미터 #문제