Server(1-1)

msung99·2022년 9월 23일
0

Server

목록 보기
2/5

서버와 서비스

  • 서버(Server) : Serv + er => "서브" 정보를 제공한다는 의미
    • 정보를 제공하는 사업자가 사용하는 컴퓨터 또는 컴퓨터 위에 설치되어 있는 소프트웨어들

=> 즉, 클라이언트에게 네트워크를 통해 데이터, 서비스등을 제공하는 컴퓨터 소프트웨어 시스템들


클라이언트 - 서버 관계

  • 서버 = 서비스를 주는 객체
  • 클라이언트 = 서비스 및 데이터를 요청하는 주체
    • 표면적으로 웹브라우저인 크롬, 파이어폭스, 익스플로어를 웹 클라이언트라고 한다.

이때, 클라이언트와 서버는 역할에 따라 구분되기 때문에 같은 서버도 클라이언트가 될 수 있다.


서버의 동작 방식과 순서 (요청이 들어왔을 때 서비스가 어떻게 처리되는가?)

과정

1) 서버가 클라이어트로 부터 서비스, 데이터등을 요청(request) 를 받음
2) 우선 WS(Web Server) 에서 HTTP 메시지를 확인 후
3) 그에 맞는 데이터 처리를 한 후 response 를 클라이언트에게 보냄

=> - 이때 웹 서버 혼자 모든 데이터를 하기에는 한계가 있어서, WS 에서 처리할 수 없는 작업인 경우 WAS 에서 일을 나누어 처리

  • WS 가 WAS 한테 데이터 처리를 요청하면, WAS 는 동적인 페이지 처리를 담당하고, DB 에서 데이터 정보를 받아오는 역할을 수행

서버의 구조

1) Server Program

WS(웹 서버) : 클라이언트로 부터 request 를 받았을때 정적 컨텐츠를 제공

  • 종류 : 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 : 클라이언트 요청이 들어올때마다, 요청당 하나의 스레드가 처리하는 구조

    • 클라이언트 접속 시 마다 프로세스 또는 스레드를 생성하는 구조이기에, CPU/메모리 사용이 증가하고 프로세스/스레드 생성 비용이 드는 등 요청에 한계가 있다. => 과부하 위험성 o

DB, DBMS

  • SQL : 관계형 DB. 데이터간의 관계를 연결해서(foreign) 여러 테이블에 분산하는 형태의 DB (필요한 데이터를 join 해서 만들면 된다)

  • NOSQL : 비관계형 DB. 관계가 없이 관련 데이터를 동일한 컬렉션에 넣는다 (join 이 필요없이 이미 필요한 모든 것을 갖춘 문서형태)


로컬 호스트 (localhost)

요약 : 자신의 컴퓨터 주소
=> 자신의 컴퓨터 주소를 가리키는 방법 2가지 : 호스트이름(도메인) 으로 표현할 경우 localhost 이며, IP 주소를 나타낼 떄는 127.0.0.1 이다.

  • 127.0.0.1 : 자신의 컴퓨터를 가리키는 IP 주소

    • 자기 자신을 가리킨다고 해서 "루프백(loop back) 주소"라고도 불림
      (보내면 자기 자신에게로 돌아오기 때문)
  • 로컬 호스트(localhost) : 자신의 컴퓨터를 가리키는 호스트이름(hostname), 즉 도메인이다.

127.0.0.1 VS localhost (차이점)

  • 127.0.0.1 : IP 주소
  • localhost : 도메인

DNS : 일일히 IP 주소를 쳐야하는 수고를 덩어주기 위한 도메인 시스템


가상머신 (Virtual Machine)

  • 사용자가 동일한 한 컴퓨터에서 여러 운영체제를 동시에 실행할 수 있도록 하는 가상화 소프트웨어

Virtual Box

  • Virtual Box 는 Window OS 사용자를 위해 개발된 "무료" 가상화 소프트웨어이다.

  • 쉽게 말해, 컴퓨터 속의 컴퓨터를 사용할 수 있게 해주는 프로그램

VMware

  • 가상화 분야에서 유명한 서비스 제공업체중 하나. VM 은 가상머신을 의미

Linux, Ubuntu

리눅스 : 운영체제중 하나. 유닉스(Unix) 운영체제를 모델로 만들어짐

  • 장점 : 무료, 공개 운영체제(Open Software), 인터넷의 모든 기능을 지원, 강력한 보안 및 네트워크 구축이 가능

  • 단점 : 공개 운영체제이므로 문제 발생시 보상 받을 수 없다.

  • Linux 커널은 사용자를 위한 운영 체제 역할을 하는 다양한 배포판을 지원한다. (이러한 배포판 중 하나가 우분투)

Ubuntu (우분투)

  • 리눅스의 배포판 중 하나.
  • 배포판이란? : 리눅스에서 작동하는 여러 종류의 프로그램을 꾸러미 하나로 모아놓은 것을 말한다.

