[Network] 네트워크 기초 - 인터넷 기반 네트워크 입문 및 L2 핵심
·
Network
인터넷 기반 네트워크 입문User mode & Kernel Mode 그리고 OSI 7 LayerUser Mode & Kernel Mode뜬금없이 운영체제의 User mode와 Kernel Mode가 나와서 당황할 수도 있지만, 이는 네트워크 이론을 이해하는 데에 중요한 개념이다.User mode와 Kernel Mode에 대해서 자세히 설명하지는 않곘지만, 간단히만 설명하자면, 컴퓨터는 S/W와 H/W로 나뉘며, S/W는 또 운영체제(OS)라 불리는 System S/W와 유저가 사용하는 Application으로 나뉜다. Application은 User mode에서 동작하며, System call을 통해 운영체제와 상호작용하여 H/W에 접근할 수 있다. 즉, 컴퓨터는 User Mode / Kernel Mod..
[Jenkins] 기본적인 Jenkins - Spring Boot CI/CD 프로세스
·
DevOps
이전 시간에 이어 가벼운 실습을 진행해보려고 한다. 위 이미지와 같은 아주 기본적인 프로세스를 Jenkins Pipeline을 통해 구성해볼 것이다. Spring Boot가 실행되는 컨테이너를 DinD 환경으로 구성하면 더 좋았을 것 같으나... 애플 실리콘 칩과 도커의 호환 문제인지 모르겠지만 자꾸 이상한 에러가 발생해서 그냥 단순 가상환경에서 도커 없이 jdk로만 서버 애플리케이션을 실행하는 것으로 구성해보았다.그럼 거두절미하고 바로 시작해보자!도커 컨테이너 준비시작하기 전에 배포 연습을 할 스프링부트 프로젝트를 아무거나 깃허브에 올려두자!가상 서버 도커 컨테이너 준비 (CentOS 8 + Openjdk 17.0.2)도커 이미지 pull & 컨테이너 실행docker run --privileged --..
[Jenkins] CI/CD와 Jenkins
·
DevOps
CI/CD란?CI/CD는 개발자 및 팀에 의해서 개발된 결과물에 대해 지속적인 통합과 지속적인 배포를 하는 프로세스를 말한다.CI/CD는 개발된 애플리케이션을 통합하고 빌드, 테스트, 배포에 이르기까지 전 과정에 대한 자동화 처리를 담당하게 된다.CI(Continuous Integration) = 지속적인 통합작업된 코드의 컴파일, 테스트, 패키징 작업의 자동화를 의미한다가끔 배포하는 것이 아닌, 지속적으로 작은 단위로 계속해서 배포해야 함을 강조개발 생산성 향상, 빠른 문제 발견 및 수정, 코드 품질 향상(테스트 필수)CD(Continuous Delivery / Deployment)CI에 의해 패키지된 결과물을 검증하고 다시 개발 서버, 테스트 서버 또는 운영 서버로 배포하는 작업을 한다.최종 배포를 ..
[Nginx] Nginx와 로드밸런싱
·
DevOps
웹서버(Web Server)란?웹 서버(web server)는 HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램을 말한다. 주된 기능은 콘텐츠를 제공하는 것이지만, 클라이언트로부터 콘텐츠를 전달받는 것도 웹 서버의 기능에 속한다. 이러한 기능은 파일 업로드를 포함하여 클라이언트에서 웹 폼을 수신하기 위해 사용된다. 웹서버의 종류로는 Apache, NGINX, IIS, GWS 등이 있다. 웹서버가 꼭 필요한 것은 아니다. 단순히 Client와 WAS만으로도 상호작용하는데 문제가 없으며, 웹 서버 없이 배포된 서비스도 매우 많다. 그럼에도 불구하고 웹 서버를 사용하는 이유는 무엇일까? 그것은 웹 서버가 제공해주는 다양한 기능들이 ..
[Design Pattern] Structural Pattern
·
ETC
디자인 패턴 시리즈의 마지막으로 구조 패턴(Structural Pattern)에 대해 알아보자. 구조 패턴이란 클래스와 객체를 더 큰 구조로 만들 수 있게 구성을 사용하는 패턴이다. 구조 패턴의 종류는 다음과 같다.프록시 패턴(Proxy Pattern)어댑터 패턴(Adapter Pattern)데코레이터 패턴(Decorator Pattern)파사드 패턴(Facade Pattern)경량 패턴(Flyweight Pattern)복합체 패턴(Composite Pattern)브릿지 패턴(Bridge Pattern)프록시 패턴(Proxy Pattern): 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 구조 패턴프록시(Proxy): 대리자클라이언트가 대상 객체를 직접 사용하는게 아니라 중간에 프록..
[Design Pattern] Behavioral Pattern(행동 패턴) - 2
·
ETC
저번 포스팅에 이어 디자인 패턴 중 행동 패턴에 대해 계속해서 알아보도록 하자!종류책임 연쇄 패턴(Chain of responsibility Pattern)템플릿 메서드 패턴(Template Method Pattern)전략 패턴(Strategy Pattern)상태 패턴(State Pattern)커맨드 패턴(Command Pattern)인터프리터 패턴(Interpreter Pattern)반복자 패턴(Iterator Pattern)옵저버 패턴(Observer Pattern)방문자 패턴(Visitor Pattern)중재자 패턴(Mediator Pattern)기념품 패턴(Memento Pattern)그럼 인터프리터 패턴부터 시작하겠다!인터프리터 패턴(Interpreter Pattern): 인터프리터 패턴은 문법..
[Design Pattern] Behavioral Pattern(행동 패턴) - 1
·
ETC
행동 패턴(Behavioral Pattern)은 클래스와 객체들이 상호작용하는 방법과 역할을 분담하는 방법을 다루는 패턴이다.종류책임 연쇄 패턴(Chain of responsibility Pattern)템플릿 메서드 패턴(Template Method Pattern)전략 패턴(Strategy Pattern)상태 패턴(State Pattern)커맨드 패턴(Command Pattern)인터프리터 패턴(Interpreter Pattern)반복자 패턴(Iterator Pattern)옵저버 패턴(Observer Pattern)방문자 패턴(Visitor Pattern)중재자 패턴(Mediator Pattern)기념품 패턴(Memento Pattern)이번 포스팅에서는 책임 연쇄 패턴 ~ 커맨드 패턴까지 다뤄보고, 다..
[Design Pattern] Creational Pattern
·
ETC
Creational Pattern(생성 패턴)이란 객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가 생성해야 하는 객체 인스턴스 사이의 연결을 끊어 주는 패턴이다. 그 종류에는 싱글턴, 추상 팩토리, 팩토리 메소드, 프로토 타입, 빌더가 있다.싱글턴 패턴(Singleton Pattern)특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해주는 패턴싱글턴 패턴을 사용하면 전역 변수를 사용할 때와 마찬가지로 객체 인스턴스를 어디서든지 액세스 할 수 있게 만들 수 있다클래스 인스턴스를 하나만 만들고 그 인스턴스로의 전역 접근을 제공한다보통 싱글턴 클래스가 속성으로 인스턴스를 가지고, getInstance()라는 메서드를 제공하여 접근을 허용한다.요구사항 예제개발 중인 시스템에서 스피커에 접근할 ..
[Kubernetes] 네트워크
·
DevOps
외부 - Pod 통신 by ServiceService 객체는 Pod의 디폴트 내부 IP 대신, 변경되지 않는 안정적인 IP를 제공해준다⇒ 외부에서 Pod로의 접근을 가능하게 해준다ClusterIP(기본값)Pod들이 클러스터 내부의 다른 리소스들과 통신할 수 있도록 해주는 가상의 클러스터 전용 IP클러스터 내부에서만의 통신을 가능하게 하며, 로드밸런싱을 제공해준다.클러스터 외부에서는 통신이 불가능하다NodePort클러스터 외부에서 서비스에 접근할 수 있도록, 각 워커 노드의 특정 포트를 개방한다.클러스터 내부로 들어온 트래픽을 특정 Pod로 연결하기 위한 ClusterIP 역시 자동으로 생성해준다⇒ NodePort는 ClusterIP의 기능을 기본으로 포함한다Service가 생성되면 쿠버네티스는 30000..
[Kubernetes] 볼륨 & 환경 변수
·
DevOps
우리는 애플리케이션에서 생성되어 계속해서 사용되기 위해 손실되어서는 안되는 데이터들을 보통 데이터베이스 혹은 파일에 저장한다. 이러한 데이터는 컨테이너가 재시작 후에도 살아남아있어야 하는데, 이를 위해 존재하는 것이 '볼륨(Volume)'이다. 쿠버네티스를 사용할 때, 컨테이너를 실행하는 주체는 우리가 아니라 쿠버네티스이다. 우리는 docker run이나 docker-compose와 같은 명령을 실행하지 않는다. 즉, 이전까지 사용했던 '-v' 플래그 등을 통한 볼륨 추가는 사용할 수 없다. 그 대신, 컨테이너에 볼륨을 추가할 수 있도록, 쿠버네티스를 구성해야 한다.Kubernetes 볼륨쿠버네티스는 컨테이너 안에 볼륨을 마운트 시킬 수 있다.ex) deployment.yml과 같은 구성 파일을 작성할 ..