백엔드개발 8

[K8s] Kubernetes(K8s)의 기본 개념과 용어: POD, 서비스, kubelet

POD 왜 필요한지? Kubernetes에서 POD는 가장 기본적인 배포 단위입니다. 컨테이너들의 묶음으로, 하나의 POD 안에 여러 개의 컨테이너가 함께 실행됩니다. POD의 주요 목적은 서로 연관된 컨테이너들을 함께 배치하여 서비스 간의 통신과 데이터 공유를 간편하게 만들기 위함입니다. 또한 POD는 독립적인 네트워크 IP를 가지고 있기 때문에 개별적인 주소를 통해 접근 가능합니다. 특징 여러 개의 컨테이너를 하나의 논리적 단위로 묶어서 실행합니다. 공유하는 네트워크 네임스페이스와 볼륨을 사용하여 서로 통신하고 데이터를 공유할 수 있습니다. 하나의 노드에서 여러 개의 POD를 실행하며, 여러 노드에 분산 배포할 수 있습니다. 템플릿 예제 yamlCopy code apiVersion: v1 kind: ..

DevOps/k8s 2023.07.27

[AWS] IAM과 Linux Ubuntu환경에 AWS CLI 설치

빛나는 8GB 맥북을 사용하기 위해 AWS EC2에 linux Ubuntu를 설치하여 linux를 학습하고 있다. 오늘은 AWS IAM에 대해 알아보고 AWS CLI를 Linuc Ubuntu 환경에 설치해보겠다. IAMglobal serviceIdentity access management유저를 만들고 그룹에 할당이 가능하다.default root user를 만들고 절대 공유하면 안된다.IAM에서 유저를 생성하고 그 유저는 조직내의 한 사람을 의미한다.그리고 사용자가 합이 맞으면 그룹화가 가능그룹은 컨테이너 사용자만 가능하고 다른 그룹은 불가 IAM 사용자를 생성하고 그룹에 권한을 부여하는 단계 AWS Management Console에서 Identity and Access Management(IAM) ..

DevOps/aws 2023.05.17

[Kafka] Python에 kafka 활용한 간단예제 ft.Event-driven microservices

파이썬에서는 kafka-python이라는 라이브러리를 통해 카프카를 활용할 수 있다. kafka-python 라이브러리를 설치 명령어 pip install kafka-python 다음은 kafka producer 예제이다. producer.send() 함수를 사용하여 토픽에 메시지를 전송할 수 있다. pythonCopy code from kafka import KafkaProducer # 카프카 서버 정보 설정 bootstrap_servers = ['localhost:9092'] # 프로듀서 생성 producer = KafkaProducer(bootstrap_servers=bootstrap_servers) # 메시지 전송 producer.send('my_topic', b'message from pytho..

DevOps/kafka 2023.05.08

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

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

DesignPattern 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

[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] 스마트캐스트(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..