Spring에서 이벤트를 사용하는 방법에 대해 알아보자. 이벤트는 프레임 워크에서 간과 된 기능 중 하나이지만 더 유용한 기능 중 하나입니다. 그리고 Spring의 다른 많은 것들과 마찬가지로 이벤트 퍼블리싱은 ApplicationContext가 제공하는 기능 중 하나입니다. Spring ApplicationEvent는 기본적으로 동기입니다. 먼저 간단한 이벤트 메세지 클래스를 작성합니다. public class CustomEvent extends ApplicationEvent { private String message; public CustomEvent(Object source, String message) { super(source); this.message = message; } public St..
Spring REST Docs는 정확하고 읽기 쉬운 RESTful 서비스에 대한 문서를 생성합니다. 손으로 작성한 문서와 Spring 테스트로 생성 된 자동 생성 문서 snippets(스니펫)을 결합해서 사용 할 수 있게 해줍니다. 자바 문서 자동화에는 Spring REST Docs 이외에 대표적으로 Swagger가 있습니다. 필자는 Swagger의 경험만 있었다...문서 자동화라는 공통점이 있지만 각각 용도,목적??은 다르다. Spring REST Docs Swagger 용도 문서 제공용 API 테스트를 위한 용도에 더 집중됨 장점 깔금하고 API 명세에 집중 적용하기 상대적으로 쉬움 API 테스트 UI제공 단점 Test코드 기반 문서 작성됨 (Test코드 필수) 설정등 적용하기 어려움 코드에 어노테이..
스프링의 HandlerMethodArgumentResolver 구현하여 커스텀 데이터를 binding해보자. 데이터를 객체에 바인딩하려는 경우가 있지만 직접적이지 않은 방식 (예 : 세션, 헤더 또는 쿠키 변수) 또는 데이터 소스에 저장되는 경우가 있습니다. 이 경우 HandlerMethodArgumentResolver 이용하면 쉽게 해결할 수 있다. 먼저 커스텀 어노테이션을 작성하자. @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface Version { } 커스텀 어노테이션을 정의하고 HandlerMethodArgumentResolver에 등록하면 어노테이션만 달면 컨트롤러에서 쉽게 바인딩 할수있다. H..
spring boot로 kafka를 간단하게 구현을 해보자. kafka가 이미 설치된 가정하에 진행하겠다. 이전글에 보면 kafka 설치 및 간단히 콘솔에서 실행하는 방법을 설명한 바 있다. 참조하도록 하자. 먼저 프로젝트를 생성하자. 인텔리j, maven기반으로 설명하겠다.Spring initializr를 선택해서 프로젝트를 생성하자. 디펜던시를 아래와 같이 추가해주자. Web -> Spring Web Starter와 Messaging -> Spring for Apache Kafka Streams, Spring for Apache Kafka 이제 kafka의 topic을 생성하는 KafkaTopicConfig 파일을 생성하고 KafkaAdmin 빈을 추가하자. KafkaAdmin 빈은 NewTopic ..
kafka producer와 cunsumer를 테스트해보자. 일단 kafka를 먼저 설치 하자. kafka를 다운받고 간단하게 producer, cunsumer 실행하고 압축을 풀고 해당 kafka 디렉토리로 이동하자. 아래와 같이 폴더들이 있다. ~/kafka.2.12-2.3.0 > ls LICENSE NOTICE bin config libs site-docs 아래와 같이 입력하여 zookeeper를 실행하자. bin/zookeeper-server-start.sh config/zookeeper.properties 실행되면 아래와 같이 메세지가 출력이 된다. INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCn..
Mybatis oracle proedure xmlType 처리필자가 알기엔 oracle 11g부터인가 xmlType형식을 지원한다. 그리고 mybatis로 oracle procedure 함수를 호출해서 쿼리 대신 데이터를 받을 수 있다.굳이 왜 이렇게 하는가....근데 그렇게 해야 할 일이 생겨서 삽질을 좀 많이 했다. 프로젝트는 spring-boot 2.1.2, Java 8, maven, intellij 기반으로 했다. 근데 여기서 또 하나 문제가 발생한다. 아래에 설명할 테지만 spring-boot를 사용하는데 어쩔 수 없이 배포를 war로 해야 했다. war 배포 설정은 여기에 아주 잘 나왔다. 참고하도록 하자. 참고로 intellij 프로젝트 생성시 packaging war바꿔주면 알아서 다 해준..
spring boot MessageSource 다국어처리spring reactive 기반으로 다국어처리를 한번 해보겠다. 틀린 부분도 있을것이다. webflux로 진행해보겠다. 일단 프로젝트를 하나 생성해보자. 개발환경은 인텔리j, maven기반이다. 먼저 템플릿 엔진은 thymeleaf를 사용하기 때문 아래와 같이 pom.xml에 추가해주자. org.springframework.boot spring-boot-starter-thymeleaf 그 다음 MessageSource 와 templateResolver 설정이다.MessageSource beannames는 프로젝트 resources 하위 message 프로퍼티경로를 적어주면된다. messages/message는 resources 폴더아래 messag..
spring boot mybatis 연동오늘은 spring boot와 mybatis를 간단하게 연동 테스트를 해보겠다. 일단 spring boot 프로젝트를 생성하고 아래와 같이 디펜던시를 받자. org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 com.h2database h2 runtime org.projectlombok lombok org.springframework.boot spring-boot-starter-test test City라는 class를 만들자.@Data @Alias("city") public class City { private Long id;..
spring boot Transaction(@Transactional) 1.@Transactional 적용된 메서드(상위메소드)에서 @Transactional이 적용되지 않은 메서드(하위메소드)를 호출할때는 Transaction이 적용된다. 2.@Transactional이 적용되지 않은 메서드(상위메소드)에서 적용된 메서드(하위메소드)를 호출하면 Transaction이 무시된다. 3.@Transactional 적용 되지 않은 메서드에서 적용된 메서드를 호출할때 무시된다. 무시되지만 그 상태에서 R을 제외하고 CUD를 2번 이상 할 경우에는 에러를 내뱉는다. Proxy모드에서는 외부 메서드를 호출할 때만 aop 적용되어 메서드를 가로챈다. 4.@Transactional 어노테이션이 붙어 있는 함수는 접근 ..
오늘은 spring data jpa를 사용하여 json을 출력해보는 포스팅을 하겠다. 글로버 페치 전략에 즉시로딩이 아닌 지연로딩을 사용하면 영속성 상태가 아닐 경우 데이터를 가져올 때 에러가 발생한다. 그래서 open session in view 이하 osiv를 사용하는데 messageconverter일 경우 즉 json일 경우 그래도 에러가 발생한다.(연관관계가 양방향 일 경우) 방법은 몇가지 있다. @JsonIgnore, @JsonBackReference, @JsonManagedReference 혹은 JSON Filter, 와 @JsonView 현재까지 알아본 결과 위와 같다. 다른 방법은 나중에 설명 하도록 하고 이번 시간에는 dto를 만들어서 해보겠다. dto(data transfer objec..