Coupon 미션 중 Read, Write DB가 분리된 분산 데이터베이스 환경에서 DataSource를 연결을 했어야 했다.그 과정에서 DataSource 빈 주입을 할 때, LazyConnectionDataSourceProxy라는 객체에 대해 알게 되었는데 해당 객체가 무엇이고, 왜 프록시 객체를 빈 등록해주어야 하는지 알아보고자 글을 작성하게 되었다. @Primary@DependsOn({"routingDataSource"})@Beanpublic DataSource dataSource(DataSource routingDataSource) { return new LazyConnectionDataSourceProxy(routingDataSource);}LazyConnectionDataSourcePr..
jwt 로그인 TokenProvider 토큰 생성 및 검증 로그인() 비밀번번호 로그인 일치하면 토큰 생성 따로 인증 필터 두지 않기로 결정 필요성을 못느낌 JwtAuthenticationFilter extends BasicAuthenticationFilter 권한 확인 필터 권한이 필요한 요청이 들어왔을 때 실행 굳이 만들어줘야 하는 이유: 시큐리티엔 Jwt를 검증하는 필터가 없다 토큰이 유효하면 인증 객체 만들어서 시큐리티 컨텍스트에 저장 CustomUserDetails를 구현해줘야 하는 이유 내 이해: 시큐리티 컨텍스트에 넣어질 객체는 UserDetails 형태여야 하는데 (= 시큐리티가 관리하는 것) 인증된 객체의 정보를 내가 필요한 것을 구현 CustomUserDetailsService를 구현해..
기본키 매핑 직접 할당: 기본키를 애플리케이션에서 직접 할당 자동 생성: 대리 키 사용 방식 IDENTITY: 기본 키 생성을 데이터베이스에 위임 SEQUENCE: 데이터베이스 시퀸스를 사용해서 기본 키를 할당 TABLE: 키 생성 테이블을 사용 IDENTITY 전략 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL 등에서 사용 개발자가 엔티티에 직접 식별자를 할당하면 @Id 어노테이션을 사용 식별자가 생성되는 경우에는 @GeneratedValue 어노테이션을 사용하고 식별자 생성 전략을 선택해야 함 사용 예시 @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Lon..
패스트캠퍼스 남궁성님 강의 보고 정리하였습니다 filter란? 공통적인 요청 전처리와 응답 후처리에 사용됨(로깅, 인코딩 등) 여러 서블릿들에서 위의 그림처럼, 공통적으로 발생하는 전처리, 후처리를 필터를 통해 중복 제거가 가능 따라서 서블릿들에서는 본래의 맡은 처리만 즉 하나의 책임만 가질 수 있게 됨 filter의 처리 과정 아래의 과정을 거쳐 요청이 처리된다고 할때 ( ->) 처리되는 과정은 다음과 같다. 요청이 오면 처음 filter1의 전처리 진행 filter2 호출 filter2 전처리 서블릿 호출 후 메서드 처리 filter2 후처리 filter1 후처리 filter의 사용 예시 아래와 같은 서블릿이 있을 때, 전처리, 후처리 등 분리해야 할 코드가 보인다. ExampleServlet.jav..
RowMapper 인터페이스란?👀 공식문서 Say "row 단위로 ResultSet의 row를 매핑하기 위해 JdbcTemplate에서 사용하는 인터페이스" 간단히 말해서 그냥 Row를 객체에 매핑한다고 생각하면 된다! RowMapper의 특징이 인터페이스 구현 시, 각 row를 ResultSet에 매핑하는 실제 작업을 수행하지만 예외 처리에 대해 생각하지 않아도 된다!RowMapper 객체는 일반적으로 상태가 없으므로 재사용이 가능하므로 row 매핑 로직을 한 곳에서 구현하는 것이 좋다.메서드@NullableT mapRow(ResultSet rs, int rowNum) throws SQLExceptionResultSet 의 데이터의 각 행을 매핑하는 메서드 즉, 데이터베이스의 반환 결과인 Result..
프로젝트 클론 후 실행을 하니 Cause: error: invalid source release: 16 오류가 발생하였다. 1차 시도 sourceCompatibility = '16' build.gradle에서 위의 source 버전을 11로 변경했다. 결과는? 클론한 프로젝트에 Record 클래스가 포함되어 있었다^_^... Record 클래스는 자바 14에서 추가되었기 때문에 컴파일 오류가 떴다ㅎ 고로 16이나 그 이상은 유지하며 오류를 해결해야 했다. 2차 시도 구글링을 통해 Project Structure에서 sdk를 16버전 설치 후에 변경, Modules → Lenguage level도 16으로 변경 결과는2 ? 여전히 안되었다. 똑같이 Cause: error: invalid source rel..