전체 글

백엔드나 데이터 관련 공부를 하다 보면 자주 등장하는 기술이 있다.바로 Apache Kafka, 줄여서 카프카다.처음 카프카를 접하면 이런 설명을 보게 된다.Kafka는 분산 이벤트 스트리밍 플랫폼입니다. 분산이란 무엇일까?이벤트는 무엇일까?메시지 큐와는 무엇이 다를까?도대체 어떤 상황에서 사용하는 걸까?이번 글에서는 카프카를 전혀 모르는 사람도 이해할 수 있도록, 쇼핑몰의 주문 처리 과정을 예로 들어 하나씩 살펴본다. 1. 카프카는 왜 필요할까?온라인 쇼핑몰에서 사용자가 상품을 주문했다고 생각해 보자.주문이 완료되면 쇼핑몰 서버는 여러 작업을 처리해야 한다.주문 정보를 저장한다.결제를 처리한다.상품 재고를 차감한다.사용자에게 알림을 보낸다.배송 시스템에 주문 정보를 전달한다.매출 통계를 업데이트한다.가..
·Infra/Kubernetes
학습과 테스트를 위해 로컬 PC에서 Kubernetes 클러스터를 실행할 수 있는 kind를 사용했다.kind는 Docker 컨테이너를 Kubernetes Node처럼 사용하여 간단하게 로컬 클러스터를 만들 수 있는 도구다. 1. kubectl 설치먼저 Kubernetes 클러스터와 통신하기 위한 명령줄 도구인 kubectl을 설치했다.winget install -e --id Kubernetes.kubectl 설치가 완료되면 버전을 확인해 정상적으로 설치되었는지 확인한다.kubectl version --client 2. kind 설치다음으로 로컬 Kubernetes 클러스터를 생성하기 위해 kind를 설치했다.winget install Kubernetes.kind 설치 후 버전을 확인한다.kind ver..
·Infra/Kubernetes
애플리케이션을 개발한 뒤 서버에서 실행하려면 생각보다 많은 것을 관리해야 한다.서버에 프로그램을 설치해야 하고, 필요한 라이브러리와 실행 환경을 맞춰야 하며, 애플리케이션이 중단되면 다시 실행해야 한다.사용자가 많아지면 서버나 애플리케이션의 실행 개수를 늘려야 하고, 새로운 버전을 배포할 때는 서비스가 중단되지 않도록 주의해야 한다. 컨테이너는 애플리케이션과 실행에 필요한 의존성을 함께 패키징하여 이러한 문제를 줄여준다.그러나 운영 환경에서는 컨테이너를 실행하는 것만으로 충분하지 않다.여러 서버에서 많은 컨테이너를 실행하기 시작하면, 컨테이너의 배치/복구/확장/업데이트/네트워크 연결 등을 관리하는 문제가 생긴다.이때 사용하는 대표적인 시스템이 Kubernetes다. 1. Kubernetes란?Kuber..
·CS/알고리즘
8퀸 문제체스판에 각 8개의 퀸이 서로 공격하여 잡을 수 없도록 8 * 8 체스판에 배치하는 문제 위 조건을 만족하기 위해서는 아래의 규칙들을 만족해야 한다. 규칙1: 각 열에 퀸을 1개만 배치한다.규칙2: 각 행에 퀸을 1개만 배치한다. 그러나 이 규칙들만으로 답을 찾는 것은 쉽지 않다.따라서 이 때 분기 작업으로 문제를 해결해야 한다.분기 작업이란 가지가 뻗어 나가듯이 배치 조합을 열거하는 것을 의미한다. 이 때, 만약 i열의 j번째 행에 퀸이 놓여져 있다면, 배열 pos[i]를 j로 설정한다. # 각 열에 퀸을 1개 배치하는 조합을 재귀적으로 나열하기pos = [0] * 8def put() -> None: """각 열에 배치한 퀸의 위치를 출력""" for i in range(8): ..
·CS/알고리즘
하노이의 탑작은 원반이 위에, 큰 원반이 아래에 위치하는 규칙을 지키면서 기둥 3개를 이용해서 원반을 옮기는 문제이다.원반이 n개인 하노이탑 문제는 원반이 n-1개인 하노이탑 문제를 사용하여 재귀적으로 풀이할 수 있다.원반이 3개인 하노이 탑은 위와 같다.그리고, 이 과정에서 작은 원반 2개를 묶어서 생각할 수 있는데, 이 처럼 원반이 n개인 하노이탑 문제를 재귀적으로 풀이할 수 있다.  구현(기둥이 3개일 때)# 하노이의 탑 구현하기def move(no: int, x: int, y: int) -> None: """원반 no개를 x 기둥에서 y 기둥으로 옮김""" if no > 1: move(no - 1, x, 6 - x - y) print(f'원반 [{no}]을(를) {x}..
·CS/알고리즘
참고 문헌https://www.easyspub.co.kr/20_Menu/BookView/381/PUB https://www.easyspub.co.kr/20_Menu/BookView/381/PUB www.easyspub.co.kr 재귀 알고리즘에 대하여어떤 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의하는 것 예시) 팩토리얼 n!의 정의0! = 1n > 0이면 n! = n × (n - 1)!def factorial(n: int) -> int: if n > 0: return n * factorial(n - 1) else: return 1위 팩토리얼 구현에서 보면, 함수 정의 자체에서 다시 자기 자신을 불러와 함수를 정의하는 것을 확인할 수 있다.cf) 팩..
풀이N, P = map(int, input().split())stack = [[] for _ in range(6 + 1)]count = 0# 이후의 입력for _ in range(N): string, fret = map(int, input().split()) while stack[string] and stack[string][-1] > fret: stack[string].pop() count += 1 if not stack[string] or stack[string][-1]
·BackEnd/Error
venv를 키고 djangorestframework 설치를 하였는데도 아래와 같은 오류가 발생하였다.Import "rest_framework" could not be resolvedPylancereportMissingImports rest_framework를 view.py에서 import할 시에 vscode에서 노란 줄과 함께 글씨 색이 바뀌지 않았다.해결ctrl + shift + pPython: Select InterpreterEnter Interpreter PathFind... 누른 후venv/Scripts/python.exe 선택해결!!
문제N×M크기의 배열로 표현되는 미로가 있다.101111101010101011111011미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다.입력첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.출력첫째 줄에 지나야 하는 최소의 칸 ..
1in
Love IT!