・EC2

-가장먼저 생겨난 서비스. 독립된 컴퓨터 한대를 통째로 임대해주는 상품

-인스턴스란? 쉽게 하나의 컴퓨터라고 생각하면됨


・choose AMI : 컴퓨터의 운영체제를 선택

-unix를 뿌리로 하는 Linux, microsoft의 window

-Linux는 거의 무료

-SQL server가 들어있는 window는 고가.. ㅠ



*인스턴스 시작을 클릭해서 인스턴스 생성을 시작!






・choose an instance type

-컴퓨터의 사양을 선택. 타입은 컴퓨터의 사양을 아마존이 구분화시킨것

-프리 인스턴스타입의 조건 : AWS 프리 티어에는 1년 동안 매달 사용할 수 있는 750시간의 Linux 및 Windows t2.micro 인스턴스가 포함되어 있습니다. 프리 티어를 계속 유지하려면 EC2 마이크로 인스턴스만 사용하십시오.

-vCPUs(vitual CPUs) : cpu가 몇개있는가? 여기서 개의 기준은 아마존이 어떤 성능만큼을 1개로 정의한 것

-m으로 시작하는 type은 memory 성능이 특화된 사양

-c으로 시작하는 type은 cpu 성능이 특화된 사양

-인스턴스 타입은 가격과 직접적으로 관련되기 때문에 신중한 선택이 필요함




・가격정책

-https://aws.amazon.com/ko/ec2/pricing/

-온디맨드 인스턴스 : 필요할 때 켜고, 필요없을 때 끄는 인스턴스. 온디맨드 인스턴스에서는 실행하는 인스턴스에 따라 시간당 또는 초당 컴퓨팅 파워에 대한 비용을 지불합니다. 장기 약정이나 선결제 금액은 필요 없습니다. 애플리케이션 수요에 따라 컴퓨팅 파워를 늘리거나 줄일 수 있으며 사용한 인스턴스에 대해 지정된 시간당 요금만 지불하면 됩니다.

-온디맨드 가격표를 참고(t2micro 시간당 0.02$ -> 하루에 0.48$ -> 한달에 $14.4)

-시간당 가격측정을 하기때문에, 필요할때만 사용하면 가격이 매우 저렴함

-예약인스턴스 : 쉽게 표현하면 약정. 약정 걸어놓은 기간동안 쭉 사용해야하는 대신에 할인율이 적용됨.

-스팟인스턴스 : 아마존 서버에서 노는컴퓨터가 많을때와 적을때 가격 정책이 다른 플랜. 노는 서버가 많을 때는 싸고, 노는 서버가 없을 때는 온디멘드보다도 비싸진다.








・인스턴스 장치 설정 configuration instance detail

-number of instances : 인스턴스의 수는 초보자들이 실수로 많이설정하는 경우를 대비해 한정해놓음. 
-purchasing option : 앞에서 설정한 스팟인스턴스를 설정
-shutdown behavior : 서버를 셧다운하면 인스턴스를 일시적으로 stop할 것이냐, 아니면 종료 terminate 시킬 것이냐를 선택
-termination protection : 실수로 인스턴스 terminate 시킨 것을 복구함
-monitoring : 서버의 상태를 비쥬얼라이징 하여 보여주는데, 더 구체적으로 시각화한 자료는 유료다.



・저장소 추가 Add storage

-storage size : 30giga 까지 무료, 윈도우 디폴트 30기가 리눅스 디폴트 8기가
-volume type : 저장장치의 타입설정 당연히 ssd 추천
-Delete on Termination : 체크시 컴퓨터가 종료되면 하드도 폐기처리, 비체크시 종료되도 하드 비폐기


・태그 추가 Tag Instance

-어떤 인스턴스의 역할, 누가 관리하는지등.




・보안 그룹 설정 Configure Security Group

누가 접속하게 할거나, 어떤 방식으로 접근하게 할거냐, 방화벽과 같은 기능
-type : 우리가 만든 인스턴스에 접속하는 방법을 설정함. 브라우저로 접속, 디비에 접속 등등..
제한된 접속방법만 우리의 인스턴스에 접속할 수 있도록 제한하는 방법
SSH : 리눅스, 유닉스 계열에서 서버를 원격으로 조작하는 것
HTTP/HTTPS : 웹브라우저를 통해서 웹브라우저에 접속하는 것
RDP : 윈도우 계열에서 서버를 원격으로 조작하는 것
(다른 건 찾아봐)
-source : SSH로 서버에 접근할 수 있는 ip를 설정함




 Type

 Protocol

 Port Range

 Source

 SSH

 TCP

 22

 Anywhere

 0.0.0.0/0

 HTTP

 TCP

 80

 Anywhere

 0.0.0.0/0

 HTTPS

 TCP

 443

 Anywhere

 0.0.0.0/0

 Custom TCP Rule

 TCP

 8080

 Anywhere

 0.0.0.0/0

 Custom TCP Rule

 TCP

 9000

 Anywhere

 0.0.0.0/0



・리뷰 및 런칭 Review and launch

-Select an existing key pari or create a new key pair : 
키페어 네임 설정 후 키페어를 파일로 다운로드
키페어 다운로드하면 아마존에서 복잡한 키를 만들어서 파일로 다운받게해줌
다운과 동시에 인스턴스에도 패스워드 파일과 동일한 암호를 심어서 파일을 통해 인스턴스에 접근하게 해줌
아마존에서 다시 안주므로 소중하게 다루도록





・인스턴스의 상태선택






・2단계 인증

-보안, 자격 증명 및 규정 준수 -> IAM -> 보안상태 -> 루트 계정에서 MFA 활성화

구글 otp와 aws를 연동하여, 매 로그인시 비밀번호 + otp번호를 입력하게됨


・region 지역

-아마존 웹서비스의 서비스 센터가 어디에 존재하는가?

-멀면 멀수록 송신이 느려지기 때문에 물리적인 region도 중요

-실제로 웹서비스를 사용하는 대상은 고객이기 때문에 웹사이트에 접속하는 주요고객들이 어디 출신인가도 중요.

-각 Amazon EC2 리전은 다른 Amazon EC2 리전에서 완전히 격리되도록 설계되었습니다. 이를 통해 가장 강력한 내결함성 및 안정성을 달성할 수 있습니다.

-지역마다 가격이 다름

-www.cloudping.info : 현재 우리의 웹브라우저에서 각가의 아마존의 인프라가 위치하고 있는 곳에 접속을 해서 속도를 체크한다.

-latency(지연율)을 보고 어느 region에 aws를 구매하면 효율적일지 판단할 수 있다.



・availabilty zone 가용성존

각 Amazon EC2 리전은 다른 Amazon EC2 리전에서 완전히 격리되도록 설계되었습니다. 이를 통해 가장 강력한 내결함성 및 안정성을 달성할 수 있습니다.

인스턴스를 실행할 때 사용자가 직접 가용 영역을 선택하거나 AWS가 사용자를 위해 가용 영역을 선택하도록 할 수 있습니다. 복수의 가용 영역에 걸쳐 인스턴스를 배포했을 때 하나의 인스턴스에 장애가 발생한 경우를 대비하여, 다른 가용 영역의 인스턴스가 장애가 발생한 인스턴스 관련 요청을 처리할 수 있도록 애플리케이션을 설계할 수 있습니다.



自然言語処理(しぜんげんごしょり、英語natural language processing、略称:NLP):人間が日常的に使っている自然言語コンピュータに処理させる一連の技術であり、人工知能言語学の一分野である。


▶JAR파일 : 클래스 파일의 효율적인 배포를 위해 여러 클래스 파일들을 하나로 묶어 단일의 파일로 만드는 포멧. 로컬(local)상에서 편리한 관리는 물론 자바(Java) 프로그램 실행 중에 원격지에서 하이퍼텍스트 전송 규약(HTTP) 등을 통해 내려받기(download)되어 바로 사용이 가능.


▶WAR파일 : jsp, 서블렛, 자바, html 등 웹어플리케이션 생성에 필요한 파일들이 모여있는 파일


▶batch file : A batch file is a text file that contains a sequence of commands for a computer operating system. It's called a batch file because it batches (bundles or packages) into a single file a set of commands that would otherwise have to be presented to the system interactively from a keyboard one at a time. A batch file is usually created for command sequences for which a user has a repeated need. Commonly needed batch files are often delivered as part of an operating system. You initiate the sequence of commands in the batch file by simply entering the name of the batch file on a command line.


Shell : 리눅스는 커널(Kernel)이라고 불리는 하드웨어를 직접 제어하는 부분과 그 위에서 커널에 명령을 주는 하나 이상의 쉘(Shell)로 구성되어 있다. 커널은 하드웨어를 직접 제어하는 리눅스의 핵심부로서 쉘에서 임무를 받아서 수행한다. 쉘은 명령어 기반 인터페이스 인데 이것을 통해서  사용자는 리눅스 OS와 상호 작용을 하게된다.우리가 도스상에서 내리는 대부분의 명령은 command.com이라는 파일이 처리한다. 전문가들은 이 command.com파일을 운영체제의 쉘(Shell)프로그램이라고 말한다. 쉘 프로그램은 사용자가 내린 명령을 운영체제가 수행할 수 있는 명령어를 입력받고 이를 컴퓨터의 운영체제에 전달하는 일을 한다. 다시 말해 쉘은 사용자가 내린 명령을 커널이 이해할 수 있도록 통역해준다. 그래서 명령어해석기라고도 불린다.


kernel :운영체제의 핵심은 커널 부분이다. 도스로 말하면 io.sys와 같은 파일이 이에 해당한다.  실질적으로 사용자가 내린 명령을 수행하면서 컴퓨터의 하드웨어를 조작하는 파일이다. 이 처럼 실질적으로 사용자의 명령을 수행하면서 파일의 입출력을 담당하고, 하드웨어를 관리하는 프로그램을 커널이라고 한다. 그리고 운영체제의 핵심은 커널이라고 부른다.


