분류 전체보기 153

Architecture EDA(Event Driven Architecture) 마틴 파울러의 4가지 구현 패턴에 대해

Event Driven Architecture는 애플리케이션에서 발생하는 모든 이벤트(상태 변화, 액션, 메시지 등)를 중심으로 설계된 아키텍처이다. 이벤트 드리븐 아키텍처는 이벤트를 통해 시스템을 제어하고, 이벤트가 발생했을 때 필요한 로직을 실행하는 방식으로 동작한다 이벤트 드리븐 아키텍처는 이벤트가 발생했을 때 이벤트 핸들러를 호출하여 이벤트를 처리하도록 설계된다. 이벤트 핸들러는 이벤트의 내용을 분석하여 필요한 로직을 수행하고, 다른 이벤트를 발생시킬 수도 있다. 이렇게 이벤트가 중심이 되는 아키텍처는 유연하고 확장성이 높으며, 비동기적인 방식으로 동작하여 처리 속도가 빠르다. 이벤트 드리븐 아키텍처는 분산 시스템에서도 유용하게 사용될 수 있다. 분산 시스템에서는 이벤트가 다른 노드로 전파되어 처..

DesignPattern 2023.05.08

[Kafka] Kafka Manager API를 사용하여 Kafka 클러스터 모니터링하는 법: 카프카 클러스터의 고가용성확보

카프카 클러스터에서 고가용성을 확보하기 위해서는 여러 대의 브로커 노드를 이용한 복제와 리더-팔로워 구조를 활용해야 한다. 이를 통해 카프카 클러스터 전체에서 데이터의 손실 없이 안정적으로 메시지를 처리할 수 있다. 먼저, 카프카 클러스터에서 데이터를 안정적으로 처리하기 위해서는 여러 대의 브로커 노드를 이용한 복제가 필요하다. 이를 위해 데이터를 복제할 브로커 노드를 미리 설정해야 하고 이때, 브로커 노드의 수는 홀수로 설정하는 것이 좋다. 이유는 브로커 노드 수가 짝수일 경우, 브로커 노드의 다수결로 리더 노드를 선출하는데, 만약 다수결을 가릴 수 없는 경우 브로커 노드 간에 충돌이 발생하여 데이터 손실이 발생할 수 있기 때문이다. 또한, 카프카 클러스터에서 데이터의 안정적인 처리를 위해서는 리더-팔..

DevOps/kafka 2023.05.08

[Kafka] Kafka를 활용한 대규모 데이터 실시간 전송 예제 코드

Kafka는 왜 탄생했나? 단방향 통신 App and Services → Relational Data Ware House Source Application, Target Application이 많아지면서 데이터를 전송해지는 라인이 매우 복잡해졌다. Source Application, Target Application이 많아질수록 key value Store 즉, 데이터를 전송해지는 라인도 그만큼 많아졌다. 데이터를 전송해지는 라인이 많아지면 배포와 장애에 대응하기가 어려워진다. 데이터를 전송할 때 프로토콜포멧 파편화가 심해지고 추후 데이터 포멧 내부에 변경사항이 생기면 유지보수하기어려워진다. apache kafka는 위와 같은 어려움을 해결해준다. Source Application과 Target Appl..

DevOps/kafka 2023.05.02

[IT]코드 의존성에서의 위험

left-pad IT계의 대표적인 보안 사고 중 하나로 "left-pad" 이슈가 있다. 이 문제는 일종의 Supply Chain Attack의 예로, 개발자가 많이 사용하는 JavaScript 라이브러리인 "left-pad"가 갑자기 npm(Node Package Manager) 저장소에서 삭제됨으로써 일어났다. 이를 기반으로 하여 다양한 공격 기법들이 발생하였고, 여러 조직이 피해를 입었다. 이에 대표적인 사건하나가 있는데 2016년 3월, Node.js 생태계에서 매우 유명한 패키지인 "left-pad"가 배포 중단되면서 큰 파장을 일으켰다. 이 패키지는 문자열을 왼쪽으로 채우는 함수를 제공하며, 거의 모든 Node.js 개발자들이 일상적으로 사용하는 패키지 중 하나였다. "left-pad" 이슈는..

IT최신동향 2023.05.01

[AWS] 컨테이너 오케스트레이션 서비스로 비용절감하는 법

AWS에서 제공하는 컨테이너 서비스인 Amazon ECS와 Amazon EKS를 사용하는 개발자들은 컨테이너 환경에서 슬기롭게 생활한다. 이번 세션에서는 AWS에서 컨테이너 서비스를 보다 잘 활용할 수 있는 방법들을 전수받고왔다. 먼저 컨테이너 오케스트레이션 서비스에 대해 알아보도록하자. 컨테이너 오케스트레이션 서비스는 마치 내집 마련을 하는 것과 같다. AWS에서는 Amazon ECS와 Amazon EKS를 제공한다. Amazon ECS는 완전히 관리되는 컨테이너 오케스트레이션 서비스로, 간단하게 애플리케이션을 배포하고 관리할 수 있다. Amazon EKS는 Kubernetes를 사용하는 컨테이너 오케스트레이션 서비스로, 보다 유연하고 안정적인 컨테이너 환경을 제공한다. 이미지 사이즈를 줄이는 방법 이..

