🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • Intro
  • 1960~2000년대의 IT시스템
  • 2000~2010년대의 IT시스템
  • 2010년 이후 IT시스템
  • 정리
  1. 배포
  2. DevOps

IT시스템의 변화와 DevOps

PreviousDevOpsNextDevOps 라이프사이클

Last updated 8 months ago

Intro

지난시간에는 DevOps라는 IT문화가 등장하게 된 배경에 대해서 설명했습니다. DevOps는 Agile에서 진화하여 개발팀과 IT운영팀이 하나로 협업하는 개발문화 , 프로세스등을 의미했습니다. 이번장에는 개발방식의 변화와 더불어 함께 바뀌게 된 IT시스템에 대하여 전반적으로 기술해 보도록 하겠습니다.

1960~2000년대의 IT시스템

개발 방식은 일반적으로 WaterFall방식이 대세였습니다. 소프트웨어 아키텍쳐는 Monolithic방식으로 설계하였구요.

Monolithic?

Monolithic한 어플리케이션은 배포가능한 모든 기능을 하나의 어플리케이션에 포함한 어플리케이션입니다.

어플리케이션 제작시 쉽게 시작할 수 잇는 형태이며 설계하는데 특별히 어렵지 않습니다. 다만 개발에 참여하는 개발자가 많을수록 코드베이스로의 통합이 어렵고, 어플리케이션의 복잡성이 올라 갈수록 유지보수가 어렵다는 단점이 있습니다.

이렇게 완성된 어플리케이션을 배포하기 위해 실제 하드웨어를 구매하여 물리서버(Physical Server)에 어플리케이션을 배포하였고, 이러한 물리서버는 회사에서 자체적으로 관리하는 데이터센터에 보관됩니다. 이렇게 회사에서 직접 IT인프라 소유하면서 운영하는 경우를 On-premise라고 부릅니다. 이시기의 대부분의 IT회사는 On-premise로 배포서버를 관리하였습니다.

2000~2010년대의 IT시스템

기존 IT시스템의 배포방식과 인프라의 한계를 극복하기 위해 가상화(Virtualization)기능이 발전했습니다.

일반적으로 IT회사의 입장에서 온프레미스 방식으로 어플리케이션을 서비스하는 것은 꽤나 부담되는 일입니다. 어플리케이션을 서비스하는데 필요한 금전적인 부담이 존재하기 때문이죠. 어플리케이션 서비스를 위한 물리서버 및 네트워크, 스토리지를 직접 구매하는 초기비용과 이를 유지하기 위한 유지비용은 서비스할 어플레케이션이 많을 수록 더욱 증가하게 됩니다. 따라서 회사는 새로운 서비스 배포에 조심스러웠습니다. 하지만 이러한 고민도 가상화기술로 인해 더 이상 불필요한 고민이 되었습니다. 가상화 기술은 하나의 물리서버의 리소스를 여러개로 쪼개어 여러 개의 가상서버를 설치하여 운용할 수 있게 하는 기술로 회사에서는 이제 하나의 컴퓨터로 여러 개의 서비스를 동시에 운용할 수 있게 된것입니다.

이렇게 하나의 물리서버에서 CPU,네트워크,스토리지 등을 분할하여 생성한 여러개의 서버를 가상서버(Virtual Server)라고 부릅니다. 가상서버의 등장으로 하나의 어플리케이션에서 모든 기능을 몰아두었던 기존의 Monolithic에서 벗어나 Tier별로 여러개의 서버에 기능을 분산 시켜 운용하는 N-Tier방식의 개발이 대세가 되었습니다.

2010년 이후 IT시스템

DevOps개발방법론이 대세가 되면서 각 어플리케이션은 MicroServices하게 제작되었습니다.

MicroService는 어플리케이션의 기능들을 잘게 쪼갠 형태의 아키텍쳐입니다. 각 기능들이 하나의 어플리케이션이 되며, 어플리케이션간에 통신이 필요한 경우 RestApi를 활용하여 통신을 하여 필요한 데이터를 얻어옵니다. 각 어플리케이션이 서로에게 끼치는 영향을 최소화 하도록 설계하였기 때문에 장애대응에 우수합니다.

다만 MicroServices같은 경우 기존 Hypervisor를 활용한 VM방식으로 배포하기에는 부적절 했습니다. VM은 물리서버의 리소스를 많이 잡아먹는다는 단점이 존재했기 때문인데요, 이를 해결하기 위한 방법으로 컨테이너 가상화 기술이 사용되었습니다.

기존 VM은 Host PC의 자원을 쪼개어 여러 개의 VM을 만드는 것이지만 컨테이너 가상화는 자원을 쪼개지 않고 공유해서 사용하며 컨테이너를 실행하기 위한 라이브러리와 파일만을 가지고 있습니다. 따라서 VM과 비교했을 때 훨씬 가벼우며 , 필요한 모든 파일이 각 컨테이너에 존재하기 때문에 인프라에 종속적이지 않습니다.

인프라에 종속적이지 않다는 것은 로컬환경에서 실행되는 컨테이너가 어떤 환경에서 실행되던 동일하게 실행됨을 보장할 수 있다는 것입니다.

정리

IT기술이 발전함에 따라 많은 어플리케이션들이 클라우드 가상화 환경에서 서비스 되고 있지만 무조건 클라우드환경이 좋은게 아닙니다. 항상 운영하고자하는 서비스와 현재 회사의 환경에 맞춰서 적절한 개발환경을 찾는 노력을 해주셔야합니다.

출처 :
https://www.oracle.com/kr/cloud/cloud-native/what-is-cloud-native/