운영체제가 없으면 어떻게 핸들링?

 

원래 도커는 리눅스 OS위에서 작동하도록 설계??.

 리눅스의 chroot jail이라는 기능을 기반

 컨테이너 내부에서는 외부 Host OS의 존재를 인식할 수 없지만,

외부 Host OS에서는 컨테이너를 그저 하나의 프로세스로  인식?

 

 

Docker for Windows/Mac은 리눅스 가상 환경을 생성하여 도커를 지원함.

Linuxkit을 사용. Linuxkit은 리눅스의 커널을 최소한으로 경량화하여

필요한 작업만 컨테이너 기반의 서비스로 정의해 사용.

 

 

2020년 5월 도커는 윈도우즈에 새로 업데이트된 WSL2 기능을 사용하여 가상화를 하기 시작

Docker for Windows를 설치할 때 기본 체크됨

 

docker0이라는 브리지를 통해 외부와 통신함

 

 

운영체제의 유무, OS 없는 컨테이너가 빠름

운영체제는 최소 메모리/CPU 할당도 필요함. -> 컨테이너는 리소스를 공유해서 나눠서

운영체제 레벨 패치작업이 없음.


VM Docker
Host OS 논리적 가상화 (완전 분리) - Kernel 공유 (프로세스 공유)
- Container 내에서 명령어 실행 시 실제로는 Host OS에서 실행
Guest OS 풀 설치 Host OS와 비교해서 다른부분만 Packing
OS지원 모두 지원 Linux기반의 OS만 지원
장점 - 해킹 되더라도 다른 가상머신에 영향을 미치지 않음
/
이것도 반쪽짜리, 통신이 되니깐 같이 뚫림
- 시스템 자원의 효율적 사용
- 생산성 향상
단점 - 시스템 확장시 자원의 낭비
- 트래픽에 따른 분산처리가 유연하지 못함
- Host OS를 공유하기 때문에
Host 권한이 해킹된다면 다른 컨테이너들도 위험함

 

도커의 다른 기능

여러 Container간에 호스트 자원을 분리해서 사용하게 해줌

리눅스 고유 기술인 namespace와 cgroups을 사용해서 격리하는 기술

 

Namespace 커널에 관련된 영역을 분리 mnt, pid, net, ipc, uts, user
cgroups 자원에 관련된 영역을 분리 mem, cpu, i/o, network

 

 

 

컨테이너에 OS 없고,

필요한 모듈만 확장시키기 쉽다

개의 POD 확장시키면

 

도커허브에서 node.js 이미지를 실행할 수 있는 컨테이너 이미지를 가져온다.

 Hello world 앱을 하나의 컨테이너로 만든다.

 

Dockerfile                

FROM node:slim

EXPOSE 8000

COPY hello.js

CMD node hello.js

 

로컬 도커에서 컨테이너를 구동시킨다, 추가로 외부 서비스 하도록 통신 설정?

 

 

예제

이미지가 없다면 자동으로 다운로드함

nginx 컨테이너 docker container run --name webserver -d -P nginx
Node.js 컨테이너 docker run -d -it -p 9000:8000 --name=nodejs_test2 node:latest
js스크립트를 짜서
해당
컨테이너에 cp
컨테이너
진입하여, node.js실행 : docker exec -it nodejs_test2 /bin/bash


httpd(Apache) 컨테이너 docker run -d -p 8080:80 --name httpd-basic httpd:2.4

 

혹은 이미지 생성 방법

From 베이스이미지 필요함

 

개발페이지 작성/개발 8080포트 리슨

 

Dockerfile 작성

FROM golang:1.9RUN mkdir /echo
COPY main.go /echo
CMD [
"go", "run", "/echo/main.go"]

 

빌드

docker image build -t example/echo:latest

 

실행

docker container run example/echo:latest

 

접속확인

curl http://localhost:8080/

 




PC에서 네이버를 쳤을때 / IT측면에서 Deep dive하게 분석

아래 키워드를 하나씩 찾아서 공부하면

 

PC 공유기         ISP 인터넷         CDN 네이버서버
URL입력, IP는몰라도됨
DNS쿼리
hosts파일
계층적
DNS 구조

캐싱파일

GSLB(azure Traffic Manager개념)



페이지 내에서
기능클릭 Request요청
GET
리소스주세요 요청(Read)

HTTP stateless


서버에서만
연산하는 것이 아니고
클라이언트에서
연산을 시키자
-> 스크립트 언어 javascript

인터넷브라우져 3요소
1.DOM파서
2.렌더링엔진
3.스크립트엔진

 

