Kubernetes란?

Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장 및 관리하기 위한 오픈소스 컨테이너 오케스트레이션 플랫폼입니다. 큰 규모의 애플리케이션을 여러 대의 호스트에서 실행하는 경우, Kubernetes를 사용하면 애플리케이션을 효율적으로 배포하고 스케일링할 수 있습니다.

Kubernetes는 다음과 같은 주요 기능을 제공합니다:

1. 컨테이너 관리: Kubernetes는 Docker와 같은 컨테이너 런타임을 사용하여 컨테이너화된 애플리케이션을 실행하고 관리합니다. 컨테이너는 애플리케이션을 격리된 환경으로 패키징하고 이식성과 확장성을 높여줍니다.

2. 클러스터 관리: Kubernetes는 여러 대의 호스트를 클러스터로 구성하고, 애플리케이션 컨테이너를 클러스터 내의 노드에 분산하여 실행합니다. 클러스터 관리 기능은 노드 간의 자원 관리, 스케줄링, 자동 복구, 자동 확장 등을 수행합니다.

3. 서비스 디스커버리와 로드 밸런싱: Kubernetes는 서비스 디스커버리 메커니즘을 제공하여 애플리케이션 컨테이너에 동적으로 IP 주소를 할당하고, 서비스를 로드 밸런싱하여 요청을 분산합니다. 이를 통해 애플리케이션의 가용성과 확장성을 높일 수 있습니다.

4. 롤링 업데이트와 롤백: Kubernetes는 애플리케이션 업데이트를 롤링 업데이트 전략을 사용하여 수행합니다. 이를 통해 서비스의 가용성을 유지하면서 안정적인 업데이트를 수행할 수 있습니다. 업데이트 중 문제가 발생한 경우 롤백 기능을 사용하여 이전 버전으로 쉽게 되돌릴 수 있습니다.

5. 모니터링과 로깅: Kubernetes는 클러스터 내의 애플리케이션 상태와 성능을 모니터링하고, 로그를 수집하고 분석하는 기능을 제공합니다. 이를 통해 애플리케이션의 상태를 실시간으로 파악하고, 문제를 조기에 탐지하여 대응할 수 있습니다.

6. 스케일링과 자동 복구: Kubernetes는 애플리케이션의 수평 스케일링을 지원하여 필요에 따라 애플리케이션 인스턴스의 개수를 자동으로 조정할 수 있습니다. 또한, 노드 또는 컨테이너의 장애가 발생한 경우 자동으로 해당 장애를 감지하고 복구하는 기능을 제공합니다.

7. 설정 관리: Kubernetes는 애플리케이션의 설정 관리를 위한 ConfigMap과 비밀 정보 관리를 위한 Secret 등의 기능을 제공합니다. 이를 통해 애플리케이션의 구성 요소들이 동적으로 설정을 가져와서 실행할 수 있습니다.

8. 다양한 환경 지원: Kubernetes는 다양한 환경에서의 배포와 실행을 지원합니다. 온프레미스, 퍼블릭 클라우드, 하이브리드 클라우드 등 다양한 환경에서 동작할 수 있으며, 대부분의 컨테이너 런타임과 호환됩니다.


Kubernetes와 Docker의 차이


Kubernetes와 Docker는 모두 컨테이너 관련 기술이지만, 각각 다른 측면에서 다른 역할을 수행합니다. 아래는 Kubernetes와 Docker의 주요 차이점을 설명합니다:

1. 스케일과 오케스트레이션:
   - Docker: Docker는 개별 컨테이너의 생성, 관리 및 배포를 위한 플랫폼입니다. 개발자가 컨테이너 이미지를 만들고 실행할 수 있게 해주며, 로컬 환경에서 단일 컨테이너를 운영하는 데 적합합니다.
   - Kubernetes: Kubernetes는 여러 대의 호스트에서 컨테이너화된 애플리케이션을 배포하고 관리하기 위한 컨테이너 오케스트레이션 플랫폼입니다. 여러 컨테이너를 자동으로 스케일링하고 관리하며, 클러스터 내에서 컨테이너 간의 통신, 로드 밸런싱, 자동 복구 등을 처리합니다.