쉘과 커널로 구분하는 이유 :  운영체제의 핵심이 커널이지만 사용자가 바로 커널을 제어하기는 매우 어렵다. 기계적인 부분이 많기 떄문이다. 그래서 사용자가 내린 명령을 운영체제의 핵심인 커널 부분이 이해할 수 있도록 번역해주는 프로그램이 필요 했고 이 번역장치에 해당하는게 쉘이다. 그래서 우리가 운영체제라고 부르는 프로그램은 크게 커널과 쉘로 구성 된다


 


Amazon Web Services(アマゾン ウェブ サービス、AWS):  AWS의 주요 고객은 개발자 엔지니어 등 IT 관계자이며, AWS가 제공하는 서비스는 ‘인프라’다.

웹사이트를 구축한다고 치자. 개발자는 웹사이트에 들어갈 이미지와 글을 저장해야 한다. 사용자에게 웹사이트 내용을 보여주도록 명령하고 제어하는 시스템도 필요하다. 이러한 과정을 위해선 스토리지나 서버 등을 설치해야 한다. 개발자는 이러한 하드웨어를 설치할 공간을 사무실 한켠에 마련하고 각종 환경설정 및 네트워크 환경을 구축하기 위해 며칠씩 시간을 소비한다.

만약 3일만 웹사이트를 운영하고 싶다면 어떨까? 3일 동안 사용하기 위해 서버와 스토리지를 구매하기엔 비용이 너무 많이 들어간다. 게다가 사용자가 늘어나거나 웹사이트 내부에 저장할 데이터가 많아지면 서버나 스토리지를 더 구매해야 한다. 그런데 3일 뒤 사용자가 썰물처럼 빠져나가면 이미 구매한 서버나 스토리지는 개점 휴업 상태가 된다. 비용 측면에서 꽤나 비효율적이다.

이러한 상황을 개선한 게 클라우드다. AWS는 대량의 서버, 스토리지, 네트워크 장비를 구매해놓고 사용자가에 인프라를 대여해준다. 사용자는 각 장비를 사용한 만큼만 비용을 지불하면 된다. 그래서 AWS 서비스를 ‘인프라로서의 서비스’(Infrasture as a Service, Iaas)라고 부른다.

그렇다면 어떤 기업이 AWS에 주로 관심을 보일까? 처음에는 주로 예산이 적은 스타트업이 클라우드에 관심을 보였다. 모바일게임 업체가 대표적이다. 10만명의 게임 사용자를 예상하고 하드웨어를 구매했는데, 막상 게임을 출시했더니 사용자가 100만명이 몰릴 수도 있다. AWS는 사용자 수에 맞춰 단 몇 분 안에 서버를 자동으로 증설해준다. 게임업체는 물리적인 하드웨어를 구매하는 것보다 더 빠르고 안정적으로 서비스를 운영할 수 있다. 서비스를 테스트하려고 임시 인프라를 구축할 때도 클라우드를 많이 이용한다. 해외 진출을 노리는 업체들에게도 인기가 높다. 클라우드 업체는 북미, 유럽, 아시아 등 여러 곳에 인프라를 구축해놓는다. 사용자는 이용하고 싶은 지역을 자유롭게 선택할 수 있다. 한국 기업이 미국 사용자를 대상으로 게임을 내놓을 때 지역 설정만 바꾸면 보다 빠른 속도로 서비스를 제공할 수 있다.

클라우드 이전에 비슷한 서비스가 웹 호스팅, 서버 호스팅이었다. 이들 서비스는 어떤 차이가 있을까? 먼저 웹 호스팅 업체들은 서버를 대신 구매하고 서버 공간을 분할해서 사용자에게 나눠준다. 웹 호스팅 업체들이 대부분 설정과 구축 환경을 관리하기 때문에 사용자는 원하는 소프트웨어를 따로 설치할 수 없다. 반대로 생각하면 사용자는 인프라에 대해 잘 몰라도 웹 호스팅 업체들이 제공하는 기능을 선택해 웹사이트를 구축할 수 있다. 비전공자가 간단한 개인용 웹사이트를 구축하기 위해서 이러한 웹 호스팅 서비스를 많이 이용한다.

서버 호스팅은 서버 1대를 통째로 빌려주는 서비스를 일컫는다. 클라우드는 서버 호스팅과 비슷하지만 다양한 메모리나 스토리지 용량 등을 선택할 수 있고 인프라 규모도 무한대로 늘릴 수 있다는 차이가 있다. 클라우드 서비스는 엔지니어 입맛에 맞게 인프라를 구축할 수 있지만, 반대로 내부에 전문가가 없는 기업에선 이러한 클라우드 서비스가 어려울 수 있다. 서버 호스팅 업체들은 컨설팅을 통해 인프라를 분석해주고 맞춤 서비스를 제안해주면서 경쟁력을 높이고 있다.


▶RPA : Robotic Processing Automation. It is an automatic system which makes process automated which is repetitively performed.


▶EMT : Easy Master maintenance Tool


▶MarkUp Language : (초간략)문서의 기본 정보에 추가적인 정보를 제공하기 위해 사용되는 언어. 문서를 구성하는 가장 기본적인 텍스트 이외에 내용을 강조하기 위해 밑줄을 긋는다던지, 펼표를 친다던지, 글의 논리적 구성을 나눈다던지(서론, 본론...,결론) 하는 작업이 쉽게보면 마크업에 해당한다. 정리하면, 마크업(Markup)이란 문서의 내용이 아니라 내용이 어떻게 배치되고 어떤 크기와 모양을 가지며 여백은 어느 정도인지를 표현하는 기술이라고 볼 수 있다. 


(간략)태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지이다.태그는 원래 텍스트와는 별도로 원고의 교정부호와 주석을 표현하기 위한 것이였으나 용도가 점차 확장되어 문서의 구조를 표현하는 역할을 하게 되었다. 이러한 태그 방법의 체계를 마크업 언어라 한다.


문서에는 문서 내용 이외에, 문서의 논리 구조나 체제와 같은 문서의 서식 작성(formatting)을 지정하거나, 문서 내용의 찾아보기 또는 찾아보기 작업(indexing) 방법을 지정하거나 문서 중의 단어나 구, 화상과 같은 어떤 요소를 같은 문서 또는 다른 문서 중의 다른 요소와 연결(link)하는 방법을 지정하여 컴퓨터 시스템에 지시하는 마크업 정보가 추가된다. 마크업 언어는 문서 내에 끼워 넣는(embed) 일련의 부호로 구성된다. 대표적인 마크업 언어로는 월드 와이드 웹(WWW)의 홈 페이지에 사용되는 하이퍼텍스트 생성 언어(HTML)와 국제표준화기구(ISO)가 표준화한 표준 범용 문서 생성 언어(SGML)를 들 수 있다. 이런 종류의 마크업 언어는 대부분 텍스트 문서와 파일이 기종과 독립적으로 응용 프로그램 간에 교환될 수 있도록 이식성을 높이기 위해 설계되었다.


XML(Extensible Markup Language): W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다. XML은 SGML의 단순화된 부분집합으로, 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다. XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.

1. HTML의 한계를 극복하고자 나왔다.

2. 사용자 정의 TAG가 가능하다.

3. 인터넷에 연결된 시스템끼리 쉽게 정보를 주고받는다.


▶node.js : JS는 웹브라우저에서만 사용되는 언어였는데, JS를 웹 서버에서도 사용될 수 있도록 한 것이 nodejs이다. 어떻게 그렇게 했다는거?


▶Internet : (간략)인터넷은 다른 컴퓨터와 연결될 수 있는 네트워크 환경을 의미한다. 그리고 그 환경 내에서 사용되는 소프트웨어가 WEB이다. WEB은 인터넷 환경에서 가장 성공적인 소프트웨어 이기 때문에 때로는 동의어로 사용되기도 하는 것이다. 

(상세)TCP/IP 프로토콜을 통해 연결되어 있는 전 세계적인 네트워크를 두고 말한다.컴퓨터 기술과 통신 기술이 기본이 되어, 각기 다른 기관에 의해 다른 목적으로 구성된 네트워크들이 서로 연결되어 전 세계를 묶는 하나의 거대한 네트워크로, 다양한 서비스를 제공하는 지구촌 네트워크


WEB : 하이퍼텍스트 기능에 의해 인터넷상에 분산되어 존재하는 온갖 종류의 정보를 통일된 방법(Protocol)으로 찾아볼 수 있게 하는 광역 정보 서비스 및 소프트웨어를 말한다. 분산되어 존재하는 정보들을 하나의 체계 안에서 공유하기 위해서 약속한 규약이 HTTP(Hyper Text Tranfer Protocol)이며, 그러한 규약 안에서 사용되는 언어가 HTML(Hyper Text Markup Language)이다. 웹브라우저, 웹서버, 웹어플리케이션 서버, 데이터베이스로 구성된다.

*hypertext : 하이퍼텍스트란 문서와 문서가 link로 연결되어 있는 새로운 형식의 text를 의미한다. 


▶Web Browser(Client) : 웹 서버에 자료를 요청하기 위해 HTTP를 사용하는 클라이언트 프로그램으로, 클라이언트 쪽에서 인터넷에서 웹서버의 하이퍼텍스트 문서를 볼 수 있게 해주는 프로그램이다. 일반적인 기능으로는 웹페이지 열기, 최초 방문한 인터넷 주소(URL)의 목록 제공, 자주 방문하는 URL 기억 및 관리, 웹페이지 저장 및 인쇄, 전자우편이나 뉴스그룹을 이용할수 있는 프로그램과 HTML 문서 편집기능 등이 있다.


