일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- object
- etf
- 그리디 알고리즘
- XLF
- 다형성
- 금리인하
- 무디스
- 객체지향
- FCF
- 오버라이딩
- 기업분석
- 미국주식
- 잉여현금흐름
- 현금흐름표
- javascript
- 백준
- 접근제어자
- 자바
- 배당성장
- S&P500
- 주식
- mco
- 금리인상
- StringBuffer
- 프로그래머스
- Java
- 주린이
- 인플레이션
- 알고리즘
- 제태크
- Today
- Total
목록분류 전체보기 (205)
오늘의하루
Spring Cloud Gateway에서 API Gateway 필터 구성하기사용자 정의 필터를 생성하려면 AbstractGatewayFilterFactory를 상속 받은 후 apply 메서드를 구현한다.GatewayFilter를 반환해야 하며 GatewayFilter를 구현한 OrderedGatewayFilter로 생성하면 실행 순서를 지정할 수 있다.OrderedGatewayFilter는 Ordered도 구현하고 있는데 Ordered 객체 안에는 HIGHEST_PRECEDENCE (Integer.MIN_VALUE)와 LOWEST_PRECEDENCE(Integer.MAX_VALUE)가 있어서 가장 먼저 실행되야 하는것과 가장 마지막에 실행되어야 한는 필터의 순서를 쉽게 지정해줄 수 있다.추가 ) Filt..
서버 포트 번호 설정: server.port = 0Spring Boot에서 server.port=0으로 설정하면, 서버는 자동으로 사용 가능한 랜덤 Port 번호를 할당한다.이는 Spring Cloud에서 특히 유용하며 여러 애플리케이션 인스턴스를 각기 다른 Port로 실행해 Eureka와 같은 서비스 등록 서버에 유연하게 등록할 수 있다.Eureka 연동 시 랜덤 Port 번호 문제점Eureka는 기본적으로 Host 이름과 Port 번호를 결합하여 인스턴스를 등록하는데 포트가 0으로 설정하면 포트번호가 0번으로 등록되어서 같은 Host 이름을 가지게 되면 몇 개를 등록해도 1개만 등록된 것처럼 보이는 문제점이 있다.이를 해결하기 위해 고유한 인스턴스 ID 설정이 필요하다. [Eureka Client 설..
Proxy 내부 호출@Component@Slf4jpublic class A { public void external() { log.info("external"); internal(); } public void internal() { log.info("internal"); }}---@Aspect@Slf4jpublic class AllAspect { @Before("execution(* *(..))") public void doA(JoinPoint joinPoint) { log.info("aop = {}", joinPoint.getSignature()); }}위 상황에서 external()을 호출하면 doA 메서드에서 작..
Java에서 기본적으로 제공하는 ThreadLocal은 동시성 문제를 해결하는 가장 기본적인 방법 중 하나입니다.ThreadLocal은 내부적으로 Map 자료 구조를 통해 각 Thread 별로 데이터를 저장하고 불러오기 때문에 각 Thread는 자신만의 데이터를 독립적으로 가질 수 있습니다.Thread와 ThreadPoolThread는 하나의 프로세스 내에서 실행 단위를 뜻합니다.Spring을 통해 웹 개발을 할 때 일반적으로 ThreadPool을 통해 Thread를 관리합니다.이러한 상황에서 ThreadLocal을 사용할 경우, 몇 가지 주의해야 할 점이 있습니다.주의사항 1. ThreadPool 재사용 문제ThreadPool에서는 Thread가 응답 후 사라지는 것이 아니고 다시 ThreadPool로..
기존 방식public RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl(); roleHierarchyImpl.setHierarchy("ROLE_ADMIN > ROLE_USER"); return roleHierarchyImpl;}변경 방식public RoleHierarchy roleHierarchy() { return RoleHierarchyImpl.fromHierarchy("ROLE_ADMIN > ROLE_USER");}변경 사항기본 생성자 사용 중단기존의 기본 생성자 생성자 RoleHierarchyImpl()은 사용하지 않게 되었습니다.팩토리 메소드인 fromHierarchy()을 통해 객..
CPU - Bound 작업CPU-Bound 작업은 CPU 연산 능력이 성능에 영향을 주는 작업입니다.이런 작업은 병렬 처리를 통해 성능을 향상시킬 수 있습니다.이유는 각 Thread는 독립적으로 CPU 자원을 사용하여 작업을 처리하기 때문입니다. 하지만 실제 CPU 코어 수를 초과하는 Thread 개수를 사용하는 경우 성능에 악영향을 초래할 수 있습니다.I/O - Bound 작업I/O-Bound 작업은 입출력 연산 능력이 성능에 영향을 주는 작업입니다.이런 작업은 디스크 or 네트워크 속도에 의해 결정되기 때문에 Thread 수를 증가해도 성능 향상이 제한적입니다.또한 각 스레드가 I/O가 작업이 완료될 때까지 대기하는 병목현상이 발생하여 Thread 관리 오버헤드가 발생할 수 있습니다.성능 향상을 위해..
이 글에서는 Mockito를 활용하여 Java 애플리케이션에서 랜덤 값을 포함하는 함수를 어떻게 효과적으로 테스트할 수 있는지에 대해 알아보겠습니다.MockitoMockito는 자바에서 Mock 객체를 생성하고 관리할 수 있는 강력한 도구이며, 특히 랜덤 값과 같이 예측하기 어려운 요소가 포함된 함수를 테스트할 때 사용할 수 있습니다.Mock 객체란 실제 객체를 대신하는 가짜 객체를 말합니다.Mock 객체는 외부 의존성이 많은 코드나 복잡한 비즈니스 로직을 가진 코드를 테스트하는 데 매우 유용합니다.간단한 예제:import java.util.Random;import lombok.AllArgsConstructor;@AllArgsConstructorpublic class Game { private Rando..
Stream의 특징스트림(Stream)은 Java에서 일련의 데이터를 함수형 연산을 통해 효율적으로 처리할 수 있는 메커니즘입니다.기본적으로 스트림은 지연 평가를 사용하여 연산을 효율적으로 처리합니다.이를 통해 필요할 때만 연산을 실행하고 중간 연산 결과를 최적화할 수 있습니다.병렬 처리를 원할 경우, parallel() or parallelStream()를 사용하여 스트림을 병렬 처리 모드로 전환할 수 있습니다.병렬 Stream이 모든 상황에서 성능 향상을 보장하지 않습니다.이렇게 하면 멀티 코어 CPU를 활용하여 대량의 데이터를 빠르게 처리할 수 있고, 병렬 처리된 각 부분의 결과를 최종적으로 합치는 과정을 거칩니다.스트림의 이러한 특성 덕분에 Java에서는 복잡한 데이터 처리 작업을 보다 간편하게 ..
GitHub - dukbong/spring-apache-Kafka-practice: Kafka 연습하기Kafka 연습하기. Contribute to dukbong/spring-apache-Kafka-practice development by creating an account on GitHub.github.comKafka란?실시간 대용량 메시지 스트리밍 플랫폼으로써 높은 처리량과 낮은 지연 시간을 특징으로 하며, 이벤트 기반 아키텍처를 구현하는데 주로 사용됩니다.이벤트 기반 아키텍처 : 시스템의 다양한 구성 요소 간의 상호 작용을 이벤트 중심으로 구성하는 패턴입니다.Kafka 구성 요소1. 이벤트(Event)시스템에서 발생하는 중요한 사건을 말하며, 특정 시점에서의 상태 변화를 나타냅니다.Kafka에서 ..
문제 상황부하 테스트를 진행하면서 100명의 사용자가 동시에 같은 아이디로 회원가입을 시도했습니다. 이때 회원가입 로직은 아이디의 중복 여부를 확인하고, 중복된 경우에는 회원가입을 거부해야 합니다. 하지만 신기하게도, 동시에 여러 명의 사용자가 같은 아이디로 회원가입에 성공했습니다.또한, 처음 회원가입에 성공한 사용자는 삽입(insert) 쿼리가 실행되었지만, 그 외의 사용자들은 업데이트(update) 쿼리가 실행되었습니다. 이러한 이상 동작은 예상과는 매우 다르게 나타났습니다.문제 로직Controller -> Service -> DB@Overridepublic synchronized void joinProcess(JoinDTO joinDTO) { Assert.hasText(joinDTO.getUsern..