보라코딩

WW16 본문

개발자가 되었다?

WW16

new 보라 2024. 4. 16. 18:36
240415

 


- Promtail : 여러 서버 또는 컨테이너에서 생성되는 로그를 쉽게 수집하고 Loki로 전송 (중앙 집중식 로그 관리 시스템 구축)
- Postgres Exporter 완료


- 2pc commit : 여러 노드들 상에서의 원자적 트랜잭션 커밋을 이루기 위한 알고리즘. 독립적인 머신에서 구동되는 프로세스들의 분산 트랜젝션 보장을 위한 프로토콜

- export 명령어로 환경변수 확인가능

- docker compose에 환경변수 등록해서 이걸 application.yml에서 사용하자

- 도커 네트워크에서 external: true  (외부에서 이 네트워크 사용할 수 있음을 나타냄)
   ㄴ docker network create kafka_network
   ㄴ docker network ls로 체크 가능!

- 도커 네트워크 드라이버 종류 : bridge, host, none, container, overlay

- docker-compose.yml에서 profiles: ["prod", "dev"] 이렇게 설정해놓으면 도커 컴포즈를 원하는 프로파일만 띄울 수 있다.
   ㄴ 실행하는 방법은 docker compose --profile prod up

 

 

 

 

 

240416

 

 


- 환경변수 공부(docker compose와 application.yml과 사용하는 것)

 


- shell 통해서 아래 작업 진행
   ㄴ 빌드해서 서비스 전체를 jar 파일 만들고 watcher 서비스를 도커파일 이용해서 이미지로 빌드
   ㄴ 이걸 save하면 tar 파일 되고, 이걸 publish하면 도커허브에 올라감

 


- sh 파일 실행은? cmd에서 파일명으로 또는 git bash에서 sh 명령어 뒤에 파일 이름으로 실행


- 도커컴포즈 멀티 카프카 코드 보기

- 도커 문제 해결 : 다 지우고 낮은 버전 도커 데스크탑 깔고 설정에서 resources - wsl integration 사용하게

- 이름 선택해서 도커 컴포즈 실행하기 : docker-compose -f docker-compose-multi-kafka.yml up

- 카프카 분산시스템에서 메세지 안전하게 다루기 
   ㄴ Transactional Outbox Pattern

 


 

분산 시스템에서 메시지 안전하게 다루기

Transactional Outbox Pattern을 이용한 결과적 일관성 확보 by 강남언니 블로그

blog.gangnamunni.com

 



- MobaXterm_Personal_22.1.exe 이걸로 리눅스 접속 가능!

 

 

240417

 

 

- 멀티모듈 할때 각각의 모듈에 대해서 bootJar { enabled = true } jar { enabled = false } 설정 필요
   ㄴ 프로젝트 내에서만 사용하는 의존성 common같은 코드는 실행이 필요하지 않은 모듈은 bootJar를 비활성화 하고 jar만 활성화  
      bootJar { enabled = false } jar { enabled = true }
   ㄴ 가장 바깥 베이스에서는 꼭 해줘야하는지 모르겠는데 일단.. bootJar { enabled = false }

- Spring Actuator : 
    ㄴ https://toss.tech/article/how-to-work-health-check-in-spring-boot-actuator

- 레드마인 : 오픈소스 프로그램이며 웹기반 시스템으로 태스크, 결함, 이슈 등의 정보를 집약관리하여 프로젝트를 관리
- Jeager : 분산 서비스 간 트랜잭션을 추적하는 오픈소스 소프트웨어로, 복잡한 마이크로서비스 환경을 모니터링하고 트러블슈팅하는 데 사용

- 환경변수로 ftp rootDirectory 추가하여 관리

- 카프카 공부하고 코드 변경하기 (containerFactory ?)

CompletableFuture<SendResult<String, Object>> send = kafkaTemplate.send(TOPIC, DtoList);