▶Web Server : 웹페이지(HTML파일)를 제공해 주는 서버를 말하는 것으로 HTTP를 사용하여 웹페이지를 제공할수 있는 웹 서버 프로그램이 설치되고 있고 하나의 도메인 이름을 갖고있다. 예를 들어 사용자가 웹 브라우저에서 URL로 http://www.daum.net를 입력하면 도메인 이름이 www.daum.net인 서버에게 웹 페이지를 요청하고 서버는 index.html 파일을 찾아서 브라우저에게 보낸다. 따라서 가장 일반적인 웹 서버로는 UNIX 기반의 아파치, WINDOW NT IIS, 네스케이프의 엔터프라이즈 서버가 있다.

 보통 서버는 기존의 우리가 알고 있는 컴퓨터와는 다른 금고같은 모양을 하고 있지만, 단지 서버쪽은 스크린이 필요없고 더 안정적인 부품이 필요하기에 그런 모양새가 된것이지, 일반적인 컴퓨터와 동일하다. 또한, 웹서버만 설치하면 개인 PC도 웹서버의 기능을 할 수 있다.


▶Apache : 서버 쪽의 컴퓨터에는 웹서버 어플리케이션이 존재해야만 웹브라우저에서 요청하는 정보를 받아들이고,응답할 수 있다. 이처럼 request를 받아들이고 response의 기능을 가지고 있는 것이 웹서버 어플리케이션인데, 이중 가장 대표적인 소프트웨어가 Apache이다. 


▶Tomcat : 평소 tomcat과 apache를 잘 구분하지 못하여 공부한 내용을 정리해 본다.아파치 톰캣을 이용해서 웹서버를 띄우고 개발을 진행해왔다. 그런데 실제 일을 하면서 서버를 실핼할때 단순히 tomcat만 쓰는게 아니라 apache라는 프로그램을 별도로 실행하는 것에 혼란이 왔다. 그리고 평소에 apache tomcat은 그렇다면 두개의 프로그램을 합쳐놓은 것인가를 고민하게 되어 정리해 보았다.

1.apache 란?

apach란 것은 소프트웨어 단체 이름이다. 그리고 우리가 흔히 부르는 아파치서버라는 것은 이제단에서 후원하는 오픈소프 프로젝트 커뮤니티에서 만든 http웹서버를 지칭하는 말이다. (아파치 프로젝트는 웹서버 외에도 여러가지 프로젝트를 진행하고 있다고 한다. 이건 추후에 조사해볼것이다.) http 웹서버는 http 요청을 처리할 수 있는 웹서버이고, 아파치 http서버는 http요청을 처리하는 웹서버인 것이다. 클라이언트가 GET, POST, DELETE 등등의 메소드를 이용해 요청을 하면 이 프로그램이 어떤 결과를 돌려주는 기능을 한다. 아파치는 웹서버 이다!

2.tomcat 이란?

tomcat은 흔히 WAS(Web Application Server)라고 말한다. WAS는 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다. 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것이 바로 웹 컨테이너 이다. 앞에서 본 아파치 웹 서버와 차이는 이 컨테이너 기능이 가능하냐의 차이가 가장 크다고 생각한다.


WAS역시 웹 서버로써 역할을 수행할 수 있기 때문에 둘을 잘 구별하지 못하면 필자 같은 혼란이 생길 수 있다.

3.둘의 차이는?

그렇다면 WAS만 쓰면 되지 어째서 웹서버를 따로 쓰느냐는 의문이 생길 수 있다. 그 이유는 목적이 다르기 때문이다. 웹 서버는 정적인 데이터를 처리하는 서버이다. 이미지나 단순 html파일과 같은 리소스를 제공하는 서버는 웹 서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적이다(왜? 다른 글 소스로 써볼까?) WAS는 동적인 데이터를 처리하는 서버이다. DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용 해야 한다.


4.연동의 필요성

대부분의 웹 컨테이너(톰캣 포함)는 웹서버 기능이 포함되어 있다. 그럼에도 불구하고 다른 웹서버와 연동해서 사용하는 이유를 정리해 보면 다음과 같다.

-톰캣은 아파치 웹서버 만큼 정적인 문서를 빠르게 처리하지 못한다.
-톰캣은 아파치 웹서버 만큼 다양한 옵션 및 환경 설정 기능을 제공하지 못한다.
-톰캣은 아파치 웹서버 만큼 안정적이지 못하다.
-이미 많은 사이트들이 웹서버 기반으로 많은 시스템 들을 개발하였다. 예를 들어, CGI, PHP 등 서버 사이드 애플리케이션 들과 더불어 다양한 모듈들이 포함되어 있는데 이 모든 기능을 톰캣에서는 실행시킬 수 없다.

이러한 이유로 웹서버와 톰캣을 연동해서 사용하는 것을 권한다. 또한 웹서버와 연동을 시키지 않은 상태에서 톰캣에 접속하기 위해서는 HTTP의 기본 포트인 80포트가 아닌 8080 포트를 통해서 접속해야만 한다[1]. 이때 아파치 웹서버와 톰캣을 연동을 시키게 되면 8080 포트가 아닌 웹서버의 표준 포트인 80포트를 이용해서 접속이 가능하다. 이러한 이유 외에도 다양한 문제가 존재한다. 예를 들어 보안과 관련된 문제도 발생할 수 있으며 하나의 웹서버에 여러 개의 톰캣을 연결해서 로드 발랜싱을 구현할 수도 있다. 즉 좀 더 폭넓은 선택과 운영의 유연성을 제공하기에 필자는 웹서버와의 연동을 반드시 하기를 권한다.
구체적 연동방법 -> 클릭



▶htdocs(document root) : 웹서버가 웹브라우저에서 요청한 문서를 찾는 최상의 디렉토리이다. 디폴트로 설정된 디렉토리로 htdocs의 디렉토리에 저장해야만 클라이언트가 원하는 문서를 전달할 수 있는데, 설정변경을 통해 다른 디렉토리로 변경이 가능하기는 하다.


▶CUI(Character User Interface) : 文字だけでやり取りをするのですが、代表的なものは Windowsに搭載されている CMDといわれるものです。


▶GUI(Graphical User Interface) : GUIは、グラフィカルな画面で分かりやすく情報のやり取りができます。今使っているWindowsのパソコンが GUIです。キーボードの他 マウスやタッチパネルも使われます。

 デスクトップ画面を見るとわかりますが、グラフィカルで アイコンやメニューボタンなどが用意されていて、どのように操作すればよいのか 分かりやすくなっています。
 例えばパソコンを使っていると当たり前のように出てくる、メニューバー、プルダウンメニュー、チェックボックス、選択ボタン、テキストボックス、エラーメッセージなどすべて GUIを構成しているものになります。

▶IP(Internet Protocol):(간략)각 가정의 전화선에도 부여된 전화번호가 존재하듯, 각 네트워크 선에도 부여된 주소가 존재하는데 이것을 IP라고 부른다. 모든 장비에는 IP 주소가 부여되어야만 한다는 의미로 이해하면 되겠다.

(상세)IP 주소(Internet Protocol address, 표준어: 인터넷규약주소)는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다. 네트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야 한다. 이 번호를 이용하여 발신자를 대신하여 메시지가 전송되고 수신자를 향하여 예정된 목적지로 전달된다. IP 주소를 줄여서 IP라고 부르기도 하나 IP는 인터넷 규약 자체를 가리키는 말이기 때문에 엄밀하게는 구별해야 한다.

