전체 글 116

[CS] 이진트리와 이진탐색트리

1. 정의이진트리(Binary Tree)는 각 노드가 최대 두 개의 자식(왼쪽, 오른쪽)을 가지는 트리 구조이다. 이진탐색트리(Binary Search Tree, BST)는 여기에 정렬 규칙이 추가된 구조로, 모든 노드에 대해 왼쪽 서브트리의 값은 해당 노드보다 작고, 오른쪽 서브트리의 값은 해당 노드보다 크다는 성질을 만족한다.2. 동작 원리 8 / \ 3 10 / \ \ 1 6 14 / \ / 4 7 13탐색, 삽입, 삭제 모두 루트에서 시작해 목표 값과 현재 노드 값을 비교하며 왼쪽 또는 오른쪽으로 내려가는 방식으로 동작한다.탐색(search) : 목표 값이 현재 노드보다 작으면 왼쪽, 크면 오른쪽으로 이동. ..

CS 2026.08.18

[CS] 해시테이블

1. 정의해시테이블은 키(Key)를 해시함수(Hash Function)로 변환해 배열의 인덱스로 매핑하고, 그 인덱스에 값을 저장하는 자료구조를 뜻한다. 평균적으로 삽입, 탐색, 삭제가 O(1)에 동작하는 것이 핵심 특징이다.2. 동작 원리해싱 과정Key -> 해시함수(hash(key)) -> 해시값 -> 해시값 % 배열크기 -> 인덱스좋은 해시함수의 조건결정적(deterministic) : 같은 입력에는 항상 같은 출력균등 분포(uniform distribution) : 결과값이 버킷 전체에 고르게 버져야 함빠른 연산 속도충돌(Collision) 문제서로 다른 키가 같은 인덱스로 매핑되는 경우가 반드시 발생(비둘기집 원리). 이를 해결하는 두가지 방식 존재.체이닝(Separate Chaining) : ..

CS 2026.08.12

[CS] 프로세스와 스레드

프로세스와 스레드프로세스 : 운영체제로부터 독립된 메모리 공간(코드, 데이터, 힙, 스택)을 할당 받은 실행 단위스레드 : 하나의 프로세스 안에서 코드, 데이터 ,힙을 공유하고 스택만 개별적으로 갖는 실행 흐름프로세스 하위에 스레드가 발생할 때마다 스택 공간을 할당하고 스레드가 독립적으로 사용한다. (동시성 문제)프로세스 생명주기New : 프로세스가 생성되어 아직 스케쥴러에 등록 안 됨Ready : 실행할 준비는 됐지만 CPU를 기다리는 중 (큐에 대기)Running: : 실제로 CPU를 점유해서 명령어를 실행 중Waiting(Blocked) : I/O나 이벤트를 기다리며 CPU를 안 쓰는 중Terminated : 실행이 끝나 자원이 회수되는 중 컨텍스트 스위칭위 그림에서의 Ready - Running..

CS 2026.07.21

k3d를 통해 빠르고 쉬운 테스트용 쿠버네티스 클러스터 구성

