Study

IngressIngress = 외부(클러스터 바깥)에서 내부(Pod)로 들어오는 HTTP/HTTPS 요청을 관리하는 규칙Ingress의 역할외부 사용자가 클러스터 내 서비스에 접속할 수 있게 해줌도메인, 경로, 포트를 기반으로 트래픽을 적절한 서비스로 라우팅예: mydomain.com/web → web-service로 전달구성 요소Ingress Resource: 라우팅 규칙 정의Ingress Controller: 규칙을 실제로 적용해 트래픽을 전달Ingress Resource트래픽을 어떤 서비스로 보낼지 선언적으로 정의한 YAML 리소스apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: example-ingress annotations: ..
· Study
최근 GCP에서 Metric export pipline을 구현하기 위해 오픈소스를 분석할 일이 있었다.문제는 짧은 시간 내에 전체 소스를 파악해야 한다는 점. 다들 아시겠지만, 낯선 오픈소스 레포를 빠르게 이해하는 건 정말 쉽지 않다. 특히 문서화가 잘 안 되어 있는 경우엔 더더욱.이때 문득,"AI로 코드 구조를 시각화해주는 서비스 없을까?"하는 생각이 들었고, 우연히 발견한 게 바로 gitdiagram이다.Gitdiagram이 뭐냐면?간단히 말하면, GitHub 레포를 시각화해서 구조를 한눈에 보여주는 AI 기반 도구다.링크 하나만 입력하면, 해당 레포를 분석해서 다음과 같은 정보를 자동으로 정리해준다:전체 파일 및 디렉토리 구조주요 모듈의 설명흐름도 스타일의 시각적 구조사용된 기술 스택코드의 역할별 ..
오늘은 아주 사소하지만 중요한, 그리고 누구나 한 번쯤은 겪을 수 있는 HTTP 요청 실수에 대해 이야기해보려고 한다.사건의 발단서버에 POST 요청을 보내야 했다. 그런데 특별히 보낼 데이터는 없어서, 다음과 같이 null을 body에 실어서 보냈다.axios.post("/api/something", null, { headers: { "Content-Type": "application/json", },});이때까지만 해도 아무 문제가 없을 줄 알았다. 하지만 요청을 보내자마자 클라이언트에서 예외가 발생했다. 대략 이런 에러였다:SyntaxError: Unexpected token 'n', "null" is not valid JSON뭐가 문제였을까?처음엔 axios 버그인가 싶어서 공식문서를 다..
쿠버네티스 서비스 (Services)쿠버네티스 서비스는 애플리케이션을 다른 애플리케이션 또는 사용자와 연결하는데 도움예를 들어 프론트 와 사용자, 프론트와 백엔드를 연결하는 것이 서비스 이다.외부 연결 Node가 192.168.1.2로 네트워크가 공개되어 있을때 노트북으로 어떻게 10.244.0.2 에 접근할 수 있을까? 일단 SSH 로 연결하면 가능하다. SSH로 연결해서 http 요청을 보내면 응답을 받을 수 있을 것이다. 하지만 우리가 외부에서 접속을 할 때 바라는 것은 이게 아니다. 우리는 Node가 배포된 192.168.1.2를 통해 접속하고 싶다. 이 때 쿠버네티스의 Service 가 사용된다. 서비스의 대표 사례중 하나이다. 배포된 노드의 포트를 대기하고 있다가 해당 포트에서 요청이 ..
컨트롤 플레인 컴포넌트컨트롤 플레인 컴포넌트는 한마디로, 클러스터를 전반적으로 관리하는 핵심 컴포넌트이다. 컨트롤 플레인 컴포넌트가 하는 일스케줄링 수행클러스터 이벤트 감지 및 반응파드 생성, 노드 장애 등 이벤트를 감지하고 필요한 조치 수행 (→ kube-controller-manager가 담당)API 제공kubectl 등에서 요청하면 이를 처리하고 상태를 etcd에 저장 / 조회클러스터 상태 저장원하는 상태 유지상태가 사용자가 정의한 상태와 다르면 자동으로 조절 (controller-manager)네트워크 정보 전달컨트롤 플레인 컴포넌트의 위치클러스터 내 어떤 머신이라도 동작 가능일반적으로 간결성을 위해 한 머신 안에 모든 컨트롤 플레인 컴포넌트를 구동 시킴. 이 때, 사용자 컴포넌트는 해당 머신 ..
1. 쿠버네티스란? 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리해주는 오픈소스 플랫폼입니다. 여러 서버에 걸쳐 있는 컨테이너들을 효율적으로 운영할 수 있도록 도와주는 컨테이너 오케스트레이션 도구입니다. Kubernetes는 K8s로 줄여부르는 경우가 많습니다. 이건 K와 s 사이의 8글자를 줄여서 표현한 것입니다. 1.1 쿠버네티스가 왜 중요한가요? 소프트웨어 기술이 발전하며, 서비스들이 복잡해졌습니다. 이에 따라 거대한 하나의 큰 아키텍처 (Monolithic) 로는 한계가 있습니다. 예를들어, Instagram을 하나의 서비스로 구축할 수 있을까요? 단순한 앱의 Frontend와 Backend는 물론이고 추천알고리즘, 광고, 신고, 필터링, DM, Live streaming..
문제링크문제 설명오늘은 문제 설명이 문제랑 관련없이 엄청 길어서 입/출력만 보고 풀었습니다.그렇게 해도 전혀 관계없음..아이디어숫자, 문자로 각각 N(1)로 꺼내야 한다고 생각했습니다.제약에 메모리가 25MB이고, 중복저장한다고 해도 최대 경계값은 4MB정도 였기 때문에 충분하다고 생각했습니다.그래서 dictionary에 이름과 숫자를 키로 각각 중복 저장하고 출력했습니다.제출 코드# https://www.acmicpc.net/problem/1620# 이름, 번호를 각각 키로 딕셔너리에 중복 저장해서 질문마다 꺼낸다.import sysn, m = map(int, sys.stdin.readline().split())poke_dic = {}for i in range(n): poke_name = sys...
https://www.acmicpc.net/problem/1003문제다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); }}fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.fibonacci(2)는 fibonacci(1) (두 번째 호출..
시간 제한          메모리 제한                제출                       정답                          맞힌 사람               정답 비율2 초128 MB81543470593710558.560%문제여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다.현재 Queue의 가장 앞에 있는 문서의 ‘중요도..
만약 페이지 조회 요청 순서가 1 -> 2 -> 1 이라면 총 세번 요청하게 됩니다.하지만 만약 해당 게시판이 커뮤니티처럼 데이터가 유동적으로 계속 바뀌는 것이 아니라 역사 자료 게시판(?)처럼 변동성이 낮다면 어떨까요?1을 받았을 때 1을 저장해뒀다가 1페이지를 다시 요청하면 이전에 받았던 정보를 다시 사용하면 되지 않을까요?이러한 처리를 캐싱 이라고 합니다.(알고리즘에도 많이 사용되죠!)오늘은 캐싱 기능을 추가해보겠습니다. 캐싱이 많으면 무조건 좋을까요? 그건 아닙니다. 왜냐하면 받은 데이터를 전부 저장해버리면 언젠가 메모리 overflow가 발생하기 때문입니다. 따라서 오늘은 한계점을 지정하고 그 한계를 벗어나면 메모리에서 삭제되도록 구현하겠습니다.테스트 추가하기app.test.js에 테스트를 추가..
LireEruel
'Study' 카테고리의 글 목록