cf1) 우분투외에도 다양한 리눅스 배포판과 버전이 있음 (ex. 패도라, 데비안 )

정리

  • 리눅스는 커널(컴퓨터 자원 등을 관리하는 영역)을 기반으로 하는 시스템 소프트웨어이기 때문에 Windows, Max 운영 체제에 있는 소프트웨어, GUI같은 것이 없다.

  • 이러한 리눅스 커널을 가지고 사용자 맞춤 운영 체제로 커스터 마이징(배포판)해서 사용하고 재 배포 할 수 있다.

  • 그래서 리눅스는 운영 체제라기 보단 커널이고 이러한 리눅스 커널을 기반으로 운영 체제가 만들어 진 것이다. 그것이 배포판이다.

  • 조금 더 자세한 설명을 위해서는 먼저 컴퓨터 하드웨어와 운영 체제에 대한 깊은 이해가 필요해 보인다.

리눅스 명령어

  • pwd : 현재 작업중인 디렉토리 정보 출력
  • cd (change directory) : 경로 이동
  • ls (list) : 디렉토리 목록 확인
  • cp (copy) [원본 파일명][복사할 파일명]: 파일 혹은 디렉토리를 복사
  • mv (move) [파일/디렉토리 명]: 파일 혹은 디렉토리 이동
  • mkdir (make directory) [디렉토리 명]: 디렉토리 생성
  • rm (remove) [파일/디렉토리 명]: 파일이나 디렉토리를 삭제
  • touch [파일/디렉토리 명]: 0바이트 파일 생성, 파일의 날짜와 시간을 수정
  • cat (concatenate) : cat 명령은 활용 방법이 꽤나 다양함.
    • 파일의 내용을 화면에 출력
  • find : 특정 파일이나 디렉토리를 탐색
    • 형태 : find [검색경로] -name [파일명]

상세설명

  1. ls
  • ls -l : 파일의 상세정보
  • ls -a : 숨김 파일 표시
  • ls -t : 파일들을 생성시간 순(가장 최신것 부터) 으로 표시
  • ls -rt : 파일들을 생성시간 순 (가장 오래된 것부터) 으로 표시
  • ls -f : 파일 표시시 마지막 유형에 나타내는 파일명을 끝에 표시
  1. cd
  • cd ~ : 홈 디렉토리로 이동
  • cd / : 최상위 디렉토리로 이동
  • cd . : 현재 디렉토리
  • cd .. : 상위 디렉토리로 이동
  • cd - : 이전 경로로 이동
  1. touch
  • touch 파일명 : "파일명"의 파일을 생성
  • touch -c 파일명 : "파일명" 의 시간을 현재시간으로 갱신
  • touch -r 파일1 파일2 : 파일2의 날짜 정보를 파일1의 날짜 정보와 동일하게 변경
  1. mkdir
  • mkdir dirname : dirname 이라는 디렉토리 생성
  • mkdir dir1 dir2 : 한번에 여러 개의 디렉토리 생성
  • mkdir -p dirname/sub_dirname : dirname 이라는 디렉토리 생성과 동시에 sub_dirname 이라는 하위 디렉토리도 생성
  1. cp (copy)
  • cp file1 file2 : file1 을 file2 라는 이름으로 복사
  • cp -f file1 file2 : 강제 복사 (file2 라는 파일이 이미 있을경우, 강제로 기존 file2를 지우고 복사진행)
  • cp -r dir1 dir2 : 디렉토리 복사. 폴더안의 모든 하위 경로와 파일들을 복사
  1. mv (move)
  • mv file1 file2 : file1 파일을 file2 파일로 변경
  • mv file1/dir : 파일을 dir 디렉토리로 이동
  • mv file1 file2 /dir : 여러개의 파일을 dir 디렉토리로 이동
  • mv /dir1 /dir2 : dir1 디렉토리르 dir2 디렉토리로 이름 변경
  1. rm (remove)
  • rm file1 : file1 을 삭제
  • rm -f file1 : file1 을 강제삭제
  • rm -r dir : 디렉토리 삭제 (디렉토리는 -r 옵션없이 삭제 불가)
  1. cat (Catenate)
  • cat file1 : file1 의 내용을 출력
  • cat file1 file2 : file1 과 file2 의 내용을 페이지별로 출력
  • cat file1 file2 | more : file1 과 file2 의 내용을 페이지별로 출력
  • cat file1 file2 | head : file1 과 file2 의 내용을 처음부터 10번쨰 줄까지만 출력
  • cat file1 file2 | tail : file1 과 fiile2 의 내용을 끝에서부터 10번째 줄까지만 출력
  1. redirection ('>', '>>') : 화면의 출력 결과를 파일로 저장

