학습 목표
서버의 정의와 역할을 이해한다.
서버의 구성요소과 각 요소와의 관계를 이해한다.
서버가 어떻게 구축되는지 이해한다.
서버와 관련된 개념들을 이해한다.
실습
1️⃣ 실습1. 비트나미를 통해 본인의 컴퓨터에 서버(APM) 구축해보기
2️⃣ (과제) 실습2. 리눅스 개발환경 위에 APM 패키지 설치로 서버 구축해보기
과제의 목적
서버 개발자의 개발환경(CLI)인 리눅스에 익숙해지기 위함. (리눅스 명령어, APM과 관련된 리눅스 파일구조 파악)
문제해결하는 방법에 대해 터득하는 것 (구글링, 공식문서, 블로그를 활용하여 원하는 것을 만들어본다.)
📝 실습 체크리스트
[x] 실습 1. 비트나미를 통해 본인의 컴퓨터에 서버(APM) 구축해보기
x 실습2. 리눅스 개발환경 위에 APM 패키지 설치로 서버 구축해보기
[v] 실습 영상 시청
[v] Ubuntu(Linux) 운영체제 구축
[v] Virtual Machine(Virtual Box) 설치(M1 Mac의 경우 페럴리즈, VMware로 진행하기)
[v] Ubuntu 설치
[v] VM(가상머신)위에 Ubuntu(Linux) 운영체제 구축
[v] APM 패키지 설치("ubuntu 20.04(18.04) apm 패키지 설치" 으로 구글링)
[v] apache 설치: Apache2 Ubuntu Default Page( or It Works page) 확인하기
[v] mysql 설치: mysql 명령어 사용하기
[v] php 설치: phpinfo() page 확인하기
[v] php를 apache와 mysql과 연결
[v] phpinfo 페이지 만들기(vi/vim 사용)
[ ] 리눅스 명령어 숙지하기
[ ] 파일 편집기(vi/vim) 숙지하기
[ ] 파일구조 확인해보기 - 각 폴더는 어떠한 역할을 하는가?, 어떤 경로에 파일을 만들어여 보여지는가?
[ ] 챌린지(선택): APM 수동(컴파일, 소스) 설치("ubuntu 20.04(18.04) apm 컴파일 설치" 으로 구글링) (Apache까지만 해도 됩니다!)(사전 필수 요소들은 패키지 설치로 진행해주세요.)
🔥 트러블 슈팅(실패한 경험도 성장을 위한 경험!)
트러블 슈팅 양식
[ 문제 원인 ]linux에서 경로이동중 home경로로 이동하였다.
[ 해결 방안 ]구글링을 통해 다시 ~Desktop화면으로 이동한 후, 다음작업들을 실행하였더니 성공하였다.
[ 참고 자료 ]
블로그 https://namneul.tistory.com/9
트러블 슈팅 양식
[ 문제 원인 ]실습영상 뒷부분의 vim편집기 안에서 작업 실행 후 저장이 안되어서 찾아보니, 권한이 없는 경우 이러한 에러 E212가 발생한다고 하였다.
[ 해결 방안 ]
구글링을 통해 해당 경로 디렉토리에 권한 을 부여하는 “sudo chown”명령어를 찾아 실행하였다.
[ 참고 자료 ]
블로그 http://hisjournal.net/blog/209
핵심 개념 키워드
서버와 서비스
서버란 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램 또는 장치를 의미한다. 그리고 서비스란 판매를 위해 제공되거나, 제품의 판매에 관련해서 준비되는 활동이다.
클라이언트 - 서버 관계
#요청과 응답
클라이언트는 다른 프로그램에게 서비스를 요청하는 프로그램이며, 서버는 그 요청에 대해 응답을 해주는 프로그램이다.
서버의 동작 방식과 순서(요청이 들어왔을 때 서비스가 어떻게 처리되는가?)
웹서버를 예시로 들면, 사용자가 사이트 주소 입력 -> 웹 브라우저가 DNS에게 특정사이트 주소 요청 -> DNS가 웹 브라우저에게 사이트의 IP주소를 응답 -> 웹브라우저가 웹서버에게 IP주소를 이용하여 html문서 요청 -> 웹 어플리케이션 서버와 데이터베이스에서 웹페이지 작업을 처리 -> 작업처리결과를 웹 서버로 전송 -> 웹서버는 웹브라우저에게 html문서 결과를 응답 -> 웹 브라우저는 화면에 웹 페이지를 출력.
서버의 구조
Server Program
웹서버는 HTTP를 통해 웹 브라우저에서 요청하는 HTML문서나 오브젝트를 전송해주는 서비스 프로그램을 말한다.
nginx
로드 밸런스 처리에 특화된 웹 서버 프로그램이다.
apache
HTTP웹서버로, 오픈소스이기 때문에 누구든지 수정, 재배포가 가능하다.
Back-end Language
java - spring, spring boot
자바는 썬에서 개발한 객체지향 언어로, spring, springboot 프레임워크를 사용한다.
javascript - node.js, express
객체기반의 스크립트 언어로 기본적으로 웹 브라우저에서 해석되는 인터프리터 언어이다. nodejs, express를 프레임워크로 사용한다.
python - django, flask
1991년 귀도 반 로섬이 발표한 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적타이핑 대화형 언어이다.
DB, DBMS
SQL
구조화 질의어로, 관계형 데이터베이스의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
Mysql
가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템이다. 유닉스, 리눅스, 윈도우 등 다양하나 운영체제에서 사용할 수 있다.
mssql
마이크로소프트에서 개발한 관계형 데이터베이스 시스템이다. 마이크로소프트 에스큐엘 서버라고도 한다.
ORACLE
Oracle Corporation이란 미국의 기업에서 만든 데이터 베이스 관리 시스템이다. Oracle은 데이터베이스에서 가장 많이쓰인다.
NoSQL
Not Only SQL의 약자로 기존 RDBMs형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다.
MongoDB
문서지향적 NoSQL데이터베이스이다. 오픈소스이며 엔진은 c++로 작성되었다.
redis
데이터베이스, 캐시 및 메시지 브로커로 사용되는 공개소스 메모리 내 데이터 구조 저장소이다.
Cassandra
단일 장애점없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위해 설계되었다.
APM
애플리케이션 성능 관리 또는 응용 프로그램 성능 관리는 응용 소프트웨어의 성능과 서비스 이용성을 감시하고 관리하는 데 초점을 둔 시스템 관리 원칙을 일컫는다.
비트나미
가상 어플라이언스 및 웹 앱, 개발 스택용 소프트웨어 패키지 및 설치 라이브러리이다. wamp를 지원한다.(window, apache, mysql(mariaDB),php)
로컬호스트(localhost)
컴퓨터 네트워크에서 사용하는 루프백 호스트 명으로, 자신의 컴퓨터를 의미한다.
가상머신(Virtual Machine)
Virtual Box
오라클사에서 제공하는 오픈소스 프로젝트로 기업을 위한 일부 기능에 대한 소스 폐쇄 외에 사용에 제한이 없는 오픈소스 라이센스 정책을 유지함에 따라 자유롭게 이용이 가능하다.
VMware
한 컴퓨터로 마치 여러 대의 컴퓨터를 사용 하듯이 가상의 공간을 만들어주는 프로그램이다.
Linux, Ubuntu
리눅스는 리누스 토르발스가 처음 출시한 운영체제 커널인 리눅스 커널에 기반을 둔 오픈소스 유닉스 계열 운영 체제 계열이다. 우분투는 데비안 GNU/리눅스를 기반으로 만들어 졌으며 고유한 데스크탑 환경을 사용하는 리눅스 배포판이다.
리눅스 명령어
1.pwd : 현재 작업중인 디렉토리 정보를 출력
2.cd : 경로 이동, 절대경로와 상대경로로 이동 가능
3.ls : 디렉토리 목록 확인
4.cp : 파일 혹은 디렉토리를 복사, 디렉토리 복사할때는 -r옵션을 주어야함.
5.mv : 파일 혹은 디렉토리 이동
6.mkdir : 디렉토리 생성, -p옵션을 주면 하위 디렉토리까지 한번에 생성 가능
7.rm :파일이나 디렉토리를 삭제, 디렉토리 삭제시는 r옵션을 주어야 한다.
8.touch : 파일이나 디렉토리의 최근 업데이트 일자를 현재 시간으로 변경,
ls-l명령을 통해 업데이트 일자 확인 가능
9.cat : 단순 파일의 내용을 출력할 수도 있고, 파일 여러개를 합쳐서 하나의 파일로 만들 수도 있다. 그리고 기존의 한 파일의 내용을 다른 파일에 덧붙일 수도 있다. 새로운 파일을 만들때에도 사용된다.
10.head : 파일의 앞부분을 보고싶은 줄 수만큼 보여준다. 옵션을 지정하지 않으면 상위 10줄을 보여준다.
11.tail : 파일의 뒷부분을 보고싶은 줄 수만큼 보여준다. 옵션을 지정하지 않으면 파일 하위 10줄을 보여준다.
12.find : 특정파일이나 디렉토리를 검색한다. “find[검색경로] – name[파일명]”형식이다.
리눅스 디렉토리 구조
리눅스 시스템의 디렉토리 구조는 전체적으로 역트리 구조를 하고 있다. 그리고 명령어의 종류와 성격, 사용권한등에 따라 각각의 디렉토리들로 구분된다. 리눅스 배포판들은 ‘리눅스 파일 시스템 표준’인 FSSTND라는 표준을 준수하므로 대부분 리눅스 배포판들은 그 기본 골격이 같다.
vi(vim) 편집기 사용법
명령모드 : vi를 실행시키면 가장 먼저 접하는 기본이 되는 모드로 커서의 이동, 수정, 삭제, 복사 붙이기, 탐색 등을 한다. 입력모드 전환키인 i,a,o,I,A,P등을 입력하면 입력모드로 전환되고, 명령모드로 다시 전환하려면 ESC키를 누르면 된다.
2.입력모드 : 입력모드 이외에도 편집모드, input,mode,insert mode등으로 불리며, 글자를 입력하는 문서를 만드는 모드이다. 명령모드에서 입력 전환키를 눌러서 전환하면 아래에 ‘—INSERT—‘라고 표시된다.
ex명령 모드 : 명령 모드에서 ‘:’키를 입력했을 때 화면 맨 아랫줄에서 명령을 수행하는 모드로 저장, 종료, 탐색, 치환 및 vi환경 설정 등의 역할을 하는 모드이다.
추가 개념 키워드
Web Server(WS)와 Web Application Server(WAS)
웹 서버란 클라이언트(사용자)가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조화나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다.
운영체제(OS)
운영체제
오퍼레이팅 시스템은 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위해 하드웨어 추상화 플랫폼과 공통시스템 서비스를 제공하는 시스템 소프트웨어이다.
Window, MacOS
윈도우 운영체제 사용자는 전세계적으로 압도적으로 많고, 호환프로그램도 대단히 많으며, 자유도가 매우 높다. 사용자가 많기 때문에 범용성과 호환성도 좋지만, 대신 그만큼 바이러스에 매우 취약하며 보안 역시 맥과 비교하면 다소 불안한 편이라고 할 수 있습니다. 맥OS는 소프트웨어가 지향하는 바가 직관적이고 심플한 사용자 인터페이스와 보안입니다. 그리고 상대적으로 사용자가 적기 때문에 바이러스 등에서도 더 자유롭습니다. 지속적인 업데이트는 당연히 따라옵니다.
CLI와 GUI
인터페이스
서로 다른 두개의 시스템 장치에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 컴퓨팅에서 컴퓨터 시스템끼리 정보를 교환하는 공유 경계이다. 이러한 교환은 소프트웨어, 컴퓨터 하드웨어, 주변기기, 사람 간에 이루어질 수 있으며, 서로 복합적으로 이루어질 수도 있다.
GUI
그래픽 사용자 인터페이스는 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것이다.
CLI
명령 줄 인터페이스 또는 명령어 인터페이스는 가상 터미널 또는 터미널을 통해 사용자와 컴퓨터가 상호작용하는 방식을 뜻한다.
HTTP
Hyper Text Transfer Protocol, W3 상에서 정보를 주고받을 수 있는 프로토콜이다. HTTP는 클라이언트와 서버 사이에 이루어지는 요청 / 응답 프로토콜이다.
패키지 설치와 컴파일 설치
패키지 매니저
패키지 매니저는 패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용되는 툴이다. 여기서 패키지를 다루는 작업이란 패키지를 설치, 업데이트, 수정, 삭제하는 작업을 의미한다.
컴파일 설치
컴파일이란 것은 소스파일을 사용자가 실행가능한 파일로 만들어 주는 과정을 말합니다. make과정이 끝나고 나면 설치파일이 생성된 상태라고 볼 수 있습니다. makeinstall은 설치를 하는 과정입니다. 앞 과정에서 생성된 설치파일을 실행해서 설치를 끝내는 과정입니다.