웹 개발
-
[Spring] 팩토리 메소드 패턴을 적용하여 bean을 동적으로 사용하기웹 개발/Spring Framework 2020. 4. 19. 22:58
하나의 인터페이스를 상속받는 구현체들이 많을 경우, 팩토리 메소드 패턴을 이용하면 동적으로 필요한 객체를 받아와서 사용할 수 있다. Factory 패턴이란? Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. - 위키백과 Head First 디자인 패턴을 참고하여 팩토리 패턴을 정리한 포스팅을 보면 팩토리 패턴에 대해서 학습할 수 있다. 팩토리 메소드 패턴을 이용하면 인터페이스의 구현클래스를 매번 선언해서 가져올 필요없이 가져오려는 인터페이스의 구현체의 타입을 이용해서 가져올 수 있다. Spring에서..
-
Unit Test에 나오는 Fixture와 Mock은 무엇일까?웹 개발/웹&프로그래밍 2020. 4. 5. 12:19
Test Fixture Fixture는 '고정되어 있는 물체'를 의미한다. Junit 팀에서 말하는 테스트 픽스처란? 의역하자면, 테스트 실행을 위해 베이스라인으로서 사용되는 객체들의 고정된 상태이다. 테스트 픽스처의 목적은 결과를 반복가능할 수 있도록 알 수 있고, 고정된 환경에서 테스트할 수 있음을 보장하기 위함이다. 예시 ㅇ 목 또는 가짜 객체의 세팅이나 생성 그리고 삽입할 데이터의 준비 ㅇ 구체적이며 알고있는 데이터를 지닌 데이터베이스 로딩 ㅇ 테스트 픽스처를 만들어내는 특정 파일들을 복사하면 특정 상태로 초기화된 객체들 생성됨. Junit은 테스트 클래스들이 매번 테스트 실행 전/후 아니면 한번만 픽스처를 가질 수 있도록 애노테이션으로 제공한다.(JUnit4이 제공하는 4가지 픽스처 애노테이션:..
-
[Spring] Lombok을 이용해 Builder 패턴을 만들어보자.웹 개발/Spring Framework 2020. 3. 21. 17:10
Builder 패턴이란? Effective Java 규칙 2 - 조슈아 블로크 생성자에 인자가 많을 때는 빌더 패턴을 고려하라 빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. (출처: 위키백과) 난 생성자가 많아지면 빌더 패턴을 만드는 편인데, 개발자 성향에 따라 다를수도 있구나를 느꼈다. 빌더패턴을 활용하면 어떤 필드에 어떤 인자를 넣어줬는지 명확히 알 수 있고, 넣어줄 필요 없는 필드(null)는 굳이 선언할 필요 없으니 좋다고 생각했다. 근데 다른 분은 어떤 필드에 null이 들어간다는걸 명확히 볼 수 있는 점 때문에 생성자를 통해 객체를 생성하시는 방법을 택했다고 하셨다. int..
-
[WebFlux] publisher(발행) - subscriber(구독) 패턴에 대해서웹 개발/WebFlux 2020. 1. 24. 16:00
publisher(발행) - subscriber(구독)패턴에 대해서 처음 WebFlux를 썼을 때, publisher와 subscriber 모델의 개념을 이해하지 못해서 삽질을 많이했다. spring mvc로 동기식 개발을 할 때는 메서드 호출만 하면 결과값이 return 됐었다. 그러나, reactive하게 동작하는 WebFlux에서는 메서드만 호출해서는 아무 일이 일어나지 않는다. (reactive 선언문) 개념 publihser - subscriber패턴은 observer 디자인 패턴과 유사한 부분이 많다. 옵저버 패턴 위키피디아의 옵저버 패턴 설명을 보자. 옵서버 패턴(observer pattern)은 객체(subject)의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들(observers)의 목록을..
-
[Study] Reactive 선언문(그대로 인용)웹 개발/웹&프로그래밍 2019. 12. 26. 23:57
Webflux를 활용하려면 꼭 머릿속에 두어야 하는 내용이지만, 깜빡할 때를 대비해 아예 블로그에 그대로 가져옴. Reactive 선언문 2014년 9월 16일에 발행됨. (v2.0) 다른 분야에서 활동하는 조직들은 유사한 소프트웨어를 구축하기 위한 패턴들을 독립적으로 발견하고 있습니다. 이러한 시스템은 보다 견고하고, 탄력적이며, 유연하며 최신의 요구사항을 반영하기 쉽습니다. 최근 몇 년간 애플리케이션의 요구사항이 급격하게 변화했기 때문에 이러한 변화가 발생하고 있습니다. 불과 몇 년 전까지만 해도 거대한 애플리케이션은 수십 개의 서버로 구성되어, 몇 초의 응답 시간과 몇 시간의 오프라인 유지보수를 허용하고, 기가 바이트 데이터를 담고 있었습니다. 오늘날의 애플리케이션은 모바일 기기에서 부터 수천 개의..
-
[WebFlux] query string에 담긴 String 파라미터를 localDate로 캐스팅하고 매핑하기웹 개발/WebFlux 2019. 12. 23. 14:22
get 방식 query string으로 파라미터를 넘겼을 때, controller에서 파라미터로 받는 object에 속한 field의 localDate 타입을 캐스팅하고 매핑해주기 이 방법을 찾게 된 계기는 클라이언트단에서 넘겨줄 파라미터가 많아서 하나하나 받으면 코드가 더러워질 것 같아 dto로 하나의 클래스를 만들기로 했다. 단순히 localDate 타입이 되어야하는 딱 하나의 파라미터를 받는다면, 아래처럼 짜면 쉽게 받아와졌다. (@DateTimeFormat을 이용하면 된다) 하나의 localDate형식의 파라미터를 받고 싶을 때, // 요청 url: http://localhost:8080/festivals?eventStartDate=2010-10-01 @GetMapping("/festivals")..
-
[WebFlux] StepVerifier and How to use it 해답 코드 - techio웹 개발/WebFlux 2019. 10. 29. 23:56
techio reactor StepVerifier 학습 사이트 techio에서 배울 수 있는 Reactor StepVerifier 학습 success코드 operator 참고 사이트 StepVerifier reference site 해답 코드 Verify Simple flux // TODO Use StepVerifier to check that the flux parameter emits "foo" and "bar" elements then completes successfully. void expectFooBarComplete(Flux flux) { StepVerifier.create(flux) .expectNext("foo") .expectNext("bar") .verifyComplete(); } V..
-
[WebFlux] Learn how to create Mono instances 해답 코드 - techio웹 개발/WebFlux 2019. 10. 22. 23:24
techio reactor Mono 학습 사이트 techio에서 배울 수 있는 Reactor 학습의 success 코드 operator 참고 사이트 Mono reference site 해답 코드 Empty Mono // TODO Return an empty Mono Mono emptyMono() { return Mono.empty(); } No Emission // TODO Return a Mono that never emits any signal Mono monoWithNoSignal() { return Mono.never(); } Create a Mono from an item // TODO Return a Mono that contains a "foo" value Mono fooMono() { re..