일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 비트마스킹
- ZuulFilter
- 트리
- 이분 탐색
- 다익스트라
- 플로이드 와샬
- 서비스 디스커버리
- docker-compose
- Zuul
- 백트래킹
- 달팽이
- 스프링 시큐리티
- Logback
- 이분 매칭
- dp
- Spring Cloud Config
- 도커
- spring cloud
- 구간 트리
- 완전 탐색
- 구현
- 주울
- 스택
- spring boot
- 유레카
- BFS
- 메모이제이션
- Java
- Gradle
- 게이트웨이
- Today
- Total
목록Spring boot (19)
Hello, Freakin world!
@AspectJ 를 사용할 수 있게 되면, 스프링 빈 중 @Aspect 애너테이션이 정의되어있는 경우 자동으로 찾아 Spring AOP에 사용한다. @Aspect public class NotVeryUsefulAspect { } @Aspect 클래스는 다른 클래스와 마찬가지로 클래스와 메서드를 가질 수 있다. 또 포인트컷, 어드바이스, 인트로덕션(inter-type)도 포함할 수 있다. 만약 애스펙트 빈을 추가할 때, xml 방식을 사용한다면 위의 방식으로 충분하다. 하지만 자바 애너테이션 스타일을 사용한다면 다음과 같이 @Component 를 같이 사용해 빈으로 만들어줘야 한다. @Component @Aspect public class NotVeryUsefulAspect { } 참고 : @Aspect ..
참조 : https://docs.spring.io/spring/docs/4.3.15.RELEASE/spring-framework-reference/html/aop.html#aop-ataspectj 위 글의 토막을 번역/요약한 내용입니다. @ApsectJ support @AspectJ는 자바 애너테이션을 이용해 aspect를 선언하는 방법이다. 스프링은 AspectJ에 의해 제공되는 라이브러리를 이용해 포인트컷을 파싱하고 매치한다. @AspectJ support 사용하기 XML, Java style 설정이 가능하다. 이 두 가지 방식 모두 AspectJ의 aspectweaver.jar 라이브러리가 애플리케이션 classpath에 위치해 있어야 한다(ver 1.6.8 이상). 이 라이브러리는 AspectJ ..
validation 이라는 주제로 이렇게 시간을 오래 끌줄은 몰랐다. 순전히 개인적인 욕심 때문이기도 하다. 목표는 컨트롤러 메서드에서 validation 코드를 분리하는 것이었다. 처음에는 @InitBinder 메서드를 이용하는 방법을 생각했다. @InitBinder 메서드는 context로부터 WebDataBinder 인스턴스를 주입받을 수 있다. 이 인스턴스에 validator를 추가할 수 있는데, 뭔가 이상했다.(혹시 버그가 있는걸까?) validator가 호출되지 않아야하는 타입에서 자꾸 호출되면서 예외를 던졌다.(단위 테스트에서는 분명히 제대로 작동하는데도!) 자질구레한 버그들이 자꾸 생겨서 일단 이 방식은 쓰지 않기로 했다. 위 방식을 쓰지 않겠다는 말은 컨트롤러 메서드의 본문이 시작되기 이..
참조 : https://docs.spring.io/spring/docs/4.3.15.RELEASE/spring-framework-reference/html/aop.html#aop-introduction-defn Aspect : 다수 클래스를 가로지르는 관심사를 모듈화한 것이다. 객체지향에서의 클래스와 같은 개념이다. 스프링에서 aspect는 두 가지 방식으로 구현된다. - schema-based approach (xml을 기반으로 한 방식인듯? 하다) - annotation approach Join Point : 메서드가 실행되고 있는 동안의 시점을 의미한다. AOP 프레임워크의 어느 특정 기능에 대한 용어가 아니다! 예를 들어, 특정 메서드가 실행되기 전에서 끝나기 까지의 그런 시점들을 총징하는 용어다..
시나리오 사용자가 POST 요청으로 데이터를 보낼 때(포맷은 json), @RequestBody 애너테이션을 이용하면 스프링 내부에서 필드명을 이용해서 자동으로 값을 바인딩해줍니다. 값이 제대로 되었는지 체크하는 validation 과정을 컨트롤러 메서드 내에서 수행하기 보단, 컨트롤러 로직 이전, 값을 바인딩한 직후 validation 과정을 수행하고 싶습니다. validation 과정 중 이상이 있는 경우 예외를 던지고 AOP를 @ControllAdvice를 이용해서 전역적으로 이 예외를 처리하려고 합니다. 예제 우선 바인딩 타겟이 되는 Person이라는 클래스를 만듭니다. import lombok.Builder; import lombok.Getter; @Getter public class Perso..
@ControllerAdvice란? 간단하게 말하자면 @ExceptionHandler, @ModelAttribute, @InitBinder 가 적용된 메서드들을 AOP를 적용해 컨트롤러 단에 적용하기 위해 고안된 애너테이션 입니다. @RestControllerAdvice란? @ResponseBody + @ControllerAdvice => @RestControllerAdvice 우선 HelloException 이라는 간단한 예외를 만듭니다. public class HelloException extends RuntimeException{ public HelloException() { super("Hello, Exception!"); } } 다음은 컨트롤러를 만들고 해당 메서드에서 위의 예외를 던지게 합니다..
Profile이란? 프로파일이란 스프링의 각 컴포넌트들의 설정에 필요한 환경 변수 값들을 모아놓은 파일입니다. 기본적으로 스프링 부트에서는 application.properties라는 기본 프로파일을 제공합니다. 프로파일 생성하기 프로파일을 생성하는 건 간단합니다. (자바 애너테이션을 이용해 자바 코드로도 구성이 가능하지만, properties 파일을 이용하는게 더 간단해 보여서 여기선 properties 파일을 이용합니다.) 그냥 /resource 폴더에 application-xxx.properties 파일을 생성하면 xxx라는 프로파일이 생깁니다. 만약 application-develop.properties 를 생성하면 develop 프로파일이 생기는거죠. 프로파일 적용하기 자, 그러면 이 프로파일들..
용도 서버에서 웹 요청을 처리할 때, 값을 객체에 바인딩하고 싶은 경우가 있다. 예를 들어 다음과 같은 요청이 있다고 하자. GET /user/{code}1323323에 해당하는 값을 Code라는 객체로 싸여져 있는 형태로 바인딩한다고 하자. 이렇게 String 형식의 값을 임의의 객체의 속성에 바인딩하고 싶을 때, PropertyEditor를 사용한다. 알아야 할 필요성이 있나? 이 PropertyEditor는 쓸 일은 거의 없다. Spring 3부터 Converter나 Formatter를 이용한 더 나은 대안이 나왔고, 스프링의 웹 요청 바인딩 애너테이션 @RequestParam, @RequestBody 등도 많은 변환을 지원하기 때문에 더더욱 쓸일이 없다. 그래도 만약 필요하다면 아래 글에 Prop..
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest class ValuetestApplicationTests { @Value("Default") private String defaultValue; @Value("1") private int one; @Value("true") private boolean maybeTrue; @Value("${hello}"..