웹브라우저는 먼저 웹서버와 TCP연결 (바로 종료됨, 유지안됨)
socket() bind() listen() connect()
이후 HTTP연결됨
공유기 DNS설정 전용선업체
사용자 가까운 CDN
POP ?
캐싱구조
서버개념에서는
다수의
서버가 L4 로드밸런싱
서버가
죽어도 세션이 유지되어야 하므로

세션클러스터링 기능
 

WEB서버 정적컨텐츠/송수신 담당
WAS서버 동적컨텐츠/처리,연산 담당
DB서버 상태/결과에 대한 기록 저장


백엔드서버
Response 만들어서 리턴

빠르게
리턴하기 위해 Redis 캐시(메모리DB)
 



성능 로그 수집 요청

문제로 의심되는 시점에 아래와 같은 방법으로 수집

 

명령창(cmd.exe)를 실행합니다.

C:\ 드라이브에 C:\PerfLogs 폴더를 생성합니다.

다음 명령을 Copy and Paste한 후 엔터 버튼을 누릅니다

Logman.exe create counter PerfLog-perf -o "c:\perflogs\PerfLog-perf.blg" -f bincirc -v mmddhhmm -max 800 -c "\LogicalDisk(*)\*" "\Memory\*" "\PhysicalDisk(*)\*" "\Processor(*)\*" "\Process(*)\*" "\System\*" "\Server\*" "\Thread(*)\*" "\Objects\*" "\Network Interface(*)\*"  "\Paging File(*)\*" -si 00:00:01

 

아래와 같이 사용자정의 세트가 만들어짐.

 

 

GUI에서 시작/중지해도 되고, cmd에서 아래 명령어도 가능

Logman.exe start PerfLog-perf 

Logman.exe stop PerfLog-perf

 




실시간웹구현의 한계 -> HTTP 특성 때문

Connectionless  비연결지향 특성

클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어 버리는 특징

HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다.

 

-> 헤더에 keep-alive라는 값을 줘서 커넥션을 재활용하는데 HTTP1.1에서는 이것이 디폴트다.

 

HTTP가 tcp위에서 구현됨

tcp는 연결지향,udp는 비연결지향

keep-alive는 옵션으로 connectionless 극복

 

Stateless 상태를 저장하지 않는다

통신이 끝나면 상태를 유지하지 않는 특징

연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.

쿠키와 세션은 위의 두 가지 특징을 해결하기 위해 사용합니다.

예를 들어, 쿠키와 세션을 사용하지 않으면 쇼핑몰에서 옷을 구매하려고 로그인을 했음에도, 

페이지를 이동할 때 마다 계속 로그인을 해야 된다면 매우 불편

 

쿠키와 세션을 사용했을 경우, 한 번 로그인을 하면 어떠한 방식에 의해서 그 사용자에 대한 인증을 유지하게 됩니다.

 

HTTP 특성상, Request 주고, 다시 받은 Response 브라우저에 다시 그려줘야 된다

, 화면이 한번 깜빡여야됨

-> 초기에 그점을 개선하기 위한 RIA(Rich Internet Application) 기술이 발달하기 시작함
Hidden Frame, Long pooling Stream 등등 기술

실시간 웹서비스를 만드려면, 양방향 송수신이 필요하다. ->

그래서 HTML5 표준안의 일부로 WebSocket API(이후 WebSocket)가 등장하게

 

 

그래서 => 폴링

 

폴링

Pooling

 

충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식

 

클라이언트가 서버에게 일정한 주기를 가지고 응답을 주고받는 폴링 방식을 사용한다.

AJAX polling

 

폴링의 문제점

폴링의 주기가 짧으면 서버의 성능에 부담이 간다.

주기가 길면 실시간성이 떨어진다.

정보가 변하지 않으면 리소스를 낭비하고 오버헤드/트래픽이 발생한다.

 

-> 롱폴링기법, 스트리밍 방식
, 롱폴링기법은 변경이 빈번하다면 얻을 있는 이점이 크지 않다.

Comet

웹 클라이언트(보통 웹 브라우저)의 명시적인 요청이 없어도 서버에서 클라이언트로 데이타를 밀어넣는(PUSH) 방식으로 동작하는 웹 프로그래밍 모델, 모델임 
즉 Comet = Reverse Ajax = Ajax Push = Two-Way-Web = HTTP server Push = HTTP streaming 등등 다 같은 의미이다. 

WebSocket

HTTP 한계를 극복하고 실시간(양방향통신) 서비스 개발을 위해 태어남
HTTP 요청과 마찬가지로 80번 포트를 통해 웹 서버에 연결
클라이언트
/서버 모두 WebSocket지원해야됨.
브라우져는 모두 지원함.

서버는...

Apache에서 별도의 모듈을 설치하여 WebSocket을 사용가능

