Backend/Spring
-
[Spring Security] Annotation으로 편리하게 인증된 사용자 조회하기Backend/Spring 2022. 6. 10. 16:03
프로젝트에서 로그인된 사용자를 조회하는데, " Annotation으로 편리하게 조회할 수는 없을까? " 라는 생각이 들어서 찾아보니 역시 Spring Security에서 제공하는 기능이 있었고 이를 활용해서 구현해보았다. Spring Security에서 제공하는 @AuthenticationPrincipal 라는 Annotation이 있다. 나는 Annotation을 사용하는 방법을 설명할 것이고, 자세한 동작 원리는 참고한 블로그를 밑에 남겨놓을 테니 보기를 바란다. 우선 이 Annotation을 사용하기 위해서는 SecurityContext에 인증된 객체가 존재해야한다. ( SecurityContextHolder에서 Context를 가져와서 setAuthentication이 되어있어야 한다. ) @Au..
-
[Spring Cloud] Feign Client로 업비트 시세조회 API 사용하기Backend/Spring 2022. 6. 2. 00:07
졸업 프로젝트를 진행하는데, 백엔드에서 업비트 Open API로 가상화폐 시세 조회하는 과정이 필요했기에 찾아보다가 우아한 형제들 기술 블로그에서 Feign Client 쓰는 것을 보고 구현해보았다. 여기서는 사용하는 방법을 소개할 것이고, 자세한 것은 밑에 남겨둔 우아한 형제들 기술 블로그를 참고하면 좋을 것 같다. 의존성은 https://start.spring.io/에서 Spring Cloud 프로젝트에 속한 Open Feign 을 선택하면 쉽게 적용할 수 있다. Feign Client 사용은 간단하게 @EnableFeignClients 어노테이션을 붙여주고 @FeginClient 인터페이스만 구현해주면 쉽게 API 호출해서 사용할 수 있다. ( 수동으로 구현체를 만드는 것도 가능하다. ) 다음은 내..
-
[Spring AOP] 프록시와 내부 호출 문제Backend/Spring 2022. 5. 14. 16:20
오늘은 Spring AOP를 적용할 때 "이게 왜 적용 안되지?" 하며 의문이 들 때 한번 살펴볼 문제에 대해 알아보겠다. 우선 스프링 AOP가 사용하는 프록시 방식을 이해해야 한다. 스프링 AOP가 프록시방식을 이용하기 때문에 항상 프록시를 거쳐서 Target을 호출해야 한다. 프록시에서 어드바이스를 호출하고 대상 객체를 호출하는 식으로 적용하기 때문이다. 그러면 어떤 경우에 문제가 발생하는지 살펴보자. 위와 같이 Service와 Aspect를 만들어주었다. Aspect를 보면 aop 패키지 하위에 모든 클래스의 모든 메서드를 포인트 컷으로 지정해주었다. 그리고 다음과 같이 테스트 코드를 작성하였다. Aspect를 정상적으로 적용하였으니 내부호출(), 외부호출() 메서드가 호출되기 전에 로그가 출력돼야..
-
[Spring AOP] Spring AOP 용어 정리Backend/Spring 2022. 5. 3. 01:34
스프링 AOP에서 사용하는 용어를 정리해보려고 한다. AOP ( Aspect Oriented Programming ) 를 간단히 알아보자. 우선 해석해보면 관점 지향 프로그래밍이다. 말 그대로 애플리케이션을 바라보는 관점을 핵심적인 관점과 부가적인 관점으로 나누어보고 분리하여 각각 모듈화 하려는 취지를 갖고 있다. Aspect를 이용해서 횡단 관심사 ( "부가적인 기능이 필요하다." 라는 관점, 쉽게 이해하자면 핵심 로직이 아닌 부가적인 로직으로 코드상에 중복되는 것들 ) 를 해결할 수 있다. 또한 반복, 중복, 수정 등에 대한 많은 문제를 해결함으로써 OOP를 보조해준다. Spring AOP는 AspectJ의 일부 기능만을 제공, AspectJ의 문법을 차용하는 것이고 직접 사용하는 것은 아니다. 또한..
-
[Spring] 서블릿 필터(Filter)와 스프링 인터셉터(Interceptor)Backend/Spring 2022. 3. 18. 23:59
필터란? 서블릿에서 지원하는 문지기라고 할 수 있다. 요청, 응답 시에 디스패처 서블릿 전, 후를 담당한다.(스프링의 밖에서 동작) 밑의 글과 그림을 보면 더 쉽게 이해할 수 있다. 필터의 흐름 [ HTTP 요청 -> WAS -> 필터(체인으로 구성) -> 서블릿 -> 컨트롤러 ] 이미지 출처 : https://mangkyu.tistory.com/173 필터를 적용하면 필터를 호출한 뒤에 디스패처 서블릿이 호출된다. 필터에서 적절하지 않은 요청이라고 판단하면 여기서 끝을 낼 수도 있다. 그리고 필터는 체인으로 구성될 수 있고, 중간에 필터를 자유롭게 추가할 수 있다. ( 그림에서 처럼 한 개일 수도 있고, 여러 개 또는 없을 수도 있다. ) 필터를 적용하기 위해서는 인터페이스를 구현해야 한다. 이 인터페..
-
[Spring] Spring MVC의 구조와 동작 순서Backend/Spring 2022. 3. 16. 00:29
우선, MVC에 대해 알아보자 MVC패턴은 모델(Model), 뷰(View), 컨트롤러(Controller) 의 약자로 3가지의 역할로 나누어 개발하는 디자인 패턴이다 세 가지의 역할을 간단하게 설명하면 다음과 같다. 1. 모델 : 데이터를 처리하는 영역 2. 뷰 : 화면을 담당하는 영역 3. 컨트롤러 : MVC의 중심으로 모델과 뷰 사이의 연결고리 MVC1 과 MVC2가 있는데, Spring MVC는 MVC2의 모델을 따른다. Spring MVC의 구조는 다음 그림과 같다. DispatcherServlet 전후로 필터와 인터셉터가 껴있는데 이는 제외하고 정리하도록 하겠다. 요청 흐름 서블릿이 호출되면 HttpServlet 이 제공하는 serivce() 가 호출된다. 스프링 MVC는 DispatcherS..
-
[Spring] Spring 과 Spring Boot 의 차이점Backend/Spring 2022. 3. 12. 16:16
오늘은 Spring 과 Srping Boot 의 차이점에 대해 정리해보려고 한다. 우선 Spring이란 무엇일까? Spring이란 Spring Boot, Spring Framework, Spring Data, Spring Cloud 등 여러 프로젝트들의 모음이다. 밑의 링크에서 여러 프로젝트들을 확인할 수 있다. https://spring.io/projects 따라서 Spring의 하위 프로젝트중에 하나가 Spring Boot인 것이고, Spring의 Core라고 할 수 있는 것이 바로 우리가 사용하고있는 Spring Framework 이다. 흔히 Spring을 말하면 Spring Framework를 뜻한다고 보면 된다. 그럼 Spring Boot는 무엇을 하는 아이인지 알아보자. 공식문서를 보면 이렇게..