반응형

개발 17

단위 테스트에서 Mockito 잘 활용하기

서론 단위 테스트는 두 가지 견해 고전파와 런던파로 구분할 수 있다. 고전파는 켄트 백의 테스트 주도 개발(TDD)으로 원론적으로 접근하는 방식 때문에 '고전'이라 한다. 런던파는 런던 프로그래밍 커뮤니티에서 시작되어, 목 추종자라고도 불린다. 아래 글에서는 위의 학파와는 상관없이 단순히 단위 테스트에서 mockito를 잘 활용하는 방법에 대해서만 설명할 예정이다. 단위 테스트의 관심사 controller 👇 (interface) service 👇 service implementation (복잡한 비지니스 규칙) 👇 (interface) repository 👇 repository implementation (외부 의존성) 위의 흐름에서 단위 테스트 자체는 인터페이스의 실제 구현에 전혀 관심이 없다. 왜 ..

개발 2023.09.22

Spring Boot 3.x 기반 actuator 설정 및 custom metrics 추가

Spring Boot Actuator http://localhost:8080/actuator/ 위 링크 접속시 아래처럼 각 항목별 상세 링크 정보를 알려준다 이러한 방식을 HATEOAS 방식이라고 한다 각각의 url은 endpoint라고 부른다 self -> http://127.0.0.1:8080/actuator health -> http://127.0.0.1:8080/actuator/health health-path -> http://127.0.0.1:8080/actuator/health/{*path} 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-actuator' 핵심 라이브러리인 micrometer-core를 ..

개발 2023.07.11

Feign Client 커스텀 하기

Spring boot 2.6.x 기준 포스팅입니다 Spring boot 3.0.x부터는 HttpClientFeignConfiguration 클래스가 사라진 것으로 보입니다. 따라서 아무 설정 하지 않은 경우와ApacheHttpClient로 변경에 대한 내용은 추후 살펴보겠습니다. 아무 설정 하지 않은 경우 특별한 설정을 하지 않는 이상 FeignAutoConfiguration에 의해 httpClient와 feignClient를 ApacheHttpClient로 등록한다. HttpClientFeignConfiguration 클래스의 connectionManager() -> httpClient() -> createClient() 순서로 CloseableHttpClient 가 디폴트로 생성된다. 이 과정에서 매..

개발 2023.07.05

Kafka를 이용해 '실시간' 데이터 처리가 가능한가?

궁금증 IT 관련 글을 보다보면 '실시간 데이터 처리' 라는 단어를 자주 맞이하게 됩니다. MMORPG나 MO FPG등 실시간성이 중요시되는 게임 업계에서는 소켓 서버를 구축하여 이를 가능케합니다. TCP/IP, UDP/IP의 소켓을 직접 다루거나, 그것을 직접 다루는 엔진을 통해 OS의 기능을 직접 다루게 됩니다. 반면, 웹 서버에서는 모든 요청을 웹 리퀘스트로 받으며, 별도로 커넥션을 맺고 끊는 방식이라 성능이 상대적으로 느릴 수 밖에 없습니다. 그렇기에 높은 성능을 가진 것처럼, 실시간으로 보이는 처리를 위해 각종 미들웨어를 사용합니다. 그리고 Kafka는 ActiveMQ, RabbitMQ와 함께 대표적인 메시지 지향 미들웨어 중 하나입니다. 그럼 질문에 대한 대답이 끝나게 되었군요. 웹 서버에서 ..

개발 2022.12.11

2. Apis - 요약

참조 Apis 카프카의 다섯 가지 핵심 API 소개 godekdls.github.io 카프카는 다섯 가지 핵심 api를 제공한다: 1. 카프카 클러스터에 있는 토픽에 데이터 스트림을 전송하는 어플리케이션을 위한 프로듀서 API 2. 카프카 클러스터에 있는 토픽에서 데이터 스트림을 읽어가는 어플리케이션을 위한 컨슈머 API 3. 입력 토픽 데이터를 읽어 출력 토픽에 전송하는 데이터 변환 스트림을 위한 스트림즈 API 4. 끊임 없이 어떤 소스 시스템에서 데이터를 받아(pull) 카프카로 보내거나, 카프카 데이터를 다른 싱크 시스템이나 다른 어플리케이션으로 보내는(push) 커넥터를 구현한 커넥트 API 5. 토픽, 브로커나, 다른 카프카 오브젝트를 관리하고 점검할 수 있는 어드민 API 카프카는 이 모든 ..

개발 2022.12.04

1. Getting Started - 요약

참조 Getting Started 카프카에 대한 기본적인 소개, 사용 사례, 퀵스타트 가이드 godekdls.github.io 1.1 Introduction What is event streaming? 이벤트 스트리밍은 데이터베이스, 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 어플리케이션같은 이벤트 소스에서 데이터를 실시간으로 이벤트 스트림 형식으로 잡아내는 관행이다. 이런 이벤트 스트림은 나중에 조회해갈 수 있게 안전한 곳에 저장하고, 실시간 이벤트 스트림에 즉시 반응하거나 모아서 처리할 수도 있다. 필요에 따라 이벤트 스트림을 다른 기술로 라우팅하기도 한다. 이벤트 스트리밍은 이처럼 데이터의 지속적인 플로우를 이어주며, 덕분에 데이터를 끊김 없이 해석해 적시에 적절한 정보를 필요한 곳에 제공할..

개발 2022.12.04

[열거 타입] Enum 공부하다 생긴 의문점 2가지

Enum 클래스 먼저 Enum 클래스의 코드를 살펴보겠습니다 public abstract class Enum implements Comparable, Serializable { private final String name; private final int ordinal; public final String name() { return this.name; } public final int ordinal() { return this.ordinal; } protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } public String toString() { return this.name; } public fin..

개발 2022.03.02

[제네릭] 타입 안전 이종 컨테이너.. 이거 어디에 사용할까?

궁금증 이펙티브 자바 "아이템 33 - 타입 안전 이종 컨테이너를 고려하라"를 읽으면서 든 궁금증이다. 그래... 다양한 타입을 하나의 컬렉션 등에 넣기 위해, 예를 들어 Map의 key에는 클래스 리터럴 값을 넣고 value에는 Object를 받는다고 치자. 저 map에서 put과 get을 할때 메서드를 직접 구현해서 type.cast() 등을 활용해서 타입 안전하게 여러 타입을 넣을 수 있게 되었다. 교재에서는 이러한 동적 형변환으로 런타임 타입 안전성을 확보하는 방식을 java.util.Collections에 있는 checkedSet, checkedList, checkedMap 같은 메서드를 만들 때 적용했다고 한다. 그래 알겠다.. 이 래퍼들은 제네릭과 로 타입을 섞어 사용하는 애플리케이션에서 클..

개발 2022.02.21

[제네릭] 컬렉션이나 단일 원소 컨테이너에서 매개변수화 되는 대상은 무엇일까?

이펙티브 자바 "아이템 33 - 타입 안전 이종 컨테이너를 고려하라"를 읽는 도중, 한 구문이 이해가 되지 않았습니다. 다음은 이펙티브 자바 198쪽에 나오는 문단입니다. 제네릭은 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 (원소가 아닌) 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 제한된다. 컨테이너의 일반적인 용도에 맞게 설계된 것이니 문제될 건 없다. 예컨대 Set에는 원소의 타입을 뜻하는 단 하나의 타입 매개변수만 있으면 되며, Map에는 키와 값의 타입을 뜻하는 2개만 필요한 식이다. 저는 2번째 줄인 "이런 모든 쓰임에서 매개변수화되는 대..

개발 2022.02.20
반응형