'>' 기호 : 기존에 있는 파일 내용을 지우고 저장
'>>' 기호 : 기존 파일 내용 뒤에 덧붙여서 저장
'<' 기호 : 파일의 데이터를 명령어 입력

  • cat file1 file2 > file3 : file1, file2 의 명령 결과를 합쳐서 file3 라는 파일에 저장
  • cat file4 >> file3 : file3 에 file4 의 내용을 추가
  • cat < file1 : file1 의 결과 출력
  • cat < file1 > file2 : file1 의 출력 결과를 file2 에 저장
  1. alias : 자주 사용하는 명령어들을 별명으로 정의하여 쉽게 사용할 수 있도록 설정
  • 형태 : alias 별명 = '명령어 정의'

    ex) alias lsa = 'ls-a' : lsa 를 실행하면 -a 옵션을 갖는 ls 를 실행한다.

  • unalias lsa : lsa 라는 alias 별명을 해제


리눅스 디렉토리 구조

리눅스 vs 윈도우 (디렉토리 구조 비교)

  • 디렉토리 구분시 :디렉로리를 구분할떄 리눅스는 '/'(슬래쉬) 로, 윈도우는 '\'(역슬래쉬)를 사용
  • 디렉토리 명칭 : 리눅스는 디렉토리(directory), 윈도우는 폴더(folder) 라고 부름

리눅스의 파일 시스템 구조

  • 리눅스의 디렉토리 (파일 시스템 구조)는 윈도우와 달리 "트리(tree) " 구조를 이룬다.
  • 명령어의 종류와 성격, 사용권한등에 따라 각각의 디렉토리로 구분됨
  • 리눅스 배포판들은 "리눅스 파일시스템 표준" 인 FSSTND(Linux File System Standard) 라는 표준을 준수하므로, 대부분의 배포판들은 그 기본 골격이 같다.

핵심 디렉토리

  • /(루트) : 최상위 디렉토리 (리눅스의 모든 디렉토리들의 시작점)

  • /root : 시스템 최고관리자인 root 사용자의 개인 홈디렉토리

  • /home : 사용자의 홈 디렉토리 useradd 명령어로 새로운 사용자를 생성하면 대부분 사용자의 ID 와 동일한 이름의 디렉토리가 자동으로 생성됨

  • /bin : 기본적인 명령어(ex. mv, cp, rm) 가 저장된 디렉토리

  • /usr : 시스템이 아닌 일반사용자들이 주로 사용하는 디렉토리

    • /usr/bin : 일반 사용자들이 사용가능한 명령어 파일들이 존재하는 디렉토리
  • /boot : 리눅스 부트로더(boot loader) 가 존자하는 디렉토리

  • /dev : 시스템 디바이스(device) 를 저장하고 있는 디렉토리

  • /etc : 시스템의 거의 모든 설정파일이 존재하는 디렉토리

  • /lib : 커널모듈파일과 라이브러리파일

  • /tmp : 일명 "공용디렉토리". 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리.
    mysql.sock 등과 같은 소켓파일, 아파치에서 사용하는 세션파일등이 생성되기도 한다.


vi(vim) 편집기 사용법

아래 블로거님의 자료를 많이 참고했다.

https://iamfreeman.tistory.com/entry/vi-vim-%ED%8E%B8%EC%A7%91%EA%B8%B0-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC-%EB%8B%A8%EC%B6%95%ED%82%A4-%EB%AA%A8%EC%9D%8C-%EB%AA%A9%EB%A1%9D

내가 Ubuntu 에서 APM 환경 셋팅시에 주로 사용했던 vi / vim 명령어들

1) vi {파일명} : 파일열기 작성
2) esc : 종료
3) i : 커서 왼쪽에 문자 삽입
4) x : 커서가 있는 문자 삭제
5) :w : 변경사항 저장
6) :wq : 변경사항 저장 후 vi 종료. 기록(w) 와 종료(q) 를 동시에 수행
7) :q! : 변경사항을 저장하지 않고 종료


(출처 : 위 블로거님)


패키지 설치와 컴파일 설치

  • 패키지 설치 : 어플리케이션을 설치시 복잡한 과정을 거쳐야하는 경우, 필요한 프로그램들을 대신 편하게 설치해주는 프로그램. ex) bitnami

  • 컴파일 설치 : 반대로 복잡한 과정을 수동으로 필요한 프로그램들을 설치하는 과정


APM

  1. 클라이언트가 URL 을 입력해서 원하는 정보를 서버에 요청
  2. 서버의 아파치 프로그램은 승인
  3. 사용자가 로그인 요청이나 다른 정보를 요청하면 PHP 스크립트 수행
  4. MYSQL 에 쿼리 질의
  5. MYSQL 은 저장된 데이터를 DB 에서 가져와 가져온 데이터와 PHP 코드를 모두 HTML 로 변경하고
  6. 해당 HTML 을 아파치에 전송
  7. 아파치는 완성된 HTML 파일을 클라이언트 측의 컴퓨터 웹 브라우저에 전달한다.
profile
어제보다 보람찬 하루가 되기를!

0개의 댓글