부팅순서 ~2003버전까지

1 BIOS POST 실행 / HW레벨 문제검사, 경고음
2 BIOD CMOS설정사항을 읽어 시스템에 적용
3 MBR 로드 (저장매체의 첫번째 섹터 512바이트 영역, 부팅매체의 기본파일시스템 정보가 들어있음)
(저장매체의 첫번째 섹터를 호출하여 부트코드를 실행)
4 NTLDR실행
부팅파티션에
있는 프로그램
간단한
파일시스템을 실행하고, boot.ini파일을 읽어 가능한 부팅옵션을 보여준다.
5 NTDETECT실행
하드웨어
검사 레지스트에 반영함 HKEY_LOCAL_MACHINE
6 ntoskrnl.exe 실행
커널로드
, 초기화
서비스로드
(세션관리자서브시스템 smss, 32서브시스템) 

서브시스템시작

서브시스템시작 자세히
Win32서브시스템은 로그인처리, 계정/패스워드 입력받아 로컬보안인증서버(Lsass.exe) 보낸다
SAM(보안계정관리자) 저장된 정보와 비교하면
다음 Userinit.exe프로세스가 레지스트리 winlogon 참조되는 셸을 실행함.

 

비스타 이후 버전~

1 BIOS POST 실행 / HW레벨 문제검사, 경고음 상동
2 BIOD CMOS설정사항을 읽어 시스템에 적용 상동
3 MBR 로드 (저장매체의 첫번째 섹터 512바이트 영역, 부팅매체의 기본파일시스템 정보가 들어있음)
(저장매체의 첫번째 섹터를 호출하여 부트코드를 실행)
상동
4 윈도우부트 서브시스템 실행
bootmgr.exe 실행 , BCD(부트설정데이터) 읽어 실행

5 Winload.exe 실행
각종
장치 드라이버 로드

6 ntoskrnl.exe 실행
커널로드
, 초기화
서비스로드
(세션관리자서브시스템 smss, 32서브시스템) 

서브시스템시작
상동

서브시스템시작 자세히
Win32서브시스템은 로그인처리, 계정/패스워드 입력받아 로컬보안인증서버(Lsass.exe) 보낸다
SAM(보안계정관리자) 저장된 정보와 비교하면
다음 Userinit.exe프로세스가 레지스트리 winlogon 참조되는 셸을 실행함.
상동

 

 

윈도우 하드웨어-HAL-마이크로커널-각종관리자-응용프로그램
유닉스 하드웨어-커널--응용프로그램

 

유닉스는 개별관리자 프로그램이 없으며, 커널크기도 윈도우의 1/3

그리고 윈도우와 다른점은 셸을 지원

 

유닉스 부팅순서

  1. POST실행
  2. 기본부팅관련 설정 로드
  3. MBR로드
  4. 부트로더실행

Lilo.conf 혹은 grub.conf

  1. Pid 0 프로세스 실행 -> pid 1(init프로세스) 실행 -> inittab파일 읽기



--------------------------------------------------------------------------------------------------------------------------------

파일시스템

운영체제는 저장장치를 클러스터 단위로 관리한다.

FAT12 , 2 12승개, 4096 클러스터

FAT16 , 2 16승개, 65536 클러스터

FAT32 , 2 32, 42억개 클러스터

클러스터당 저장용량 4KB라면

FAT32 17TB

16KB라면 FAT32 최대 68TB 이지만

MS FAT32 최대크기 32GB 제한함. (자세한 이유는 아래 블로그)

https://cappleblog.tistory.com/223

 

암튼 과거에 4KB 저장용량 클러스터는 낭비가 적음. 실제 파일이 저장되고 남은 빈공간이 없다는 .

이게 최근에 와서는 의미가 없어진듯.

암튼 윈도우 11에서 FAT32 32GB 제한을 없앰? -> 2TB까지 가능

-------------------------------------------------------------------------------------------------------------------------------------

FAT 2GB까지 파티션 사이즈로 설정가능

-------------------------------------------------------------------------------------------------------------------------------------

FAT32  32GB

최대파일크기 4GB

리눅스/ 호환성?

접근제어 없음

-------------------------------------------------------------------------------------------------------------------------------------

NTFS

접그제어 제공, 개별파일,폴더 단위

파일 폴더단위 암호화

감사기능

MFT 예약공간 필수(모든 파일 정보가 기록되는곳) Master File Table

최초 파티션 생성 MFT공간 예약되나, 점점 사용하면서,

일반 영역이 차면, 예약공간을 침범하면서 MFT공간 단편화가 발생함

-> 느려짐. (HDD 였을때…)

-> 그래서 15% 여유는 항상 유지하라고 했으나, 요새 SSD에서는 의미 없음.

 

MFT파일 분석하는 프로그램이 있음.

- analyzeMFT 수정판 (by koha)

https://kkoha.tistory.com/entry/analyzeMFT-204

 

Csv 내보내기해서 구경가능

analyzeMFT.exe -f $MFT -o C_MFT.csv -lp

 

MFT파일은 당연히 사용중이므로

forecopy나 FTKImager 등을 이용하여 추출한 파일을 지정

출처: <https://net-gate.tistory.com/104>

 

 

 

이파일만 털어가면...

-------------------------------------------------------------------------------------------------------------------------------------




 

윈도우 역사, 제품명-출시년도 순서

MSDOS 1.0 1981

MSDOS 2.0 1983
윈도우 1.0 1985

윈도우 NT New Technology
1993
윈도우 95

윈도우 ME 1999
NT 4.0 1996

XP 2001 서버 2000
서버
2003

비스타 2007 서버 2008

윈도우 7 2009

윈도우 8 2012 서버 2012

윈도우10 2015


서버 2016


서버 2019

윈도우11 2021 서버 2022 2021


2023 30주년


서버 2025  2024가을



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

 

원래 도커는 리눅스 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를 실행하여데이터베이스에 접속

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

   

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

   

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



끝.




+ Recent posts