Spring

    Spring JdbcTemplate에서는 SQLException를 어떻게 처리했을까?

    1. 알고자 하는 것 - 일반적으로 jdbc를 사용해 쿼리를 수행하면 다음과 같이 Checked Exception인 SQLException이 필연적으로 throws 된다. public void deleteAll() throws SQLException { Connection c = null; PreparedStatement ps = null; // getConnection, prepareStatement, executeUpdate 모두 SQLException을 throws 한다. c = dataSource.getConnection(); ps = c.prepareStatement("delete from users"); ps.executeUpdate(); // 자원 정리(close) 코드는 편의상 생략. } ..

    외부 메서드, 내부 메서드에 대한 @Transactional 트랜잭션 적용 결과 테스트

    1. 알고자 하는 것 - AOP 개념을 다시 한번 공부하며 프록시와 내부메서드 호출에 따른 트랜잭션 적용 결과를 테스트 해보고자 한다. - 다음과 같은 메서드(외부)와 해당 메서드 내에서 호출하는 메서드(내부)에 각각 @Transactional 어노테이션을 적용하였을 때 각 메서드에 대한 트랜잭션 적용 결과를 확인한다. 1. outerMethod (@Transactional) & innerMethod (@Transactional) 2. outerMethod (@Transactional) & innerMethod 3. outerMethod & innerMethod (@Transactional) @Slf4j @Service public class SimpleService { public void outerM..

    Jsoup 라이브러리를 통한 정적 페이지 크롤링

    - 발생한 문제 1. 카카오 Local API를 사용하여 키워드를 통한 장소 검색을 구현. 2. 이 때, 장소에 해당하는 대표 이미지를 함께 보내주어야 하는데, 카카오 Local API의 장소 Response에는 대표 이미지가 없음. - 시도한 방법 1 (실패) : OpenGraph OpenGraph란, HTML 문서에 대해서 다양한 메타데이터를 통일성있게 제공할 수 있도록 Facebook에서 만든 프로토콜이다. HTML 문서의 meta 태그 중 "og:" prefix로 시작하는 부분이 OpenGraph 프로토콜 관련 메타데이터이다. 이 OpenGraph의 경우, url에 해당하는 메타데이터로 title(제목), url, image(썸네일 이미지)를 포함하고 있다. 예를 들어, 네이버의 경우 HTML ..

    Proxy로 생성되는 Service와 의존관계를 갖는 @Repository, JpaRepository는 Proxy일까?

    의문점 : class level 또는 method level에 @Transactional 어노테이션이 붙어있는 Service 클래스는 Transaction 관련 코드(트랜잭션 시작, 커밋 또는 롤백, 트랜잭션 종료)가 추가된 Proxy 객체를 Bean으로 등록해 Transaction 기능을 수행한다. 그렇다면 아래와 같이 Service 내에 DI 컨테이너에서 주입받은 두가지 방식의 Repository는 Proxy일까? Proxy라면 무슨 부가기능을 위해 Proxy가 된 것일까? 1. Spring Framework의 @Repository 2. Spring Data Jpa의 JpaRepository // Proxy 객체로 DI 컨테이너에 등록되는 Service class @Service @Transactio..

    JWT를 사용한 로그인 및 Refresh Token을 활용한 로그인 상태 유지

    구현 내용 : 1. Spring Security + JWT를 사용해 username, password를 통해 로그인 완료 시 Access Token 및 Refresh Token 발급 2. Access Token 만료 시 Refresh Token을 통한 Access Token 재발급 (로그인 상태 유지) 2-1. Refresh Token의 갱신 주기 도달 시 Refresh Token도 함께 재발급 (로그인 유지 기간 연장) 3. Access Token + Refresh Token 만료 시 Error Response를 통한 인증 만료 처리 설계 및 Response : - AT : Access Token / 만료기간 : 12시간 - RT : Refresh Token / 만료기간 : 3개월 / refresh..

    username만 매칭되면 user 세션 생성 되는 문제 해결 - AuthenticationProvider를 통한 password 기반 인증

    발생한 문제 : DB에 존재하는 user의 username(아이디)만 일치하면 user session이 생성되어 index page에서 로그인 처리가 되는 문제. 원인 : UserDetailsService를 구현한 클래스의 loadUserByUsername 메서드에서 username을 통한 user의 존재여부만을 판단하고, 존재 시 user 세션을 생성하면서 password에 대한 인증이 없어 발생한 문제이다. @RequiredArgsConstructor @Service public class PrincipalUserDetailsService implements UserDetailsService { private final UserRepository userRepository; private final ..

    로그인 성공 시 이전 페이지로 이동 - Referer 헤더와 AuthenticationSuccessHandler extends

    발생한 문제 : 게시판 웹사이트에서 댓글 작성 페이지 -> 로그인 페이지로 redirect 된 후, 로그인 성공 시 댓글 작성 페이지로 되돌아오는 것이 아닌 index page ("/")로 돌아오게 된다. 해결 : 1. 스프링 시큐리티는 권한이 없는 페이지에 대해서 login form 페이지로 redirect 된다. 2. 이 때 이전 페이지에 대한 url을 Referer 헤더로 request에 가지고 있다. 3. Referer 헤더값(이전 페이지에 대한 url)을 Session에 저장한다. 4. 로그인 성공 시 동작하는 AuthenticationSuccessHandler를 상속받아 구현한다. 5. 이 때 Referer 헤더값을 Session에서 꺼내서 해당 url로 redirect한다.  위 순서대로 ..