Be52 [Security] 시큐리티 파헤치기 (3) : 시큐리티 초기화, 다중 필터 체인 🙋 들어가며 이번 글에서는 시큐리티가 어떻게 초기화되고 어떤 값들이 생성되는지 알아보겠습니다. 시큐리티는 여러 개의 필터 체인을 관리할 수 있는데 어떻게 설정하는지 알아보겠습니다. 그리고 요청이 어떻게 알맞은 필터 체인에 타고 흐르는지도 알아보겠습니다. 📁 설정 파일 작성 (feat. Security 6) 시큐리티를 사용하기 위해서는 우선 설정 파일을 작성해야 합니다. 다음과 같이 단 어노테이션 하나만 달아주면 기본적인 시큐리티 설정이 완료됩니다. @Configuration @EnableWebSecurity // 기본 시큐리티 설정 public class SecurityConfig { } 바로 @EnableWebSecurity 입니다. 전혀 복잡하지 않죠? 😋 단순히 달아주기만 하면 애플리케이션이 메모리.. 2023. 8. 11. [Java] Optional 바르게 사용하기 🙋 들어가며 자바 기반의 백엔드 개발자가 Optional을 제대로 접하는 순간은 JPA의 query method를 사용할 때라고 생각합니다. Optional이 사용하기 편한 객체이지만 사용할 때 주의점을 요합니다. 이 글에서는 Optional에 대한 저의 고찰과 올바르게 사용하는 방법에 대해 이야기해 보겠습니다. 🧐 Optional의 목적 모든 사물들은 각자에게 주어진 알맞은 쓰임이 존재합니다. 예를 들어서, 책은 읽기 위해서 존재합니다. 라면 받침으로 쓰는 것은 본디 목적을 잃는 것입니다. (물론 라면 받침으로 씁니다) 그렇다면 Optional의 쓰임은 무엇일까요? 자바 설계자가 언급한 의도를 가져왔습니다. Our intention was to provide a limited mechanism for .. 2023. 6. 22. [Design Patterns] 상태 패턴 🙋 들어가기 앞서 디자인 패턴 중에서 행동 패턴에 속해있는 "상태 패턴"에 대해서 알아보는 시간을 가져보겠습니다. 이 글에서는 상태 패턴의 구조를 예시로 알아보고 장단점과 비슷한 다른 패턴을 비교해 보겠습니다. 🫨 상태 패턴 상태 패턴은 객체 내부의 상태가 변경될 때마다 행동이 달라지는 디자인 패턴입니다. 상태에 맞는 행동을 분리해 코드의 응집도를 높이고 새로운 행동이 추가되어도 다른 행동에 영향을 주지 않는 것이 목적입니다. 🚑 구조 다음 그림과 같은 구조를 가지고 있습니다. 객체(Context)의 상태를 분리하고 상태 객체의 참조를 가지게 합니다. 이후 상태에 맞는 행위를 구현한 구현체를 만들어 줍니다. 🧙♂️ 예시 (feat. 주문) 배달 주문을 하는 것으로 예시를 들어보겠습니다! 간단하게 어떤 .. 2023. 6. 13. [Spring] 트랜잭션 사용 조심하기 😇 들어가기 앞서 로그인 실패 시 핸들링을 구현하면서 발생했던 트랜잭션으로 발생했던 이슈가 있어서 공유하고자 합니다. 트랜잭션에 대해서 추가적인 내용들은 따로 정리를 할 예정입니다. 🙋 트랜잭션이란? 하나의 작업의 단위를 트랜잭션이라고 합니다. 스프링에서는 트랜잭션을 편하게 사용할 수 있도록 AOP와 어노테이션 기반으로 동작합니다. 우리가 꼭 짚고 넘어가야 것은 트랜잭션은 기본적으로 상위 트랜잭션에 포함된다 입니다. 1️⃣ 로그인 실패 로그인 실패 핸들링은 다음과 같은 요구사항을 가집니다. 로그인 실패 시 로그인 실패 회수를 카운팅한다. 카운팅한 결과를 예외에 담아서 던진다. 코드는 다음과 같이 작성했습니다. 인증을 진행하다가 BadCredentialsException가 발생하면 핸들링 로직을 실행합니다.. 2023. 5. 29. TIL : Bean 컨테이너와 ComponentScan (22) 🎛️ ApplicationContext 스프링에서 핵심인 ApplicationContext는 Bean을 관리해준다. 싱글톤 레파지토리로도 불리는데 Bean을 싱글톤으로 관리해주기 때문이다. 우리가 작성한 설정 정보를 적용시키려면 @Configuration을 붙여준다. 여기에 싱글톤의 비밀이 들어있다. 설정 정보는 우리가 작성한 순수 자바 클래스가 빈으로 등록되는 것이 아니다. 작성한 자바 클래스를 상속받는 임의의 다른 클래스를 만들고 빈으로 등록한다. 여기서는 CGLIB라는 바이트코드 조작 라이브러리를 사용한다. CGLIB 라이브러리가 내부적으로 어떻게 구현되었는지는 모르겠지만, 빈이 존재하면 기존 인스턴스를 반환하고 아니라면 생성할 수 있도록하는 클래스로 변환될 것이다. 따라서 @Configuratio.. 2023. 5. 17. [BackEnd] MapStruct 사용기 😋 MapStruct 사용기 객체 간의 간단한 매핑을 위해서 MapStruct를 도입한 이야기를 해보려고 합니다. 어떻게 사용하는지와 사용하고 어땠는지 적어보겠습니다. 🪄 MapStruct란? Java 기반의 객체 매핑 라이브러리입니다. 다음과 같은 특징을 가지고 있습니다. 컴파일 시점에 매핑 코드를 작성한다. 그래서 런타임 시 오버헤드가 없고 안전하다. 다른 매핑 라이브러리보다 빠르다. 어노테이션을 통해서 매핑을 개발자가 쉽게 제어할 수 있다. Lombok에 대한 의존성이 꼭 필요하다. 💡 MapStruct 사용법 예시에 사용될 DTO와 Entity는 다음과 같습니다. // DTO 1번 public class RequestDto { private String title; private String co.. 2023. 5. 13. 이전 1 2 3 4 5 ··· 9 다음