IPv4 주소 : IPv4는 32비트 데이터로 구성된 IP 주소를 말하며 우리가 보편적으로 쓰고 있는 IP 주소 체계다. 보통 aaa.bbb.ccc.ddd 형식으로 표기하는데, 0~255 사이의 숫자 4개로 구성된다. 물론 이것은 사람이 보기 쉽게 표기한 것이고 실제 컴퓨터 내부에서는 0 ~ 4,294,967,295까지의 정수로 표현되고 있다. 범위에서 볼 수 있듯이 대략 42억개의 주소를 사용할 수 있는 셈인데 특수한 목적을 위해 예약해 둔 영역도 제법 되고, 한 명이 여러 개의 아이피를 사용하는 경우도 많이 있었기에 2011년 2월 5일 기준, 공인 아이피 주소가 모두 고갈된 상태다.[3](#)

예전에는 IP를 할당할 때 클래스를 나누어서 할당하였는데 처음에는 주로 Class-B(128.0.0.0~191.255.255.255)의 영역에서 할당했지만인터넷이 점점 발달되고 보편화되면서 IP 주소의 소모가 빨라지자 클래스로 나누어 할당하는 방식을 더 이상 사용하지 않고 대신 CIDR(사이더)란 방식으로 할당하기 시작하였다.

IPv6은 128비트 데이터로 구성된 IP 주소를 말하며 IPv4의 주소가 고갈되는 것에 대비해 만들어 둔 IP 주소 체계이다. 앞으로 늘어날 아이피 주소의 수요를 감당하기 위하여 128비트를 사용하는 IPv6로 전환될 예정이다. IPv6은 총 2^128개 주소를 가질 수 있으므로 통신이 가능한 기기마다 공인 IP를 하나씩 할당해도 고갈될 걱정이 없을 정도로 주소가 매우 넘쳐날 것으로 기대하고 있다. 참고로 알기 쉽게 수치화하면, IPv4의 최대 할당 가능한 IP 개수가 2의 32제곱으로 4,294,967,296개인 반면, IPv6의 최대 할당 IP 개수는 2의 128제곱인340,282,366,920,938,463,463,374,607,431,768,211,456(약 340간)개이다. 사실상 무한하다고 생각해도 될 정도의 개수다. 자리수만 39개다.참고로 IP 주소 하나가 1g이라고 치면 IPv4는 4294t 정도이지만 IPv6는 태양 질량의 20만배에 달한다. 유선 인터넷은 미국과 유럽 지역부터 보급이 이루어지고 있으며, 모바일 인터넷도 차차 IPv6으로 전환 중인 추세다.


▶공인ip와 사설ip의 이해

공인 IP는 '서울시 도봉구 창2동 624-15' 와 같이 우편물이 배달 가능한 주소이고 사설 IP는 '우리 집의 작은방에 책상서랍' 과 같이 우리 집에서만 이해 가능한 주소입니다.


▶공인 IP(global IP): 앞에서 설명한 IPv4 주소는 임의로 우리가 부여하는 것이 아니라 전세계적으로 ICANN이라는 기관이 국가별로 사용할 IP 대역을 관리하고 우리 나라는 인터넷 진흥원(KISA)에서 우리나라 내에서 사용할 주소를 관리하고 있다. 따라서, 임의로 아무 IP 주소나 내 컴퓨터에 지정한다고 인터넷이 되는 것이 아니라 할당받은 주소를 부여해야만 인터넷에 접속할 수 있게 된다.

IPv4는 크게 4자리의 대역에 따라서 다음과 같이 분류할 수 있다. http://ko.wikipedia.org/wiki/IPv4 에 자세한 내용이 설명되어 있다.

  • A 클래스는 네자리의 IP 주소 대역 중에서 두번째, 세번째, 네번째 주소를 마음대로 부여할 수 있는 최상의 클래스로 클래스 당 255 x 255 x 255 개의 주소를 가질 수 있다.
  • B 클래스는 네자리의 IP 주소 대역 중에서 세번째, 네번째 주소를 마음대로 부여할 수 있는 클래스로 클래스 당 255 x 255 개의 주소를 가질 수 있다.
  • C 클래스는 맨 뒤 네번째 자리만 마음대로 부여할 수 있는 주소로 클래스 당 255개의 주소를 갖는다.

이와 같이 클래스를 분류해뒀는데, 문제는 IP가 부족하다보니 서버 운영 시에 원하는 대로 IP 주소를 부여받을 수 없고, 서버 운영 업체나 기관 들에 할당된(미리 돈을 지불하고 산다) 주소 중에서 자신의 컴퓨터에 주소를 할당 받아야 한다.

최근의 IP 부족 사태는 인터넷 발전 초기에 IP 주소를 무계획적으로 배분했기 때문에 발생하는 문제이다. 대표적으로 미국의 일반 기업인 IBM이나 모토롤라 등은 초기에 인터넷 주소를 부여받으면서 A 클래스를 부여받았고, 우리나라내에서도 KAIST나 서울대 등은 B 클래스를 보유하여 학교내의 PC들에게도 마구 공인 IP를 부여하고 있는 웃지 못할 상황이다. 반면 최근에 IP를 신청하는 기업은 많은 비용을 지불하고도 C 클래스 대역조차 얻기가 쉽지않은 현실이다.


▶사설 IP(private IP) : 전체 IP 대역 중에서 특수한 목적으로 사용하기 위해서 몇 개의 대역을 제외하고 공인 IP 대역으로 할당하고 있는데, 제외된 대역 중에서 사설 IP로 사용되는 대역은 사용자가 임의로 부여하고 사용할 수 있지만 인터넷 상에서 서로 연결되지 않도록 되어 있다. 전체 IP 대역 중에서 다음의 대역이 사설 IP 대역이다.

  • A 클래스 : 10.0.0.0 ~ 10.255.255.255
  • B 클래스 : 172.16.0.0 ~ 172.31.255.255
  • C 클래스 : 192.168.0.0 ~ 192.168.255.255

위의 3개의 클래스 대역은 사용자가 자신의 컴퓨터에 임의로 부여해도 되는 IP 주소 대역이 된다.

따라서 회사 내부나 집에서는 공인 IP를 부여받지 않은 상태에서 위의 주소 대역 중에서 아무 주소나 할당을 해도 문제가 발생하지 않는다는 것이다.

따라서 공인 IP 주소가 모자랄 경우 사설 IP로 회사나 가정 내의 IP 주소를 부여하고 공유기 등에 고정 IP를 부여한 다음에 인터넷에 접속하는 방식이 널리 퍼지게 되었고, 대부분의 장비가 현재는 사설 IP를 부여하고 공유기나 라우터(사실 공유기가 라우터다)를 통해 인터넷에 접속하게 된다. 단 사설 IP를 부여한 컴퓨터는 공인 IP에서 알아볼 수가 없다는 점이 특징이다.

위의 그림을 보면 컴퓨터에 부여된 IP 주소인 192.168.0.2 ~ 192.168.0.4과 공유기의 내부 주소인 192.168.0.1은 사설 IP이고 공유기가 인터넷에 연결된 168.126.63.1은 공인 IP가 된다. 서버에 설치된 IP인 164.124.101.2도 공인 IP이다. 따라서 인터넷 상에서  164.124.101.2라는 주소를 치면 서버에 접속할 수 있지만 192.168.0.x 대역에 있는 피시와 노트북에는 접속할 수 없다. 가정에 설치된 공유기 관리 화면에 접속해보면 위의 같은 형태로 IP가 부여되어 있음을 알 수 있을 것이다.


공유기(라우터)는 공인 IP를 할당받아, 다시 3개의 사설 IP를 할당한다. 따라서, 2번째 컴퓨터에 들어있는 웹서버는 사설IP이기 때문에, 인터넷 환경과 연결되지 않는다.



   



▶고정IP와 유동IP :  공유기로부터 사설IP를 부여받을 경우, 접속할 때마다 사설IP가 변경되는 것을 유동IP라고 하며, 사설IP의 주소로 할당된 범위 중 하나의 IP를 자신의 PC의 고정으로 할당하는 것을 고정IP라고 한다. 일반적인 가정의 네트워크환경에서는 하나의 사설IP당 1대의 컴퓨터를 연결하므로 고정IP를 할당해도 되지만, 하나의 사설IP당 여러개의 유동IP를 갖는 공공시설의 경우 고정IP를 설정하면 IP주소가 겹칠 수도 있으므로, 공공장소에서는 고정IP를 할당하지 않는 것이 좋다.


▶도메인 : 하나의 서버를 164.124.101.2와 같은 숫자로 이루어진 주소로 가르킬 수 있고, www.naver.com과 같은 주소로도 가르킬 수가 있다. 이때 www.naver.com과 같은 주소를 도메인이라고 부른다. 본래, 컴퓨터는 숫자로 이루어진 IP주소만 인식할 수 있는데, DNS(Domain Name System)에 의한 시스템에 의해 Name Server에서 도메인이 IP주소로 변환된 후 서버에 접속하게 된다.


 

▶PORT : (간략)IP를 집주소라고 한다면, PORT는 집의 각 호수와 같은 개념이다. 네트워크와 연결되는 각 소프트웨어가 하나씩의 포트값을 갖게된다. http://222.42.11.3:80/index.php의 이미를 하나하나 해석해보면, 1.http : http 규약으로 의사소통할 것을 의미 2. 222.42.11.3서버의 ip주소를 의미 3. :80 서버의 포트번호를 의미 4. index.php 서버의 디렉토리 주소를 의미. 아래에서 "포트는 통신의 종단점이다" 라고 표현한 부분의 의미가 바로 이 때문이다. 

(상세)인터넷 프로토콜 스위트에서 포트(port)는 운영 체제 통신의 종단점이다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 주로 포트를 사용하는 프로토콜은 전송 계층 프로토콜이라 하며, 예를 들어 전송 제어 프로토콜(TCP)와 사용자 데이터그램 프로토콜(UDP)가 있다. 각 포트는 번호로 구별되며 이 번호를 포트 번호라고 한다. 포트 번호는 IP 주소와 함께 쓰여 해당하는 프로토콜에 의해 사용된다.



▶포트포워딩





 


스크립트 언어(scripting language): 컴퓨터 프로그래밍 언어로서 응용 소프트웨어를 제어한다. 스크립트 프로그래밍 언어라고도 한다. 스크립트 언어는 응용 프로그램과 독립하여 사용되고 일반적으로 응용 프로그램의 언어와 다른 언어로 사용되어 최종사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해준다. 스크립트(scripts)는 연극 용어인 스크립트에서 유래되었으며 초창기 스크립트 언어는 배치언어(batch languages) 또는 작업 제어 언어(job control language)라고도 불리었다.


▶프레임워크 : 특정한 목적에 맞게 프로그래밍을 쉽게 하기 위한 약속. 단어 그대로 언어를 더 효율적으로 조작하기 위해 미리 만들어 놓은 틀(프레임)


▶Maven : 메이븐은 자바의 라이브러리를 한데 모아 관리하는 repository(저장소)이다.(메이븐 사이트에 전세계적으로 공유되고 있는 라이브러리들이 개제되어 있다. https://mvnrepository.com/) pom.xml 파일을 통해 각 프로젝트에 필요한 라이브러리들이 메이븐 사이트로부터 자동으로 다운로드되어 C:\Users\User\.m2\repository에 격납된다. 만약, pom.xml파일에 오류가 난다면, 기존의 메이블 디렉토리에 저장된 repository를 모두 삭제후 필요한 repository를 springboot initializer(https://start.spring.io/)에서 받은 프로젝트에 포함된 pom파일로 갱신하면 된다.



정적 웹 페이지

-사용자(클라이언트)가 URL을 입력하여 요청을 하면 해당 URL(IP + PORT + 웹서버의 디렉토리 주소로 구성)의 웹서버에서 이미 저장되어 있는 html 문서를 사용자(클라이언트)에 보내준다.

-사용자는 서버에 저장된 데이터가 변경되지 않는 이상 고정된 웹 페이지를 보게 됨.

ex) 보통 어떠한 회사 홈페이지에서 회사소개 페이지는 항상 같은 내용을 담은 정적 웹 페이지(html문서)이다.





 

 


동적 웹 페이지 

-사용자(클라이언트)가 어떠한 요청을 하면 웹서버에서 요청 정보를 가공처리한 후 생성된 html을 사용자(클라이언트)에게 보내준다.

-즉, 모든 사용자들은 요청에 따라 각각 다른 화면을 보게 된다.

ex) 어떠한 홈페이지 접속시 매일 네이버에서 로그인 요청 시 로그인 결과화면은 회원마다 각각 다른 화면을 볼 수 있다.


▶서버,클라이언트와 동적,정적웹페이지의 구분


