분류 전체보기 79

[GKE 전환기] Cloud Run에서 GKE로

오늘은 이전에 근무했던 회사에서 진행했던 인프라 전환 프로젝트 경험을 공유하고자 합니다. 운영 중인 서비스의 아키텍처를 Cloud Run (+ Google Tasks)에서 GKE (Google Kubernetes Engine) 기반으로 성공적으로 전환하며 겪었던 문제점과 개선점을 자세히 다뤄보겠습니다.운영 중인 인프라를 변경하는 것은 서비스 중단과 장애 리스크가 큰 작업입니다. 따라서 저희 팀은 철저한 사전 테스트와 점진적인 마이그레이션 전략을 통해 신중하게 프로젝트를 진행했습니다.인프라 전환을 결심한 이유기존 시스템은 여러 가지 심각한 문제들을 안고 있었습니다.치명적인 비동기 시스템 설계: 대량의 트래픽이 몰릴 때마다 오류가 발생하며 서비스 안정성을 크게 위협했습니다.비효율적인 반자동 배포: 배포 과정..

Infra/GCP 2025.11.03

Docker의 내부 구조

Docker는 단일 프로그램이 아닌, 여러 구성 요소가 컨테이너를 생성하고 실행하기 위해 협력하는 구조입니다. 흐름[사용자] │ ▼[docker CLI] ← 우리가 터미널에서 쓰는 docker 명령어 │ ▼[dockerd] (Docker 데몬) │ ▼[containerd] (컨테이너 관리) │ ▼[runC] (실제 컨테이너 실행, Linux 커널 기능 호출) │ ▼[리눅스 커널: namespace, cgroup, overlayfs ...] dockerddockerd는 도커의 메인엔진이며 데몬 프로세스입니다. dockerd의 기능 이미지관리 (pull/push/build) 컨테이너 수명관리(start/stop/restart) 네트워크 및 볼륨 설정관리[libn..

Devops 2025.10.22

커널(Kernel)

운영체제의 핵심으로, 하드웨어 자원을 안전하게 관리하고 유저 프로세스가 이를 "System Call"을 통해 사용할 수 있도록 해주는 역할커널의 위치- 운영체제의 가장 아래 계층 (하드웨어 바로 위에서 동작)커널의 종류- 모놀리식 커널 (Monolithic Kernel)- 마이크로커널 (Microkernel)- 하이브리드 커널 (Hybrid Kernel)→ 리눅스 커널은 모놀리식 커널에 속함.System Call- 응용 프로그램(유저 모드)이 운영체제의 커널 기능을 요청할 때 사용하는 인터페이스.System Call 동작 흐름[응용 프로그램 (User Mode)] ↓ System Call 호출 ↓ 커널 모드로 전환 (권한 상승) ↓ 커널이 요청 수행 (예:..

CS/운영체제 2025.10.17

asyncio를 pip install 한 대가

오늘은 서비스 배포중 발생한 굉장히 있으면 안될 이슈에 대해 작성해보고자한다. 문제상황빌드가 잘되던 도커에서 pip 가 requirements.txt 설치하는 과정에서 문제가 발생한 것이다.#11 68.49 Traceback (most recent call last):#11 68.49 File "/usr/local/lib/python3.9/py_compile.py", line 144, in compile#11 68.49 code = loader.source_to_code(source_bytes, dfile or file,#11 68.49 File "", line 913, in source_to_code#11 68.49 File "", line 228, in _call_with_frame..

Python 2025.04.29

김밥천국의 계단

🍙 백준 28282 - 미니김밥 천국 처음엔 BFS/DFS 문제인 줄 알았는데, 알고 보니 정확히 K번의 행동으로 N번 계단에 도달 가능한지를 묻는 DP 문제였다. DFS는 시간 초과, BFS는 메모리 초과, 슬라이딩 윈도우도 모두 실패… 결국 DP로 갈아탐. 🚀 문제 핵심 정리 0번 계단에서 시작 총 K번 행동 가능 행동 종류: 1칸 걷기 → i → i+1 워프 → i → i + floor(i/2) 정확히 K번 행동해서 N번 계단에 도달하면 "minigimbob", 아니면 "water" 출력 🧠 접근 방식 - 1차원 DP dp[i] = i번 계단에 도달하는 최소 행동 수 를 저장하..

Python/algorithm 2025.04.24

프로그래머스 신규 아이디 추천

📝 TIL - 프로그래머스 신규 아이디 추천 📌 문제 요약 사용자로부터 입력된 아이디가 조건에 맞지 않을 경우, 주어진 규칙에 따라 새로운 아이디를 추천하는 문제입니다. 📚 학습 내용 정규표현식을 활용한 문자열 정제 조건문과 슬라이스를 활용한 문자열 길이 조정 문자열의 시작/끝에서 특정 문자 제거 (마침표) 로직을 함수로 분리하여 재사용성 및 가독성 향상 🔧 주요 로직 요약 모든 대문자를 소문자로 변환 허용되지 않은 문자 제거 연속된 마침표는 하나로 축약 시작/끝에 위치한 마침표 제거 빈 문자열이면 "a"로 대체 길이가 16자 이상이면 자르고, 끝이 마침표면 제거 길이가 2자 이하이면 마지막 문자를 반복하여 길..

Python/algorithm 2025.04.21

N초 동안 가능한 스킬 조합 수 구하기

🧠 TIL - DP로 N초 동안 가능한 스킬 조합 수 구하기 오늘은 스킬의 사용 시간 제약이 있는 조합 문제를 DP로 해결해봤다. 핵심은 dp[i]가 “i초를 채우는 방법의 수”를 의미한다는 점이다. 📌 문제 요약 스킬 A: 1초 스킬 B: m초 총 N초를 정확히 채울 수 있는 모든 조합의 수를 구하라 결과는 1,000,000,007로 나눈 나머지 출력 📄 핵심 점화식 dp[i] = dp[i - 1] + dp[i - m] (단, i ≥ m) 🔍 코드 설명 nanoom = 1_000_000_007dp = [0] * (n + 1)dp[0] = 1 # 0초는 아무 것도 안 쓰는 1가지 방법for i in range(1, n + 1): dp..

Python/algorithm 2025.04.20

JadenCase 문자열 처리[프로그래머스]

🧠 TIL - JadenCase 문자열 처리 오늘은 문자열을 JadenCase로 바꾸는 문제를 풀었다. 핵심은 단어별로 첫 글자는 대문자, 나머지는 소문자로 만드는 거고, 숫자로 시작하는 경우는 소문자만 처리하면 된다. 📌 예시 input : "3people unFollowed me"output: "3people Unfollowed Me" 💡 핵심 로직 def solution(s): answer = '' for i in s.split(" "): if i == "": answer += " " elif i[0].isalpha(): answer += i[0].upper() + i[1:].lower..

Python/algorithm 2025.04.16

과자 나눠주기 [백준]

🧠 TIL - 이진탐색 과자 나눠주기 오늘은 다시 한 번 이진탐색 개념을 정리했다. 직접 구현할 땐 while문 범위나 mid 조정에서 종종 헷갈려서, 이번에 완전히 패턴을 잡아놔야겠다고 생각했다. 📌 개념 이진 탐색은 정렬된 탐색 범위 내에서 특정 조건을 만족하는 값을 찾는 방식이다. 중간값(mid)을 기준으로 탐색 범위를 반씩 줄여가며, 조건을 만족하는지 확인하고 범위를 조정한다. 🧩 기본 구조 start = 최소값end = 최대값answer = 0while start ❓ 왜 이렇게 하는가 start : 탐색이 끝나기 전까지 조건을 만족: 일단 저장하고 더 큰 쪽 탐색 조건 불만족: 무조건 줄여야 하니까 end 감소 ..

Python/algorithm 2025.04.14