Node.js에서도 WebSocket을 사용 가능

 

 

 

Socket.io

JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술

표준 기술이 아니고 Node.js 모듈로써, 오픈소스임.

 

WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling을 하나의 API로 추상화한 것

 

 

 

 

일반적으로 HTTP 4 이하 기반의 웹 형태로 채팅 시스템을 구현하려면, -> 폴링(Polling)사용

주기적으로 채팅서버에 새로운 대화가 있는지 찾아보고 대화가 있다면 가져오는 방식으로 실시간으로 처리를 하려면, 그만큼 더 많은 부하가 존재할 수 있다.

 

 

HTTP 5에서 지원하는 웹소켓으로 채팅 시스템을 구현하는 방법은 매우 효율적이다

문제점

웹소켓은 브라우저에서 채팅서버에 직접 연결을 시도하는 형태를 가지고 있다.

그러다보니 페이지를 갱신하게 되면 연결이 끊어지고, 다시 연결을 하는 형태를 가진다. 이러다보니 F5번을 눌러서 페이지를 습관적으로 갱신하게 된다면 세션이 끊어지고 다시 연결해야 되는 상황을 맞이할 수 있으며 더 큰문제는 웹소켓의 세션과 HTTP 세션이 서로 다르다는 것이다.

 

그러다보니, 주기적으로 웹소켓의 세션과 서버에서 저장하는 HTTP 세션을 동기화하는 모듈을 별도로 구현해야 한다. 이게 생각보다 짜증이 나서 어쩔때는 그냥 풀링 방식으로 모든 것을 구현하고 싶은 욕구가 치밀 때가 있을 것이다.(사실 풀링 방식이 더 편할때가 많다)

 

 

 

 

 




Network] WireShark에서 캡쳐 가능한 인터페이스가 보이지 않을 때wireshark 와이어샤크 어댑터(nic,인터페이스) 보이지 않는다면

WireShark에서 캡쳐 가능한 인터페이스가 보이지 않을 때

"there are no interface on which a capture can be done"메시지

 

 

조치방법

1. 윈도우의 경우엔 실행프로그램을 우클릭하여 '관리자 권한으로 실행'을  클릭하여 실행하면 해결된다.

2. 리눅스의 경우에는 sudo 명령어로 와이어샤크를 실행

 

 

 

1. 그냥구동

 

2. 관리자권한으로 구동




https://www.microsoft.com/store/productId/9N0DX20HK701 

 

The new windows terminal 

 

2019 Build 에서 공개되었던 새로운 터미널이 다운로드 설치 사용이 가능합니다. 

 

CMD, 파워셸, 리눅스접속, Azure Cloud Shell 모두 한곳에서...  

 

사용자 정의 옵션을 사용하려면 JSON 파일을 편집 

 

출처: <https://www.theverge.com/2019/6/22/18701365/microsoft-windows-terminal-10-download-store-features 

 

 

 

 

 

 




예제데이터베이스 파일 준비

AdventureWorks2012 mdf 기준 약 200MB

   

MDF파일을  데이터베이스 연결하는 방법 복원하자.

우선 SSMS를 실행하여데이터베이스에 접속

그리고 마우스 오른쪽 버튼을 이용하여 [데이터베이스] – [연결]을 선택한다.

   

데이터베이스연결 창이 나타나면 [추가] 버튼을 클릭한다.

   

[데이터베이스파일 찾기] 창이 나타나면 다운로드 받은 폴더의 경로를 선택하고 예제 데이터베이스 파일을 선택한다.



끝.




둘다 아파치 재단에서 만든 소프트웨어 입니다.

 

아파치(Apache)란?

      • 정적인 데이터를 처리하는 웹서버
      • 웹서버 only?
      • 다른 제품은 nginx ?

 

아파치 톰캣(Apache Tomcat)이란?

      • 동적인 데이터를 처리하는 웹서버 입니다.
        WAS(Web Application Server), 대표적인 WAS가 아파치톰캣(톰캣이라고도 부름)
      • 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말합니다.

자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공

      • BEA사의 Web Logic, IBM사의 Web Sphere, T-max사의 Jeus, Tomcat, Redhot사의 JBoss 등

 

 

톰캣은 html 같은 정적 페이지를 로딩하는데 웹 서버보다 수행 속도가 느리다

그래서 아파치랑 연동한단다..

원리는 아파치가 실행되면 아파치는 html 파일은 자신이 수행하고 jsp 파일은 톰캣으로 넘겨서 톰캣이 수행하게 만든다. 톰캣 특성상 java 언어만 해석이 가능하기 때문에 톰캣에 자체 내장되어 있는 http 서버를 사용하더라도 php 언어로 작성된 서버 페이지는 실행이 불가능하다. 따라서 php와 jsp 모두를 사용하고 싶다면 아파치에서 php를 호출하고 톰캣에서 jsp를 호출 하도록 구성하여 상호 보완적 동작을 수행하도록 구성할 수도 있다