send.whenComplete((result, ex) -> {
    if (ex == null) {
        log.info("Message sent successfully: " + result);
    } else {
        log.error("Failed to send message: " + ex.getMessage());
    }

 


- pg export에 테이블 연동

 

- grafana slack alarm :

 

Grafana와 Slack 연동하여 Alert 설정하기

오늘은 Grafana와 Slack을 연동하여 알림을 설정하는 방법에 대해 알아보자. 알림 설정을 해두면 시스템의 상태를 더 효율적으로 모니터링 할 수 있다. Slack 설정하기 Grafana가 Slack에 알림을 보내기

velog.io

 

 

 

240418

 

 

- portainer : Docker Web 관리 Tool. Docker 관련된 컨테이너 및 이미지 관리 및 로깅 또는 모니터링 용도로 사용


- 전략패턴 : 동적으로 알고리즘 변경하고 싶을 때 유연성과 확장성 제공 (구현하는 것에 따른 다른 알고리즘) 다른 곳에서도 쓸 수 있게 자유도 있게 코드를 짠 다음 전략패턴 사용할 수도 있다.
- 템플릿패턴 : 알고리즘 일부를 서브클래스에서 변경하고 싶을 때. 추상 클래스로 알고리즘 템플릿 제공하고 구체적인 서브 클래스는 메서드 재정의 


- SpringBoot Webflux : 반응형 및 비동기적인 웹 애플리케이션 개발을 지원하는 모듈입니다. 이 모듈은 Reactive Streams 사양을 기반으로 하여, 비동기적인 이벤트 지향 프로그래밍을 통해 높은 확장성과 성능을 제공
- Webflux를 사용하는 목적 : 반응형 프로그래밍을 통해 '높은 처리량'과 '확장성'을 갖는 애플리케이션을 만드는 것을 목표로 함
- Non-Blocking Request :  webflux에서 제공하는 Non-Blocking Request을 수행하면서 요청을 보내고 결과가 반환되지 않더라도 다른 작업을 수행할 수 있음
- WebClient : WebFlux의 일부인 Webclient는 비동기적인 방식으로 HTTP 요청을 보내고 응답을 받을 수 있는 라이브러리
- 명령형 프로그래밍 vs 반응형 프로그래밍
- Netty : 자바 기반의 네트워크 애플리케이션 프레임워크로 ‘비동기식 이벤트 기반 서버’를 만드는 데 사용

 


- virtual Thread : 프로그램이 동시에 여러 작업을 처리할때 사용되는 개념. 하나의 물리적인 스레드는 한번에 한가지 작업만 가능. 가상 스레드는 물리적인 스레드보다 가벼워서 여러개의 가상 스레드 한번에 다룸. 여러 작업 동시 처리 시에 효율적

- java virtual thread : 기존 스레드는 운영체제에서 관리. 자바 가상 스레드는 JVM에서 관리
   ㄴ 나중에 따라해볼까? https://findstar.pe.kr/2023/04/17/java-virtual-threads-1/



- log는 바깥쪽에서 찍는 게 좋다. repository보단 controller, service에서 
- ControllerAdvice : 전역적으로 예외처리 할 수 있는 어노테이션

@ControllerAdvice
@Log
public class ExceptionGlobalController {

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> IllegalArgumentException(IllegalArgumentException e) {
        log.warning("IllegalArgumentException");
        return ResponseEntity.badRequest().build();
    }
}

 

 

 

 

240419

 

- upzip시 zip4j 라이브러리 사용하니 코드 짧아짐 ( https://kimfish.co.kr/346 )

- 그라파나 알림 조건 다시! 템플릿도 어렵다 (go 언어라)

- S3 : AWS에서 제공하는 인터넷용 스토리지 서비스(=저장소)
   ㄴ S3는 버킷과 키로 구성됨

'개발자가 되었다?' 카테고리의 다른 글

WW18  (0) 2024.04.30
WW17  (0) 2024.04.24
WW15  (0) 2024.04.12
WW14  (0) 2024.04.02
WW13  (0) 2024.03.29