전체 글41 Java 8 Stream API 사용법 Understanding the Stream API in Java 8Java 8에서 Stream API는 대량 데이터를 처리하는 방식을 혁신했다. Stream은 데이터를 추상화하여 필터링, 변환, 축소 등의 작업을 선언형으로 수행할 수 있도록 한다. 이는 컬렉션(Collection) API와 함께 자주 사용되며, 더 나은 가독성과 효율적인 코드를 작성하는 데 큰 도움이 된다.What is a Stream?Stream은 데이터의 흐름을 나타내며, 원본 데이터를 변경하지 않고 다양한 중간 연산과 최종 연산을 통해 데이터를 처리할 수 있다.Stream API는 두 가지 연산으로 나뉜다.중간 연산 (Intermediate Operations): 필터링, 매핑 등으로 데이터를 변환하거나 추출한다. 이 연산은 지연.. 2024. 10. 24. Java8 Lambda tutorial What i readIdentifying the type of lambda expressionJava언어에서 모든 타입은 컴파일 시점에 알게된다. 람다표현식의 타입도 변수인지 혹은 필드, 메서드의 파라미터 혹은 메서드의 리턴타입이 될지도 알 수 있다. 람다식에는 타입의 제한이 있는데, 그건 바로 Functional Interface 여야 한다는 것이다. Functional Interface로 구현되지 않은 익명클래스는 람다식으로 작성될 수 없다.Functional Interface의 정확한 정의는 조금 복잡하지만 알아야 할 요점은 Functional Interface는 abstract method만을 갖는 인터페이스 라는것이다.Java8에서 인터페이스 내에 구체적인 메서드를 포함시킴으로써, 기존의 추상.. 2024. 10. 23. ThreadPoolTaskExecutor와 CompletableFutre를 사용하여 비동기처리하기 CompletableFuture 간단히 사용해보기Java 8에서 추가된 CompletableFuture는 비동기 작업을 쉽게 처리하고, 메서드들을 결합해 더 직관적인 코드를 작성할 수 있도록 돕는 클래스입니다. 기존의 Future는 에러 핸들링이나 메서드 체이닝에 제한적이었으나, CompletableFuture는 이를 보완하여 더욱 유연한 비동기 작업이 가능하게 해줍니다.예를 들어, 아래와 같은 코드를 작성할 수 있습니다CompletableFuture.supplyAsync(() -> "Hello") .thenApply(s -> s + " World") .thenApply(String::toUpperCase) .thenAccept(s -> System.out.println(s)).. 2024. 9. 30. FeignClient에서 네이밍 전략 변환하기 개요Feign은 HTTP 요청을 생성하는 과정을 단순화하는 선언적 웹 서비스 클라이언트입니다. 개인적으로 선호하는 클라이언트여서 SpringCloud의 의존성을 추가하는 번거로움을 감수하고라도 사용하고 있습니다. 하지만 종종 Response 의 필드가 애플리케이션에서 예상하는 케이스와 일치하지 않는 상황이 발생합니다. 이를 처리하기 위한 과정을 기록합니다.GitHub Repository문제상황포스트 내에서 사용하는 Application Server는 SpringBoot 프로젝트를 의미하고,API Server는 외부에서 정보를 받아오는 서버로 용어를 사용할 예정이다.API Server의 필드는 snake_case를 사용하고 아래와 같은 JSON을 반환한다.{ "date": "2023-12-21T00:00.. 2024. 1. 11. 분산환경은 로깅을 어떻게 할까 개요 slueth-zipkin을 통해서 하나의 Request가 어떻게 어떤서비스에서 얼마의 시간을 소요하고 흘러가는지 확인할 수 있었다. 전통적으로 서비스는 개별로 로그를 보관한다. 로그를 확인하기 위해서 개별 서비스의 로그를 찾아가면서 확인하는 비효율적인 작업을 타개하기 위해 ELK Stack이 도입되었다. 각각 Elasticsearch, Logstash, Kibana 의 약어이다. 분산된 로그데이터들을 중앙화하고 분석과 검색, 시각화에 용이하게 수집 및 정리하는데 사용된다. ELK Stack Elasticsearch 로그를 저장하는 저장소 역할을 한다. 실시간으로 대용량 데이터를 검색하고 분석하는데 사용되는 오픈소스 검색 엔진이다. 기본적인 full-text 검색 뿐 아니라, 구조화된 데이터와 비구조.. 2023. 12. 5. 분산환경은 서비스 트레이싱을 어떻게 할까 Spring Cloud Sleuth:3.0.4 docs 개요 최종적으로 trace를 통해 각 서비스의 로그를 파악하기 위한 수단은 Kibana인데 어떻게 각 서비스에서 수집된 데이터가 하나로 뭉쳐지는지에 대해서 궁금증이 생겼다. 현재 프로젝트에서 구성되어있는 트레이싱을 예측해보면 아래와 같다. 각각의 도메인 서버에서 spring-cloud-sleuth를 통해 수집된 정보를 logback 설정을 통해 JSON으로 샘플링하고 logstash -> Elasticsearch -> Kibana로 가는 구조로 보인다. 차례로 서비스들의 역할을 정리하고 예시로 기동까지 해볼예정이다. 이 글에서는 Spring-cloud-sleuth와 zipkin을 살펴볼것이다. spring-cloud-sleuth Spring Clou.. 2023. 11. 30. @RequiredArgsConstructor와 @Qualifier를 함께 쓰기 @Primary가 있다면 Bean이름으로 주입이 안된다 별도의 설정을 한 RestTemplate Bean을 사용하려는데, 내부 라이브러리에 @Primary로 등록된 RestTemplateBean이 있었다. @Bean @Primary public RestTemplate restTemplate() { // some configuring source return restTemplate; } 위 설정과 다른 Bean을 프로젝트 내부에 생성하고 @Qualifier를 통해 주입하던것을 확인했다. @Bean public RestTemplate targetRestTemplate() { // the other configuring source return new RestTemplateBuilder() }; @Requir.. 2023. 11. 28. [Linux] Symbolic Link Symbolic Link란? Windows에서 바탕화면에 바로가기 아이콘과 기능이 비슷하다. 폴더구조가 복잡하거나 깊은곳에 있는 폴더를 접근할때 유용하게 사용할 수 있다. Symbolic Link 생성 심볼릭 링크를 사용하기 위해선 ln 명령어를 사용해야 하는데, ln 명령어는 link 의 약자이다. ln 명령어의 옵션은 이 사이트에서 확인할 수 있다. /Users/autocat/dev/Personal 와 같은 폴더구조에서 Personal로 바로 가는 SybolicLink를 생성하는 명령어는 아래와 같다 # ln -s [TARGETF_OLDER] [SYMBOLIC_NAME] ln -s /Users/autocat/dev/Personal gopersonal ls 명령어를 통해 Symbolic link가 생성.. 2022. 12. 30. [Docker] Mysql Timezone 변경 Mysql에서 NOW() 를 통해 현자날짜로 TIMESTAMP 필드에 넣어주는데, 날짜가 현재시간과 일치 하지 않아서 타임존을 변경하려고 한다. 별도의 설정이 없다면 기본적으로 UTC로 설정이 되어있어 9시간의 차이가 나는것을 확인할 수 있다.Mysql CLI 진입먼저 mysql 컨테이너의 ID값을 확인하고 CLI에 진입한다.CLI 가 뭐지?Command-Line Interface 로 터미널을 통해 사용자와 컴퓨터가 상호작용 하는 방식ex) dos, commandPrompt, bash 로 대표되는 유닉스 Shell환경terminal(MacOS), window terminal(Window)container의 ID값을 확인한 뒤 exec -it 명령어를 사용하여 진입한다.docker exec -it [con.. 2022. 11. 3. 이전 1 2 3 4 5 다음