본문 바로가기

전체 글78

[쿠버네티스 교과서] k8s 스터디 6주차 - 11장, 12장 24.09.27 ~24.09.30k8s 사내 스터디에서 쿠버네티스 교과서 9, 10 장을 읽으며 공부한 내용 11. 애플리케이션 개발: 개발 워크플로와 CI/CD  Dockerfile - 스크립트 어플리케이션 빌드 및 패키징docker-compose, 쿠버네티스 - 어플리케이션 실행 쿠버네티스의 이미지 구분 방법태그 명시적 지정 X -> 레지스트리에서 이미지 내려받기태그 지정 -> 로컬 이미지나 노드 내 이미지 캐시 사용 가능 개발 워크 플로개발자 깃 푸시깃 변경 확인 시 빌드 파이프라인 실행이미지 빌드클러스터에 어플리케이션 배치 곡스 (Gogs) -> 빌드팩 (BuildPack) 을 사용한 빌드킷 (BuildKit)곡스 (Gogs) : 깃 서버빌드킷 (BuildKit) : 도커 엔진 대신 이미지 빌드 .. 2024. 9. 30.
[쿠버네티스 교과서] k8s 스터디 5주차 - 9장, 10장 24.09.11 ~24.09.26k8s 사내 스터디에서 쿠버네티스 교과서 9, 10 장을 읽으며 공부한 내용 9. 롤아웃과 롤백을 이용한 애플리케이션 릴리스 관리 디플로이먼트의 두 가지 업데이트 전략롤링 업데이트 (rolling update)리크리에이트 (recreate) 롤아웃레플리카셋 새로 생성레플리카를 지정된 숫자만큼 생성기존 레플리셋의 레플리카 수를 0으로 낮춤 롤아웃은 파드의 정의가 변경될 때만 일어남 버전번호를 넣은 레이블 정의하여 레플리카셋에 부여 시 업데이트 내용 추적하기 수월파드 정의 에 version 레이블 선언 가능 롤아웃의 주 기능은 릴리스 관리롤아웃 히스토리 확인롤아웃 중단이전 리비전 롤백  핫 리로드 (hot reload)컨피그맵/비밀값 업데이트 시 어플리케이션 동작이 변화롤아웃.. 2024. 9. 29.
[쿠버네티스 교과서] k8s 스터디 4주차 - 7장, 8장 24.09.04 ~24.09.10k8s 사내 스터디에서 쿠버네티스 교과서 7, 8 장을 읽으며 공부한 내용  7. 멀티컨테이너 파드를 이용하여 애플리케이션 확장하기 파드는 네트워크 및 파일 시스템을 제공하는 가상환경파드 내 컨테이너들은 파드의 네트워크 공유localhost 주소를 통해 컨테이너 간 통신외부 트래픽 받을 시 다른 포트 사용해야함파드 내 컨테이너들은 파드의 볼륨 공유 가능컨테이너는 자신만의 파일시스템을 가짐컨테이너는 파드에서 제공한는 볼륨을 마운트할 수 있음볼륨을 공유하여 컨테이너 간 정보 교환 가능 파드는 어플리케이션을 구성하는 단위이므로, 한 파드내에 다른 어플리케이션을 함께 넣는 것은 지양할 것 사이드카 패턴 (sidecar pattern)추가 컨테이너가 어플리케이션 컨테이너를 지원하는.. 2024. 9. 10.
[쿠버네티스 교과서] k8s 스터디 3주차 - 5장, 6장 24.08.28 ~24.09.03k8s 사내 스터디에서 쿠버네티스 교과서 5, 6 장을 읽으며 공부한 내용  5. 볼륨, 마운트, 클레임을 이용한 데이터 퍼시스턴시 파드내에만 데이터를 저장한다면 데이터의 손실이 일어나므로, 어떤 노드 내 파드에서라도 동일하게 접근 가능한 저장소가 필요 컨테이너는 각각 파일시스템을 가지므로, 파드의 재시작은 컨테이너의 데이터 손실을 유발함4장에서 컨피그맵/비밀값을 볼륨을 통해 사용했던 것 처럼, 볼륨에 데이터를 저장하여 파드의 생애주기와 상관없이 데이터를 유지하고 접근 가능하다  공디렉터리 (EmptyDir)파드와 같은 생애주기를 가지는 볼륨의 유형파드가 생성된 노드의 임시 디스크 (임시 파일 시스템) 에 기록컨테이너가 대체되더라도 데이터가 유지되지만, 파드가 대체되면 빈.. 2024. 9. 3.
[쿠버네티스 교과서] k8s 스터디 2주차 - 3장, 4장 24.08.21 ~24.08.27k8s 사내 스터디에서 쿠버네티스 교과서 3, 4 장을 읽으며 공부한 내용 3. 네트워크를 통해서 서비스에 파드 연결하기쿠버네티스 내에서는 모든 파드끼리 통신이 가능해야 함파드끼리의 통신을 위해 IP 를 사용하는데, 파드 대체시 IP 가 변경되는 문제를 해결하기 위해 서비스(Service)라는 통신 트래픽의 라우팅을 맡는 리소스를 사용 변경되는 파드의 IP 주소를 사용하는 통신 대신, 도메인 네임과 클러스터 내 DNS 서버를 사용해 파드간 통신 구현 서비스 생성 시, 서비스에 정적 ip 주소인 클러스터IP(ClusterIP) 가 할당되며 서비스 마다 고유한 클러스터 도메인이 설정됨클러스터IP 는 클러스터 DNS 에 등록됨클러스터 도메인 네임을 통해 파드간 통신을 할 때 아.. 2024. 8. 27.
[쿠버네티스 교과서] k8s 스터디 1주차 - 1장, 2장 24.08.14 ~24.08.20k8s 사내 스터디에서 쿠버네티스 교과서 1, 2 장을 읽으며 공부한 내용 내용 업로드 예정 파드와 디플로이먼트 2024. 8. 26.
[JPA] Soft Delete 적용과 @Where, @SQLDelete 프로젝트 중 hard delete 에서 soft delete 로 리팩토링한 과정과 @Where, @SQLDelete 에 관한 생각이다. Spring boot + JPA 로 프로젝트 진행 중, delete 관련 에러가 생겼고 관련 코드를 보며 앞으로의 delete 에러를 줄이기 위해서는 hard delete 가 아닌 soft delete 로 리팩토링 해야겠다는 생각을 했다. Soft Delete vs Hard Delete soft delete (물리 삭제) 는 SQL 의 delete 를 사용해 실제로 데이터를 삭제하는 방법이다. hard delete (논리 삭제) 는 삭제 여부를 판단하는 필드를 만든 후, 해당 필드를 SQL 의 update 를 통해 변경하여 삭제가 되었다고 표기하는 방법이다. 이때, 다른.. 2023. 9. 6.
[OS] Deadlock Deadlock 위의 사진의 경우, S = Q = 1 일 때, P0 의 wait(S) 에 의해 S는 0이, P1의 wait(Q) 에 의해 Q 는 0 이된다. P0 가 wait(Q) 를 실행할 때, P1 이 signal(Q) 를 실행할 때까지 대기해야한다. 비슷하게 P1 이 wait(S) 를 실행할 때, P0가 signal(S) 를 실행할 때까지 기다려야 한다. 결국 P0 와 P1은 무한 대기하게 되며 이를 deadlock 되었다고 한다. resource 를 가지고 있고 다른 프로세스가 보유한 resource 를 얻기 위해 대기하는 block 된 프로세스들의 집합을 Deadlock 이라고 한다. Deadlock Necessary Conditions Deadlock 이 발생하려면 다음 네 가지 조건을 동시에.. 2023. 8. 21.
[OS] Synchronization Producer-Consumer item buffer[BUFFER_SIZE]; int in = 0; int out = 0; int count = 0; 몇 가지 변수들을 공유하며 producer 와 consumer 의 코드는 위와 같다고 하자. 이 코드들은 BUFFER SIZE − 1 크기의 버퍼를 공유하며 사용하도록 하는 코드이다. 개별적으로 보면 잘 작동할 것 같지만, 동시에 실행하면 문제가 발생할 수 있다. 예를 들어, count 가 5 이고 producer 와 consumer 가 동시에 실행된다면 "count++" 과 "count--" 이후의 count 값이 4, 5, 6 이 될 수 있다. Race Condition "count++" 과 "count--" 의 동시 실행은 위와 같이 이루어 진다. 위.. 2023. 8. 16.