=> 즉, 클라이언트에게 네트워크를 통해 데이터, 서비스등을 제공하는 컴퓨터 소프트웨어 시스템들
이때, 클라이언트와 서버는 역할에 따라 구분되기 때문에 같은 서버도 클라이언트가 될 수 있다.
1) 서버가 클라이어트로 부터 서비스, 데이터등을 요청(request) 를 받음
2) 우선 WS(Web Server) 에서 HTTP 메시지를 확인 후
3) 그에 맞는 데이터 처리를 한 후 response 를 클라이언트에게 보냄
=> - 이때 웹 서버 혼자 모든 데이터를 하기에는 한계가 있어서, WS 에서 처리할 수 없는 작업인 경우 WAS 에서 일을 나누어 처리
종류 : Nginx, Apache
Nginx : 한개 or 고정된 프로세스만 생성해서 여러 요청을 비동기 방식으로 처리하는 방식
C10K 문제점을 해결하기 위해 만들어진 WS 소프트웨어
(C10K 란? : 한 시스템에 동시 접속자 수가 1만명이 넘어갈 때 효율적 방안)
한 개 또는 고정된 프로세스만 생성하고, 여러 개의 Connection을 모두 Event-Handler를 통해 비동기 방식으로 처리한다.
Context Switching : OS가 A작업을 진행할 때 A스레드의 Context를 읽어오며, B스레드로 전환 할 때 A스레드의 Context를 저장하고 B스레드의 Context를 읽어오는 일련의 반복을 수행.
스레드의 갯수가 많아질 수록 context swiching 작업은 더 빈번하게 일어나고, 이 때문에 성능이 저하될 수 있음.
Apache : 클라이언트 요청이 들어올때마다, 요청당 하나의 스레드가 처리하는 구조
SQL : 관계형 DB. 데이터간의 관계를 연결해서(foreign) 여러 테이블에 분산하는 형태의 DB (필요한 데이터를 join 해서 만들면 된다)
NOSQL : 비관계형 DB. 관계가 없이 관련 데이터를 동일한 컬렉션에 넣는다 (join 이 필요없이 이미 필요한 모든 것을 갖춘 문서형태)
요약 : 자신의 컴퓨터 주소
=> 자신의 컴퓨터 주소를 가리키는 방법 2가지 : 호스트이름(도메인) 으로 표현할 경우 localhost 이며, IP 주소를 나타낼 떄는 127.0.0.1 이다.
127.0.0.1 : 자신의 컴퓨터를 가리키는 IP 주소
127.0.0.1 VS localhost (차이점)
- 127.0.0.1 : IP 주소
- localhost : 도메인
DNS : 일일히 IP 주소를 쳐야하는 수고를 덩어주기 위한 도메인 시스템
Virtual Box 는 Window OS 사용자를 위해 개발된 "무료" 가상화 소프트웨어이다.
쉽게 말해, 컴퓨터 속의 컴퓨터를 사용할 수 있게 해주는 프로그램
장점 : 무료, 공개 운영체제(Open Software), 인터넷의 모든 기능을 지원, 강력한 보안 및 네트워크 구축이 가능
단점 : 공개 운영체제이므로 문제 발생시 보상 받을 수 없다.
Linux 커널은 사용자를 위한 운영 체제 역할을 하는 다양한 배포판을 지원한다. (이러한 배포판 중 하나가 우분투)
cf1) 우분투외에도 다양한 리눅스 배포판과 버전이 있음 (ex. 패도라, 데비안 )
정리
- 리눅스는 커널(컴퓨터 자원 등을 관리하는 영역)을 기반으로 하는 시스템 소프트웨어이기 때문에 Windows, Max 운영 체제에 있는 소프트웨어, GUI같은 것이 없다.
- 이러한 리눅스 커널을 가지고 사용자 맞춤 운영 체제로 커스터 마이징(배포판)해서 사용하고 재 배포 할 수 있다.
- 그래서 리눅스는 운영 체제라기 보단 커널이고 이러한 리눅스 커널을 기반으로 운영 체제가 만들어 진 것이다. 그것이 배포판이다.
- 조금 더 자세한 설명을 위해서는 먼저 컴퓨터 하드웨어와 운영 체제에 대한 깊은 이해가 필요해 보인다.
'>' 기호 : 기존에 있는 파일 내용을 지우고 저장
'>>' 기호 : 기존 파일 내용 뒤에 덧붙여서 저장
'<' 기호 : 파일의 데이터를 명령어 입력
형태 : alias 별명 = '명령어 정의'
ex) alias lsa = 'ls-a' : lsa 를 실행하면 -a 옵션을 갖는 ls 를 실행한다.
unalias lsa : lsa 라는 alias 별명을 해제
/(루트) : 최상위 디렉토리 (리눅스의 모든 디렉토리들의 시작점)
/root : 시스템 최고관리자인 root 사용자의 개인 홈디렉토리
/home : 사용자의 홈 디렉토리 useradd 명령어로 새로운 사용자를 생성하면 대부분 사용자의 ID 와 동일한 이름의 디렉토리가 자동으로 생성됨
/bin : 기본적인 명령어(ex. mv, cp, rm) 가 저장된 디렉토리
/usr : 시스템이 아닌 일반사용자들이 주로 사용하는 디렉토리
/boot : 리눅스 부트로더(boot loader) 가 존자하는 디렉토리
/dev : 시스템 디바이스(device) 를 저장하고 있는 디렉토리
/etc : 시스템의 거의 모든 설정파일이 존재하는 디렉토리
/lib : 커널모듈파일과 라이브러리파일
/tmp : 일명 "공용디렉토리". 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리.
mysql.sock 등과 같은 소켓파일, 아파치에서 사용하는 세션파일등이 생성되기도 한다.
아래 블로거님의 자료를 많이 참고했다.
내가 Ubuntu 에서 APM 환경 셋팅시에 주로 사용했던 vi / vim 명령어들
1) vi {파일명} : 파일열기 작성
2) esc : 종료
3) i : 커서 왼쪽에 문자 삽입
4) x : 커서가 있는 문자 삭제
5) :w : 변경사항 저장
6) :wq : 변경사항 저장 후 vi 종료. 기록(w) 와 종료(q) 를 동시에 수행
7) :q! : 변경사항을 저장하지 않고 종료
(출처 : 위 블로거님)
패키지 설치 : 어플리케이션을 설치시 복잡한 과정을 거쳐야하는 경우, 필요한 프로그램들을 대신 편하게 설치해주는 프로그램. ex) bitnami
컴파일 설치 : 반대로 복잡한 과정을 수동으로 필요한 프로그램들을 설치하는 과정