개요 만약 내가 작성한 모든 메써드의 실행 전후로 로그를 남기고 싶다면? 데이터베이스에 대한 쓰기 작업 전후의 트랜잭션 관리를 일일이 명시하지 않고 자동으로 하고 싶다면? 전통적인 클래스 관점의 OOP 세계에서는 깔끔하게 대응하기가 쉽지 않다. 답은 Aspect 관점의 AOP(Aspect Oriented Programming)를 도입하는 것이다. Java 진영에는 AspectJ라는 훌륭한 AOP 프레임워크가 존재하며 이를 이용하여 개발자는 커스텀 어노테이션을 적용한 자신 만의 편리한 Aspect를 작성할 수 있다.(AspectJ의 훌륭한 적용 사례 중 하나는 jcabi-aspects 라이브러리이다.) Spring 또한 AspectJ 스타일을 수용한 프록시 기반의 Spring AOP를 제공한다. 대상 클래..
개요 Java EE에는 HTTP 요청에 대한 응답을 수행하는 HttpServlet(@WebServlet)이 존재하며 이러한 서블릿 실행 전후 시점에 임의의 처리를 가능하게 해주는 Filter(@WebFilter)가 존재한다. 필터는 체인 형태로 여러 개를 사용할 수 있다. Spring Web MVC 또한 동일한 기능의 HandlerInterceptor를 제공한다. Filter는 로우 레벨의 처리 로직을, HandlerInterceptor는 회원 인증 검사 등의 비즈니스 레벨의 처리 로직을 작성하는데 적합하다. 이번 글에서는 HandlerInterceptor의 사용 예를 간단히 설명하고자 한다. HandlerInterceptor 작성 package com.jsonobject.example; import o..
먼저 읽어볼만한 글 Spring Boot, 웹 프로젝트 생성하기 라이브러리 종속성 추가 dependencies { compile group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '4.7' } Spring Boot 기반의 애플리케이션(spring-boot-start 또는 spring-boot-start-web 아티팩트를 추가한 상태)은 기본적으로 spring-boot-starter-logging 아티팩트를 포함하므로 별도의 라이브러리 종속성을 추가할 필요가 없다. Spring Boot는 내부적으로 Logback 로깅 라이브러리를 사용하여 로그를 출력하며 개발자는 추상체인 SLF4J를 사용하여 로그를 기록하면 된다. 최근의 ..
개요 웹의 시대가 열린지는 오래되었지만 REST API가 본격적으로 유행한지는 얼마 되지 않았다. 안타깝게도 국내는 비즈니스 로직 구현에만 초점을 맞추어 GET, POST 메써드의 구분 없이 API 요청을 허용한다거나(심지어 POST 요청에 쿼리 스트링을 담기도 한다.) 상태 코드를 사용하지 않고 무조건 200 응답 후 바디에 독자적인 코드를 재정의하는 등 HTTP 스펙의 권고사항을 무시한 API 개발이 너무나도 흔한 상황이다. 그럼에도 REST는 가독성, 유지보수성 등을 고려했을 때 꼭 필요한 설계 철학이다.(세계 최대의 커뮤니티 reddit 또한 REST API를 제공한다.) 이번 글에서는 이러한 REST API를 이용(소비)하는 클라이언트로서 RestTemplate의 사용 예를 설명하고자 한다. 라..
- Total
- Today
- Yesterday
- kotlin
- 알뜰폰
- 로드바이크
- CentOS
- chrome
- 자전거
- spring
- 구동계
- jstl
- graylog
- jpa
- java
- MySQL
- Spring Boot
- JHipster
- Docker
- 평속
- 로드 바이크
- JavaScript
- maven
- Kendo UI Web Grid
- DynamoDB
- Tomcat
- Kendo UI
- Spring MVC 3
- 태그를 입력해 주세요.
- jsp
- bootstrap
- node.js
- Eclipse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |