Spring Framework: 317개의 글
오늘 알아볼 내용은 아직 릴리즈는 되지 않았지만 조만간 릴리즈될 Spring boot 2.0의 대해서 알아볼 예정이다. 아직 릴리즈전이라 바뀔 가능성이 있어 깊게는 살펴보지 않을 것이다. 또한 혹시나 기존(이전버전)과 동일한 기능을 마치 신기능처럼 이야기하거나 틀린이야기를 할 경우에는 피드백을 주길 바란다. 필자가 Spring boot를 좋아하는 이유중 하나도 Configuration Binding을 아주 손쉽게 해주기 때문이다. 하지만 기존의 버전과 2.0의 버전이 조금 달라졌다. 오늘은 그 내용을 살펴볼 예정이다. ConfigurationProperties prefix ConfigurationProperties 어노테이션은 아주 손쉽게 properties를 바인딩 해준다. 기존에는 underscore..
자바 웹프로그래밍을 구현하다보면 공통적인 업무를 추가해야할 것들이 많다. 공통적인 업무에는 로그인처리(세션체크), pc웹과 모바일웹의 분기, 로그 확인, 페이지 인코딩 변환, 권한체크, XSS(Cross site script)방어 등이 있는데 이러한 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 업무량이 상당히 증가할 것이다. 이러한 공통업무를 프로그램 흐름에서 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 있는데 서블릿에서 지원하는 서블릿 필터, 스프링 프레임워크를 사용하면 쓸 수 있는 인터셉터, AOP가 있다. 앞서 AOP개념을 정리할 때 언급한 것처럼 개발자는 좀더 핵심로직에 집중하고, 부가로직으로부터 자유로워지게 도와주는 역할을 한다. 그렇다면..
Interceptor 브라우저 - DS - Interceptor - Control - dispatcher servelt과 controller 사이에 존재하여 요청을 가로챈다 - 모든 페이지마다 동일한 기능의 제어가 가능 인터셉터를 통해 할 수 있는 대표적 3가지 1 처리시간 체크 ( DB에 넣어 통계를 넣는다) 2 인증 체크 3 인가 체크를 할 수 있따. 1. 웹 요청 처리 시간을 처리하는 Interceptor 만들기 step1. MeasuringInterceptor.java public class MeasuringInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest re..
Spring Logging (Interceptor로 Request, Response body json 값 로깅하기) 스프링 프로젝트를 하면서 기존에는 LoggingAspect를 만들어서 Aspect파일에서 parameter값과 body값을 찍어주고 있었다. response 값도 찍어주기 위해 여러가지 찾아보면서 공부하던 와중에 Filter와 Interceptor, AOP의 구조를 다시 공부하는데 Interceptor의 인자로 HttpServletRequest, HttpServletResponse가 들어오는 것을 보고 response, request 로그를 Interceptor로 찍어야 하는 것이 맞는 구조라는 것을 그제야 깨달았다. 1. Filter, Interceptor, AOP 구조 아래 갓대희님 블..
[Spring] Filter, Interceptor, AOP 차이 및 정리 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Spring] 필터, 인터셉터, AOP 정리 ] 입니다. : ) 공통 프로세스에 대한 고민 자바 웹 개발을 하다보면, 공통적으로 처리해야 할 업무들이 많다. 예를들어 로그인 관련(세션체크)처리, 권한체크, XSS(Cross site script)방어, pc와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도있으며, 소스 관리도 되지 않는다. 즉, 공통 부분은 빼서 따로 관리하는게 좋다. 이러한 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 ..
1. AOP란? Aspect Oriented Programming 의 약자로 관점지향 프로그래밍이라고 부른다. IoC가 낮은 결합도와 관련된 것이라면 AOP 는 높은 응집도와 관련되어 있다. 서비스들의 비즈니스 메소드들은 복잡한 코드로 구성되어있는데, 그 중 핵심 로직은 얼마안되고 대부분은 트랜잭션, 로깅 처리, 인증과 관련된 코드들이 있을 수 있다. 이럴 때 비핵심이지만 꼭 필요하고, 공통화할 수 있는 부분을 따로 빼서(횡단 분리) 관리하는 것이다. 2. AOP 용어 조인포인트(Joinpoint) : 클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 중에서 포인트컷되기 때문에 포인트컷의 후보로 생각할 수 있다. 포인트컷(Pointcut) : 특정 조건에 의해 필터링된 조인포인트, 수많은 조인포인트..
Spring Annotation인 @Component와 @Bean의 차이에 대해 알아보자. 차이점 @Bean public ObjectMapper objectMapper(){ return new ObjectMapper(); } @Component public class CustomMapper{ ... } @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. 예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할 수 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다. 반면 개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Co..
[스프링 부트/MVC] 정적 리소스(Static Resources) 기본 설정과 커스텀 방법 스프링 부트는 정적 리소스(static resources)에 대한 기본 매핑 설정과 커스텀을 지원한다. 실제로 확인해보자. 스프링 부트 프로젝트의 src/main/resources/static/에 hello.html을 새로 만든다. Hello Static Resource 정적 리소스는 어플리케이션을 재기동하지 않고 빌드하는 것 만으로 변경사항을 확인할 수 있다. 프로젝트 빌드 후 http://localhost:8080/hello.html로 요청해보자. 정적 리소스 매핑 URL 패턴 기본적으로 /**(루트) 부터 매핑된다. 따라서 위 예처럼 http://127.0.0.1:8080/hello.html을 요청하면 정적..
스프링 부트에서 즉시 웹 개발을 시작할 수 있는 이유 - AutoConfiguration spring-boot-starter-web 의존성을 추가하여 스프링 부트 프로젝트를 만들기만 하면 즉시 웹 어플리케이션 개발이 가능하다. @RestController public class UserController { @GetMapping("/hello") public String hello() { return "hello"; } } 아무런 설정 없이 컨트롤러를 만들어 GET /hello 요청에 대한 핸들러를 구현하여 메인 어플리케이션(@SpringBootApplication)을 실행하면 해당 요청을 처리하는 웹 어플리케이션이 동작한다. 스프링 부트의 기본 설정 이는 스프링 부트가 제공하는 기본 설정때문에 가능한 ..
Spring Boot + MyBatis 설정 방법(HikariCP, H2) 📝 순서 1. 스프링 부트 프로젝트 생성 2. 초기화 스크립트 설정(schema.sql, data.sql) 3. DBCP/DataSource 설정(HikariCP) 4. MyBatis 설정(@MapperScan, XML 위치, CamelCase, Alias, 로그레벨) 5. Model, Mapper 생성 6. 테스트 1. 스프링 부트 프로젝트 생성 MyBatis를 이용한 DB 연동을 위한 새 스프링 부트 프로젝트를 생성한다. 스프링 부트 프로젝트는 IDE를 이용하던지, spring initializr(start.spring.io)를 이용해 생성할 수 있다. 자바는 8로, 의존성은 Spring Web, Spring Data JDBC..