일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springcloud
- spring cloud netflix
- 단위테스트
- netflix
- Spring Data Redis
- code refactoring
- 서비스스펙
- spring cloud
- 설계
- Java
- reactive
- api-gateway
- docker
- Eureka
- container image #docker #layer #filesystem #content addressable
- test
- spring cloud netflix zuul
- unit
- BFS
- forkandjoinpool #threadpool #jvm #async #non-blocking
- Dynamic Routing
- spring cloud netflix eureka
- 탐색
- java #jvm #reference #gc #strong reference
- dfs
- netflix eureka
- zuul
- microservice architecture
- unittest
- Today
- Total
목록분류 전체보기 (48)
phantasmicmeans 기술 블로그
자동화된 비즈니스 프로세스나 현실 세계의 문제가 소프트웨어의 도메인이다. 소프트웨어는 도메인으로부터 시작되고 뗄 수 없는 관계를 가지고 있다. 좋은 소프트웨어를 만들기 위해서는, 그 소프트웨어가 무엇에 관련되어있는지를 알아야한다. 즉 도메인에 대한 깊은 지식이 필요하고, 우리가 출발해야 하는 곳은 언제나 도메인이며 소프트웨어는 도메인을 모델링해야한다. 도메인 전문가와 이야기를 나누며 배운 여러 가공되지 않은 지식들을 기반으로 > 도메인을 추상화해야한다. 즉 추상화 > 도메인을 표현한 모델 모델 모델 == 대상 도메인에 대한 내부적 표현으로 설계와 개발 프로세스 내내 반드시 필요 하나의 도메인에는 모델로 만들기에는 정보가 너무 많기에 대부분은 고려할 필요조차 없다. 은행 소프트웨어는 고객의 주소를 반드시 ..
CDC(change data capture)는 데이터베이스 내 데이터에 대한 변경을 식별해 후속 처리를 자동화 하는 기술이자 개념이고, 단어 그대로 데이터의 변경본을 캡쳐한다 로 이해하면 더 직관적입니다. 보통 변경본 캡처 후 데이터 가공 및 타 데이터베이스로의 적재가 필요한 환경에서 주로 사용되고, 이벤트 기반의 아키텍처를 구성할때에도 자주 사용되는 것 같습니다. 이번 글에서는 MongoDB를 기준으로 변경본 캡쳐 이벤트를 subscribe 하는 방법 중 아래 2가지를 간단하게 공유 드리고자 합니다. Debezium connector for MongoDB MongoDB Change Streams Debezium Kafka Connector CDC 오픈소스 중 가장 많이 사용 되는 것이 Debezium ..
먼저 expectNext / assertNext / consumeNextWith (아래에서 설명할 thenConsumeWhile와 비교를 위해 간단히 추가 했습니다.) 가장 기본적인 연산자로는 expectNext / assertNext / consumeNextWith가 있습니다. 모두 결국 onNext signal을 기반으로 동작합니다만, 이 연산자들은 아이템이 emit 되지 않으면 에러를 발생시킵니다. 즉, empty publisher를 차단할 수 있습니다. (empty publisher 반환을 테스트하고 싶다면 아래와 같은 방법을 사용하거나 아래에서 설명할 thenConsumeWhile을 사용하면 됩니다.) @Test public void EMPTY_PUBLISHER_TEST() { Mono mono..
Key Points 불필요한 짐을 실은 무언가에 의존하면 예상치 못한 문제에 빠질 수 있다. ISP: 인터페이스 분리 원칙 인터페이스 분리 원칙은 아래 다이어그램에서 이름이 유래됨 다수의 사용자가 OPS 클래스의 오퍼레이션을 사용하고 각 유저들은 각자 다른 하나의 오퍼레이션만 사용한다. User1 -> op1 User2 -> op2 User3 -> op3 정적 타입 언어인 경우 User1이 op2,op3를 전혀 사용하지 않음에도 User1의 소스 코드는 이 두 메서드에 의존하게 됨 이러한 의존성으로 인해 OPS 클래스에서 op2 코드가 변경되면 User1도 다시 컴파일 해야함 따라서 아래처럼 변경 오퍼레이션 분리 인터페이스를 두고 오퍼레이션을 분리 User1 -> U10ps(op1) 에는 의존하지만 OP..
Key Point 안정된 추상에 의존시키며 구체에 의존 X 소스 코드 의존성과 제어 흐름은 반대로 -> 이 원칙이 의존성 역전 DIP 의존성 역전 원칙에서 말하는 유연성이 극대화된 시스템이란 소스 코드 의존성이 추상에 의존하며 구체에는 의존하지 않는 시스템 자바와 같은 정적 타입 언어에서 이 말은 import 구문이 오직 인터페이스나 추상 클래스 같은 추상적인 선언만을 참조해야한다는 뜻 구체적인 대상에 절대로 의존해서는 안됨 이러한 아이디어를 규칙으로 보기에는 비현실적 측면이 있음 Java String 구체 클래스 그 예시로 자바의 String은 구체 클래스이며, 이를 추상 클래스로 만드려는 시도는 현실성이 없음. 이 경우 구체 클래스에 대한 의존성은 벗어날 수 없고, 벗어나서도 안됨 String은 매우..
Key Point 함수형 프로그래밍에서의 변수 상태에 초점 함수형 언어에서 변수는 변경되지 않는다 함수형 프로그래밍은 변수 할당에 부과되는 규율이다. Functional Programming 정의 함수형 프로그래밍은 순수 함수로 나누어 문제를 해결하는 기법, 작은 문제를 해결하기 위한 함수를 작성하고 사용 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나 명령형 프로그래밍에서는 상태를 변경하는 것을 강조하는것과 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. Side Effect가 없는 Pure Function을 1급객체로 Pure Function 설명 Side effect가 없는 함수 (함수의 실행이 외부에 영향을 끼치지 않는 함수, thread-..
코틀린의 가장 큰 장점중에 하나인 Extension Function 구글링해보면 이 주제에 관련된 자료는 무궁무진하고.. 솔직히 내용이 쉬워서 아래 자료를 보고 이해하면 될 것 같다. https://medium.com/til-kotlin-ko/kotlin%EC%9D%98-extension%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80-part-1-7badafa7524a https://codechacha.com/ko/kotlin-extension-functions/ https://dev.to/frevib/kotlin-extension-function-vs-function-literal-with-receiv..
Higher-Order Functions 코틀린의 함수는 1급 객체이다. 즉 인자로 전달 될 수 있고, 다른 함수의 리턴값으로도 사용될 수 있다. 또한 변수에 부여될 수 있다. 아래 2가지 조건 중 하나를 만족하는 함수를 Higher-Order-Function(고차원 함수)라 부른다. 함수를 인자로 받는 함수 리턴값으로 함수를 사용하는 함수 자바의 경우 Collections.sort()를 예로 들 수 있다. 첫 번째 인자로 list, 두번째 인자로 Comparator를 받는데 이는 Functional Interface이다. public static void sort(List list, Comparator
Functional (SAM) Interface SAM: Single Abstract Method 자바에서도 마찬가지로 하나의 abstract method를 가지는 인터페이스를 functional interface라 하고 코틀린도 마찬가지이다. functional interface 를 선언하려면 fun modifier를 사용하면 된다. fun interface KRunnable { fun invoke() } SAM Conversions 이것도 자바와 동일하게 람다식을 활용하면 된다. 자바 Functional Interface를 알고 있다면 아주 쉽게 이해 될 것이다. functional interface fun interface IntPredicate { fun accept(i: Int): Boolean..
Interfaces 코틀린의 인터페이스는 abstract method 뿐만 아니라 java의 default method 처럼 구현 된 메소드를 포함할 수 있고, 프로퍼티 또한 포함할 수 있다. 다만 이 프로퍼티는 state를 유지하진 못하기에 구현체에서 접근자를 통해 컨트롤해야한다. interface MyInterface { fun bar() fun foo() { // optional body } } Implementing Interfaces class Child : MyInterface { override fun bar() { // body } Properties in Interfaces 인터페이스에도 프로퍼티를 선언할 수 있다고 했다. 해당 프로퍼티는 abstract 이거나, 구현체에서 접근자를 통해..