2. 배포와 관리:
   - Docker: Docker는 개별 컨테이너의 빌드, 배포 및 관리를 단순하게 처리합니다. 개발자는 Docker 이미지를 사용하여 컨테이너를 실행하고, 필요에 따라 이미지를 업데이트하고 배포할 수 있습니다.
   - Kubernetes: Kubernetes는 클러스터 단위로 컨테이너 애플리케이션을 배포하고 관리합니다. 컨테이너화된 애플리케이션을 여러 노드에 분산하여 실행하고, 롤링 업데이트, 자동 스케일링, 로드 밸런싱, 상태 관리 등의 기능을 제공하여 애플리케이션의 안정성과 가용성을 보장합니다.

3. 서비스 디스커버리와 로드 밸런싱:
   - Docker: Docker는 컨테이너 내부 포트와 호스트 머신의 포트를 매핑하여 외부에서 접근할 수 있게 합니다. 하지만 컨테이너 간의 통신과 로드 밸런싱은 수동으로 설정해야 합니다.
   - Kubernetes: Kubernetes는 내부 DNS 서비스와 서비스 객체를 사용하여 컨테이너 간 통신을 자동화하고, 로드 밸런싱을 제공합니다. 클러스터 내에서 서비스를 식별하고, 서비스를 통해 컨테이너에 접근할 수 있습니다.

4. 스케일링과 자동 복구:
   - Docker: Docker는 개별 컨테이너의 스케일링을 위해 Docker Swarm과 같은 오케스트레이션 도구를 사용할 수 있습니다. 하지만 스케일링 및 자동 복구에 대한 기능은 Kubernetes에 비해 제한적입니다.
   - Kubernetes: Kubernetes는 클러스터 단위에서 애플리케이션의 스케일링과 자동 복구를 지원합니다. Pod, Deployment, ReplicaSet 등의 개념을 사용하여 애플리케이션 인스턴스의 개수를 동적으로 조정하고, 장애 발생 시 자동으로 복구할 수 있습니다.

5. 다중 환경 지원:
   - Docker: Docker는 다양한 운영 체제에서 컨테이너를 실행할 수 있습니다. Windows, macOS, Linux 등 여러 플랫폼에서 동작합니다.
   - Kubernetes: Kubernetes는 다양한 클라우드 제공업체와 온프레미스 환경에서 동작할 수 있습니다. Google Kubernetes Engine(GKE), Amazon Elastic Kubernetes Service(EKS), Microsoft Azure Kubernetes Service(AKS)와 같은 클라우드 제공자가 Kubernetes를 지원하고 있으며, 온프레미스 환경에서도 사용할 수 있습니다.

요약하자면, Docker는 개별 컨테이너의 빌드, 배포 및 관리에 초점을 맞춘 컨테이너 플랫폼이고, Kubernetes는 클러스터 단위로 컨테이너화된 애플리케이션을 배포, 관리 및 오케스트레이션하는 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 컨테이너 애플리케이션의 확장성, 안정성, 가용성 등을 보장하기 위한 고급 기능을 제공합니다.


Kubrnetes와 Docker의 장단점과 예제


Docker와 Kubernetes는 각각 다른 목적과 역할을 가지고 있으며, 어떤 것이 더 우위에 있는지는 사용하는 상황과 요구 사항에 따라 다릅니다. 다음은 Docker와 Kubernetes의 각각의 장점과 예제를 상세하게 설명합니다.

Docker의 장점:
- 개별 컨테이너의 빠른 빌드 및 배포: Docker는 컨테이너 이미지를 사용하여 개별 컨테이너를 빠르게 빌드하고 배포할 수 있습니다. 이는 애플리케이션 개발 및 테스트를 용이하게 만들어줍니다.

Kubernetes의 장점:
- 오케스트레이션: Kubernetes는 여러 대의 호스트에서 컨테이너화된 애플리케이션을 배포하고 관리하기 위한 컨테이너 오케스트레이션 플랫폼입니다. 클러스터 내에서 컨테이너 간의 통신, 로드 밸런싱, 자동 복구 등을 처리하여 애플리케이션의 안정성과 가용성을 보장합니다.
- 스케일링: Kubernetes는 애플리케이션의 수평 스케일링을 지원하여 필요에 따라 애플리케이션 인스턴스의 개수를 자동으로 조정할 수 있습니다. 이는 트래픽의 증가 또는 감소에 따라 자원을 효율적으로 사용할 수 있게 합니다.
- 자동 복구: Kubernetes는 노드 또는 컨테이너의 장애가 발생한 경우 자동으로 해당 장애를 감지하고 복구하는 기능을 제공합니다. 이를 통해 애플리케이션의 가용성을 높일 수 있습니다.

