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) 기법
객체지향기법
클래스(또는 객체, Object)가 일급 객체
데이터 위주 : 객체라는 단위로 데이터를 캡슐화, 객체 간의 상호작용을 통해 프로그램을 구성
재사용성 : 모듈화된 객체를 재사용하여 유지보수성을 높임. 독립성이 높을수록 재사용성이 증가
복잡성 : 대규모 시스템에서는 객체 간의 상호작용이 복잡해질 수 있으며, 재사용성을 높이는 데 어려움이 있음
엔터프라이즈 시스템에 적합 : 복잡하고 큰 규모의 시스템에서 주로 사용
함수형 프로그래밍
함수 자체가 일급 객체
기능 위주 : 연산을 함수로 정의하고, 함수를 조합하여 프로그램을 작성
함수 중심 : 함수는 불변의 상태로 동작하며, 입력이 같으면 항상 같은 출력을 반환
상태 변환 없음 : 프로그램 상태를 변경하지 않고, 데이터 불변성을 유지
빠르고 가볍게 개발 : 함수형 프로그래밍은 코드의 간결함과 가독성을 중시하여 빠르고 쉽게 개발할 수 있음
일급 객체는 다른 객체들과 동일하게 다룰 수 있는 요소
변수를 할당, 데이터 구조에 저장, 함수의 인자 및 반환 값으로 사용, 익명으로 정의 등의 작업이 가능
프로그래밍 언어의 유연성과 표현력을 높이며, 함수형 프로그래밍 패러다임에서 특히 중요한 개념
메모리 관리: Python은 객체지향적인 방식으로 메모리를 관리
개발 방식: Python을 사용할 때는 객체지향적으로 메모리를 관리하더라도, 실제 개발에서는 함수형 프로그래밍 기법을 자주 사용
빠르고 쉽게 개발: JavaScript는 가벼운 언어로, 빠르고 쉽게 개발할 수 있음
웹브라우저 환경: JavaScript는 주로 웹브라우저에서 동작하며, 클라이언트 측의 스크립트 언어로 사용
Web Server 개발자 수 보다 많은 Web Client 개발자가 JavaScript를 이용해 서버에서 개발하기 위해 node.js를 사용
Desktop의 시대
데이터와 프로그램을 원하는 대로 적재
컴퓨터 사양이 부족할 때 크거나 공유해야 할 데이터를 관리
개발자 단체의 활성화
일을 적게 하기 위한 표준 기술 도입
클라이언트와 서버 간의 요청과 응답 규격 표준화
표준 프로토콜 : SMTP, Telnet, FTP, HTTP, ...
HTTP가 가장 선호됨 : 텍스트 기반(하지만 컴퓨터가 처리하기 힘듦, 성능, 메모리 측면)
멀티 유저 수용 : 다양한 사용자 지원
하드웨어/OS 독립성 : 특정 벤더나 시스템에 종속되지 않음
웹 서버 운영
웹 서버(httpd)를 가동하면 포트가 열림(기본 포트 : 80)
특정 텍스트 코드(html, css, js)를 요청하면 결과 반환
웹 브라우저의 결과를 따라야 함
웹 브라우저
클라이언트 측에서 접속
3개의 해석기 : HTML, CSS, JS
주소를 통해 자원의 위치와 이름을 요청
HTTP의 제한
한번의 요청과 응답만 가능(일회용)
소켓 통신 : 연결한 쪽에서 연결을 끊어야 다른 쪽도 끊김
클라이언트 하나당 소켓 하나 생성 : 많은 클라이언트 동시 접속 시 자원 소모
웹 사이트 : 정적인 콘텐츠 제공
특징 : 요청을 했다는 것 외에 다른 클라이언트의 요청 상태를 알 수 없음
CGI(Common Gateway Interface)
웹 서버 위에서 동작하는 프로그램 언어
클라이언트 요청 시 메모리 할당 > 프로세스 생성
요청한 클라이언트당 하나의 프로세스 생성 : 자원 문제 발생
메모리 공유 문제 : 요청당 하나의 프로세스 처리
Thread 기반 API
자원 공유 가능
OS와 하드웨어 제어 필요 > 개발자 불편
Thread 기반 API 개발 : 플랫폼 종속적 문제 발생
Java의 등장
Thread 독립적 언어 요구
Sun Microsystems의 제임스 고슬링이 Oak 언어 개발
그 후 웹 시대에서 Java로 문제 해결