본문 바로가기

전체 글

(64)
[Book] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 4장 처리율 제한 장치의 설계네트워크 시스템에서 처리율 제한 장티(rate limiter)는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치다. HTTP를 예로 들면 이 장치는 특정 기간 내에 전송되는 클라이언트의 요청 횟수를 제한한ㄷ. API 요청 횟수가 제한 장치에 정의된 임계치(threshold)를 넘어서면 추가로 도달한 모든 호출은 처리가 중단(block)된다. API에 처리율 제한 장치 설정 시 장점1. Dos(Denial of Service) 공격에 의한 자원 고갈을 방지할 수 있다. 대형 IT기업들이 공개한 거의 대부분의 API는 어떤 형태로든 처리율 제한 장치를 갖고 있다. 처리율 제한 장치는 추가 요청에 대해서는 처리를 중단함으로써 Dos 공격을 방지한다. 예를..
[Book] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장,3장 2장 계략적인 규모 추정계략적 규모 추정을 효과적으로 해내려면 규모 확장성을 표현하는데 필요한 기본기에 능숙해야 한다. 특히, 2의 제곱수나 응답 지연(latency) 값, 그리고 가용성에 관계된 수치들 등 2의 제곱수분산 시스템에서 다루는 데이터 양은2장 계략적인 규모 추정계략적 규모 추정을 효과적으로 해내려면 규모 확장성을 표현하는데 필요한 기본기에 능숙해야 한다. 특히, 2의 제곱수나 응답 지연(latency) 값, 그리고 가용성에 관계된 수치들 등 2의 제곱수분산 시스템에서 다루는 데이터 양은 엄청나게 커질 수 있으나 그 계산법은 기본을 크게 벗어나지 않는다. 제대로 된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 우선 알아야 한다. 최소 단위는 1바이트이고,..
[Book] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 사용자 수에 따른 규모 확장성모든 컴포넌트가 단 한대의 서버에서 실행되는 간단한 시스템으로 웹,앱,데이터베이스,캐시 등이 전부 서버 한 대에서 실행된다 사용자 요청 처리 흐름요청은 2가지 종류의 단말로 오는데, 하나는 웹이고 다른 하나는 모바일 앱이다.1. 사용자는 돔인 이름을 이용하여 웹사이트에 접속한다. 이 접속을 위해서는 도메인 이름을 도메인 이름 서비스에 질의하여 IP주소로 변환하는 과정이 필요하다. 2. DNS조회 결과로 IP주소가 반환된다. 여기 예제에서는 그 주소가 15.124.23.214라고 하겠다.3. 해당 IP 주소로 HTTP 요청이 전달된다.4. 요청을 받은웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 사용자가 늘면 서버 하나로는 충분하지 않아서 여러 서버를 두어야 한..
Mockito의 엄격 모드(Strict Stubbing) Mockito를 사용해 테스트를 작성하다 보면 아래와 같은 에러를 한 번쯤은 마주치게 됩니다.org.mockito.exceptions.misusing.UnnecessaryStubbingException:Unnecessary stubbings detected.혹은org.mockito.exceptions.misusing.PotentialStubbingProblem:Strict stubbing argument mismatch.이 에러 메시지의 원인은 "엄격한 stubbing 검사", 즉 Mockito의 Strict Stubbing 모드 때문입니다. 이 글에서는 엄격 모드가 무엇이고 왜 필요한지, 그리고 실제 현업에서 어떻게 대응하면 좋은지를 정리합니다.🔍 엄격 모드(Strict Stubbing)란?Stric..
spring actuator를 활용한 회복탄력성 관리(2) Spring Boot Actuator는 Spring Boot 애플리케이션의 런타임 정보를 모니터링하고 관리하기 위한 기능을 제공하는 라이브러리입니다. 애플리케이션의 상태, 건강 상태, 환경 정보 등을 실시간으로 확인할 수 있습니다.엔드포인트 (Endpoints): Actuator는 애플리케이션에 다양한 관리 엔드포인트를 제공합니다. 이 엔드포인트를 통해 애플리케이션의 상태, 정보, 설정 등을 확인할 수 있습니다./actuator/health: 애플리케이션의 건강 상태를 확인합니다./actuator/info: 애플리케이션의 정보를 확인합니다./actuator/metrics: 애플리케이션의 메트릭 정보를 확인합니다.애플리케이션 정보 노출 (Application Information Exposure): Act..
서킷브레이커를 활용한 회복탄력성 관리(1) 회복탄력성(Resilience)은 시스템이 예상치 못한 장애나 오류 발생 시에도 정상적으로 동작할 수 있는 능력을 의미합니다. resilience4j - retry 기능재시도는 특정 요청이 실패했을때 바로 실패했다고 간주하는것이 아니라 몇 번 더 시도해보는것을 의미합니다. 일반적으로 일시적인 오류로부터 시스템을 보호하기 위해 사용됩니다. 예를 들어 네트워크 연결이 불안정할 때나 외부 서비스가 일시적으로 응답하지 않을 때 등에 유용합니다. Retry Policy (재시도 정책): Retry 동작을 정의하는 정책입니다. 이 정책은 재시도를 언제 해야 하는지, 얼마나 자주 해야 하는지, 얼마나 많이 해야 하는지 등을 결정합니다.Stop Strategies (중단 전략): 재시도를 멈추는 전략을 정의합니다. 예..
[SpringBoot] Wanted but not invoked 테스트 코드 시간 정보 비교 👉 문제 상황Mockito에서 findTopArticles 메서드에 대한 호출을 예상 인자와 실제 호출된 인자가 정확히 일치하지 않아서 문제가 발생오류 메시지 설명:Wanted but not invoked 부분은 예상한 호출이 실제로 일어나지 않았다는 의미.articleRepository.findTopArticles가 호출될 때 2025-02-11T23:40:27.674555400라는 시간이 예상되었지만, 실제로 호출된 시간은 2025-02-11T23:40:27.843202500로, 두 값이 다른 시간이야.👉 에러 원인LocalDateTime.now()의 시간 정확도 차이LocalDateTime.now()를 사용해서 oneMonthAgo 값을 동적으로 설정했을 때 밀리초 단위로 값이 달라질 수 있음...
[SpringBoot] Your security configuration must be updated before running your application in production. 403 👉 문제 상황MockHttpServletResponse:            Status = 403sing generated security password: 7191ef02-9d66-440a-825a-faaeafa09245 This generated password is for development use only. Your security configuration must be updated before running your application in production.👉 원인org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfigurationSpring Security에서 인증(Authentication)이 필요하지..