본문 바로가기

Back-End/Spring

(18)
AOP란 비즈니스 로직(모듈)은 가로로 배치하고 공통으로 적용시킬 보안, 로깅, DB처리 로직은 세로로 관통하는 모습이다. AOP의 구조와 용어정리 Aspect : AOP에서 관점이라 부르며 여러 객체에 공통으로 적용되는 기능을 담당 Advice : Aspect를 적용할 조건을 담당. 보안기능이 어떤 메소드에 적용할지, 예외 발생 후 동작할 건지 조건을 걸어준다. ( 모듈자체 - What ) Pointcut : 공통기능을 어떤 모듈의 Joinpoint 통과할건지 위치를 지정해주는 역할 Joinpoint : 공통기능이 적용 가능한 포인트들 메서드 실행 전 ( before ) 메서드 실행 후 ( after ) 반환된 후 ( afterReturning ) 예외가 던져지는 시점 ( afterThrowing ) 메서드 실..
Spring MVC에 관하여 Spring MVC 요청 흐름 개요 사용자가 요청( URL + parameters )을 서버에게 날린다. DispatcherServlet이 처음에 이 요청을 받는다. DispatcherServlet은 미리 설정되어 있는 Handlermapping 정보(web.xml or @Controller)를 통해 request를 Handler에게 위임(delegate)한다. Handler(Controller)에서 비즈니스 로직을 처리 한다. 그 결과에 View와 관련된 정보가 있다면 DispatcherServlet은 ViewResolver를 통해 view에 대한 정보를 받아온다. DispatcherServlet은 받아온 View와 Model을 통해 render을 하고 이를 브라우저에 돌려준다. Filter는 무엇을 ..
Spring layered architecture와 객체지향적으로 개발하기 글을 쓰게 된 계기 토비의 스프링 9-3장. 스프링 웹 어플리케이션 아키텍처 단원을 읽다가 내가 이때까지 얼마나 생각없이 개발을 진행하였고 객체지향을 신경쓰지 않으면서 개발을 진행하였는지 반성하게 되었다. 그래서 공부를 통해 다음에 대해 이해하려 했다. Spring layered architecture에서 책임을 잘 분리하는 방법 Spring layered architecture에서 객체지향적으로 개발하는 방법 내가 하고 있던 잘못된 개발 Presentation, Service, Data Access layer를 나름 잘지키면서 개발한다고 '착각'하고 있었다. Presentation Layer : 사용자 화면을 구성하는 코드 + request/response와 관련된 코드 Service Layer: 비즈..
Spring Security 아키텍쳐 Spring Security에 관하여 Spring security에 대한 깊은 이해없이 사용하였다. 그래서 Spring security 공식 문서를 읽고 기초를 다지려 하였다. Spring security를 사용해봐서 알겠지만, 우리가 필요한 부분만 작성할 수 있도록 구조를 잘 짜놓았다. 유연하면서 다양한 authentication과 authorization을 제공한다. (나도 코드를 작성할 때 Spring Security 구조처럼 OCP를 지키도록 해야지...) secure application이 어떻게 동작하는지? 어떻게 커스터마이징하는지? application의 보안에 대한 고민이 필요할 때 사실 spring boot에서 워낙 auto configuration이 잘 되어 있어서 해당 문서를 읽지 않..
Spring boot 2.0에 관하여 Spring boot 2.0 뭐가 좋음? 1. Reactive 프로그래밍을 지원함 ( non-blocking ) - 애플리케이션 확장할 때 조금의 thread만을 필요하도록 해준다. - Spring WebFlux에 대한 auto-configuration이 들어감 - Embedded server를 netty로 사용할 수 있음 2. 1.0에 만들었던 것들을 리팩토링 참고 : https://www.infoq.com/news/2018/03/spring-boot-2.0-release-ga-webb
스프링 CORS Cross-origin resource sharing(CORS) : W3C 스펙이고 대부분 브라우저에서 지원한다. WIKI를 보면 다음과 같이 정의 되어 있다. Spring Boot에서는 @CrossOrigin 어노테이션을 쓰면 CORS를 지원한다. addCorsMapping을 하면 global CORS를 설정할 수 있다. ( 컨트롤러 별로 CORS를 설정하는게 아니라 전체 설정 )
스프링 5 - PushBuilder란 Servlet 4에서 추가된 PushBuilder를 Spring5부터 지원을 합니다. HTTP2 서버 푸시 기능에 대해 살펴보겠습니다. 기존 예제 단순히 html 페이지에서 css, js를 로딩하는 예제이다. 첫 호출 두번째 호출 왜 로딩속도가 더 빨라졌을까? cache 때문? 하지만 Disable cache를 설정해놨기 떄문에 아니다. 두번째가 더 빠른 이유는 Servlet의 라이플사이클과 관련이 있다. 처음 호출할 때 Servlet을 초기화 하기 때문에 상대적으로 느린 것이다. HTTP2를 사용한 예제 yml에 해당 코드를 추가해주자. chrome 창을 보면 프로토콜이 h2로 바뀐것을 확인할 수 있다. 서버 푸쉬는 index 페이지를 볼 때 이 리소스를 필요로 할거야 예상하고 미리 보내주는 기능이다...
스프링 프록시 패턴 - Proxy Pattern Spring에서 나오는 개념 중 하나인 AOP를 공부하기 위해서는 Proxy Pattern을 앙아야 한다. 그래서 간단한 결제 예제를 공부하였다. 결제와 관련된 interface이다. 1) 현금 결제 구현체 2) 현금 결제 구현체에 다가 성능 측정 코드를 추가하고 싶은 경우 서비스를 사용하는 클라이언트 결제를 사용하는 클라이언트 측에서는 코드 변경이 일어나지 않는다. 단지 어떤 Payment를 사용할지만 알려주면 된다. 위의 예제는 자바 코드로 작성한 Proxy pattern이다. Spring에서 제공해주는 AOP를 이용하여 다음과 같은 코드를 더욱 더 쉽게 작성할 수 있다. 다음 포스팅에 작성해서 올리겠습니다! 참고 : https://en.wikipedia.org/wiki/Proxy_pattern
PSA에 관하여 Portable Service Abastraction 잘 만든 인터페이스 / 기술에 특화되어 있지 않은 코드를 얘기한다. 왜 좋은가? https://en.wikipedia.org/wiki/Service_abstraction Example - Servlet 작성 HttpServlet을 상속 받아서 doGet(), doPost() 함수 작성 & web.xml 설정 작성 @Controller - Spring Web MVC 추상화 계층 덕분에 편함 Spring Web MVC 추상화 계층 @Controller, @GetMapping을 이용해서 사용 1) 편안하다 : HttpServlet을 몰라도 됨, Mapping 편하게 할 수 있음 2) 특정 기술에 독립적 : Tomcat 기반으로 실행이 됨 Spring 5부터..
Spring annotation - @Service,@Controller,@Component 차이 Spring Documentation Spring 문서를 보면 역할에 맞게 쓰라고 되어 있는데 무엇이 차이인지 정확히 모르겠다. 그래서 조금 더 자료를 찾아봤다. @Component Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation이다. 즉, scan-auto-detection과 dependency injection을 사용하기 위해서 사용되는 가장 기본 어노테이션이다. @Controller Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다. @Repository 다 알고 있듯이 data repository를 나타내는 어노테이션이다. @Repository는 플랫폼 특정 exception을..