0. k3d란?VM 기반의 (무겁고 느린) minikube 대신, Docker 기반으로 k3s(경량 쿠버네티스)를 구동할 수 있게 해주는 툴입니다. k3s : Rancher Labs에서 만든 경량 쿠버네티스 배포판k3d : k3s를 Docker 컨테이너로 실행하는 래퍼(wrapper1. Why k3d?minikube는 VM 기반의 쿠버네티스 클러스터로 무겁고 느립니다. 실행된 이후의 자원 점유, 클러스터의 처리속도, ARM CPU 아키텍처(M1 이후의 모든 세대) 지원 불안정 등등반면 k3d는 Docker 컨테이너 기반으로, 리소스 점유가 매우 적고 클러스터의 처리속도 및 구동속도도 훨씬 빠릅니다. Docker ARM을 기반으로 구동되기 때문에 호환성에 대한 염려도 적습니다.설치 (MacOS 기준)리눅..

인프라 2025.11.15

admin-web-ui 가 지원되는 마지막 Minio

Minio의 최근 오픈소스 관련 정책의 변화로 Minio를 설치한 이후 WebUI에서의 어드민 동작이 대부분 제한되었습니다. (현재는 버킷 조회 정도의 기능만 남아있음) 관리의 용이성과 콘솔에 익숙하지 않은 사용자를 위해서 WebUI는 아주 쓸모가 많기에 가장 최신본 `docker-compose.yml`을 남겨놓습니다.version: '3'services: minio: image: quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin # 원..

인프라 2025.11.12

Jenkins E200015 ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled

실행환경docker run -p 8091:8080 -p 50002:50000 -e JENKINS_OPTS="--prefix=/jenkins2" --network proxy --restart=on-failure -v jenkins_home_24263:/var/jenkins_home jenkins/jenkins:2.426.3-lts-jdk11오류상황svn에 있는 저장소로 maven 빌드를 실행하려 할 때 Jenkins E200015 ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled 라는 오류 발생. svn 사용자 인증과 관련된 처리가 취소되고 있음.2024-11-12 02:24:47.730+0000 [id..

인프라 2025.10.16

좋은 개발자란

1. 구조를 이해하는 개발자표면의 기능이 아니라 그 아래 흐르는 구조를 이해하려 한다.시스템은 언제나 이유를 가지고 동작하며, 그 이유를 읽을 줄 아는 사람이 진짜 엔지니어라고 믿는다.2. 복잡함을 단순하게 정리하는 개발자기술은 복잡하지만, 설계는 명료해야 한다.나는 불필요한 복잡함을 제거하고 본질만 남기는 일을 가치 있게 생각한다.3. 문제의 결과가 아닌 원인을 해결하는 개발자문제는 언제나 증상보다 근본에 있다.겉으로 드러난 오류를 고치는 대신, 다시는 같은 문제가 발생하지 않도록 구조를 개선한다.4. 기술보다 개념으로 사고하는 개발자언어나 프레임워크보다 더 중요한 것은 개념이다.기술은 수단일 뿐, 문제를 해결하는 사고 체계가 핵심이라고 생각한다.5. 연결을 설계하는 개발자하나의 구성요소로는 시스템이 ..

메모 2025.10.08

개발자로서 내 약점 고민하기

ChatGPT(생성형 AI 포함)를 개인적인 질문에 사용하기 보다, 대부분 기술적인 질문을 많이 하는 편이다.최근 '나의 약점 파악하기' 같은 프롬프트가 많이 떠도는 것으로 알아서 질문해 보았더니,당연히 평소 나의 감정이나 성격이 드러나는 질문을 많이해보지 않아서 별 효과가 없었다. 아이디어를 살짝 바꾸어서 '오히려 개발자의 역량 평가는 제일 잘할 것 같은데?' 싶었다.1. 내가 개발자로 더 성장하고 성공하려면 어떻게 해야할까?2. 내가 했던 질문들을 바탕으로 내 자질이나 역량, 소양 등의 부문에서 부족한 점은 따끔하게 지적해줘. 간단하게 위 두 가지의 질문을 해보았고, 잘 모르고 넘어갔던 나의 안 좋은 습관이나 루틴을 알게 되었다. 이 글을 읽으시는 분들이 꼭 개발자가 아니더라도, 직무와 관련된 질문을..

메모 2025.10.08

[Docker] Oracle23ai-free 이미지 빌드 및 컨테이너 실행 & 접속

Oracle Database 23ai는 오라클이 2024년에 발표한 최신 버전의 오라클 데이터베이스 제품군입니다. 이름에 붙은 “ai”는 단순히 버전 넘버링(예: 19c, 21c)과는 달리 AI(인공지능) 활용을 위한 기능 강화를 전면에 내세운 것이 특징입니다. 주요 특징으로는 AI 벡터 검색을 통한 유사성 검색, 자연어 쿼리 지원, SQL의 새로운 데이터 타입과 간소화된 문법, 그리고 그래프 데이터베이스 기능 강화 등이 있습니다. 또한 Raft 복제 프로토콜을 통한 자동 복제, SQL 방화벽 등 보안 기능도 포함되어 있어 기업 환경에서 신뢰할 수 있는 데이터베이스 운영이 가능합니다. 특히 클라우드 및 다양한 플랫폼에서 활용이 가능해 현대 IT 인프라에 잘 맞춰진 제품입니다. Oracle Database..

인프라 2025.09.16

Pgpool-II + Watchdog 클러스터 구성 (2/2) | 테스트

pgpool 테스트에 앞서 요구사항을 정리하겠습니다.각 서버 인스턴스에는 pgpool, postgresql이 설치되어 있고, 동일한 네트워크 명에 속해야 합니다. 1. pgpool 및 postgresql 실행# Primary 서버의 Postgresql 인스턴스 실행[server1]# su - postgres[server1]$ /usr/pgsql-17/bin/pg_ctl start -D $PGDATA# 모든 서버의 pgpool 서비스 시작[all servers]# systemctl start pgpool.service# 참고 : 서버를 중단할 경우는 pgpool을 먼저 종료하고 postgresql을 종료합니다.[all servers]# systemctl stop pgpool.service2. _!show ..

인프라 2025.03.22