。자바스크립트?

 - 동적인 웹 페이지를 만들이 위해 사용하는 언어

    자바스크립트를 사용하는 가장 큰 이유중 하나가 바로 동적인 웹 페이지를 만들이 위해 사용이 됩니다. 여기서 동적인 웹페이지를 만들기위해 사용되는 언어가 자바스크립트만 있는게 아닙니다. HTML,JSP,Servlet,ASP등 많은 언어들이 있습니다.

    (☞ HTML 동적페이지를 만들수 있는 부분도 존재하기에 적었습니다.)


。자바스크립트를 활용 하는 이유?

 - 웹페이지 HTML에서 구조와 내용을 담당 한다면 자바스크립트 에서는 행동을 담당합니다.

   동적인 웹페이지를 만들기 위해 사용되는 언어가 자바스크립트 라고 설명했습니다. 그러나 JSP,Servlet,ASP등도 있다고

   설명했습니다. 그렇다면 JSP,Servlet,ASP 만으로 동적인 웹페이지를 작성한다면 자바스크립트의 활용은 필요 없지 않을까요?

   여기에 대한 설명은 다음과 같습니다.


   Javascript는 "웹 브라우저" 가 이해하는 언어(HTML, Javascript, CSS) 로 "웹 브라우저"에서 실행됩니다.  (클라이언트 측)

   JSP,Servlet,ASP는 "웹 서버" 에서 해석되고 실행되어 그 결과만 "HTML"로 변환되어 "웹 브라우저"에 보여줍니다. (서버 측)

   1. 웹 브라우저의 요청에 javascript는 바로바로 즉각 반응이 가능합니다.  그렇기에 매우 빠른 동작속도와 편리합니다.

   2. 웹 브라우저의 요청에 JSP,Servlet,ASP는 "웹 서버"에서 실행 됩니다. 즉 브라우저의 요청에 즉각 적인 반응을 하지 못하고

       웹 서버에 요청을 보내고 웹 서버에서 해석하여 HTML로 변환되어 웹 브라우저에 요청을 답합니다. 즉 시간이 매우 오래 걸리며

       웹 서버의 다른 동작을 방해하기 때문에 불편합니다.

결과 적으로 반드시 서버 측에서 처리해야하는 것만 JSP,Servlet,ASP 등으로 작성하고  웹 브라우저상에서 처리 가능한 것은

      javascript로 작성 하는것이 좋겠습니다.


 

▶domain model

 어떤 추상적인 업무를 하나의 기능만을 지닌 업무들로 세분화하여 그 관계를 나타낸것.
이로써 프로그래밍을 할때 인풋과 아웃풋을 명확하게 할 수 있다. + 이후의 메인테넨스나 재사용성을 고려하는 것도 필요


▶모듈

 모듈은 고정적 개념이 아니라 어떤 동일한 기능을 하고 있는 덩어리. 따라서 클래스가 모듈이 될 수 있고, 일반적으로는 jar을 하나의 모듈로써 인식한다.
 ->내 생각 : 인풋이 들어오고 아웃풋이 나오는 걸 하나의 "업무"라고 하면 이 하나의 업무가 하나의 모듈이 될 수있는 최소 조건이 된다.


