반응형

전체 글 103

[Spring Data Commons] Add overload to ReactiveSortingRepository accepting a Limit parameter

Issue Add overload to ReactiveSortingRepository accepting a `Limit` parameter. · Issue #2923 · spring-projects/spring-data-commons Flux findAll(Sort sort, Limit limit); github.com PR Add overload to ReactiveSortingRepository accepting a Limit parameter. by hwan33 · Pull Request #2959 · spring-projects/spring Related issue: #2923 Motivation Flux findAll(Sort sort, Limit limit); It's good to add f..

오픈소스 2023.11.03

단위 테스트에서 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

[리팩토링] 2 ~ 5장

enrichPerformance 메서드에서 shallow copy한 Performance 객체에 동적으로 play라는 필드를 추가해버리는데 자바에서는 어떻게 구현하셨는지 궁금합니다(p.56) PerformanceVo 별도로 정의Performance 클래스에 추가  데이터베이스 리팩토링 or 마이그레이션 시 얼마나 작은 단계로 나눠서 릴리스 하시는지 궁금합니다(p.99) flyway 사용DBA 검수 이후 주로 오전에 배포합니다. 락이 걸리거나 큰 작업의 경우에는 새벽에 배포합니다.DBA에게 요청합니다. 2주에 한번씩 주기적으로 한번에 배포합니다.  모든 상황에서 기능 추가와 리팩토링을 독립적으로 분리하여 커밋하기에는 너무 피곤해질 것 같은데..그럼 기능 추가를 진행하며 마음에 들지않는 코드여도 일단 내버려..

독서 2023.04.15

[리팩토링] 1장

부정관사 사용하는 이유가 뭘까?(p.34) 자바 스크립트는 동적 타입 언어이기 때문에 타입을 변수명으로 쉽게 확인할 수 있게 된다실제로 헝가리안 표기법을 사용하는 팀이 있다고 한다  playFor 함수는 단순히 인덱스를 통해 배열의 값을 가져오는 것 같은데, 함수 추출하는 의미가 무엇일까?(p.35) 1. 함수로 추출하는 이유는 변경점을 최소화하기 위해서2. 추상화 레벨을 맞추기 위해서 (인덱스에 접근하는 것은 낮은 레벨이다)  for 루프 한번이면 될 일을 for 루프 두번으로 돌리는 것이 성능에는 크게 상관이 없다(p.39) 상관 있더라도 리팩토링과 성능 개선은 분리해서 접근하는 것이 맞다실제 테스트 결과 O(n), O(4n)이 1.5~2배 정도 차이난다컴파일러 성능이 많이 좋아졌기에 클린 코드를 작..

독서 2023.04.04

Mockito를 사용한 테스트에서의 OOM

상황 내가 만든 로직의 성능을 테스트하고자 연속적으로 호출하는 테스트 코드를 작성해봤다. 해당 로직에서는 레디스에 접근하는 경우가 있었기 때문에, Mock 객체를 활용해 실제 레디스에 접근하는 시간은 제외한 자바 코드의 성능만을 테스트 하고자 했다. 예시 코드는 아래와 같다. @MarsSpringBootTest @Slf4j class ServiceTest { private static final int CALL_STANDARD = 10_000_000; @Autowired private TestService testService; @Mock private Repository repository; @Test void run() { when(repository.find(xxx)).thenReturn(Optio..

트러블 슈팅 2023.01.03

Transaction propagation option & silent rollback

일반적인 상황 하나의 서비스 로직 안에서 다른 서비스의 메서드를 호출하는 경우가 많지만 지금까지는 어떤 메서드일지라도 문제가 생기면 전부 롤백시켜야 하는 상황이 대부분이었다. 예를 들자면, 게임의 결과로 100만원이 지급되어야 하는데 유저 서비스에 문제가 생겨 재화를 지급할 수 없는 상황이라면 해당 스핀 자체를 무효화하고 오류를 발생시키는 것이 일반적이다. 만약 게임은 계속 진행되는데 게임 머니가 지급되지 않는다면 아마 고객센터 서버마저 터져버릴 것이다.. ㅎㅎ 문제 상황 그런데 주요 로직이 아닌 부차적인 로직에 대해서도 하나의 트랜잭션으로 작용해야할까? 예를 들어, 게임에서 막대한 상금을 받았을 때 친구에게 자랑할 수 있는 메세지를 보낼 수 있다고 치자. 메세지 서버에 문제가 생겼다면 게임 자체를 플레..

트러블 슈팅 2022.12.28

Lecture 4.8 ~ 4.10: Packet Forwarding and Internetworking

4-8 IP Errors with ICMP Copyright © Pearson Education, Inc. or its affiliate(s). All Rights Reserved. mediaplayer.pearsoncmg.com Topic - 포워딩 과정에서 문제가 생기면 어떻게 하는가? Internet Control Message Protocol - ICMP는 IP와 항상 같이 실행된다 - 에러 리포팅이나 테스트에 사용된다 ICMP Errors - 이상을 감지한 라우터는 Source로 ICMP 리포트를 전송한다 ICMP Message Format - ICMP data에는 기존 패킷에 대한 정보가 담겨있다 - IP Header에는 오류를 감지한 라우터에서 A로 가는 정보와 함께 ICMP 헤더가 있음을 ..

Lecture 4.4 ~ 4.7: Packet Forwarding and Internetworking

4-4 IP Prefixes Copyright © Pearson Education, Inc. or its affiliate(s). All Rights Reserved. mediaplayer.pearsoncmg.com Topic Ip Addresses - 32비트로 구성된 IPv4는 부족할 지경이라 128비트로 구성된 IPv6가 도입되고 있다 - 32비트 전부를 적는 것이 아닌 8개 비트에 대한 수와 dot으로 표기한다 IP Prefixes - Modern - prefix에 해당하는 비트는 고정되어 있다 - prefix 길이가 L인 네트워크에서는 2^(32-L)개의 주소값이 할당된다 - prefix의 길이는 ip 주소 맨 끝에 /를 기입하고 prefix를 기입한다 - /24 네트워크는 256개의 주소, /..

반응형