본문 바로가기

분류 전체보기

(221)
[백준 23288] 주사위 굴리기 2 (Python 풀이) https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 이 문제는 '주사위 방향에 따른 이동'을 풀어내는 것과 BFS 알고리즘을 활용하면 풀 수 있습니다. 풀이 주사위 이동 주사위 이동에 대한 함수는 따로 알고리즘으로 풀어내기 보다는 케이스가 4개뿐이기 때문에 규칙을 찾아 하드코딩으로 구현하였습니다. 주사위의 이동은 좌우로 움직이는 경우와 상하로 움직이는 경우로 나눌 수 있습니다. 그림으로 표현하면 다음과 같습니다. 따라서 주사위와 ..
[k8s] 파드를 수평으로 Scale Out 하기(HorizontalPodAutoscaler, HPA) HorizontalPodAutoscaler(HPA) 쿠버네티스에서는 CPU 사용량 이나 기타 메트릭을 체크하여 파드의 개수를 스케일하는 기능을 가지고 있습니다. Horizontal Pod Autoscaler로 지정한 메트릭을 컨트롤러가 체크하여 부하에 따라 필요한 파드의 레플리카수가 되도록 자동으로 파드를 늘리거나 줄입니다. Horizontal Pod Autoscaler는 쿠버네티스 API 리소스 및 컨트롤러로 구현됩니다. 리소스는 컨트롤러의 동작을 결정한다. 컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률 또는 다른 커스텀 메트릭과 같은 관찰 대상 메트릭이 사용자가 지정한 목표값과 일치하도록 레플리케이션 컨트롤러 또는 디플로이먼트에서 레플리카 개수를 주기적으로 조정합니다. HPA(Horizontal..
[k8s] 쿠버네티스의 Autoscaler (HPA, VPA, CA 개념) HPA(Horizontal Pod Autoscaler) Horizontal Pod Autoscaler는 파드의 리소스를 감시하여, 리소스가 부족한 경우 Controller의 replicas를 증가시켜, 파드의 수를 늘리도록 합니다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 합니다. 파드가 증가하였기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 합니다. HPA는 다음과 같은 경우에 사용이 권장됩니다. - 기동이 빠르게 되는 App 파드의 장애가 났을 때 대응하기 위한 용도로 사용되기 때문에 파드의 생성이 빠르게 되어야 합니다. 따라서 기동이 빠르게 되는 애플리케이션에 더 적합합니다. - Stateless..
[백준 23290] 마법사 상어와 복제(Python 풀이) https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net 이 문제는 구현 문제로 문제에서 요구한 순서에 맞게 구현하는 것이 중요합니다. 주의할 점은 다음과 같습니다. 배열의 index가 0이 아닌 1번 부터 시작하도록 되어 있습니다. 물고기의 방향 정보 또한 1~8번 까지의 정보를 가지기 때문에 헷갈리지 않도록 조심해야합니다. 물고기의 냄새가 있는 곳은 '이동'을 못하는 것입니다. 따라서 물고기가 잡아 먹혀서 물고기 냄..
[k8s] 인그레스(Ingress) 인그레스(Ingress) 인그레스(Ingress)는 주로 클러스터 외부에서 안에 있는 파드에 접근할 때 사용하는 방법입니다. 서비스와의 차이점은 주로 L7 영역의 통신을 담당해서 처리한다는 것입니다. 인그레스는 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙에 대한 모음입니다. 클러스터 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅도 제공합니다. 인그레스 자체는 이런 규칙들을 정의해둔 자원이고, 실제로 동작시키는 것은 인그레스 컨트롤러(Ingress Controller)입니다. 클라우드 서비스(AWS EKS 등..)를 사용하면 별다른 설정없이 자체 로드밸런서 서비스와 연동해서 인그레스를 사용할 수 있습니다..
[k8s] StatefulSet(스테이트풀셋) Stateless Application vs Stateful Application Stateless Application 클라이언트와 서버 관계에서, 서버가 클라이언트의 상태를 보존하지 않는 형태의 서비스입니다. 말 그대로 상태가 없는 애플리케이션으로 대표적으로 Apache, Nginx와 같은 Web server가 있습니다. Stateless 애플리케이션은 쿠버네티스에서 삭제/생성 시 같은 역할을 하는 애플리케이션을 생성하면됩니다. 이 때 앱의 이름은 중요하지 않습니다. Stateless 애플리케이션은 Volume이 반드시 필요하진 않지만 하나의 볼륨에 모든 애플리케이션이 연결되어 사용할 수 있습니다. 쿠버네티스에서는 Replication Controller, Replicaset, Deployment와 ..
[Programmers] 표 편집(Python 풀이) - 2021 카카오 채용연계형 인턴십 코딩 테스트 문제 https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 풀이 이 문제는 효율성 테스트까지 통과해야합니다. 따라서 각 행들의 관계를 '링크드리스트(Linked List)' 자료형으로 정의하여 풀어야합니다. 일반 배열 자료형에 비해 링크드리스트의 경우 삭제/삽입의 시간복잡도가 O(1)인 점을 이용하여야 합니다. 링크드리스트에 대한 개념이 없는 분은 다음 링크를 참조하세요..
[Backend] 백엔드 API 패턴 - 레이어드 아키텍처 패턴(layered architecture) 개발 단계에서 좋은 코드의 구조를 생각하는 것은 쉽지 않습니다. 코드 아키텍처를 구상할 때는 확장성(extensibility), 재사용성(reusability), 유지 보수 가능성(maintainabiliy), 가독성(readability)와 같은 요소들을 염두해야합니다. 다행히도 코드의 구조를 어떻게 구성하고 관리해야 하는지는 이미 많이 다루어졌으며, 그에 관한 정성이나 패턴은 많이 나와있습니다. 그 중에서 백엔드 API 코드에 가장 널리 적용되는 패턴 중 하나는 레이어드 아키텍처 패턴입니다. Multi-tier 아키텍처 패턴이라고도 하는 레이어드 아키텍처는 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어서 구성하는 패턴입니다. 그리고 각 모듈이 서로의 의존도에 따라 층층히 쌓듯이 연결되어..
[k8s] RBAC(Role Based Access Control)란 리소스 표현과 동작 쿠버네티스는 리소스 조작을 API Server에 집약시키고 있습니다. 그리고 API Server는 REST 형식으로 리퀘스트를 받습니다. URL로 리소스를 표현하고 거기에 대해 HTTP 메소드로 조작을 합니다. 쿠버네티스의 RBAC에서는 조작을 Verb라고 부릅니다. 참조, 작성, 갱신, 부분 갱신, 삭제 조작에 각각 Verb가 있어서 HTTP 메서드와 대응하고 있습니다. HTTP Method Verb Verb(컬렉션) GET, HEAD get(watch) list(watch) POST create - PUT update - PATCH patch - DELETE delete deletecollection 파드, 서비스, 시크릿과 같은 리소스에 대해 각 계정이 갖고 있는 '역할'이 이런..
[k8s] 쿠버네티스의 인증과 인가 쿠버네티스의 인증과 인가는 API Server 상에서 일어나는데, 인증, 인가, Admission Control 이라는 3단계가 있습니다. 인증 인증은 해당 계정이 누구인지, 어떤 그룹에 속하는지를 확인하는 것입니다. 쿠버네티스가 지원하고 있는 대표적인 방식, 플로그인은 다음과 같습니다. X509 클라이언트 인증서 정적 토큰 파일 부트스트랩 토큰 정적 비밀번호 파일 Service Account 토큰 OpenID Connect 토큰 인가 인가는 인증이 끝난 계정에 대해 조작할 수 있는 리소스와 가능한 조작을 한정하는 것입니다. 인가 방식에는 여러 가지가 있지만 그중에서도 RBAC(Role Based Access Control)가 사실상 표준으로 자리매김하고 있습니다. Admission Control Ad..