예제:
예를 들어, 웹 애플리케이션을 개발하고 배포해야 한다고 가정해봅시다.

Docker 예제:
1. Docker를 사용하여 애플리케이션의 컨테이너 이미지를 빌드합니다.
2. Docker 이미지를 사용하여 개발 환경에서 애플리케이션을 실행하고 테스트합니다.
3. 개발이 완료되면 Docker 이미지를 Docker Hub나 개인적인 Docker 레지스트리에 업로드합니다.
4. 서버에 Docker를 설치하고, 해당 이미지를 다운로드하여 컨테이너로 실행합니다.

Kubernetes 예제:
1. Kubernetes 클러스터를 구성합니다.
2. 애플리케이션을 컨테이너화하여 배포하기 위해 Docker 이미지를 빌드합니다.
3. Kubernetes의 YAML 파일을 작성하여 애플리케이션의 배포 및 구성을 정의합니다. 이 파일에는 애플리케이션의 ReplicaSet, Deployment, Service 등의 리소스가 포함됩니다.
4. Kubernetes 클러스터에 YAML 파일을 적용하여 애플리케이션을 배포합니다. Kubernetes는 지정된 수의 애플리케이션 인스턴스를 생성하고, 로드 밸런서를 설정하여 트래픽을 분산시킵니다.
5. Kubernetes는 애플리케이션 인스턴스의 상태를 모니터링하고, 필요에 따라 자동으로 복구하거나 스케일링합니다.

이 예제에서는 Docker를 사용하여 애플리케이션의 컨테이너 이미지를 빌드하고, Kubernetes를 사용하여 애플리케이션을 배포하고 관리합니다. Docker는 애플리케이션의 개발과 테스트를 용이하게 하고, Kubernetes는 애플리케이션의 스케일링과 자동 복구를 관리합니다.

참고로, 실제로는 상세한 구현이 필요하며 YAML 파일의 작성, Kubernetes 클러스터 구성 등에 대한 설정이 필요합니다. 위의 예제는 개념적인 이해를 돕기 위한 간단한 예시일 뿐이며, 실제 프로젝트에서는 더 복잡한 설정과 구성이 필요할 수 있습니다.

  • Interceptor는 웹 애플리케이션에서 요청과 응답 처리 과정을 가로채고 수정 또는 보완할 수 있는 기능을 제공하는 컴포넌트
  • 일반적으로 Interceptor는 프레임워크나 미들웨어에서 제공되며, 요청을 처리하기 전과 후에 실행되는 코드 블록으로 구성


Interceptor의 주요 목적

  • 인증과 권한 부여: Interceptor를 사용하여 사용자 인증 또는 권한 부여를 수행. 예를 들어, 로그인이 필요한 페이지에 접근할 때 Interceptor를 사용하여 사용자가 로그인되어 있는지 확인하고, 필요한 권한을 가지고 있는지 확인
  • 로깅: Interceptor를 사용하여 요청과 응답에 대한 로그를 작성. 이를 통해 애플리케이션의 동작을 추적하고 디버깅에 도움
  • 예외 처리: Interceptor를 사용하여 예외를 처리하고 오류 페이지 보여줌. 예를 들어, 예외가 발생하면 Interceptor에서 예외를 캐치하고, 사용자에게 오류 메시지를 보여주는 대체 페이지로 리다이렉션
  • 캐싱: Interceptor를 사용하여 응답을 캐싱하고 이전에 요청한 동일한 요청에 대해 캐시된 응답을 반환. 이를 통해 서버의 부하를 줄이고 응답 시간을 개선.
  • 트랜잭션 관리: Interceptor를 사용하여 트랜잭션을 시작하거나 종료. 이를 통해 데이터베이스 작업과 같은 트랜잭션 범위에서 요청을 처리



   - Spring에서 Interceptor는 HandlerInterceptor 인터페이스를 구현하여 만들 수 있습니다.
   - Interceptor는 preHandle, postHandle, afterCompletion 등의 메서드를 오버라이드하여 요청 전, 요청 후, 응답 완료 후에 실행할 로직을 구현할 수 있습니다.
   - preHandle 메서드는 요청을 처리하기 전에 실행되고, 요청을 가로채고 처리 여부를 결정할 수 있습니다.
   - postHandle 메서드는 요청 처리 후에 실행되고, 컨트롤러의 처리 결과에 대한 로직을 추가할 수 있습니다.
   - afterCompletion 메서드는 응답이 완료된 후에 실행되고, 리소스 정리 등의 작업을 수행할 수 있습니다.

