최신 글
-
SNS + SQS 사용 시 Payload 간소화하기
https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html Amazon SNS raw message delivery - Amazon Simple Notification Service Amazon SNS raw message delivery To avoid having Amazon Kinesis Data Firehose, Amazon SQS, and HTTP/S endpoints process the JSON formatting of messages, Amazon SNS allows raw message delivery: When you enable raw message delivery for Amazon Kin..
2023.03.31
-
[DB] JOIN ON 과 WHERE 의 차이
JOIN 시 ON 에 조건을 넣는것과 WHERE에 조건을 넣는것에 어떤 차이가 있는지 정리한다. 예제 테이블 & 데이터 create table MEMBER( MEMBER_ID int primary key auto_increment, NAME varchar(20), FAVORITE_COLOR varchar(50) ); create table ORDERS ( ORDER_ID int primary key auto_increment, ORDER_COLOR varchar(50), ORDER_DATE timestamp, MEMBER_ID int, FOREIGN KEY (MEMBER_ID) REFERENCES MEMBER (MEMBER_ID) ); insert into MEMBER(NAME, FAVORITE_COLO..
2023.03.27
-
JOIN 정리 (INNER JOIN, LEFT JOIN, RIGHT JOIN)
그 동안 JOIN 종류에 대한 개념을 제대로 가지고 있지않아서 확실하게 정리하고 넘어가려고 합니다. 항목 - INNER JOIN - LEFT JOIN - RIGHT JOIN 예제 테이블 & 데이터 사용 DDL (MySQL 사용) create table MEMBER( MEMBER_ID int primary key auto_increment, NAME varchar(20), FAVORITE_COLOR varchar(50) ); create table ORDERS ( ORDER_ID int primary key auto_increment, ORDER_COLOR varchar(50), ORDER_DATE timestamp, MEMBER_ID int, FOREIGN KEY (MEMBER_ID) REFERENCES..
2023.03.27
-
[Kubernetes 입문] 6-2. 컨트롤러 (DemonSet, StatefulSet, Job, CronJob)
데몬셋 (DemonSet) - 공식문서 클러스터 전체 노드에 특정 파드를 실행할 때 사용 노드가 클러스터에 추가되면, 파드도 추가됨 노드가 클러스터에서 제거되면, 데몬셋이 실행한 파드가 가비지(garbage)로 수집됨 데몬셋의 대표적인 용도 모든 노드에서 클러스터 스토리지 데몬 실행 모든 노드에서 로그 수집 데몬 실행 모든 노드에서 노드 모니터링 데몬 실행 # daemonset-example.yaml (데몬셋 예시) apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name..
2023.01.19
-
[쿠버네티스 입문] 6-1. 컨트롤러 (Replication Controller, ReplicaSet, Deployment )
쿠버네티스의 컨트롤러(Controller) 파드들을 관리하는 역할 다양한 목적에 맞게 사용할 컨트롤러들이 존재 레플리케이션 컨트롤러 (Replication Controller) 지정한 숫자만큼 파드가 항상 클러스터 안에서 실행되도록 관리 컨트롤러 없이 파드를 직접 실행하면 파드에 문제가 생겨 종료됐거나 삭제됐을 때 재시작하기 어렵다. 등호 기반(equality-based)의 셀렉터 지원 셀렉터가 레이블을 선택할 때 `=` , `!=` 연산자 지원 최근에는 레플리케이션 컨트롤러 대신 레플리카세트를 사용하는 추세 레플리카 세트 (Replica Set) 레플리케이션 컨트롤러의 발전형 집합기반(set-based)의 셀렉터 지원 셀렉터가 레이블을 선택할 때 in, notin, exists 연산자 지원 레플리케이션..
2023.01.16
-
[쿠버네티스 입문] 5-1. 파드
파드 개념 쿠버네티스는 파드라는 단위로 컨테이너를 묶어서 관리 보통 파드 안에 컨테이너 하나가 아닌 여러 개의 컨테이너로 구성됨 파드로 컨테이너 여러 개를 한꺼번에 관리할 때는 컨테이너마다 역할을 부여할 수 있음 파드 하나에 속한 컨테이너들은 모두 노드 하나 안에서 실행 (노드란?) -> 파드의 역할 중 하나가 컨테이너들이 같은 목적으로 자원을 공유하는 것이므로 가능 파드 하나 안에 컨테이너들이 IP 하나를 공유함 파드에 192.168.10.10 이라는 IP 로 접근하며, 파드안 컨테이너와 통신할 때는 컨테이너마다 다르게 설정한 포트(Port)를 사용함 파드 사용하기 # pod-sample.yaml apiVersion: v1 kind: Pod metadata: name: kubernetes-simple-..
2023.01.12
-
마틴 파울러 - 리팩터링의 절차 (리팩터링의 중요성)
아래 영상을 보고 내용을 정리한 글입니다. https://www.youtube.com/watch?v=mNPpfB8JSIU 내용에 대한 원문 : https://martinfowler.com/articles/workflowsOfRefactoring/ 리팩터링이 자주 필요한 순간은 언제인가? -> TDD 개발을 진행할 때, 새로운 기능을 추가하고 싶다면 실패할 테스트를 추가한다. 테스트가 빨간색으로 보일 때(실패할 때), 이 그림이 시작됨 (Red) 애플리케이션이 새로운 기능을 동작하도록 코드를 만들어서, 테스트를 초록색(성공)으로 만든다. (Green) 이 단계에서 개발자는 기능을 구현하는 것, 기능이 정상 동작하는 것이 우선이다. 이 기능이 큰 시스템에 어떻게 적용될 지는 깊게 고민하지 않는다. 세번째 단..
2023.01.11
-
[쿠버네티스 입문] 4-2. 오브젝트와 컨트롤러
쿠버네티스는 오브젝트(object)와 오브젝트를 관리하는 컨트롤러(controller)로 나뉨 사용자는 템플릿 등으로 쿠버네티스에 자원의 '바라는 상태'를 정의하고, 컨트롤러는 바라는 상태와 현재 상태가 일치하도록 오브젝트들을 생성/삭제 함 오브젝트 pod service volumn namespace 등등 컨트롤러 ReplicaSet Deployment StatefulSet DemonSet Job 등등 네임스페이스 kubenetes namespace 공식문서 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/namespaces/ 네임스페이스는 쿠버네티스 클러스터 하나를 여러 개 논리적인 단위로 나눠서 사용하는 것 네임스페이스를 ..
2023.01.05
-
[쿠버네티스 입문] 4-1. 쿠버네티스 아키텍처
쿠버네티스 클러스터의 전체 구조 kubernetes 주요 컴포넌트 공식 문서 : https://kubernetes.io/docs/concepts/overview/components/ 쿠버네티스 클러스터는 크게 두 종류의 서버로 구성 마스터 (master) etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가 master에서 실행됨 마스터는 보통 고가용성을 만족하고자 서버 3대정도 구성해서 운영. 실제 클러스터를 관리하는 리더 마스터 1대 / 나머지 2대는 대기 리더 마스터에 장애 발생 시, 대기하던 마스터가 리더 역할로 교체함 노드 (node) kubelet, kube-proxt,..
2023.01.05
-
[기록용] 미니큐브(minikube)
minikube 란? 쿠버네티스를 쉽게 배우고 개발할 수 있도록 하는 데 중점을 둔 로컬 쿠버네티스입니다. minikube 시작 문서 : https://minikube.sigs.k8s.io/docs/start/ minikube 와 katacoda 를 이용한 쿠버네티스 샘플 애플리케이션 실행 실습 : https://kubernetes.io/ko/docs/tutorials/hello-minikube/
2023.01.04
-
[쿠버네티스 입문] 3-3 클러스터 외부에서 클러스터 내부 앱에 접근
쿠버네티스 내부에서 실행한 컨테이너를 외부에서 접근하려면 쿠버네티스의 서비스(service) 자원을 사용해야함 외부 클라이언트 -> 쿠버네티스 클러스터 (접근 불가능) 외부 클라이언트 -> service -> 쿠버네티스 클러스터 $ kubectl expose deployment nginx-app --type=NodePort # 상세한 내용 확인 $ kubectl describe service {컨테이너 이름} # example $ kubectl describe service nginx-app kubectl get services 명령어를 통해 nginx-app 이 32344라는 외부 포트와 연결된 것을 확인할 수 있다.
2023.01.04
-
[Kubernetes 입문] 3-2. deployment를 이용해 컨테이너 실행
쿠버네티스를 이용한 컨테이너 실행 방법은 크게 두 가지 kubectl run 명령으로 직접 컨테이너 실행 컨테이너 실행 세부 내용을 담은 YAML 형식의 템플릿으로 컨테이너 실행 (deployment.yaml 를 이용) kubectl run 으로 컨테이너 실행 kubectl run으로 파드를 실행할 때 기본 컨트롤러는 디플로이먼트(deployment) # nginx-app 이라는 이름의 deployment 를 사용해 nginx 컨테이너 실행 $ kubectl create deployment nginx-app --image nginx --port=80 # deployment 상태 확인 $ kubectl get deployments NAME : 클러스터에 배포한 deployment 이름 READY : 사용자..
2023.01.04
-
[Kubernetes 입문] 3. 쿠버네티스로 컨테이너 실행하기
2장은 쿠버네티스 설치 관련 내용으로 다른 자료들도 많아 건너 뜁니다. 쿠버네티스 관리를 위한 기본 커맨드라인 인터페이스 kubectl 파드로 컨테이너 실행 상태 살펴보기 컨테이너 삭제등의 기본 사용법과 주요 활용법 소개 kubectl 에서 지원하는 명령 쿠버네티스 자원들의 생성, 업데이트 삭제 (create, update, delete) 디버그, 모니터링, 트러블 슈팅 (log, exec, cp, top, attach, 등등..) 클러스터 관리 (cordon, top, drain, taint, 등등...) 쿠버네티스 kubectl 공식 문서 : kubectl Cheat Sheet kubectl short name : https://kubernetes.io/docs/reference/kubectl/#re..
2023.01.04
-
[Kubernetes 입문] 1. 쿠버네티스 소개
1-1. 컨테이너 리눅스의 프로세스별 자원을 격리해 사용하는 cgroup 과 특정 디렉터리로 권한을 제한하는 chroot로 격리 환경 구성 가능. 여기에 디스크의 파일 변경 사항을 레이어 형태로 저장하는 파일시스템을 합해 컨테이너라는 개념이 탄생. 도커는 컨테이너를 손쉽게 사용할 수 있도록 한 것으로 주목받음 VM 과 컨테이너의 차이 컨테이너 운영체제 위에 도커가 있고 바로 앱이 위치 가상 머신 하이퍼바이저 위에 가상 머신마다 게스트 운영체제가 존재 그 위에 앱이 위치 컨테이너가 구조상 레이어가 더 간단하므로 가상 머신보다 성능을 높이기 쉽다 도커를 이용하면 간단한 명령으로 컨테이너 이미지를 만들고 저장소에 저장이 가능. -> 도커를 설치한 호스트에 저장소의 컨테이너 이미지를 다운로드해서 컨테이너 실행이..
2023.01.03
-
[Hibernate] setAutoCommit 최적화
Hibernate Transaction 작업 수행 시, setAutoCommit 동작 순서 Transaction 시작 -> setAutoCommit(false) -> 쿼리 1 수행 -> 쿼리 2 수행 -> setAutoCommit(true) -> Commit 또는 Rollback Hibernate가 매번 setAutoCommit(false) & setAutoCommit(true) 설정을 해야하므로, 불필요한 실행시간이 발생 (2ms ~ 4ms) 또한 setAutoCommit 은 실제 DB에 직접 쿼리(set autocommit = {true or false}) 를 날리게 됨 -> 비효율적 ※ setAutoCommit(true) 로 다시 설정하는 이유 트랜잭션을 위해 false 로 설정했던 auto com..
2023.01.03