전체 글129 4. Mount 네임스페이스로 파일시스템 분리하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 지금까지 PID, UTS 네임스페이스를 활용하여 프로세스 ID와 호스트 명을 격리하였다. 이번엔 파일시스템을 분리하여 컨테이너 안에서 진짜 루트 디렉터리가 다르게 보이도록 만들어보자. 이를 위해 Mount 네임스페이스를 활용할 것이다. 🔍 Mount 네임스페이스란?Mount?리눅스에서는 디스크나 외부 장치를 어떤 디렉터리 경로에 연결해야만 접근할 수 있다. 이 과정을 "mount"라고 부른다.$ sudo mount /dev/sdb1 /mnt/usb$ ls /mnt/usb 사진/ 문서/ 영화/리눅스는 하나의 거대한 트리 구조(/) 안에 모든 저장 장치, 파티션, 네트워크 파일시스템 등을 "붙여서" 사용하게 된다. C:\또는 D:\와 같이 드라이브가 분리.. 개발일기/Docker 2025. 5. 30. 3. UTS 네임스페이스로 호스트명 분리하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 지난 포스팅에서는 프로세스의 분리와 PID 격리에 대해서 다루었다. 이번 시간엔 컨테이너 안에서만 별도의 호스트명(hostname)을 갖도록 프로세스를 제어해보자. 실제 도커처럼 hostname 명령으로 컨테이너 안의 이름을 바꿔도 호스트 OS에는 영향이 없도록 만드는 게 이번 시간의 목적이다.이를 위해서 UTS 네임스페이스를 사용한다. 🔍 UTS 네임스페이스란?UNIX Timesharing System의 약자인 UTS는 아래 두가지 항목을 격리시키는 역할을 한다. hostname (예: conatinerM)domainname (보통 잘 안 씀)UTS는 hostname과 domainname을 네임스페이스 단위로 분리해주는 기능으로면 sethostname(.. 개발일기/Docker 2025. 5. 29. 2. PID 네임스페이스로 프로세스 격리하기 (심화) Go로 "컨테이너스러운" 프로세스를 만들어보자. 지난 포스팅에서 mydocker run bash 명령으로 bash를 PID 1번으로 실행할 수 있었다. 이번 편에서는 그 구조가 왜 그렇게 동작하는지, 그리고 PID 네임스페이스의 격리 효과가 정확히 무엇인지 코드와 몇 가지 실험으로 구조를 파악해보자. PID 네임스페이스PID 네임스페이스는 리눅스 커널의 네임스페이스 중 하나로, 각 프로세스가 고유한 PID 트리를 갖도록 격리시킨다. 이때 아래와 같은 특징을 볼 수 있다. 부모 네임스페이스에서 보면 자식 네임스페이스의 PID가 일반적인 번호 (예: 12345)자식 네임스페이스 안에서는 해당 프로세스가 PID 1부터 시작이 PID 1 프로세스는 네임스페이스의 init 프로세스로, 모든 자식의 조상🔍 왜 자.. 개발일기/Docker 2025. 5. 29. 1. 컨테이너 만들기 - fork/exec로 컨테이너 프로세스 분리하기 Go로 "컨테이너스러운" 프로세스를 만들어보자. 격리Docker와 같은 컨테이너 기술에서 "격리"라는 키워드는 컨테이너가 제공하는 가장 핵심적인 개념 중 하나이다. 세부적으로 하나하나 그 장점을 나열해보자.1. 🔐보안 (Security)격리를 통해 각 컨테이너는 서로 다른 컨테이너나 호스트 시스템과 직접적으로 상호작용할 수 없다. 만약 컨테이너 내부에서 시스템에 악영향을 주는 코드가 실행되더라도, 다른 컨테이너나 호스트 전체로 피해가 전이되는 것을 막을 수 있다.2. 🧩자원 분리 (Resource Separation)CPU, 메모리, 네트워크, 디스크 I/O 등 시스템 자원을 분리하여 사용할 수 있다. 특정 컨테이너가 무한히 자원을 사용하는 것을 방지하고, 다른 컨테이너에 영향을 주지 않도록 보장할 .. 개발일기/Docker 2025. 5. 28. [Spring test] mockito, controller에서 null을 반환한다 컨트롤러 테스트 작성 중 이슈가 생겼다. Mock 객체를 생성하기 위해 Mockito 라이브러리를 활용하여 컨트롤러의 반환값을 지정해 주었다. 하지만 실제 테스트 결과에서는 반환값으로 지정한 객체가 들어있지 않고 null이 포함되어 있다. 이게 대체 무슨 일…?Expected to find an object with property ['accessToken'] in path $['data'] but found 'null'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.com.jayway.jsonpath.PathNotFoundException: Expect.. 개발일기/Spring 2025. 3. 20. OpenAI 12월 11일 대규모 장애 발생 이슈 리포트 ???? 뭐? ChatGPT 안들어가진다고?F*** UP! 내 완벽한 업무 메이트인 gpt가 출근을 하지 않았다. 그 일로부터 며칠 후, OpenAPI에서 해당 이슈에 대한 리포트를 작성했다는 소식을 보았다. 지금 공부하고 있는 쿠버네티스와 관련된 이슈라는 소식에 흥분감을 감추지 못하고 원문을 말끔히 번역하여 정리해보겠다.API, ChatGPT & Sora Facing IssuesIncident Report for OpenAI API, ChatGPT & Sora Facing Issues status.openai.com2024년 12월 11일 OpenAI의 모든 서비스가 작동을 중지하였다. 본 글은 해당 사고에 대한 검시(post-mortem)이다. 이번 문제는 OpenAI가 도입한 새로운 Telemetr.. IT 생태계 2024. 12. 18. K-L1VERSE의 EDD 도입기 K-L1VERSE의 EDD 도입 이야기안녕하세요, K-L1VERSE의 Aiden입니다. K-L1VERSE에 큰 변곡점이 생겼서 다시 블로그로 찾아오게 되었습니다. 몇 가지 마일스톤을 헤쳐나갔는데요. 오늘은 크게 세 가지 골자에서 포스팅을 남겨볼까 합니다.1. EDD블로그를 구독하신 분이라면 몇 달 전 올라왔던 우아한 형제들의 기술블로그 스터디 포스팅을 기억하실 겁니다.이유도 없이 해당 포스팅을 준비한 것은 아니었습니다. K-L1VERSE에 EDD를 도입하기 위한 사전 공부느낌이었는데, 그래서 그런지 우아한 형제들의 포스팅과 유사한 내용이 많이 섞여 있습니다.2. AWS SQS & SNS우아한 형제들이 MQ로 활용했던 AWS의 클라우딩 서비스, SQS와 SNS도 K-L1VERSE에 도입하기에 좋은 장치였습.. K-L1VERSE 2024. 12. 13. Spring-projects에 내 지문을 남겨버리기 조금 특별한 경험을 했다… 😆😆얼마 전에 Spring batch의 wiki 문서인 “Spring Batch 5.0 Migration Guide”을 읽다가 오탈자를 발견했었다.Up until version 4.3, the @EnableBatchProcessing annotation exposed a tranasaction manager bean in the application context. While this was convenient in many cases, the unconditional exposure of a tranasaction manager could interfere with a user-defined transaction manager.눈썰미가 좋은 사람은 바로 보일 것이다. tr.. 오픈 소스 2024. 12. 4. 24년 11월 월간 회고 2024년도 이제 12월, 한 달만 남았다. 한 해를 마무리해가고 있는 지금 ‘11월의 내 모습은 어땠을까, 2024년의 유종의 미를 거두고 있는가’라는 의문을 해소하고자 이번달도 빠지지 않고 회고를 남긴다.Keep업무는 순항중qTrustNet의 모든 화면 개발을 마무리하였다. 스스로 디자인까지 하고 프론트엔드 구현, 백엔드까지 다소 작업 영역이 넓지만 꾸준히 흥미를 잃지 않고 진행하고 있다. 현재는 v1의 모든 화면 개발을 완성하였다. 이제 주로 백엔드 작업으로 12월을 보낼 것 같다.프로세스를 꼼꼼하게 설계하거나 에러 상황을 정의하는 것 등에 아직 익숙하지 않은 부분도 많지만 이 정도 꾸준함이라면 충분히 극복할 수 있을 것으로 보인다.“꾸준하게” 해보자.K-L1VERSE 새단장 중케이리버스의 자잘한 .. 회고/정기회고 2024. 12. 3. [이슈 로그] 리액트 애플리케이션 백그라운드 실행 리액트 애플리케이션을 백그라운드로 실행하기 위해 아래 커맨드를 입력했다.$ yarn dev --host 0.0.0.0 --mode production & 정상적으로 실행될 것이라는 기대와 다르게 에러가 발생한다.[5]+ Stopped (tty input) yarn dev --host 0.0.0.0 --mode production원인이 무엇일까?React 개발 서버(yarn dev)는 실행 중 터미널 입력을 필요로 하지만 이를 백그라운드에서 실행시켰으므로 터미널 입력을 처리하지 못하고 동작을 멈춘 것이다. 따라서 이는 TTY 입력 문제로 React 개발 서버는 백그라운드 실행 시에도 TTY 입력을 기본적으로 기다리는 특징을 이해해야 한다.해결은 nohup해결을 위해 nohup을 사용한다. n.. 개발일기/이슈 로그 2024. 12. 2. K8S Pod와 Deployment 간단 이해 “쿠버네티스에서 배포할 수 있는 가장 작은 컴퓨터 오브젝트인 Pod와 이를 실행하는데 도움이 되는 고수준 추상화” = 쿠버네티스 워크로드쿠버네티스의 워크로드는 클러스터에서 실행되는 애플리케이션과 서비스를 나타낸다. 이는 컨테이너화된 애플리케이션을 배포, 관리 및 확장하기 위해 정의된 객체들로 구성된다. 워크로드의 주요 유형은 아래와 같다.Pod : 하나 이상의 컨테이너를 포함하는 쿠버네티스의 가장 작은 배포 단위Deployment : 무중단 배포와 롤백을 관리하며, 애플리케이션을 선언적으로 배포StatefulSet : 상태를 가진 애플리케이션을 관리하며, 안정적인 네트워크 ID를 제공DaemonSet : 각 노드에서 실행되는 워크로드를 관리Job & CronJob : 일회성 또는 주기성을 띄는 작업을 수.. 개발일기/K8S 2024. 11. 28. [이슈 로그] 네트워크 이슈 + 'yarn dev --host 0.0.0.0' 진짜 별거 아닌 이슈 로그이다. 근데 2시간 동안 삽질해서 한번 정리해본다. 상황현재 사내 온프렘 서버로 바로 접근해서 작업하지 않고 router에 접근해서 작업하고 있다. router로 요청을 보내면 자동으로 라우팅된 요청이 내가 사용하는 서버로 가는 구조이다. 192.168.y.y 에 단순히 yarn dev로 react 애플리케이션을 실행했다. 그리고 라우터의 8051번 포트를 vite 애플리케이션이 사용하는 5173번 포트로 포트포워딩 해두었다.결과는? 아니 내 네트워크 지식으론 이론상 완벽한데? 라고 생각했지만 문제는 네트워크 연결이 아니라 yarn dev에 있었다.yarn dev 기본설정대부분의 경우, 개발 서버는 localhost(또는 127.0.0.1)에서만 실행된다. 이는 개발 서버가 로컬.. 개발일기/이슈 로그 2024. 11. 22. 이전 1 2 3 4 ··· 11 다음