![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/JeTAX/btsJuwuC4NY/DG8SFNTX89eUWHLDu7W5K1/img.png)
쿠버네티스에서 사용하는 3가지 프로브Liveness probe: 컨테이너가 정상적으로 실행 중인지 확인하여 비정상 시 재시작Readiness probe: Pod가 트래픽을 처리할 준비가 되었는지 확인하여 준비되지 않은 Pod는 서비스에서 제외Startup probe: 컨테이너 애플리케이션이 성공적으로 시작되었는지 확인.Liveness Probe의 4가지 메커니즘HTTP GET Probe: 지정된 HTTP 엔드포인트에 GET 요청을 보내 응답 상태로 컨테이너의 건강 상태를 확인. 가장 범용적인 방법.TCP Socket Probe: 컨테이너의 특정 포트에 TCP 연결을 시도해 성공 여부로 상태를 점검.Exec Probe: 컨테이너 내에서 명령을 실행해 그 반환 값을 통해 상태를 판단.gRPC Probe: g..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/KPibM/btsJmocDF4e/chfhNjGUtDAbIYGLKJafCK/img.png)
라벨 (Labels)쿠버네티스에서 라벨은 포드 및 기타 모든 객체를 식별하고 분류하는 데 중요한 역할을 합니다. 라벨은 리소스에 첨부되는 임의의 키/값 쌍으로 구성되며, 클러스터 내에서 특정 리소스를 쉽게 찾고 관리할 수 있게 도와줍니다. 라벨을 활용하면 관련 있는 리소스들을 논리적으로 그룹화할 수 있어 배포, 모니터링, 그리고 스케일링과 같은 작업을 더 효율적으로 수행할 수 있습니다.구성 요소: 라벨은 키/값 쌍으로 이루어져 있으며, 리소스에 부착됩니다.라벨 셀렉터: 라벨 셀렉터를 사용해 특정 라벨이 지정된 리소스의 하위 집합을 선택할 수 있습니다.활용 예시: 배포 자동화, 로드 밸런싱, 모니터링 대상 선택 등에 사용됩니다.유연성: 라벨은 임의의 키/값을 사용할 수 있어, 다양한 조건에 맞게 리소스를 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/X8JOG/btsJntxepAy/7532DsET5kzNHOvgAqR6PK/img.png)
동일 포드 내 컨테이너 간 통신포드 안의 모든 컨테이너는 동일한 네트워크 및 UTS 네임스페이스에서 실행되기 때문에 같은 네트워크 환경을 공유합니다. 이는 마치 하나의 컴퓨터에서 여러 프로그램이 동시에 실행되는 것과 비슷합니다. 각 컨테이너는 동일한 IP 주소와 호스트 이름을 사용하며, 네트워크 인터페이스도 공유합니다. 하지만, 같은 포드 내의 컨테이너들이 같은 포트 번호를 사용하면 문제가 생길 수 있으므로, 서로 다른 포트를 사용해야 합니다.동일 포드 내 컨테이너들은 같은 네트워크와 UTS 네임스페이스를 공유함.같은 IP 주소와 호스트 이름을 사용함.컨테이너 간 통신이 간단해지고, 네트워크 인터페이스도 공유됨.동일 포드 내에서 같은 포트 번호 사용 시 포트 충돌이 발생할 수 있음. 플랫 인터 포드 네트..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/lIg9d/btsJeayHqgV/On5cD82giwNd7HbUtcSMaK/img.png)
포드 Pod컨테이너화된 애플리케이션의 가장 작은 배포 및 관리 단위포드는 하나 이상의 컨테이너를 포함할 수 있음동일한 리눅스 네임스페이스와 동일한 워커 노드에서 항상 함께 실행됨 주요 특징컨테이너 그룹화 : 하나 이상의 컨테이너를 그롭화하여 동일한 네트워크와 스토리지를 공유. 일반적으로 포드 내 컨테이너들은 매우 밀접하게 연관된 작업을 수행. (ex. 한 포드 내의 두 컨테이너가 서로 파일스토리지를 공유하며 서로 의존하는 관계)네트워킹 : 포드 내부 컨테이너들은 동일한 네트워크 네임스페이스를 공유하여 동일한 IP주소와 포트를 사용하여 서로 통신할 수 있음. 포드 외부에서는 포드의 IP주소를 통해 접근할 수 있음일시적 생명주기 : 특정 작업이 완료되거나 더이상 필요하지 않으면 종료됨. 필요에 따라 언제..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/0RPBH/btsI7ob1BKT/PP89QL9LnzmQeiojaJ4WkK/img.png)
쿠버네티스 등장 이유모놀리식 애플리케이션에서 마이크로서비스로의 전환하며 구성요소가 쪼개지기 시작배포 가능한 구성 요소의 수와 데이터센터 규모의 증가로 전체 시스템을 원활히 구성하고 유지, 관리하는 것이 어려워짐하드웨어 비용을 낮추고 효율적 리소스 활용을 위해 각 구성요소를 어디에 배치했는지 파악하는 것이 어려워짐서버의 구성 요소의 스케쥴링, 구성, 감독 및 오류처리의 자동화가 필요해졌음⇒ 쿠버네티스는 리눅스 컨테이너 기술을 사용해 실행중인 애플리케이션을 격리한다. 가상머신 vs 리눅스 컨테이너가상머신컨테이너프로세스마다 자체 OS (=게스트 OS)가 있음호스트 OS에서 동작하는 단일 커널.각 하드웨어가 자체 시스템 프로세스 집합을 실행해야 하기 때문에 자체 프로세스에서 소비되는 것 외에도 컴퓨팅 리소스..
모니터mutual exclusion(상호배제)를 보장조건에 따라 스레드가 wait 상태로 전환 가능모니터는 언제 사용할까?한번에 하나의 스레드만 실행돼야 할 때여러 스레드와 협업(cooperation)이 필요할 때구성요소mutex (Mutual Exclusion Object)Critical section(임계영역)에서 mutual exclusion을 보장하는 장치Critical section에 진입하려면 mutex lock을 취득해야 함mutex lock을 취득하지 못한 스레드는 큐에 들어간 후 wait 상태로 전환mutex lock을 쥔 스레드가 lock을 반환하면 대기 중인 스레드 하나가 실행Condition variableWait queue(조건이 충족되길 기다리는 스레드들이 대기상태로 머무르는 곳..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dqOtAA/btsC36W4IRW/mWQqbl3lxF7BsBw2IIus61/img.png)
의도치 않은 재 취준모드 회사가 갑작스럽게 청산하여 다시 취준 생활에 돌입했습니다 개발자 호황기였던 신입 취준때와 달리 시장이 좋지 않았기에 멘탈이 많이 무너졌었습니다 할 수 있는 일을 찾아보고 부족한 구멍을 찾아 매우는 일에 집중했었지만 취준이란 게, 인생이란 게 노력한다고 해서 그에 비례한 보상이 오는 건 아니라는 걸 한번 더 절감하게 되었습니다 그럼에도 불구하고 뚯밖의 기회로 첫회사에 재입사하게 되었습니다 퇴사했던 사람으로서 다시 돌아간다는 게 부끄럽기도 하고 괜히 움츠러들기도 했었는데요 다들 반갑게 맞아주셔서 지금은 무사히 적응하면서 잘 지내고 있습니다 스터디 기록 강의 MongoDB : 2023.01.08 ~ 2023.03.24 / 강의노트 Redis : 2023.04.09 ~ 2023.05.2..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cIqJcE/btsC9mc0tKo/pEpUQdoK4kKfngxtqKwKQK/img.png)
회사에서 사이드 프로젝트(?)로 소소하게 도커를 다룰 일이 있었습니다. 도커 스터디도 하고 컨테이너를 띄우는건 얼추 했지만 Dockerfile을 정의하고 목적에 맞게 도커 이미지를 빌드하는 게 처음이었어서 이번에 알게된 내용들을 간단히 정리합니다. Dockerfile과 docker compose의 관계 Dockerfile : 도커 이미지 빌드를 위한 레시피같은 것 docker compose : 도커파일을 실행하는 커맨드의 집합 (ex. docker run, docker build를 한꺼번에 하는 역할) 컨테이너 IP 각 컨테이너에는 독립된 랜덤 IP가 부여된다. 이 ip는 컨테이너를 띄울 때마다 바뀌는 것 같다. docker inspect {container_name} 명령어로도 확인 가능 (JSON데이..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/xJriG/btssCt7zT9C/sK4jgzXsdJF6WvNkRvNRKK/img.png)
https://www.youtube.com/watch?v=ZBu_slSH5Sk 유튜브 쉬운코드의 맵, 해시테이블 설명을 보고나서 추가로 궁금한 부분들을 정리해보았습니다. 영상의 설명이 너무 좋아 같이 봤으면 해서 영상도 같이 올립니다. Map key-value pair들을 저장하는 ADT 같은 key를 가지는 pair는 최대 1개만 존재 associative array, dictionary라고 불리기도 함 구현체 Hash Table Tree-based 💡 ADT (Abstract Data Type, 추상 데이터 타입) 데이터와 해당 데이터에 적용되는 연산들을 묶어놓은 개념. 데이터 내부 구현을 감추고 데이터와 연산의 인터페이스만을 노출시켜 코드의 모듈성과 재사용성 향상을 목표로 함. ex) Stack, ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bMZuZx/btsnD1vnZ40/k7kmoPYD6M8jhIkUnBfvF1/img.png)
문제상황 사내 백오피스 애플리케이션에서 거래내역을 조회하는 페이지에 첫 진입할 때 5.48초가 걸리는 문제를 발견하였습니다 원인 분석 현재 거래내역 페이지는 offset 기반의 페이지네이션을 사용하고 있었고 리스트의 전체 행 수를 구하는 부분(이하 totalCount)에서 시간이 많이 소요되고 있음을 발견하였습니다. 페이지 첫 진입 시 데이터 조회 범위가 정해져있지 않았기 때문에 서비스 오픈부터 쌓여온 10만여건의 데이터를 전부 조회하고 있었습니다. 또한 실행계획을 조회해보니 거래 테이블에서 테이블 풀 스캔이 발생하고 있었습니다. 페이지 첫 진입 시 최근 한달 간의 거래내역만 조회하고 옵션에서 범위를 늘릴 수 있게 변경하고자 하였으나 운영팀에서는 조금 느리더라도 전체 범위 검색을 디폴트값으로 해달라는 요..
- Total
- Today
- Yesterday
- laravel 테스트
- 대규모 데이터 처리
- 주니어개발자
- 라라벨
- php
- 샤드
- mockery
- java
- index
- database
- redis
- springboot
- 백엔드
- kubernetes
- 도커
- MySQL
- pods
- NoSQL
- mongoDB
- 리눅스 컨테이너
- laravel 테스트코드
- laravel
- 쿠버네티스
- Apache POI
- 몽고디비
- phpUnit
- 분산처리
- docker
- 샤딩
- k8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |