[Spring Boot] Mockito 로 테스트 하기
2022. 8. 6. 00:14
Spring Boot
Mockito 란? 자바 기반의 mocking 프레임워크 mock object를 creation, verification, stubbing 한다. mocking 은 조롱이라는 의미인데, mockito 를 사용하면 디비 연결 등의 실제 서비스 환경과 관계 없이 독립적으로 클래스의 기능을 테스트할 수 있다. 실제 서비스를 조롱하듯이 개발자가 마음대로 객체를 관리하는 테스트 방법을 뜻한다. 튜토리얼 사이트에서 가져 온 아래 예제를 보자. 여러 주식의 값을 개발자의 임의대로 셋팅하여 StockService 를 단위 테스트할 수 있다. import static org.mockito.Mockito.*; public class PortfolioTester { public static void main(String[]..
Spring Security 인가 처리 - AccessDecisionManager, AccessDecisionVoter
2022. 8. 4. 18:35
Spring Boot
지난 포스팅에서 사용자가 누구인지, 인증 처리 하는 방법을 알아보았다. 사용자가 인증되었다면 이제 유저에 대한 권한을 확인하고 접근을 허가하는 인가 처리에 대해 알아보자. 각 컴포넌트를 설명하기 전에, 대략적인 구조는 위 그림과 같다. SecurityInterceptor 는 Invocation 을 생성하여 ConfigAttribute 에 담아 AccessDecisionManager 에게 인가 처리를 위임한다. DecisionManager 들은 해당 ConfigAttribute 를 가지고 DecisionVoter 들에게 이 조건을 처리해줄 수 있는지 질문한다. 답은 Voter 내의 supprots() 메서드에서 리턴받을 수 있으며, 처리가 가능하다면 vote() 메서드에서 승인 여부를 반환한다. 이제 각 ..
Spring Security 인증 처리 (2) Filter, AuthenticationManager, AuthenticationProvider, WebSecurityConfigure
2022. 7. 26. 22:04
Spring Boot
Spring Security Filter Spring Security는 서블릿 필터 체인을 통한 위임 모델을 구현한다. 가 무슨 뜻인지 알아보자. 서블릿 필터 서블릿 필터는 사용자의 request 또는 서버의 response 를 중간에서 가로채서 필터링하는 인터페이스로 init(), doFilter(), destory() 메서드가 있다. public interface Filter { default void init(FilterConfig filterConfig) throws ServletException { } void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletExcepti..
Spring Security 인증 처리 (1) Authentication, SecurityContextHolder
2022. 7. 23. 01:14
Spring Boot
Spring Security를 공부하기에 앞서 인증의 기본이 되는 Authentication 객체와 이를 저장하는 SecurityContextHolder에 대해 알아보겠습니다. Authentication 인증 된 사용자에 대한 상세 정보, 즉 통행증 역할을 한다. SecurityContextHolder 내부의 SecurityContext에 저장된다. Authentication을 구현하는 객체들은 대체로 메서드 이름 뒤에 AuthenticationToken이 붙는다. 이를 인증 토큰이라고 부른다. - 주요 용어 정리 Principal: 보호 된 리소스에 접근하는 사용자 식별자(아이디) Credentials: 인증을 위해 필요한 정보(비밀번호) GrantedAuthority: 인증 된 사용자의 인증 정보(역..
[Java] static 키워드 알아보기
2022. 7. 18. 21:34
Java
static(정적) 이란? Java에서 static 키워드는 변수, 메소드, 블록 및 중첩 클래스에 사용할 수 있다. 정적 키워드가 붙은 멤버들은 인스턴스(객체)가 아니라 타입 자체에 속하는데, 이는 정적 멤버들의 인스턴스는 하나만 생성되며 해당 클래스의 모든 인스턴스에서 공유된다는 것을 의미한다. 따라서 각 인스턴스들이 공통적으로 같은 값을 유지해야하는 경우 사용된다. Java8 이후 Static Object는 heap 영역에서 관리되며, 참조를 잃은 정적 오브젝트는 GC 대상이 될 수 있다. (참고) https://jgrammer.tistory.com/144 The static Fields (Or Class Variables) 정적 필드 (또는 클래스 변수) static 필드를 선언하면 해당 필드는 ..
[Java8] 비동기 처리 CompletableFuture
2022. 6. 17. 18:40
Java
CompletableFuture 함수형 프로그래밍 방식을 지원하는 비동기 병렬 프로그래밍 기법 명시적 Thread Pool 선언이 필요없음 함수형 프로그래밍 방식 지원 간결한 코드, 높은 가독성 각 병렬 Task 들의 손쉬운 결합, 예외처리 지원 supplyAsync(), runAsync() CompletableFuture 는 메소드를 제공하여 직접 thread를 생성하지 않고 작업을 async로 처리할 수 있다. runAsync(): 반환 값 X static CompletableFuture runAsync(Runnable runnable) supplyAsync(): 반환 값 O static CompletableFuture supplyAsync(Supplier supplier) 예제 수행하는데 각각 3초..
[Java] Sync vs. Async / Blocking vs. Non-Blocking
2022. 6. 14. 01:40
Java
Sync 와 Async 에 대한 이해 동기란 어떠한 일이 동시에 일어남을 뜻한다. 우리가 실생활에서 많이 사용하는 'A와 B를 동기화하다' 와 같이, 동기는 A와 B를 동시에 같은 상태로 만든다는 의미를 가지고 있다. 즉, 두 상태를 일치시킨다는 뜻이다. 아래와 같이 동기식으로 동작하는 예제를 보자. public class test { public static void main(String[] args) { System.out.println(method1()); System.out.println(method2()); } public static int method1() { return 1; } public static int method2() { return 2; } } method1이 실행되고 완료가 ..
Swagger로 API 문서 자동화하기 +JWT 설정
2022. 5. 26. 23:58
Spring Boot
Swagger란? 빌드 시 자동으로 API Spec 문서를 생성해주는 라이브러리 핵심 기능 - API 기능 테스트를 수행할 수 있음 - 소스코드 빌드 시 문서 자동 최신화 의존성 추가 // Spring Boot 2.7.1 implementation "io.springfox:springfox-boot-starter:3.0.0" Swagger Configuration @Configuration public class Swagger2Configure { // Docket 설정 @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) // optional .securitySchemes(sing..