Spring 72

28. 필터란 무엇일까?

Filter: Web 애플리케이션에서 관리되는 영역으로 요청과 응답에 대해 최초/최종 단계의 위치하며 이를 통해 요청과 응답의 정보를 변경하는 등 부가적인 기능을 추가할 수 있습니다.주로 범용적으로 처리해야 하는 작업들, 예를들어 로깅 및 보안 처리에 활용합니다.인증, 인가와 관련된 로직들을 처리할 수도 있습니다.Filter를 사용하면 필터 내 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있습니다.  Filter는 한 개만 존재하는 것이 아니라 여러 개가 Chain 형식으로 묶여서 처리되고 있습니다.  Request URL Logging 필터import java.io.IOException;@Slf4j(topic = "LoggingFilter")@Component@Order(1)public c..

27. JWT 다루기

JWT란 무엇일까?JWT(Json Web Token): JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 입니다. 즉, 토큰의 한 종류라고 생각하시면 됩니다. 일반적으로 쿠키 저장소를 사용하여 JWT를 저장합니다.  JWT 장/단점장점동시 접속자가 많을 때 서버 측 부하 낮춤Client, Sever 가 다른 도메인을 사용할 때예) 카카오 OAuth2 로그인 시 JWT Token 사용단점구현의 복잡도 증가JWT에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버)기 생성된 JWT 를 일부만 만료시킬 방법이 없음SecretKey 유출 시 JWT 조작 가능  JWT 사용 흐름Client 가 username, password 로 로그인 성공 시서버에서 "로..

Spring Security 적용

스프링 시큐리티를 적용하면서 크게 6개의 클래스를 사용했습니다. WebSecurityConfigUserDetailsImplUserDetailsServiceImplJwtUtilJwtAuthenticationFilterJwtAuthorizationFilter 코드를 올리고, 해당 클래스가 어떤 역할을 맡았는지 이야기해보겠습니다. 코드를 읽으며 아래 설명을 차례대로 보시면 이해하기 편하실 겁니다.  - WebSecurityConfig@Configuration@EnableWebSecurity@RequiredArgsConstructorpublic class WebSecurityConfig { private final JwtUtil jwtUtil; private final UserDetailsServic..

QueryDSL이란 무엇일까??

QueryDSL Java에서 타입 세이프한 쿼리 생성을 위해 사용하는 라이브러리 입니다. Query DSL 을 사용하면 JPA Criteria API나 JPQL로 작성하던 쿼리를 코드로 더 작관적으로 표현할 수 있습니다.  - 장점과 단점장점타입 세이프티: QueryDSL은 컴파일 시점에 타입 체크를 통해 잘못된 쿼리를 방지할 수 있습니다.가독성: 메서드 체인 방식으로서 조건을 여러 줄에 걸쳐 작성할 수 있습니다. 복잡한 조건을 표현하기 좋습니다. 재사용성: booleanExpression 을 사용하여 and, or 조건으로 조합하여 사용할 수 있습니다.자동 완성 지원: IDE에서 자동 완성 기능을 제공해 쿼리 작성이 더 편리해집니다.컴파일 시점에서 에러를 확인할 수 있습니다. 단점빌드 시간 증가: 빌드..

26. 쿠키와 세션이란 무엇일까?

쿠키와 세션 모두 HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용됩니다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됩니다.  쿠키클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 입니다.클라이언트인 웹 브라우저에 저장된 '쿠키' 를 확인해 보죠.크롬 브라우저 기준으로 '개발자도구' 를 열어 보세요.Application - Storage - Cookies 에 도메인 별로 저장되어 있는게 확인 됩니다.  구성요소Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)Value (값): 쿠키의 값Domain (도메인): 쿠키가 저장된 도메인Path (경로): 쿠키가 사용되는 경로Expires (만료기한): 쿠키의 만료기한 (만료기한 ..

25. 인증과 인가란 무엇일까?

인증(Authentication)인증은 해당 유저가 실제 유저인지 인증하는 개념입니다.여러분의 스마트폰에 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차 입니다. 인가(Authorization)인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념입니다. 예를들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있습니다. 우리가 자주 하는 로그인은 인증을 할 때(비밀번호 입력하고 제출 할 때)이고 회원/비회원 여부에 따라 다른 권한을 받는 것이 인가입니다.    일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 두가지 요소는 아주 멀리 떨어져 있습니다. Http 라는 프로토콜을 이용하여 통신하는데, 그 통신은 **비연결성(Connectionles..

24. Bean을 수동으로 등록하기

@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록 해줍니다.일반적으로 @Component를 사용하여 Bean을 자동으로 등록하는 것이 좋습니다.프로젝트의 규모가 커질 수록 등록할 Bean들이 많아지기 때문에 자동등록을 사용하면 편리합니다.비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션들을 사용해서 Bean으로 등록하고 관리하면 개발 생산성에 유리합니다.  그렇다면 Bean 수동 등록은 언제 사용될까요?기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋습니다.공통 로그 처리와 같은 비즈니스 로직을 지원하기 위한 부가적이고 공통적인 기능들을 기..

23. Query Methods란 무엇일까?

Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공합니다. JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자 하는 SQL을 메서드 이름을 사용하여 선언할 수 있습니다. import com.sparta.memo.entity.Memo;import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface MemoRepository extends JpaRepository { List findAllByOrderByModifiedAtDesc(); List findAllByUsername(String..

22. JPA Auditing

Timestamped  데이터의 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용됩니다. 각각의 Entity의 생성, 수정 시간을 매번 작성하는건 너무 비효율적입니다.  Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공하고 있습니다. import java.time.LocalDateTime;@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Tempor..