개발
-
개요 Feign은 HTTP 요청을 생성하는 과정을 단순화하는 선언적 웹 서비스 클라이언트입니다. 개인적으로 선호하는 클라이언트여서 SpringCloud의 의존성을 추가하는 번거로움을 감수하고라도 사용하고 있습니다. 하지만 종종 Response 의 필드가 애플리케이션에서 예상하는 케이스와 일치하지 않는 상황이 발생합니다. 이를 처리하기 위한 과정을 기록합니다. GitHub Repository 문제상황 포스트 내에서 사용하는 Application Server는 SpringBoot 프로젝트를 의미하고, API Server는 외부에서 정보를 받아오는 서버로 용어를 사용할 예정이다. API Server의 필드는 snake_case를 사용하고 아래와 같은 JSON을 반환한다. { "date": "2023-12-21..
FeignClient에서 네이밍 전략 변환하기개요 Feign은 HTTP 요청을 생성하는 과정을 단순화하는 선언적 웹 서비스 클라이언트입니다. 개인적으로 선호하는 클라이언트여서 SpringCloud의 의존성을 추가하는 번거로움을 감수하고라도 사용하고 있습니다. 하지만 종종 Response 의 필드가 애플리케이션에서 예상하는 케이스와 일치하지 않는 상황이 발생합니다. 이를 처리하기 위한 과정을 기록합니다. GitHub Repository 문제상황 포스트 내에서 사용하는 Application Server는 SpringBoot 프로젝트를 의미하고, API Server는 외부에서 정보를 받아오는 서버로 용어를 사용할 예정이다. API Server의 필드는 snake_case를 사용하고 아래와 같은 JSON을 반환한다. { "date": "2023-12-21..
2024.01.11 -
개요 slueth-zipkin을 통해서 하나의 Request가 어떻게 어떤서비스에서 얼마의 시간을 소요하고 흘러가는지 확인할 수 있었다. 전통적으로 서비스는 개별로 로그를 보관한다. 로그를 확인하기 위해서 개별 서비스의 로그를 찾아가면서 확인하는 비효율적인 작업을 타개하기 위해 ELK Stack이 도입되었다. 각각 Elasticsearch, Logstash, Kibana 의 약어이다. 분산된 로그데이터들을 중앙화하고 분석과 검색, 시각화에 용이하게 수집 및 정리하는데 사용된다. ELK Stack Elasticsearch 로그를 저장하는 저장소 역할을 한다. 실시간으로 대용량 데이터를 검색하고 분석하는데 사용되는 오픈소스 검색 엔진이다. 기본적인 full-text 검색 뿐 아니라, 구조화된 데이터와 비구조..
분산환경은 로깅을 어떻게 할까개요 slueth-zipkin을 통해서 하나의 Request가 어떻게 어떤서비스에서 얼마의 시간을 소요하고 흘러가는지 확인할 수 있었다. 전통적으로 서비스는 개별로 로그를 보관한다. 로그를 확인하기 위해서 개별 서비스의 로그를 찾아가면서 확인하는 비효율적인 작업을 타개하기 위해 ELK Stack이 도입되었다. 각각 Elasticsearch, Logstash, Kibana 의 약어이다. 분산된 로그데이터들을 중앙화하고 분석과 검색, 시각화에 용이하게 수집 및 정리하는데 사용된다. ELK Stack Elasticsearch 로그를 저장하는 저장소 역할을 한다. 실시간으로 대용량 데이터를 검색하고 분석하는데 사용되는 오픈소스 검색 엔진이다. 기본적인 full-text 검색 뿐 아니라, 구조화된 데이터와 비구조..
2023.12.05 -
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..
분산환경은 서비스 트레이싱을 어떻게 할까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 -
@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..
@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 -
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가 생성..
[Linux] Symbolic LinkSymbolic 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 -
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 ..
[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 ..
2022.11.03 -
https://github.com/donghyeon-dev/StrategyPattern-with-Springboot Strategy Pattern 이란? behavior software design pattern that enables selecting an algorithm at runtime. 알고리즘을 런타임시 동적으로 선택할 수 있게 하는 행동디자인 패턴 알고리즘을 정의하고 각각을 캡슐화하여 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 어떠한 객체의 행위를 캡슐화하여 행위을 행하는 전략에 따라 쉽게 행위를 바꿀수 있도록 도와준다. 기능을 사용하는 부분 과 구현하는 부분 을 명확히 분리하는것이 중요하다. 💡 객체가 할수있는 행위들을 각각의 전략으로 만들어 놓고, 동적으로 행위의 방식(전략)..
[Design Pattern] Strategy Patternhttps://github.com/donghyeon-dev/StrategyPattern-with-Springboot Strategy Pattern 이란? behavior software design pattern that enables selecting an algorithm at runtime. 알고리즘을 런타임시 동적으로 선택할 수 있게 하는 행동디자인 패턴 알고리즘을 정의하고 각각을 캡슐화하여 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 어떠한 객체의 행위를 캡슐화하여 행위을 행하는 전략에 따라 쉽게 행위를 바꿀수 있도록 도와준다. 기능을 사용하는 부분 과 구현하는 부분 을 명확히 분리하는것이 중요하다. 💡 객체가 할수있는 행위들을 각각의 전략으로 만들어 놓고, 동적으로 행위의 방식(전략)..
2022.01.26 -
Mac에서 환경변수를 선언하는 방법에는 2가지가 있다. [임시적 등록] Terminal 명령어 [영구 등록] zshrc / bashrc 에 직접 선언 Terminal 명령어 일시적으로 환경변수가 등록되지만, 터미널이 재부팅 되면 등록된 변수가 사라진다. $ export {환경변수명}={환경변수값} echo {환경변수명} 을 사용해서 환경변수 값을 확인할 수 있다. 수정 또한 같은방식으로 진행하면 된다. 첫번째 명령어와 같이 '=' 사이에 empty space가 존재하면 안된다. ./zshrc 에서 설정하는법 zsh사용자라면 vi ~/.zshrc, bash 사용자라면 v1 ~bashrc 를 사용하여 직접 들어가서 수정한다. export {환경변수명}="{환경변수값}" source ~/.zshrc 를 통해..
[Mac] 환경변수 선언Mac에서 환경변수를 선언하는 방법에는 2가지가 있다. [임시적 등록] Terminal 명령어 [영구 등록] zshrc / bashrc 에 직접 선언 Terminal 명령어 일시적으로 환경변수가 등록되지만, 터미널이 재부팅 되면 등록된 변수가 사라진다. $ export {환경변수명}={환경변수값} echo {환경변수명} 을 사용해서 환경변수 값을 확인할 수 있다. 수정 또한 같은방식으로 진행하면 된다. 첫번째 명령어와 같이 '=' 사이에 empty space가 존재하면 안된다. ./zshrc 에서 설정하는법 zsh사용자라면 vi ~/.zshrc, bash 사용자라면 v1 ~bashrc 를 사용하여 직접 들어가서 수정한다. export {환경변수명}="{환경변수값}" source ~/.zshrc 를 통해..
2021.08.23