본문 바로가기

Web34

[Security] 시큐리티 파헤치기 (1) : DelegatingFilterProxy 🙋 들어가며 이전에 Spring Security를 너무 가볍게 공부한 것 같아서 A-Z로 다뤄보려고 합니다. 이번 편에서는 DelegatingFilterProxy에 대해서 이야기해 보겠습니다. 👩‍💼 DelegatingFilterProxy Security에서 빼놓을 수 없는 객체입니다. 이름에서 역할이 잘 명시되어 있습니다. 이름 그대로 Filter를 위임(deleagte)하는 대리자(proxy)입니다. 🤷 왜 위임하나요? 전체적인 흐름을 이해하고 왜 위임하는지 알아보겠습니다. 먼저 클라이언트의 요청이 들어오면 서블릿 컨테이너는 필터 체인을 생성합니다. 이후 요청이 필터와 서블릿을 통과하면 스프링 내부로 진입하게 됩니다. 필터 체인 : HttpServletRequest를 처리하는 서블릿과 필터를 포함하는.. 2023. 8. 2.
[Backend] 트랜잭션, 격리 수준 🙋 들어가며 데이터를 다룰 때 트랜잭션이라는 용어가 자주 등장합니다. 이번 글에서 우리는 자주 언급되는 트랜잭션이 무엇이고 특징이 어떤 것들이 있는지 알아보고, 주의할 점은 어떤 것들이 있는지 알아보겠습니다. 🤔 트랜잭션이란? 트랜잭션은 특별한 작업의 단위를 의미합니다. 어떤 특징이 있어서 단순한 작업과 다르게 표현을 하는 것일까요? 👀 특징 트랜잭션을 이야기할 때는 ACID라고 부르는 특징을 이해해야 합니다. ACID를 지키고 있는 단위를 우리는 트랜잭션이라고 부르는 것입니다. 🎭 루미큐브 루미큐브는 가장 유명한 보드게임 중 하나입니다. 이 게임은 트랜잭션의 특징과 아주 비슷합니다. 다음은 규칙입니다. 🎯 루미큐브 규칙 4가지 색을 가진 1부터 13까지 숫자가 존재한다. 필드에 제출된 숫자들은 같은 색.. 2023. 7. 27.
[Spring] 트랜잭션 사용 조심하기 😇 들어가기 앞서 로그인 실패 시 핸들링을 구현하면서 발생했던 트랜잭션으로 발생했던 이슈가 있어서 공유하고자 합니다. 트랜잭션에 대해서 추가적인 내용들은 따로 정리를 할 예정입니다. 🙋 트랜잭션이란? 하나의 작업의 단위를 트랜잭션이라고 합니다. 스프링에서는 트랜잭션을 편하게 사용할 수 있도록 AOP와 어노테이션 기반으로 동작합니다. 우리가 꼭 짚고 넘어가야 것은 트랜잭션은 기본적으로 상위 트랜잭션에 포함된다 입니다. 1️⃣ 로그인 실패 로그인 실패 핸들링은 다음과 같은 요구사항을 가집니다. 로그인 실패 시 로그인 실패 회수를 카운팅한다. 카운팅한 결과를 예외에 담아서 던진다. 코드는 다음과 같이 작성했습니다. 인증을 진행하다가 BadCredentialsException가 발생하면 핸들링 로직을 실행합니다.. 2023. 5. 29.
[BackEnd] MapStruct 사용기 😋 MapStruct 사용기 객체 간의 간단한 매핑을 위해서 MapStruct를 도입한 이야기를 해보려고 합니다. 어떻게 사용하는지와 사용하고 어땠는지 적어보겠습니다. 🪄 MapStruct란? Java 기반의 객체 매핑 라이브러리입니다. 다음과 같은 특징을 가지고 있습니다. 컴파일 시점에 매핑 코드를 작성한다. 그래서 런타임 시 오버헤드가 없고 안전하다. 다른 매핑 라이브러리보다 빠르다. 어노테이션을 통해서 매핑을 개발자가 쉽게 제어할 수 있다. Lombok에 대한 의존성이 꼭 필요하다. 💡 MapStruct 사용법 예시에 사용될 DTO와 Entity는 다음과 같습니다. // DTO 1번 public class RequestDto { private String title; private String co.. 2023. 5. 13.
[BackEnd] Enum 유효성 검사 구현기 🤔 들어가기 앞서 사실 enum에 대한 유효성 검사를 위해서 Custom Annotation을 구현할 필요는 없을 수 있다. 하지만 나는 DTO에서 enum 타입 자체를 가지고 있고, 구현한 enum 타입이 많아서 만들었다. 이를 통해서, Parse 오류도 잡고 클라이언트에서 어떤 값을 잘못 보냈는지 확인할 수 있게 되었다! 😋😋 Custom Annotation을 구현하는 방법은 이전에 작성한 글을 참고하기 바란다! 🪄 Enum용 CustomAnnotation 만들기 작성한 코드는 우선 다음과 같다. 핵심으로 표시한 부분은 다음에 설명하겠다. @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = .. 2023. 4. 25.
[Spring] @ModelAttribute 🌞 들어가기 앞서 스프링에서 요청한 파라미터를 바인딩하는 방법은 여러 가지 있다. 오늘은 그중에서 @ModelAttribute에 대해서 이야기해 볼 생각이다. 사용은 쉽지만 주의할 점이 있기 때문에 어떻게 동작하는지와 같이 주의점도 정리해 보겠다. 😋😋 🪄 @ModelAttribute란? 파라미터를 바인딩하는 여러 어노테이션 중에 모델 객체를 바인딩하는 어노테이션이다. 다음과 같은 모델 객체(혹은 DTO)가 존재할 때 정보를 받아오는 방법은 여러 가지가 있겠지만 이 글에서는 @RequestParam과 @ModelAttribute를 비교해서 사용법을 알아보겠다! 가볍게 참고만 하자 ㅎㅎ.. // 모델 객체 public class User { private String name; private int age.. 2023. 4. 19.