DevOps/aws 2023.03.31

[queryDsl] fetchFirst() NullPointerException 에러

fetchFirst() NullPointerException 에러가 발생했을 때 이유는 fetchFirst() null을 반환할 경우 발생한다. 이 경우 fetchOne()을 사용하면 해당 에러를 해결할 수 있지만 하지만 fetchOne()은 더 많은 리소스를 사용하여 성능에 영향을 미칠 수 있어 다른 방법을 고려해야한다. 먼저, etchFirst()가 null을 반환하는 이유를 확인해 보자 예를 들어, 조건에 맞는 데이터가 없는 경우 null을 반환하는 것이 의도된 동작이라면, fetchFirst()를 그대로 사용하는 것이 올바른 방법이다. 하지만, fetchFirst()가 null을 반환하는 것이 예상치 못한 결과일 떄 필요한 데이터만 선택적으로 가져오는 등의 방법으로 쿼리를 최적화할 수 있다. 예를..

[PostgreSQL] 운영서버DB를 개발서버로 pg_dump 하는법

프론트에서 운영서버 DB를 개발서버에 맞춰달라는 요청이 들어왔다. 운영서버와 최대한 비슷한 환경으로 작업하면 개발서버로 코드 작업을 할 때도 QA할 때도 에러사항을 더 찾기 편해지기 때문이다. 적어도 잘못된 데이터로 햇갈리는 일들은 없을 거 같다. 참고로 필자의 회사는 postgres를 사용하고 있다. 1. dump를 원하는 데이터베이스에서 sql확장자로 백업파일을 경로를 지정하여 백업파일을 생성한다. pg_dump [dump하고싶은 db명] -U [postgres 유저이름] -h 접속 host주소 -F p -b -v -f /백업파일/경로/ EX) pg_dump prod_database -U usernameSophie -.rds.amazonaws.com -F p -b -v -f /home/ubuntu/d..

[Kotlin]코틀린1.8.0에서 새롭게 업데이트 된 기능

CBRT Function cube root의 단축어로 세제곱근이라는 뜻이다 import kotlin.math.cbrt val num = 24 val negNum = -num println("The cube root of ${num.toDouble()} is: ${cbrt(num.toDouble())}") println("The cube root of ${negNum.toDouble()} is: ${cbrt(negNum.toDouble())}") 매개변수로 double 과 float를 받아들이고 함수를 가져오고 double 또는 float값을 제공하면 된다. Eg) ${cbrt(num.toDouble())}") , ${cbrt(negNum.toDouble())}") @SinceKotlin("1.8") @W..

MSA구조를 위한 서버안정화 및 과부하 분산처리를 위한 솔루션 검토

서버 자동 재시작(self- healing) bash와 crontab health Check를 위한 쉘스크립트 function isRunning { if[-s $HITUP_PID_FILE] then ps -p $(cat $HITUP_PID_FILE) > dev/null return $? else return 1 fi } JVM 실행옵션 OutOfMemoryError에러 발생 시 바로 킬하는 옵션 장애 원인을 남기기위해서 heapdump남기는 옵션 java- Xmx10x10m \\ -XX:+HeapDumOnOutOfMemoryError \\ -XX:+ExitOnOutOfMemoryError -jar may_cause_oom.jar 첫번째 OutOfMemoryError 에러가 나면 프로세스가 바로 다운이되고..

DevOps 2023.01.20

[Kotlin] 스마트캐스트(smart cast) : 코틀린에서는 프로그래머 대신 컴파일러가 캐스팅한다

[Kotlin in Action] 2장 스마트캐스트: 타입 검사와 타입 캐스트를 조합 interface Expr class Num(val value: Int): Expr class Sum(val left: Expr, val right: Expr): Expr Num value라는 프로퍼티만 존재하는 단순한 클래스로 Expr 인터페이스로 존재한다. Sum Expr타입의 객체라면 어떤 것이나 Sum 연산의 인자가 될 수 있다. 따라서 Num이나 다른 Sum이 인자로 올 수 있다. Sum 은 Expr의 왼쪽과 오른쪽 인자에 대한 참조를 left right 프로퍼티로 저장한다. 이 예제에서 left나 right은 각각의 Sum이나 Num일 수도 있다. (1+2)+4 라는 식을 Sum(Sum( Num(1), Num..