'IT > SPRING' 카테고리의 다른 글

[Spring Batch]  (0) 2023.06.02
[Spring Boot]  (0) 2023.06.02
[SPRING] 어노테이션 설정  (0) 2022.01.05
[SPRING] 의존성 주입  (0) 2022.01.04
[SPRING] 스프링 컨테이너, applicationContext 설정파일  (0) 2022.01.03

Cocoa touch Framework

 

 

iOS 개발환경을 구축하기위한 최상위 프레임워크

Object C 또는 Swift에서 상속하여 사용하는 UI Kit Foundation 포함해서 CocoaTouch Framework에 포함됨

 

Foundation : 가장 기본적인 데이터타입, 자료구조, 타이머, 네트워크, 파일관리등 주요

UI Kit :사용자의 인터페이스 관리, 이벤트 처리가 주요목적인 프레임워크. 제스쳐처리,그림그리기,텍스트처리

테이블류,슬라이더ㅡ 알럿창 등 어플리케이션 화면구성요소 포함. UI클래스 사용하려면 반드시 UIKit Import 필요

 

UIKit은 사용자 인터페이스 관리하고 이벤트처리가 주 목적인 프레임워크

 

MVC 디자인패턴 사용

 

(이상적)

 

(현실적)

View와Controller가 강하게 연결되어있어

대부분 일 담당. View 와 Controller분리 어려움. 프로젝트 규모 커질수록 컨트롤러 비대

MVVM이나 바이퍼패턴 등 다른 디자인패턴 등장 해서 MVC의 단점을 해결

간단한 Basic은 MVC패턴이 적합함

 

 

UIView :화면의 직사각형 영역에 대한 내용을 관리하는 개체

-여러 UI 컴포넌트 보여주는데 사용함

 

ViewController : 앱의 근간을 이루는 객체로, 모든 앱은 최소 하나 이상의 뷰 컨트롤러를 가지고 있음

사용자가 화면을 보는것에 대한 관리기능을 제공함.

 

- 주요역할 

 . 데이터 변화에 따라서 view 컨텐츠를 업데이트

 . view들과 함께 사용자 상호작용에 응답

 . 화면하나를 관리하는 단위

 . view를 리사이징하고 전체적인 인터페이스의 레이아웃 관리

 . 다른 뷰컨트롤러들과 함께 앱을 구성

 

AutoLayout : 두 뷰 사이의 관계를 제약조건(Constraints)를 이용해 뷰의 위치를 지정하는 것

 . 아이폰 다양한 해상도의 비율에 대응하기 위한것

 . 세로보기, 가로보기까지 지원. 슬라이드와 같이 SE, mini, Pro화면에 맞게 일정하게

 . Storyboard에서 ViewController Scene 에서 볼수 있음

   사용자인터페이스를 시각적으로 표헌. 컨텐츠 화면과 화면간의 관계를 연결시켜주는 도구

   각 신은 뷰컨트롤러와 뷰를 뜻함. 여러화면을 스토리보드를 통해 만듬

   스토리보드 하단

 

 

Add New Constraint : 뷰간의 제약조건을 설정할 수 있는 메뉴

Trailing은 왼쪽, Leading은 오른쪽. 뷰의 너비와 높이 등 설정

 

 

Align : View 간의 정렬을 설정. 다른 뷰와의 가로세로 정렬 제약조건을 추가. 수직정렬, 수평정렬 추가가능

Resolve Auto Layout Issue : 제약조건 기준으로 뷰를 업데이트하거나, 캔버스안에 뷰의 현재위치를 통해 제약업데이트 가능. 누락된 제약 추가/삭제 추천제약 사용가능. 많이 사용하는 메뉴는 아님

 

 

#실습 

+ Recent posts