본문 바로가기

전체 글102

Spring Security + JWT (1) 토큰 기반 인증 시스템의 대표적인 예시로 JWT(Json Web Token) 을 포스팅해보려고 합니다. 구현 코드관련 포스팅은 추후에 쓰겠습니다. Spring Security를 기반으로 JWT를 구현하기 위해서는 Security의 동작방식을 이해하고 추상클래스나 인터페이스를 구현할 줄 알아야 합니다. 간단하게 예시.. @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { if (this.postOnly && !request.getMethod().equals("POST")) { throw new Auth.. 2022. 4. 15.
Spring Security 동작 과정 JWT를 사용하기 전 여러모로 깨우친게 생겨서 추가로 정리하게 되었다. Spring Security 기반으로 JWT 를 사용하려면 Security 구현체를 직접 구현시켜서 사용해야 하기 때문에 어느정도 알 필요는 있다.. 기본적으로 Spring Security는 다음과 같은 구조로 동작을 한다. Spring Security의 가장 핵심 개념은 인증과 인가이다. Spring Security 내부에는 여러개의 필터가 Filter Chain 구조로 요청을 처리한다. 대표적인 Filter로 AbstractAuthenticationProcessingFilter 추상클래스가 있는데 이 클래스만 해도 5개정도의 구현클래스가 존재한다. 공식사이트에서 확인할 수 있다. https://docs.spring.io/sprin.. 2022. 4. 15.
서버와 토큰 기반 인증 시스템의 차이 서버 기반 인증 시스템 기존 인증의 시스템은 서버측에서 사용자들의 정보를 기억하고 있어야 한다. 사용자의 정보를 기억하려면 세션을 유지해야 했는데, 그러기 위해서는 클라이언트의 정보를 DB 또는 메모리에 저장을 해둬야 한다. 그렇게 해서 클라이언트의 요청을 받으면, 클라이언트의 상태를 계속 유지하면서 정보를 서비스에 이용을 하는데, 이러한 서버를 Stateful 서버라고 한다. 대표적인 예시로 Spring Security가 있다. 이러한 인증 방식은 소규모 시스템에는 적합할지 모르지만, 요즘에는 MSA 구조로 처리기술에 대한 트렌드가 바뀌면서 오히려 부적합한 인증 시스템으로써 문제가 생기고 있다. 세션 사용자가 인증시 서버가 저장하는 정보를 보통 세션이라고 칭한다. 대부분 메모리에 저장을 하게 되고, 세.. 2022. 4. 15.
MSA Microservice Architecture 사실 Microservice Architecture에 대한 정확한 정의는 없다고 한다.. 거의 근접하게 말하면 독립적으로 배포가 가능한 각각의 기능을 수행하는 서비스로 구성된 애플리케이션을 의미한다. 이와 반대로 이전까지 개발되어 왔던 방식인 모놀리식 아키텍처가 있다. Monolithic Architecture : 소프트웨어의 모든 구성요소가 하나의 프로젝트에 통합되어 있다. 추상적으로 말하면 Front, Back-End, DB 계층이 모두 하나의 애플리케이션에서 패키징되어 결과물로 반환되고 배포하는 형태의 구조를 말한다. 단점 1. 부분 장애가 전체의 서비스로 확대될 수 있다. 2. 부분적인 Scale-Out 이 어렵다. 3. 서비스의 변경이 어렵고, 수정.. 2022. 4. 8.
JPA) deleteById 호출 시 연관객체 SQL 줄이기 Todo.class (부모 클래스) @Entity public class Todo extends DateEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "TODO_ID") private Long id; @Column(nullable = false) // text private String content; // 내용 @Column(name = "MEMBER_ID", nullable = false) private String writer; // 작성자 -> Member @Convert(converter = TodoCheckedConverter.class) private boolean checked; @OneToMa.. 2022. 4. 1.
JPA) 벌크 연산 Entity 를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제하려면 EntityManager.remove() 를 사용한다. 하지만 이 방법으로 수 백개 이상의 Entity 를 하나씩 처리하기에는 시간이 너무 오래걸린다. 이럴 떄 여러 건을 한번에 수정하거나 삭제하는 벌크 연산을 쓰면 된다. String qlString = "update Product p set p.price = p.price * 1.1 where p.stockAmount < :stockAmount"; int resultCount = em.createQuery(qlString) .setParamter("stockAmoun", 10) .executeUpdate(); 벌크 연산은 executeUpdate() 메서드를 .. 2022. 3. 30.