(출처 : https://ko.wikipedia.org/wiki/아파치_톰캣 )

 

CGI(Common Gateway Interface)

기존에는, 웹서버가 있고 클라이언트에서 외부 프로그램이 필요한 리퀘스트가 들어오면 CGI를 통해 외부 프로그램을 실행시켜 리퀘스트에 응답하도록 했지만 요즘에는 웹서버에 인터프리터를 내장함으로써 따로 프로세스를 fork하여 외부 프로그램을 실행시키지 않고 내부에서 다 처리합니다.

접속자가 많은 서비스의 경우 CGI 방식보다 어플리케이션 서버 방식의 Throughput(처리량)이 더 좋습니다.

예를들어, 5개의 웹 브라우저가 동일한 프로그램을 요청했을 때 CGI 방식은 5개의 요청에 대한 프로그램을 모두 메모리에 적재합니다. 반면, 어플리케이션 서버방식은 메모리에 한번만 적재합니다이로써 CGI방식에 비해 전체적인 메모리 사용량이 적습니다. 이는 더 많은 요청을 처리할 수 있음을 의미합니다.

 

 

 

 

 

윈도우에 Apache Tomcat8 설치하기

    1. 다운로드 페이지 -> http://tomcat.apache.org/download-80.cgi
    2. 해당 페이지의 스크롤을 살짝 내려서 [64-bit Windows zip] 을 클릭하여 파일을 다운로드
    3. 해당 파일의 경로를 고려하여 압축을 해제합니다.
    4. Tomcat을 설치하려면 명령프롬프트창을 하나 열어서, 해당 경로에 가서 명령어를 쳐줘야 합니다.
    5. service.bat install tomcat8  이렇게 명령어를 날려 설치를 합니다.
    6. 다시 bin 폴더로 돌아와서  [tomcat8w.exe] 을 우클릭하여 관리자 권한으로 실행하여, 서비스 실행
    7. Tomcat을 기동 시킨후  http://localhost:8080  으로 접속하여 확인




HTTP만든분 중에 한분이
웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍쳐를 소개했는데
그것이 바로 Representational state transfer (REST)
메서드
의미
POST
Create
GET
Select
PUT
Update
DELETE
Delete
아래와 같이 표현함.
{ 
   "users":{ 
      "name":"taetae"
   }
}
이 구문의 의미는 아래와 같다
POST = 만든다 의미
URI = web.co.kr/users (모든 것은 URI가 존재한다)
이름이 taetae인 사람을 만드는 메서드다.

그럼 taetae라는 이름을 가진 리소스에 접근하려면 (가져오려면)
URI는 web.co.kr/users/taetae 이고
가져올 때는 Get 을 붙인다.
지우는것은 DELETE 메소드
HTTP DELETE, http://web.co.kr/users/taeae

다중조건
다음은 http://web.co.kr/users 라는 리소스를 이름은 terry, 주소는 seoul 이라는 내용(메시지)로 HTTP Post를 이용해서 생성하는 정의이다.
{ 
   "name":"terry",
   "address":"seoul"
}

수정
다음은 http://web.co.kr/users 라는 사용자 리소스중에, id가 terry 인 사용자 정보에 대해서, 주소를 “suwon”으로 수정하는 방식이다. 수정은 HTTP 메서드 중에 PUT을 사용한다.
{ 
   "name":"terry",
   "address":"suwon"
}

REST는 HTTP표준만 지키면, 어떠한 기술에서도 사용가능하다.
HTTP + JSON으로 REST API를 정의했다면,
모든 플랫폼에서 사용가능하다.

모든 것에 URL 부여된다.
 
Ex) ASP.NET WEB API 레스트풀
외부 연결 URI를 REST API 라고 하고, REST 방식의 서비스 제공이 가능한 것을 RestFul 하다고 표현한다.


덧.
Azure 아키텍쳐에도 REST API가 있음





윈도우 10 - 설정 - "로그인 옵션" 찾기 그리고 아래와 같이 "개인정보" 하위

"업데이트하거나 다시 시작한 수 내 로그인정보를 사용하여, 내 장치설정을 완료하고 내 앱을 다시 엽니다" 체크해제






'기술(MS,Web,Windows,AWS) > [MS]Windows 10' 카테고리의 다른 글

windows 10 OPEN SSH 클라이언트 앱  (0) 2018.04.09

+ Recent posts