전체 글(118)
-
[Go] 한 번에 정리하는 Golang 기본 개념 - 2편
함수 1. 기본 구조 func AplusB(a int, b int) int { return a + b } func PrintAplusB(a int, b int) { fmt.Print(a + b) } - 다른 언어와 다르게 타입의 위치만 반대로 된 형태이다. 2. 다중 반환 함수 func AcalB(a int, b int) (int, int, int) { return a + b, a - b, a * b } func main() { puls, minus, multi := AcalB(1032, 3124) fmt.Print(puls, minus, multi)// 4156 -2092 3223968 } - 반환 값이 2개 이상일 경우엔 return type을 괄호로 묶는 것은 필수이다. func AcalB(a in..
2022.11.02 -
[Go] 한 번에 정리하는 Golang 기본 개념 - 1편
Golang의 대표적인 특징 5가지 - 컴파일 언어 - 간결한 코드 - 미사용 메모리 자동 해제(GC) - 편리한 동시성 코드 작성 - 멀티코어 프로세서 지원 package go파일은 자바와 마찬가지로 패키지로 시작한다. 모든 Go 파일은 반드시 하나의 package를 포함해야 한다. main 패키지는 특수한 패키지로 간주된다. main 패키지는 프로그램이 시작하는 코드가 포함된 패키지를 의미한다. 대부분 다른 언어와 마찬가지로 import를 통해 다른 패키지를 가져올 수 있다. 이때 모든 패키지를 한 번에 다 가져오면 프로그램이 커지고 느려지기 때문에 필요한 패키지만 가져와야 한다. (실제 import 한 패키지는 컴파일 타임에 가져온다.) 자바와 다르게 go에서 import 해 온 함수를 사용할 때에..
2022.10.28 -
[k8s] NodePort 접속 오류 해결 (진행중)
k8s 클러스터 상태 - worker 1, 2로 총 두 개 사용 - worker1 IP: 10.100.0.101 / worker2 IP: 10.100.0.102 - 각 워커에 nginx pod를 deployment controller로 띄운 상태 (label = app: webui) - app: webui label에 대한 NodePort Service 구동 완료 - nginx Pod의 index.html의 컨텐츠를 해당 Pod가 띄워져 있는 노드 번호로 설정한 상태 - 포트 충돌 여지를 줄이기 위해 NodePort definition(yaml)에서 nodePort 키 값 주석처리 - ClusterIP 10.100.100.200 / NodePort 32096 사용 (NodePort는 k8s에서 자동 생성..
2022.10.17 -
[DB] 알아두면 좋은 데이터베이스 설계 지식 (파티셔닝, 레플리케이션, 클러스터링)
DB Partitioning - 서비스의 크기가 점점 커지고 데이터의 규모 또한 커지면서, DB 시스템의 용량(storage)의 한계와 성능(performance)의 저하를 유발하게 되었다. - 이에 대한 해결책으로 테이블을 파티션이라는 단위로 나눠어 관리하게 되었으며 이러한 과정을 DB 파티셔닝이라고 한다. - 이러한 관점에서 보았을 때 데이터베이스 정규화(Normalization)도 일종의 파티셔닝으로 볼 수 있지만 파티셔닝은 성능 향상을 목적으로 하며 정규화는 중복된 데이터 방지 및 이상현상(Anomaly) 예방을 목적으로 한다. 1. Vertical Partitioning (수직 파티셔닝) 말 그대로 테이블의 컬럼을 기준으로 수직으로 파티셔닝 하는 것을 의미한다. 예시 게시글 데이터를 의미하는 a..
2022.10.13 -
[k8s] Controller - CronJob
CronJob - Deployment와 ReplicaSet의 관계처럼 CronJob에도 Job의 기능이 포함되어 있다. - Deployment가 ReplicaSet을 컨트롤하여 Rolling Update를 지원했던 것처럼 CronJob은 Job을 컨트롤해서 원하는 특정 시간에 Job이 실행될 수 있도록 작업 '예약' 기능을 지원한다. - 예를 들어, 이메일을 주기적으로 보내는 작업, 로그파일을 주기적으로 정리하는 작업, 데이터 백업 작업, 가비지 데이터를 주기적으로 삭제해주는 작업 등 특정 주기를 가지고 반복해서 실행해주는 작업에 대해 CronJob으로 정의할 수 있다. - 애플리케이션이 비정상적으로 동작하여 Pod를 재시작하거나 컨테이너를 재시작하는 것은 Job 컨트롤러 고유의 기능이며 CronJob은..
2022.10.01 -
[k8s] Controller - Job
Job Controller 쿠버네티스의 가장 기본적인 특징은 Pod를 항상 Running 중인 상태로 보장해준다는 것이다. 하지만 배치 처리처럼 특정 시점에만 Pod가 필요하다면 Job 컨트롤러를 사용하는 것이 해답이 될 수 있다. Job Controller에 의해서 Pod를 실행시키면 해당 Job에 대한 결과(정상인지에 대한 여부)를 점검해서 비정상으로 종료되었을 경우에는 다시 재시작해준다는 특징이 있다. 실습 예시 1) restartPolicy: Never - job-exam.yaml 파일 apiVersion: batch/v1 kind: Job metadata: name: centos-job spec: # completions: 5 # parallelism: 2 # activeDeadlineSecon..
2022.09.27 -
[k8s] Controller - StatefulSet(sf)
StatefulSet StatefulSet은 상태(Pod 이름, Pod 볼륨)를 보존해주는 컨트롤러이다. Pod를 생성할 때 NAME 뒤에 추가되는 5자리의 문자는 랜덤으로 생성된 Hash 값이다. 컨트롤러에 의해 만들어진 모든 Pod는 이와 같이 랜덤 해시 값이 붙은 형태로 Pod 이름이 형성된다. 특정 Pod를 지우고 다시 실행되는 Pod의 이름을 보면 이전과 달라진 해시값을 가진다. 즉, Pod의 이름이 보장되지 않는다는 것을 의미한다. 이전까지 배운 컨트롤러는 'Pod의 개수를 보장'해주었지만 Pod의 이름을 보장해주지는 않았다. StatefulSet은 다른 컨트롤러와 다르게 아래 두 가지를 보장해주는 컨트롤러이다. 1) Pod 이름 2) Pod 저장소 (스토리지, 볼륨) Pod 이름을 어떻게 보..
2022.09.22 -
[Network] Forward Proxy, Reverse Proxy
Proxy의 사전적 의미는 남의 일을 대신 처리한다라는 뜻을 가진다. 즉, 마치 누군가의 대리인처럼 역할을 하는 존재이다. Spring Proxy, Network Proxy, Proxy Pattern 등 Proxy는 여러 분야에서 사용되지만 이번 포스팅에서는 Proxy의 기본이 되는 Network Proxy에 대해 알아본다. Proxy의 종류 Forward Proxy 일반적으로 말하는 프록시는 Forward Proxy이다. Forward Proxy는 클라이언트와 인터넷 사이에 위치하게 된다. 즉, Forward Proxy가 클라이언트 쪽에 붙어서 흐름을 대신 처리한다. Forward Proxy의 특징 1. 캐싱 - 클라이언트가 '요청한 내용과 이에 대한 응답 내용'을 캐싱한다. - 서버에서 클라이언트에 ..
2022.09.22 -
[k8s] Controller - DaemonSet
이전 포스팅에서 다룬 컨트롤러 - ReplicationController: 컨트롤러의 가장 근본적인 역할을 하는 컨트롤러로 Pod의 개수를 보장 - ReplicaSet: 풍부한 label을 지원하여 다양한 조건에 해당하는 Pod 개수 보장 - Deployment: ReplicaSet을 컨트롤하며 Rolling Update를 지원 -> 결국 세 개의 컨트롤러는 모두 'Pod의 개수를 보장'하는 것이 주요 역할이었던 컨트롤러였다. DaemonSet도 Pod의 개수를 보장하지만 다른 컨트롤러와 비교해보면 약간 성격이 다르다. DaemonSet - 이전에 다룬 다른 컨트롤러와 달리 DaemonSet은 노드 당 1개씩의 Pod를 보장하는 컨트롤러이다. - 운영 중에 노드가 추가되면 추가된 노드 개수만큼 Pod를 ..
2022.09.16 -
[container] jib 기반의 Java 애플리케이션 컨테이너 이미지
jib 개요 Jib은 Docker 데몬 없이 Java 애플리케이션에 최적화된 Docker 및 OCI 이미지를 빌드하고 Docker Hub와 같은 레지스트리로 저장하는 '플러그인'이다. jib은 gradle, maven과 같은 빌드툴과 함께 사용된다. jib과 기존 Dockerfile 기반 빌드 비교 위 그림과 같이 jib은 빌드와 Dockerfile 작성의 과정을 하나의 파이프라인으로 단일화한다. jib은 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 Docker Hub, AWS ECR 등 원하는 레지스트리에 푸시까지 해준다. jib 장점 1) Fast Jib은 애플리케이션을 여러 계층으로 분리하여 클래스에서 종속성을 분리한다. 이제 Docker가 전체 Java 애플리케이션을 다시 빌드할 때까지..
2022.09.14