캐시

 (cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.


冗長化(じょうちょうか):冗長化(じょうちょうか)とは、システムの一部に何らかの障害が発生した場合に備えて、障害発生後でもシステム全体の機能を維持し続けられるように、予備装置を平常時からバックアップとして配置し運用しておくこと。冗長化によって得られる安全性は冗長性と呼ばれ、英語ではredundancyと呼ぶ。

常に実用稼動が可能な状態を保ち、使用しているシステムに障害が生じたときに瞬時に切り替えることが可能な仕組みを持つ。障害によってシステムが本来の機能を失うと、人命や財産が失われたり、企業活動が大きな打撃を受けるような場合には、冗長性設計が必須となっている。


▶POP

 이메일이 오게되면 서버에 보관이 되어 있다가 우리가 POP프로토콜을 통해 이메일계정으로 접속을 하게되면 해당 이메일을 로컬(email client-아웃룩이 설치된 PC)에 해당 편지를 저장하고 서버에서는 지웁니다.원칙은 이렇지만 보통 POP설정부분에서 원본메일의 사본을 서버에 저장할 수 있도록 옵션을 두고 있기 때문에 설정에 따라 서버에 보존할 수도 있습니다만, 사본을 새로운 메일로 인식하여 다시 다운로드하는등 문제점이 있습니다.암튼 원칙은 서버에서 지우기 때문에 여러대의 pc에 같은 이메일 계정으로 아웃룩에서 pop을 설정했다면 가장 먼저 아웃룩으로 확인한 PC에서만 새로운 메일을 볼 수 있고  나중에 다른 pc에서 확인하면 새로운 메일이 보이지 않습니다.


IMAP

 이메일계정으로 접속하면 일단 이메일들의 제목들만 서버로부터 다운을 받아 유저에게 보여주고,해당 이메일을 열람하게되면 메일의 본문내용을 다운받습니다. 그런데 이때에도 100% 모두 다운로드 하지는 않습니다.이미지같은 컨텐츠를 유저의 의사여부에 따라 노출하도록 설정되어있었고, 해당 이미지를 보지 않았다면 이미지는 다운이 되지 않습니다.또한 로컬에서의 관리(읽지않음,읽음,삭제등 상태플래그)가 그대로 메일 서버에도 똑같이 반영되기 때문에 결국 동기화가 됩니다. 이메일의 제목만 미리 보고 다운받을지에 대해 결정을 할 수 있고 메일을 지우지 않는 한 서버에도 여전히 메일들이 저장되어 있기 때문에 PC에서 봐야할 메일들은 나중에 PC에서 다시 볼 수가 있습니다.


▶티켓 관리

 쉬운 말로 과제관리. 과제관리와 다른 점은 별도의 툴을 사용하느냐 아니냐의 유무정도이다. 과제관리는 엑셀로 하는 것이 통상이지만, 티켓 관리는 더 넓은 영역에서 접속할 수 있도록 웹으로 진행하는 것이 일반적.


▶PROXY server

클라이언트(웹 브라우저)에서 어떤 인터넷 주소의 정보검색에 대한 요구를 받으면그 주소를 그 전에 읽어 저장한 장소에서 찾아있으면 그 정보를 즉시 찾아 주고없으면 그 주소지의 서버로부터 가지고 와서 저장장소에 저장한다 


프락시 서버의 기능에는 캐쉬 기능이 있다네트워크의 트래픽을 줄이고데이터의 전송 시간을 향상 시킨다.방화벽 기능을 
담당하기도 한다
인터넷 동시 접속자가 많을 때음란사이트 등 유해 
사이트를 차단할 때내부 사용자 IP주소를 사설 IP주소로 설정하여 보안을 강화할 때해커 등 외부의 침입을 방지하고자 할 때 유용하다인터넷을 사용할 때 보안이나 규제가 필요한 기업이나 학교 등에서 많이 도입하고 있다.

 


웹 프록시의 개념으로 웹 브라우저가 프록시 서버를 명기하거나 특별한 설정 없이 (transparent caching) 프록시를 이용할 수 있다
이런 경우 
데이타의 흐름이 모두 프록시 서버를 거쳐서 일어나게 된다어떤 웹사이트로 접속을 시도하면우선 프록시 서버로 연결하여 데이터를 가져온 다음에 이것을 사용자의 PC에 전달한다이것의 장점은 웹에서 검색할 때마다 통신선로를 타고 검색하는 것은 통신망의 속도도 느리고통신오류가 발생하면 재전송을 하는 등의 일 때문에 더욱 속도가 느려질 수 있지만먼저 프록시 서버를 연결하여 여기서 찾고자 하는 데이터를 갖고 있으면 빠르게 사용자에게 전달할 수 있다.


방화벽과 캐시 등의 기능들과 하나의 패키지로 통합되어 있는 경우도 있고별도의 서버 프로그램에서 수행될 수도 있다예를 들어
방화벽 서버와 함께 한 컴퓨터 내에 있을 수도 있고
별도의 서버에 존재하면서 방화벽을 통해 요구를 전달하는 것도 가능하다.



▶Forward FROXY

클라이언트가  example.com 에 연결하려고 하면 사용자 PC 가 직접 연결하는게 아니라 포워드 프록시 서버가 요청을 받아서  example.com 에 연결하여 그 결과를 클라이언트에 전달(forward) 해 준다.

포워드 프록시는 대개 캐슁 기능이 있으므로 자주 사용되는 컨텐츠라면 월등한 성능 향상을 가져올 수 있으며 정해진 사이트만 연결하게 설정하는 등 웹 사용 환경을 제한할수 있으므로 기업 환경등에서 많이 사용한다.


▶Reverse FROXY

클라이언트가 example.com 웹 서비스에 데이타를 요청하면 Reverse Proxy는 이 요청을 받아서 내부 서버에서 데이타를 받은후에 이 데이타를 클라이언트에 전달하게 된다.

내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안때문이다.

보통 기업의 네트워크 환경은 DMZ 라고 하는 내부 네트워크와 외부 네트워크 사이에 위치하는 구간이 존재하며 이 구간에는 메일 서버, 웹 서버, FTP 서버등 외부 서비스를 제공하는 서버가 위치하게 된다.

example.com 사는 서비스를 자바로 구현해서 WAS 를 DMZ 에 놓고 서비스해도 되지만 WAS 는 보통 DB 서버와 연결되므로 WAS 가 최전방에 있으면 WAS 가 털릴 경우 DB 서버까지 같이 털리는 심각한 문제가 발생할 수 있다.

이때문에 리버스 프락시 서버를 두고 실제 서비스 서버는 내부망에 위치시키고 프락시 서버만 내부에 있는 서비스 서버와 통신해서 결과를 클라이언트에게 제공하는 방식으로 서비스를 하게 된다.


Q : 포워드 프록시 이후에 인터넷 연결이 되는데 클라이언트와 포워드 프록시는 어떻게 연결되어 있는 걸까?
A : 사실 저부분도 인터넷으로 연결된다. 예를 들어 와이파이가 연결되면, 포워드 프록시로만 연결되도록 권한이 제한된 인터넷이 포워드 프록시까지 연결해주고, 포워드 프록시에서 작업을 처리한뒤 인터넷에 클라이언트의 요청을 전달한다. 



▶Load Balancer

로드 밸런싱이란 부하 분산을 위해서 가상(virtual) IP를 통해 여러 서버에 접속하도록 분배하는 기능을 말한다.

하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도 저하 등을 고려하여 적절히 분산처리하여 해결해 주는 서비스이다. 로드밸런싱을 해주는 소프트웨어 혹은 하드웨어 장비를 로드밸런서라고 한다. 로드밸런서의 주 목적은 동시에 오는 수 많은 커넥션을 처리하고 해당 커넥션이 요청 노드 중의 하나로 전달될 수 있게 하는 것이다. 그리고 단지 노드를 추가하는 것만으로 서비스가 확장성을 가질 수 있도록 한다. 오픈 소스 로드 밸런서 중 많이 사용되고 있는 것은 HAProxy 이다.
더 자세한 로드벨런서는 여기서 : 
http://asfirstalways.tistory.com/320 



Secure Shell, SSH

시큐어 셸(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.ssh의 프로토콜로 서버에 접속하게 해주는 응용프로그램은 한국 어플인 넷사랑의 xshell, putti 등이 있다.


▶PaaS란 무엇인가?

PaaS는 개발자를 위한 일련의 서비스로, 개발자들이 기반 인프라스트럭처에 대해 신경 쓰지 않고 앱을 개발하고 테스트할 수 있게 해준다. 개발자들은 앱을 개발해 내놓는 과정에서 서버, 스토리지, 백업 프로비저닝에 대해 걱정하고 싶어하지 않는다. 그저 코드를 작성하고 앱을 테스트하고 출시한 후 지속적으로 버그를 수정하는 데 전념하고 싶어한다. 서버 설비와 관련된 모든 백엔드 작업은 자동으로, 개발자가 인지하지 못하는 사이에 백그라운드에서 이루어져야 하는데, PaaS의 역할이 바로 그것이다.

http://www.itworld.co.kr/news/80349#csidx9a8c554a121824a870f57e0bf1fe88c 


IaaS, PaaS, SaaS차이점

- IaaS(Infrastructure as a Service)> : 서버를 운영하기 위해서는 서버 자원, IP, Network, Storage, 전력 등등 인프라를 구축하기 위해 여러가지가 필요합니다. Iaas는 이러한 것들을 가상의 환경에서 쉽고 편하게 이용할 수 있게 서비스 형태로 제공합니다. Iass를 서비스로 제공하기 위해 기존 서버 호스팅보다 H/W 확장성이 좋고 탄력적이며 빠른 제공을 할 수 있는 가상화 기술을 이용합니다. Iass는 Pass, Saas의 기반이 되는 기술입니다.


- PasS(Platform as a Service) : 서비스를 개발 할 수 있는 안정적인 환경(Platform)과 그 환경을 이용하는 응용 프로그램을 개발 할 수 있는 API까지 제공하는 형태를 Paas라고 합니다.


- SaaS(Software as a Service) : Cloud환경에서 동작하는 응용프로그램을 서비스 형태로 제공하는 것을 Saas라고 합니다. 예를들어 메일 서비스를 들 수 있습니다. 사용자는 이 시스템이 무엇으로 이루어져 있고 어떻게 동작 하고 있는지 그리고 메일을 백업을 어떻게 하는지 알 필요가 없습니다. 그저 서비스 형태로 원하는 단말기(PC, Tablet, SmartPhone 등등)에서 메일을 주고 받으며, 필요하면 언제든지 공간도 늘려서 서비스를 받을 수 있기 때문입니다.


환경변수란?

원래 변수라는 것은, 특정 프로그램 안에서 어떤 값을 메모리에 저장해 놓을 때 쓰는 것입니다. 그런데 만약 컴퓨터 시스템의 전체적인 규모로, 어떤 간단한 값을 저장해 놓고, 여러 프로그램들이 그 값을 쉽게 참조하려면, 환경 변수를 많이 사용합니다. 


WBS

WBS(Work Breakdown Structure:作業分解構成図)は、プロジェクト全体を細かな作業(Work)に分解(Breakdown)した構成図(Structure)です。プロジェクト全体でやるべき作業を洗い出す際にとても役立ちますので、「プロジェクト成功の鍵はWBSにあり」と心しておいてください。 

01.png

Routing, Routing table

데이터가 전달하는 과정에서 여러 네트워크들을 통과해야하는 경우가 생길 수 있다. 여러 네트워크들의 연결을 담당하고 있는 라우터 장비가 데이터의 목적지가 어디인지 확인하여 빠르고 정확한 길을 찾아 전달해주는 것을 Routing(라우팅)이라고 한다.

라우팅을 너무 어렵게 생각할 필요는 없다. 우리가 처음 가보는 장소를 찾아가기 위해 하는 모든 행동들을 라우터가 패킷을 전달하는 라우팅 과정에 비교해보면 쉽게 이해할 수 있다. 예를 들어 새로 생긴 맛집을 찾아가려고 한다는 가정을 해본다.

우리가 가장 먼저하는 것은 아마 그 곳이 어느 동네에 있는지 주소는 무엇인지를 확인하는 일일것이다. 그런 뒤에 목적지인 맛집이 있는 동네로 가기 위해 가장 편하고 빠른 교통수단과 경로는 어디인지를 생각할 것이다. 지하철을 타기로 했다면 몇호선을 어느 방면으로 타야하는지 정확한 방향을 확인한 후에 선택한 교통수단을 이용하여 목적지로 출발한다. 

방금 위에서 본 과정을 라우터가 수신한 패킷을 전달하기 위한 과정으로 비교해서 생각해보자. 

우리가 맛집의 정확한 위치를 파악하는 것 처럼 전달받은 패킷을 전달하기 위해 라우터도 가장 먼저 목적지가 어디인지 IP주소를 확인한다. 그런 뒤에 가장 빠른 경로가 어디인지를 확인하고 그 경로로 가기 위해서는 자신의 어느 인터페이스로 패킷을 내보내야 하는지 결정할 것이다. 그런 뒤에 결정한 인터페이스로 패킷을 전달하면 그 패킷은 또 다른 라우터로 전달되어 위와 같은 과정을 목적지 네트워크에 도착할 때 까지 반복할 것이다. 

이처럼 데이터를 목적지까지 전달하기 위한 모든 일련의 과정을 통틀어 Routing이라고 한다.



NAT(Network Address Translation, 네트워크 주소 변환

 사설 아이피가 외부로 요청을 보낼 때 공용 아이피로 변환시켜 외부와 연결하던가, 반대로 외부로 요청이 들어올 때 공용 아이피로 받아 공용 아이피를 변환시켜 사설 아이피에 연결하는 기능을 한다.

패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 합니다. NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함입니다. 많은 네트워크 관리자들이 NAT를 편리한 기법이라고 보고 널리 사용하고 있으며, NAT가 호스트 간의 통신에 있어서 복잡성을 증가시킬 수 있으므로 네트워크 성능에 영향을 줄 수 있는 것은 당연하다 볼 수 있습니다.

NAT는 IPv4의 주소 부족 문제를 해결하기 위한 방법으로서 고려되었으며, 주로 비공인(사설, local) 네트워크 주소를 사용하는 망에서 외부의 공인망(public, 예를 들면 인터넷)과의 통신을 위해서 네트워크 주소를 변환하는 것입니다. 

즉 내부 망에서는 사설 IP 주소를 사용하여 통신을 하고, 외부망과의 통신시에는 NAT를 거쳐 공인 IP 주소로 자동 변환합니다.


enter image description here



패킷(packet)

패킷(packet)은 사전적인 의미로는 '한 다발, 한 묶음'을 뜻하는 말로 통신, 네트워크에서는 한 번에 전송하는 정보의 단위를 일컫습니다.

좀 더 설명드리자면 통신 등에서는 모든 데이터들을 이와 같은 패킷 단위로 잘게 쪼개어서 전송을 합니다. 매 패킷마다에는 받을 주소지와 데이터 본내용 그리고 에러체크 정보가 들어 있습니다.

그런데 왜 이와같이 잘게 쪼개냐구요?

그 이유는, 예를 들어 100MByte의 크기의 데이터를 전송하고자 할 때 이를 한꺼번에 1초에 1MByte 전송할 수 있는 회선에 보낸다고 칩시다. 그러면 받는 쪽에서는 뭐 대략 100초라는 시간이 걸릴 겁니다.

이렇게 한꺼번에 보내는 경우 아무런 에러없이 한번에 도달했다면 훨씬 효율적이긴 하겠지만 만약에 중간에 회선이 끊기거나 에러체크에 의해 잘못된 데이터가 중간에 1개만 끼었다는 것을 검출하게 되면 다시 처음부터 데이터를 받아야 할 겁니다. 그러면 다시 100초라는 시간을 버리게 됩니다.

반면에 데이터를 패킷단위로 잘게 쪼개어 보내게 되면 예를 들어 1MByte씩 (실제로는 훨씬 적습니다) 쪼갤 경우100번의 과정 즉, 1번패킷전송-수신체크-2번패킷전송-수신체크....... -100번패킷전송-수신체크-완료통보 라는 과정을 거쳐 통신이 이루어지는데 중간에 에러가 나더라도 해당하는 그 번호의 패킷만 재전송하면 되므로 훨씬 효율적이 됩니다.

이러한 이유로 대부분의 데이터 통신에서는 데이터를 패킷단위로 쪼개어 서로 주고 받고 있습니다.

참고로 패킷이 소프트웨어적인 측면에서의 묶음이라면 실제로 데이터를 주고 받는 네트워크 장비에서는 패킷을 다시 프레임이라고하는 역시 아주 작은 단위로 묶어서 신호를 처리하고 있습니다.프레임도 패킷과 같은 이치입니다.(출처: http://jwprogramming.tistory.com/30 [개발자를 꿈꾸는 프로그래머])


vpn
 vpn이란 공유네트워크 상에 사설네트워크를 구축하는 것 혹은 그러한 기술을 의미 합니다. 가상적인 전용선처럼 이용가능하기 때문에 Virtual(仮想的)한 Private Network(専用線)이라고 불립니다. 


▶Ephemeral port

An ephemeral port is a short-lived transport protocol port for Internet Protocol (IP) communications. Ephemeral ports are allocated automatically from a predefined range by the IP stack software. An ephemeral port is typically used by the Transmission Control Protocol (TCP), User Datagram Protocol (UDP), or the Stream Control Transmission Protocol (SCTP) as the port assignment for the client end of a client–server communication to a well-known port on a server.


▶Kitting(キッティング)

パソコンなどの導入時に実施するセットアップ作業のこと。

必要なアプリケーションのインストールや社内ネットワークへの接続など、ユーザがすぐに利用できる状態にすること。パソコンの新規導入時の初期設定だけではなく、PC入替え、WindowsなどのOSの移行時にもデータ移行も含めて同様の設定作業が必要となる。単純作業ではあるが、毎年春の新入社員の受け入れ準備などで数十台、数百台規模で実施することになる。手作業で同じ作業を繰り返すことの作業者負担は非常に大きく、多くの企業で課題となっている。


作業時間は条件によって異なるため、一概にはいえないが、一般的なWindowsPCで1台数時間を要すといわれる。仮に1台3時間の設定時間がかかるPC100台を一人の作業者がキッティング作業をすると、合計300時間を要すことになる。一日8時間労働で37.5日、一日2時間残業してもらっても30日、約一月半もかかる膨大な作業となる。PC側の処理待ち時間に同時並行で作業することもできるが、それでも限界がある。


そこで、キッティングの自動化ツールやキッティングを含むPCの調達から導入、廃棄までを支援するLCMサービスがITベンダ各社より提供されている。IT資産管理などの機能も併せ持つ管理ツールの提供やIT資産のライフサイクル管理全般をサポートするサービスなどがある。


DNSラウンドロビンと
DNSの仕組みにおいて、1つのドメイン名に対して複数のIPアドレスを割り当てることによって、負荷を分散する仕組み


Stateless와 Stateful 

Stateless란 http와 같이 client의 이전 상태를 기록하지 않는 접속이란 의미입니다.

그에 비해 Stateful은 client의 이전 상태를 기록하고 있는 것이죠.

 

Stateless는 웹서버가 사용자의 작업을 기억하고 있지 않다는 의미이고

Stateful은 사용자의 상태를 서버가 기억하고 있다가 유용한 정보로써 활용한다는 것입니다.












































































・관계형 스키마 작성

-정형화가 잘 되어 있어서 7가지의 단계를 따라가면 er다이아그램이 관계형스키마로 맵핑된다.




・1단계 : 엔티티 타입을 관계형 스키마로 맵핑

-E1이라는 엔티티 타입이름이 테이블의 이름이 됨

-키애트리뷰트는 밑줄!





・2단계 : 위크 엔티티타입을 관계형 스키마로 맵핑

-참조하는 테이블의 기본키(PK)를 애트리뷰트로 가져와 fk를 준다.

-약한 엔티티타입은 pk가 될 수 있는 애트리뷰트가 존재하지 않기때문에 약한 엔티티타입의 부분키(PK1)와 참조하는 테이블의 기본키(PK)를 복합키로 생성하여 약한 엔티티타입의 기본키를 만든다.





・3단계 : 1:1 관계 타입의 변환

-1:1과 1:n 관계는 fk를 통해 서로 연결된다.

-er에서 두줄을 가지고 있는 쪽(전체참여)에 fk를 준다.





・4단계 : 1:n 관계 타입의 변환

-n쪽에다가 fk를 준다.





・5단계 : n:m 관계 타입의 변환

-1:1관계와 1:n관계에서는 한쪽에 fk를 주지만, n:m관계에서는 새로운 릴레이션R을 생성해 그 릴레이션에 fk를 준다.

-새로 생성된 릴레이션R은 양쪽의 엔티티타입에서 가져온 두개의 pk를 fk로 삼는다.(fk 2개)

-fk가 되는 두개의 애트리뷰트가 합쳐진 복합키가 릴레이션R의 기본키가 된다.



・6단계 : 다치 에트리뷰트를 관계형 스키마로 맵핑

-다치애트리뷰트를 제외한 애트리뷰트로 관계형 스키마를 생성한다.

-다치애트리뷰트는 따로 빼내어, 다치애트리뷰트의 이름으로된 릴레이션을 새로 만든다

-참조하는 테이블의 기본키를 새로운 릴레이션의 fk로 지정한다.

-참조하는 테이블의 기본키와 다치애트리뷰트외 이름으로된 애트리뷰트를 생성하고, 두 애트리뷰트의 복합키를 pk로 사용한다.




・7단계 : 3차 관계타입을 관계형 스키마로 매핑

-5단계와 동일







실제 ER모델링을 관계형 스키마로 맵핑해보자!


*관계형 스키마의 인풋이 되는 ER모델




















*완성된 모습의 관계형 스키마






















・개념적인 설계에서 논리적인 설계로 나아가기

-개념적인 설계에서 논리적인 설계로 맵핑을 해보자

-개념적 설계의 산출물인 er다이어그램은 인간이 이해하기 쉬운 것

-논리적 설계로 넘어가면서 점차 컴퓨터가 이해할 수 있는 모델들로 바꾸어야함

-논리적 모델로써 relational model을 사용함

-논리적 설계의 아웃풋은 relational schema

-개념적 설계에서 논리적 설계로 맵핑하는 과정은, db 설계 전반중 가장 정형화되고 기계적으로 가능함

-즉, 정해진 메뉴얼대로 하란대로만 하면됨. 이해하기 쉬움


・논리적 설계

-정의 : 개념적 설계의 아웃풋인 er다이아그램을 데이터베이스 관리 시스템에 매빙하는 것

-아웃풋은 relational schema





・용어설명을 통해 관계형 데이터베이스 알아보기


-테이블 네임 = 릴레이션 네임(테이블을 릴레이션이라고 부름) = (개념적 설계에서)엔티티 타입

-키어트리뷰트 = 기본키 = primary key(PK)

-관계(테이블 또는 릴레이션) : 흔히부르는 테이블이라는 이름으로 사용됨. 관계의 열은 어트리뷰트라고 하고, 행은 튜플이라고 부름

-튜플(레코드 또는 행) : 관계를 구성하는 각각의 행

-어트리뷰트(속성 또는 열)

-도메인 : 어트리뷰트가 취할 수 있는 같은 타입의 원자 값들의 집합. 예를 들어 나이라는 어트리뷰트에서 나이  를 integer 타입의 0~150으로 정한다면 각각 나이들의 집합이 도메인 

-후보키 :릴레이션에 이는 속성 중 유일성최소성을 만족하는 키로써, 후보키중 하나를 기본키로 사용함. 

-기본키(primary key) : 후보키 중에서 선정된 하나로 유일성최소성을 만족함. 기본키는 null값과 중복값이 인정되지 않음.

-슈퍼키 : 하나 이상의 어트리뷰트들의 합체로 이루어진 키. 

 예를 들어, 대학생 릴레이션에 이름과 학번이라는 어트리뷰트가 존재할 때 (이름+학번)을 하나의 키로 인정하고 사용함. 슈퍼키는 유일성을 가짐. (이름+학번)일 경우에 (이름+학번)이라는 키는 (학번)이라는 유일성을 가진 어트리뷰트 때문에 오직 하나만 존재할 것이기 때문. 

  그러나 슈퍼키는 최소성을 가지지 못함. 즉, (학번) 어트리뷰트만으로 각 튜플이 구분될 수 있는데, 굳이 학번에 이름을 합친(이름+학번)으로 해야하냐..

-외래키(foreign key) : 다른 릴레이션의 어트리뷰트를 참조해 연결해 주는 어트리뷰트를 외래키라고 함. 이때 외래키는 다른 릴레이션의 유일성을 가진 애트리뷰트를 참조해야함. 학생 릴레이션의 소속학과 애트리뷰트가 학과 릴레이션의 학과번호 애트리뷰트를 참조할 때, 학생 릴레이션의 소속학과 애트리뷰트는 외래키가됨



・관계형 데이터베이스의 제약조건

-★참조무결성 제약조건(referential integrity constraint) : 한 릴레이션에 있는 튜플이 다른 릴레이션에 있는 튜플을 참조하려면 반드시 참조되는 튜플이 해당 릴레이션 내에 존재해야 한다는 것.

 예를 들어, 학생 릴레이션의 소속학과 애트리뷰트에 5라는 튜플값이 존재한다고 하면, 이 외래키가 참조하는 학과 릴레이션의 학과번호 애트리뷰트에도 반드시 5가 존재해야한다.

-키제약조건 : 키 어트리뷰트의 값은 릴레이션 내의 각 투플을 유일하게 식별할수 있어야 한다.

-도메인 제약조건 : 각 애트리뷰트의 값은 반드시 도메인에 속하는 원자중 하나여야 한다.

-엔티티 무결성 제약조건 : 어떠한 기본키 값도 null을 가질 수 없다.



・제약조건 위배에 따른 처리

-삽입연산 : [201430010/곽나리/서울/5]를 학생 테이블에 넣고 싶은데, 참조하는 학과 테이블의 학과번호 애트리뷰트에서 5는 존재하지 않으므로 참조무결성 제약조건으로 인해 해당 데이터는 삽입될 수 없다.

-삭제연산 : 학과 테이블에서 2번(게임공학과)를 삭제하려고하면, 학과 테이블의 학과번호 애트리뷰트를 참조하고 있는 테이블이 존재하고 있기 때문에 삭제되지 않는다.(삭제해버릴시 참조무결성 제약조건을 위배함)

-수정연산 : 전요한의 소속학과를 5로 수정하려고 할 시 오류가 발생한다.


・논리적 설계

-논리적 설계의 단계(엔티티생성 -> 엔티티사이의 관계(식별자, 1:1/1:n 등 설정) -> 관계에서 세부사항을 정리(관계의 설명을 코멘트로 추가

-키어트리뷰트를 엔티티타입의 가장 위에 적어준다

-er에서는 관계를 선으로 표현한다.(자세한 내용은 er관계 포스트참고)






식별자(identifying, non-identifying)란?


idenfier.png



부모테이블의 유니크 키나 기본키(PK=primary key)로 지정된 컬럼이 자식테이블의 기본키 컬럼과 연결된 경우 실선으로 표기되고 식별 관계라고 한다.


부모테이블의 유니크 키나 기본키(PK=primary key)로 지정된 컬럼이 자식테이블의 일반 컬럼과 연결된 경우점선으로 표기되고 비식별 관계라고 합니다.






・물리적 설계

-데이터 타입을 설정한다.

-제약조건을 설정한다.




・개념적설계는 뭐하는 거냐면여~

-수집한 요구사항을 분석해 엔티티와 관계를 추출

-엔티티와 어트리뷰트들, 관계에 속한 어트리뷰트인지를 분류

-최종적으로 er다이어그램을 그리는 것


・개념적 설계 방식

-bottom up 상향식:최소단위의 정보들을 상위개념의 정보 그룹으로

-top down 하향식 : 상위 그룹의 내용을 쪼개 하위그룹으로 나아가는 것

-주로 하향식 방법을 사용함

-그 이유는 전체의 큰그림을 그린 후 작은단위로 나아가기 때문에 넓게보기 좋음

-상향식 방법은 최소단위가 빠질 것을 우려해 보안책으로 사용함


・개념적 설계 플로우

데이터베이스 요구사항 ->엔티티 추출(약한, 강한 엔티티타입 설정) -> 관계설정 -> 카디날리티 설정 -> 애트리부트 설정(키 애트리뷰트 설정, 의도된 애트리뷰트 설정, 다치 애트리뷰트 설정) -> er다이어그램


・K대학교의 데이터베이스 요구사항

<학생관리>

 학번,이름주소,생년월일 등 개인정보를 관리, 그리고 학생은 하나의 전공학과에 속해야하며 , 한분의 지도교수 밑에서 전공지도를 받는다. 매 학기마다 강의를 신청하여 수업을 듣는다.

<과목관리>

교내에 개설된 과먹에 대한 정보를 관리한다(과목번호, 과목명, 과목개요) 그리고 각 과목은 여러개의 섹션으로 나누어서 관리한다. 단 섹션이 존재하지 않는 과목이 존재할 수도 있다.

<교수관리>

교수의 이름, 전공분야, 보유기술 등의 정보를 관리. 특히 보유기술은 여러가지가 있을 수 있음.그리고 교수는 관련 과목을 강의하고 지도학생을 보유한다.

<학과관리>

학과의 학과명, 사무실 위치, 전화번호 등의 정보를 관리한다. 그리고 각 학과의 교수들 중 학과장을 임명한다. 학과장은 임명날자가 있다.

<수강신청>

학생들은 과목을 수강하기 위해 등록을 한다.



・1.엔티티 추출하기

-엔티티 : 실체가 명확히 존재하는 것, 각 엔티티는 독립적으로 고유식별이 가능해야함(사람 vs 물건 과 같이, 미시가 잘되어야함)

-1.명사 정제하기 : 디비 요구사항으로부터 얻어낸 명사들중 엔티티라고 생각되는 명사를 추출, 구분보통 문장에서 명사가 엔티티인 경우가 많더라.. 이 명사들을 구분지어 엔티티 생성

-엔티티 네이밍 센스 : 중복x, 너무 길지않은, 의미없는 수식어x

-2.명사 그룹짓기 : 대표하는 명사로 그룹의 이름을 붙이고, 다른 그룹에 속하는 단어를 옮기기,

다른 그룹과 연관된 명사 제거(전공학과, 수강과목, 지도교수, 지도학생, 학과장 제거)

-3.엔티티 정의내리기

-4.엔티티 표기하기




학생:학번 이름 주소 생일 전공 과목 교수

과목:과목번호 과목명 과목개요 섹션

교수:이름 전공분야 보유기술 지도학생

학과:학과면 사무실위치 전화번호 학과장




・2.관계설정하기

-관계 : 문장속에서 주로 동사인 경우가 많음.

엔티티 간의 관계를 설명하는 동사나 이벤트를 나타내는 동사를 찾음


<그림설명>

-섹션이라는 엔티티는 독립적으로 존재할 수 없고, 과목이 존재해야만 존재할 수 있는 엔티티 이다

따라서 약한 엔티티타입이라고 할 수 있다(이중마름모)

-1,2,3,4,5는 문장으로된 요구사항이다. 각 문장의 명사인 주어 목적어와 동사를 구분하면 엔티티타입과 관계를 구분할 수 있다.






・3.카디날리티 설정

-커디날리티 설정: 한 엔티티타입의 어트리뷰트(그림에서 점)이 한 개의 선만을 가지면 1 여러개의 선을 가지면 n







-하나의 학과는 하나의 교수에게 학과장 당하고, 하나의 교수는 하나의 학과의 학과장한다.

-학생은 여러개의 한 학생은 하나의 학과만을 전공하지만, 한 학과는 여러명의 학생으로 부터 전공당한다.

-한 교수는 여러 과목을 강의하지만, 여러과목은 한 교수에게 강의된다.

-한 학생은 한명의 교수에게 전공지도 받지만, 한 교수는 여러명의 학생을 전공지도한다.

-여러명의 학생은 여러과목을 수강신청하고, 여러과목은 여러학생에게 수강신청 당한다.


・4.키어트리뷰트 설정

-엔티티마다 서로 다른 값을 가지는 고유한 어트리뷰트로 각각 유일한 값을 가져 식별이 가능한 값

-키어트리뷰트의 기준 

-어트리뷰트 값이 변하지 않아야한다

-반드시 값을 갖고 있어야한다.

-한 엔티티 타입내에 복수의 키어트리뷰트가 존재할 수 있다.(학생 엔티티타입 내에 학번, 주민번호)

-키어트리뷰트를 설정 후 ,개념적 설계도에서 밑줄을 긋는다!


<개념적 설계 그림설명>

-한 교수가 보유한 보유기술은 여러개가 존재할 수 있으므로 다치 어트리뷰트

-나이는 생년월일을 통해 계산되므로 유도된 어트리뷰트






5.관계타입 어트리뷰트 정의

-관계타입 어트리뷰트:관계 타입도 엔티티아비과 유사하게 어트리뷰트를 지닐 수 있다.





























・요구사항 분석의 플로우

-요구사항 수집의 기대되는 최종적 아웃풋은 다음단계의 개념적 설계의 인풋으로 사용되는 엔티티,어트리뷰트, 관계를 파악하는 것 어떤 조사를 하던 요구 조사단계의 최종 아웃풋을 잊어서는 안돼.

-> 어떤 조사 방법들을 사용하면, 무지한 클라이언트들로부터 그들이 요구사항을 구체적으로 뽑아내고, 개념적 설계로 나아갈 수 있는 인풋 자료들을 확보할 수 있을지..


-먼저 클라이언트 들은 데이터 베이스에 대한 개념도 없을 것이므로, UI베이스로 클라이언트가 어떤 것을 만들고 싶은지(예를 들어, 수강신청, 학생조회 시스템등), 구축하고 싶은 시스템이나 어플이 무엇인지와 그 시스템이 어떤 기능을 가지고 있는지를 파악.

-클라이언트가 희망하는 시스템에 따라, '아 당신들이 원하는 시스템이나 어플을 만들기 위해서는 이런이런 데이터들이 피요하겠군요' 하고 데이터들을 설명하고, 클라이언트의 요구사항을 구체화

-프로젝트를 더 효율적으로 진행시키기 위해서, 기존에 어떤 시스템을 가지고 있고 어떤 인프라를 가지고 있는지에 대한 조사도 필요


-클라이언트가 희망하는 시스템에 필요한 데이터들을 뽑아낸 이후에는 그 데이터들을 어떻게 엔티티와 애트리뷰트 그리고 관계로 만들어 낼 수 있을지 고민하기


・조사할 때 고려사항

-조사목적(요구사항 조사의 목적이 무엇인가)

-조사범위(어떤 부서, 어떤 사람들에게 질의를 할 것인가)

-개발 비용과 일정

-조사 결과



・K대학교의 데이터베이스 요구사항

-나 : 저희 왜부르셧어요, 뭐하고 싶으세요?

-관계자 : 다음과 같은 데이터들이 필요합니다(이런 똑똑한 클라이언트는 존재하지 않음 사실)

<학생관리>

 학번,이름주소,생년월일 등 개인정보를 관리, 그리고 학생은 하나의 전공학과에 속해야하며 , 한분의 지도교수 밑에서 전공지도를 받는다. 매 학기마다 강의를 신청하여 수업을 듣는다.

<과목관리>

교내에 개설된 과먹에 대한 정보를 관리한다(과목번호, 과목명, 과목개요) 그리고 각 과목은 여러개의 섹션으로 나누어서 관리한다. 단 섹션이 존재하지 않는 과목이 존재할 수도 있다.

<교수관리>

교수의 이름, 전공분야, 보유기술 등의 정보를 관리. 특히 보유기술은 여러가지가 있을 수 있음.그리고 교수는 관련 과목을 강의하고 지도학생을 보유한다.

<학과관리>

학과의 학과명, 사무실 위치, 전화번호 등의 정보를 관리한다. 그리고 각 학과의 교수들 중 학과장을 임명한다. 학과장은 임명날자가 있다.

<수강신청>

학생들은 과목을 수강하기 위해 등록을 한다.

+ Recent posts