본문 바로가기

spring

(29)
EntityManager와 EntityManagerFactory에 대해서 JPA를 공부하다보면 EntityMananger를 알게되는데 이것이 무엇을 하는지 잘 모르고 사용을 했었다. 이번에 한번 역할을 알아보고 어떤 기능을 하는지 알아보자. EntityManager 의 역할? 엔티티를 관리하는 사람이라는 요놈을 이해화기 전에 엔티티가 무엇인지 알아야한다. 엔티티는 데이터 베이스와 연관이 깊은 용어이다. 엔티티는 유의미한 하나의 데이터 집합이라고 생각하면 된다. 예를 들어서 학생의 정보가 필요하면 학생의 정보를 담은 학생 엔티티를 조회하면 되고 수업의 정보가 필요하면 수업과 관련된 데이터를 담은 수업 엔티티를 조회하면되는 것이다. 애플리케이션에서 이런 데이터를 관리할 때, 객체 형태로 생성해서 관리하고 있으며 이들을 관리하는 객체가 EntityManager인 것이다. 역할은 무..
커스텀 Validation annotation 만들기 들어가면서 자주 사용하는 특별한 유효성 검사 로직을 분리해서 관리하고 싶을 때! 커스텀 유효성 어노테이션을 만들면 유용하다. 가독성도 향상되어서 코드를 읽기가 좋아지는 효과도 있어서 커스텀 유효성 검사를 구현하는 방법을 알게되어서 너무 좋았다! 커스텀 유효성 어노테이션을 만들기 위한 절차는 2가지가 있다. 커스텀 어노테이션 만들기 커스텀 로직 판별기 만들기 필요한 클래스 만들기 비밀번호를 검사하는 유효성을 구현하고 싶은 경우를 예시로 삼아서 설명하겠다. 우선 구현하고자 하는 클래스를 만들자! public @interface Password {} public class PasswordValidator{} 1. 커스텀 어노페이션 만들기 유효성 검사할 대상을 상대로 사용할 어노테이션을 만들자. @Target(..
[Spring security] SecurityContext, 접근 제한, 권한 제한에 대해서 들어가며 스프링 시큐리티에서 인증을 구현하기 위한 클래스의 역할을 중점으로 알아보자. 인증을 담당하는 요소들 interface description AuthenticationManager HTTP 필터 단계에서 요청을 수신하고 이 책임을 AuthenticationProvider에서 위임하는 책임을 지닌다. AuthenticationProvider 인증 방식(논리)를 책임하는 인터페이스로 로그인 방식에 따른 인증 방식이 존재한다. 인증 정보를 관리하는 요소 class description SecurityContext 인증된 사용자의 정보(Authentication)를 관리하는 문맥 SecurityContextHolder 요청(Thread)에 따른 사용자의 문맥을 관리하는 요소 하나의 스레드는 독립적인 문맥..
[Spring security] PasswordEncoder 살펴보기 들어가면서 도서 : 스프링 시큐리티 인 액션을 보고 내용을 정리한 글입니다. 자세한 내용은 책을 보는 것을 추천합니다. 이번 내용은 스프링 시큐리티의 암호화를 담당하는 모듈을 다루었다. PasswordEncoder 인터페이스 비밀번호는 민감한 정보이다. 외부에 노출이 된다면 중요한 정보를 탈취당할 수 있기 때문에 단단히 챙겨하는 정보이다. 이런 민감한 정보를 안전하게 보관하기 위해서 암호화를 하는데 스프링 시큐리티에서는 이런 암호화를 처리하는 역할을 인터페이스로 정의하고 있다. 바로 PasswordEncoder이다. 스프링 시큐리티를 적용하고 있다면 이 구현체 빈으로 등록하면 정의된 역할에 맞게 암호화를 적용할 수 있다. PasswordEncoder 구현체 BCryptPasswordEncoder, Arg..
Springdoc을 이용해서 Swagger API 만들기 들어가면서 API 문서를 수정하는 것은 좀 귀찮다. API 수정 사항이 있으면 문서를 수정하고 코드도 수정하고 두 번 수정을 해야 하는데 코드의 의도가 자동으로 문서에 반영되면 한 번의 코드 수정으로 문서까지 수정할 수 있다. 이런 수요 때문에 API 자동화 도구들이 생기게 된 것이 아닌가 싶다. 그중에서 Swagger는 사용자 친화적인 예쁜 UI를 가지고 있고 문서에서 직접 API 요청을 만들 수 있어서 매우 유용하다. Spring에서 이 Swagger를 통합해서 사용할 수 있도록 개발된 라이브러리를 이용해서 API를 자동화를 구현해 보자. 장점 예쁜 UI 확장성이 좋다. 문서에서 HTTP 요청 생성 가능 단점 코드가 오염돼서 로직을 파악하기가 힘들다. 자동으로 생성되었지만 개발자의 실수로 문서의 내용..
Spring Rest docs 와 Swagger 장점만 골라서 사용하기 소개 테스트 문서 자동화 도구를 검색하면 두 가지 옵션이 있는데 하나는 Spring REST docs이고 하나는 Swagger이다. Swagger는 예쁜 UI를 제공하고 제공된 UI를 통해서 request를 날릴 수 있는 좋은 도구이지만 소스 코드에 API 문서 자동화와 관련된 코드를 추가해야 하는 단점이 있고 Spring REST docs는 소스 코드에 API 문서와 관련된 코드가 없이 정갈하게 만들 수 있으며 만들어진 문서는 모두 테스트를 통과해야 작성되는 제약을 가지고 있기 때문에 문서의 신뢰성을 높다는 점이 매력적이다. 그래서 개발자의 취향에 따라서 요구에 따라서 어떤 스택을 선택하는지가 달라지는 것 같은데 어쩌다보니 두 가지를 혼용하여 사용하는 방법이 있다는 것을 알게 되어서 바로 시도해 보았다..
스프링 부트 액추에이터 메트릭 사용하기 측정 단위 Counter : 런타임에서 생성된 과정 수를 측정. Gauge : 영구적으로 생성된 과정 수를 측정. Timer : 과정 생성에 소요된 시간을 측정 DistributionSummary : 과정 평점에 대한 분포 요약 사용방법 사용할 측정 단위의 이름과 설명 그리고 메트릭 저장소를 통해 생성단위를 빈으로 등록한다. 생성된 측정 단위는 측정할 로직에서 사용하여 과정을 측정한다. 등록 예제 @Bean public Counter createCourseCounter(MeterRegistry registry) { return Counter.builder("api.courses.created.count") .description("Total number of courses created") .regist..
스프링 부트 자동 구성과 실패분석기 스프링 부트 자동 구성 스프링 부트에서 제공하는 스타터 라이브러리를 가져오면 자동으로 관련 설정을 해준다. 이러한 설정은 @Configuration 애너테이션이 붙어있는 클래스를 통해서 자동으로 필요한 빈을 생성해주는 것이다. 하지만 특정 상황에서 정의된 빈을 생성하지 않고 싶은 경우를 대비해서 스프링 부트는 @Conditional 애너테이션을 제공한다. @Conditional 스프링이 관리하는 컴포넌트의 생성을 제어할 수 있도록 @Bean, @Component, @Configuration과 더불어서 @Conditional 애너테이션을 제공한다. 이 애너테이션은 Condition 클래스를 인자로 받는다. Condition은 이름처럼 조건을 검사하는 책임을 가지는 함수형 인터페이스로 matches() 메서..