클라우드 1일차

soso·2024년 6월 10일

클라우드 부트캠프

목록 보기
1/77

Computing Paradigm의 변천과 Web 기술의 발전

IT 기술은 개발자 편의성을 위주로 발전

1950년대 ~ 60년대 : 초기 컴퓨팅

1970년대 : 절차중심적 프로그래밍(Cobol, Fortan, C, ...)

1980년대 : 정보공학기법(DBMS)

1990년대 : 객체지향기법(Reuse)

  • 객체란 프로그래밍에서 재사용을 위한 단위
  • 기능 단위로 객체 재사용

2000년대 : CBD(Component-Based Development) 기법(Java)

  • 그 전의 객체지향기법을 계승하며 기능 단위의 모듈을 컴포넌트 단위 기반으로 구성하고 관리

2005년대 : Framework 기반 기법

  • 웹클라이언트 + 웹서버 = Framework 기반 기법

  • CBD vs Framework
    객체지향을 이어가는 기법(기능위주) vs 버전을 쉽게 제공받기 위한 기법(비기능위주)

2010년대 : 함수형 프로그래밍(Functional Programming) 기법

  • 기능 위주 : 함수형 프로그래밍은 프로그램의 상태나 데이터를 변경하지 않고 순수 함수를 사용하여 연산을 수행. 이는 데이터 변경을 최소화하고 부작용을 피함

객체지향기법 vs 함수형 프로그래밍

  • 객체지향기법

    • 클래스(또는 객체, Object)가 일급 객체

    • 데이터 위주 : 객체라는 단위로 데이터를 캡슐화, 객체 간의 상호작용을 통해 프로그램을 구성

    • 재사용성 : 모듈화된 객체를 재사용하여 유지보수성을 높임. 독립성이 높을수록 재사용성이 증가

    • 복잡성 : 대규모 시스템에서는 객체 간의 상호작용이 복잡해질 수 있으며, 재사용성을 높이는 데 어려움이 있음

    • 엔터프라이즈 시스템에 적합 : 복잡하고 큰 규모의 시스템에서 주로 사용

  • 함수형 프로그래밍

    • 함수 자체가 일급 객체

    • 기능 위주 : 연산을 함수로 정의하고, 함수를 조합하여 프로그램을 작성

    • 함수 중심 : 함수는 불변의 상태로 동작하며, 입력이 같으면 항상 같은 출력을 반환

    • 상태 변환 없음 : 프로그램 상태를 변경하지 않고, 데이터 불변성을 유지

    • 빠르고 가볍게 개발 : 함수형 프로그래밍은 코드의 간결함과 가독성을 중시하여 빠르고 쉽게 개발할 수 있음

일급 객체란

  • 일급 객체는 다른 객체들과 동일하게 다룰 수 있는 요소

  • 변수를 할당, 데이터 구조에 저장, 함수의 인자 및 반환 값으로 사용, 익명으로 정의 등의 작업이 가능

  • 프로그래밍 언어의 유연성과 표현력을 높이며, 함수형 프로그래밍 패러다임에서 특히 중요한 개념

기술 및 언어

Python

  • 메모리 관리: Python은 객체지향적인 방식으로 메모리를 관리

  • 개발 방식: Python을 사용할 때는 객체지향적으로 메모리를 관리하더라도, 실제 개발에서는 함수형 프로그래밍 기법을 자주 사용

JavaScript

  • 빠르고 쉽게 개발: JavaScript는 가벼운 언어로, 빠르고 쉽게 개발할 수 있음

  • 웹브라우저 환경: JavaScript는 주로 웹브라우저에서 동작하며, 클라이언트 측의 스크립트 언어로 사용

  • Web Server 개발자 수 보다 많은 Web Client 개발자가 JavaScript를 이용해 서버에서 개발하기 위해 node.js를 사용

구조적 측면

1. 메인 프레임과 주변 프레임의 분리

  • Desktop의 시대

    • 데이터와 프로그램을 원하는 대로 적재

    • 컴퓨터 사양이 부족할 때 크거나 공유해야 할 데이터를 관리

2. 네트워크 시대의 도래

  • 개발자 단체의 활성화

    • 일을 적게 하기 위한 표준 기술 도입

    • 클라이언트와 서버 간의 요청과 응답 규격 표준화

    • 표준 프로토콜 : SMTP, Telnet, FTP, HTTP, ...

    • HTTP가 가장 선호됨 : 텍스트 기반(하지만 컴퓨터가 처리하기 힘듦, 성능, 메모리 측면)

3. HTTP의 특징

  • 멀티 유저 수용 : 다양한 사용자 지원

  • 하드웨어/OS 독립성 : 특정 벤더나 시스템에 종속되지 않음

  • 웹 서버 운영

    • 웹 서버(httpd)를 가동하면 포트가 열림(기본 포트 : 80)

    • 특정 텍스트 코드(html, css, js)를 요청하면 결과 반환

    • 웹 브라우저의 결과를 따라야 함

  • 웹 브라우저

    • 클라이언트 측에서 접속

    • 3개의 해석기 : HTML, CSS, JS

    • 주소를 통해 자원의 위치와 이름을 요청

  • HTTP의 제한

    • 한번의 요청과 응답만 가능(일회용)

    • 소켓 통신 : 연결한 쪽에서 연결을 끊어야 다른 쪽도 끊김

    • 클라이언트 하나당 소켓 하나 생성 : 많은 클라이언트 동시 접속 시 자원 소모

4. 웹 사이트 서비스 유형

  1. 정적 서비스
  • 웹 사이트 : 정적인 콘텐츠 제공

  • 특징 : 요청을 했다는 것 외에 다른 클라이언트의 요청 상태를 알 수 없음

  1. 동적 서비스
  • CGI(Common Gateway Interface)

    • 웹 서버 위에서 동작하는 프로그램 언어

    • 클라이언트 요청 시 메모리 할당 > 프로세스 생성

    • 요청한 클라이언트당 하나의 프로세스 생성 : 자원 문제 발생

  1. CGI의 문제 해결
  • 메모리 공유 문제 : 요청당 하나의 프로세스 처리

  • Thread 기반 API

    • 자원 공유 가능

    • OS와 하드웨어 제어 필요 > 개발자 불편

    • Thread 기반 API 개발 : 플랫폼 종속적 문제 발생

  • Java의 등장

    • Thread 독립적 언어 요구

    • Sun Microsystems의 제임스 고슬링이 Oak 언어 개발

    • 그 후 웹 시대에서 Java로 문제 해결

0개의 댓글