본문 바로가기

Programing

(405)
[Spring] SSE vs WebFlux WebFlux를 쓰지 않을 경우 스레드풀 방식에 의해 매 연결이 계속 연결이 될까 궁금했다. 코드 방법1. Tomcat, MVC 방법.2 Tomcat, WebFlux https://supawer0728.github.io/2018/03/15/spring-http-stereamings/ http://jmlim.github.io/spring/2018/11/27/spring-boot-schedule/ @EnableScheduling 크롬브라우저는 되는데 HttpPie는 -S 옵션을 붙여주어야 한다. 안그러면 마지막 응답 후 한꺼번에 결과를 보여준다.
[Spring] mvc 예외처리 스프링의 mvc에서 예외처리는 실무에서 보면 @ControllerAdvice 을 이용해서 많이 한다. 아래와 같이 밑바닥 부터 예외 처리기를 구현해도 무방하다. @RestControllerAdvice(basePackages = {"com.tistory.namocom.controller"}) public class NamoExceptionHandler { 하지만 편의를 위해 스프링은 미리 ResponseEntityExceptionHandler을 만들어놓았다. public abstract class ResponseEntityExceptionHandler { 추상클래스이므로 상속을 받아 사용이 가능하다. @RestControllerAdvice(basePackages = {"com.tistory.namocom...
[Spring] ServiceLocatorFactoryBean 어떤 기능이 여러 출처에 의해 분기를 해야하는 경우가 실무에서는 자주 생긴다. 주문 도메인이라면 처음에는 카테고리 A에 대해서만 판매를 하다가 카테고리 B라는 것이 생긴다. 결제 도메인이라면 처음에는 카카오페이만 지원을 했더라도 나중에 다른 네이버페이를 추가할 수 있다. 이럴 경우 레이어를 두는 것이 보통 일반적이다. Client -> KakaopayService -> KakaopayExternalAPI 이런식으로 되어 있는데 네이버 페이를 추가한다면 Client -> PaymentService -> KakaopayService -> KakaopayExternalAPI -> NaverpayService -> NaverpayExternalAPI 이런식으로 분기를 할 수 있는 계층(위에서 PaymentSer..
[Spring] Boot 빈 의존성 사례 - Spring Integration (TCP) 하는 방법은 검색해보면 쉽게 찾을 수 있다. 글을 쓰는 이유는 실무에서 어떤 경우에 발생하는지 기록을 하기 위함이다. 스프링이 관리하는 객체, 즉 빈은 의존하고 있는 것이 명시적으로 드러날 때는 초기화 과정에서 필요한 빈들을 먼저 초기화를 해준다. 하지만 간접적으로 빈을 사용하는 경우 초기화 시점에 필요한 빈이 없을 수 있기 때문에 애플리케이션에서 실패가 발생한다. 내가 경험한 사례는 다음과 같다. TCP/IP 전문 통신을 해야해서 Spring Integration프로젝트 중 TCP and UDP Support 기능을 이용했다. Spring Integration 5.0 부터는 Java DSL을 통한 설정이 가능하기에 Configuration은 아래와 같이 구성했다. @Configuration @Enabl..
[Java] Object.hashCode JavaDoc - History Java 1.3.1 hashCode public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no i..
[Java] "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."? 자바의 정석 453쪽에 보면 "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."라는 말이 나와있다. 물론 Object의 hashCode는 오버라이드가 가능하므로 다음과 같이 코드를 짠다면 무조건 같은 해시코드만 반환이 될 것이다.public class Foo { @Override public int hashCode() { return 1; } public static void main(String[] args) { Foo foo1 = new Foo(); Foo foo2 = new Foo(); System.out.println(foo1 == foo2); System.out.println(foo1.hashCode() == foo2.hashCode()); } }위의 코드를 실행한다면false tru..
[java] Java 8의 시간은 10000년을 파싱 못한다? 10000년까지 살아 있을지는 모르겠지만 테스트 케이스를 만들었는데 LocalDate.parse("10000-01-01") 위와 같은 코드는 아래와 같은 파싱 예외가 발생한다. java.time.format.DateTimeParseException: Text '10000-01-01' could not be parsed at index 0 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400) at j..
[Java] Enum에 없는 값을 테스트할 때는 어떻게하지? 통신사 멤버십을 관련 기능을 개발하게 되었다고 하자. (예를 들 때는 현실성이 있는 것이 좋으므로...) 아래와 같은 Enum이 있다고 하자. public enum MembershipType { KT, SKT } 통신사에 따라 사용하는 API가 달라서 묶어주는 구조로 되어 있다고 하자. 물론 다형성을 이용한 전략 패턴을 적용기에 좋은 구조이다. 하지만 갯수가 많지 않아 switch~case로 분기하게 되어 있다고 치자. 코드는 아래와 같이 표현이 가능할 것이다. @Service @RequiredArgsConstructor public class MembershipInspector { private final KtMembershipInspector ktMembershipInspector; private f..