그래프 - Eulerian Circuit
Eulerian circuit 오일러 회로는 그래프에 존재하는 모든 Edge를 정확히 1번씩만 방문하는 연속된 경로입니다. 이때, 시작점과 도착점이 같아야 합니다. 또한, 한 컴포넌트에 존재하여야 하며 각 Vertex의 Degree가 짝수개여야합니다. 구현 코드 문제를 바탕으로 구현한 것이므로, 다른 문제에 맞게 변형하여서 사용하면 됩니다.
키자드에 등록된 총 162개의 포스트를 확인하실 수 있습니다.
Eulerian circuit 오일러 회로는 그래프에 존재하는 모든 Edge를 정확히 1번씩만 방문하는 연속된 경로입니다. 이때, 시작점과 도착점이 같아야 합니다. 또한, 한 컴포넌트에 존재하여야 하며 각 Vertex의 Degree가 짝수개여야합니다. 구현 코드 문제를 바탕으로 구현한 것이므로, 다른 문제에 맞게 변형하여서 사용하면 됩니다.
Backdoor 시스템 접근에 대한 사용자 인증 등 정상적인 절차를 거치지 않고 응용프로그램 또는 시스템에 접근할 수 있도록 하는 프로그램입니다. 해킹이 아닌 해킹 성공 후의 후속조치라고도 합니다. local backdoor 시스템에 로그인한 뒤에 관리자로 권한 상승을 시키기 위한 백도어입니다. 공격자는 실행하기 위한 일반 계정이 적어도 하나 필요합니다. 단순히 실행하면 관리자 권한으로 상승합니다. 전에 알아보았던 SUID로 만들 수 있습니다. remote backdoor(Port Bind) 원격에서 관리자로 계정과 패스워드를 입력하고 로그인한 것처럼 바로 시스템의 관리자 계정을 얻을 수 있는 백도어입니다. 네트워크에 자신의 포트를 항상 열어 놓은 경우가 많습니다. 일종의 서비스를 제공하는 데몬처럼 동작..
HTTP HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜입니다. 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송합니다. 이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점을 알아보겠습니다. GET HTTP/1.1 스펙인 RFC2616의 Section9.3에 따르면 GET은 서버로부터 정보를 조회하기 위해 설계된 메소드입니다. GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송합니다. URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요..
확률 일정한 조건 아래서 어떤 사상이나 사상이 일어날 가능성의 정도. 또는 그 수치입니다. 수학적으로는 1을 넘을 수 없고 음이 될 수도 없습니다. 확률 1은 항상 일어남을 의미하고, 확률 0을 절대로 일어나지 않음을 의미합니다. 종속성과 독립성 사건 A의 발생 여부가 사건 B의 발생 여부에 대한 정보(condition, 조건부 확률)를 제공한다면 두 사건 A와 B는 종속사건으로 볼 수 있습니다. 그렇지 않다면 독립사건입니다. 수학적으로, 사건 E와 F가 동시에 발생할 확률이 각각 사건이 발생할 확률의 곱과 같다면(joint, 결합 확률) 두 사건은 독립사건을 의미한다. P(A,B) = P(A)P(B) -> 독립사건 조건부 확률 조건부 확률(conditional probability)은 어떤 사건 B가 ..
쉘 명령어 실행 기능 아래의 표시된 명령어만 되는 것이 아닌, vim에서 명령어 기능을 사용할 수 있다는 것을 이야기하고자 하는 것이다 :!쓰고싶은명령어 와 같이 사용된다. ls -al 명령어 치면 bash에서와 같은 결과를 볼 수 있다. bash 쉘 진입 아래와 같이 명령 모드에서 !bash 를 입력하여 쉘로 들어갈 수 있다. 위의 명령을 치면 아래와 같은 화면이 나오게 된다. 그래서 vim이 background로 빠졌나 싶어서 fg를 쳐보았다. 하지만 fg 명령어가 작동하지 않았다. 현재 vim은 background로 빠진 것이 아니다. 그럼 뭘까? 다시 원래의 편집기화면으로 돌아가려면 exit 명령어를 입력한다. 위와 같은 명령어가 끄면서 "press ENTER or type command to c..
파일 내 검색 아래와 같이 /찾고싶은 단어 를 치면 하이라이트가 되면서 단어를 찾아준다. n 을 눌러, 커서를 이동하면서 다음 단어로 이동할 수 있다. 파일 내 문자 치환 :%s/치환전/치환후/ig ig는 무엇을 의미할까? i는 대소문자 구분안함(case Insensitive). 없을 경우 대소문자가 정확히 일치한 것만 변경함. g는 줄내 모두 변경(Global). 없을 경우 라인에서 첫번째 일치 항목만 변경함.
System function 유닉스 계열 서버에서 실제로 실행될 수 있는 명령어를 연속해서 전달하려면 " ; "을 이용하면 된다는 것입니다. " ; "은 셸에서 명령어를 한 줄에 연속해서 적을 때 이용할 수 있으며, 이는 system()함수에도 동일하게 적용됩니다. 1. system function은 비싸고, 리소스가 많이 들어가는 call입니다. 2. It's not portable. 범용성이 없습니다. system()안에 들어가는 인자는 유닉스 운영체제와 윈도우 운영체제가 혼용되어 사용하지 않기 때문입니다. 임시 권한 상승으로 인해 system() 함수에 직접 인자를 입력하는 경우 주의하여 사용하여야 합니다. echo 명령어를 사용하여 백도어 파일 생성이 충분히 가능하기 때문입니다. 이에 대한 실습은..
부팅 1단계 : ROM-BIOS 실행 부팅 2단계 : 부트로더(GRUB)의 실행과 역할 부팅 3단계 : 스와퍼(Swapper) 프로세스 수행 부팅 4단계 : init 프로세스의 실행 부팅 5단계 : 부팅 레벨의 결정 단계 부팅 6단계 : /etc/rc.d/rc.sysinit 스크립트 실행 ( 모든 부팅 레벨) 부팅 7단계 : /etc/rc.d/rcN.d/ 디렉토리의 스크립트 실행(부팅레벨에 따른 실행) 부팅 8단계 : 시스템 매직키 설정을 한다. 부팅 9단계 : 시스템 전원 공급 설정을 한다. 부팅 10단계 : 가상터미널 실행과 로그인창 실행 부팅 11단계 : X 윈도우 실행 1단계 : ROM-BIOS실행 ROM-BIOS : Read Only Memory - Basic Input Output System..
그래프 - SCC SCC란? SCC(Strongly Connected Component)는 방향 그래프에서 임의의 두 정점 U,V가 있을때, U->V로 가는 경로가 존재한다면 그 그룹은 SCC라 부를 수 있습니다. 이때, U->V로 가는 경로는 직, 간접적인 경로를 의미합니다. SCC의 특징 1. 같은 SCC내에서 뽑은 임의의 U,V점에서 U->V 혹은 V->U의 경로(직/간접적)는 항상 존재합니다. 2. SCC는 Maximal한 성질을 가지고 있어 SCC가 형성된다면 형성될 수 있는 가장 큰 집합으로 형성이됩니다. --강한결합요소끼리는 서로 일방향적으로 연결되어 있습니다. 구현 코드 참고 : https://www.crocus.co.kr/950
표본의 분산에서는 n이 아닌 n-1로 나누는 이유 1. 표본의 분산은 모집단의 분산을 Underestimate(과소평가)하여 (표본의 분산 < 모집단의 분산)와 같은 상태가 되기 때문에 이를 보정해주기 위해서 표본분산의 분모를 작게만들어 전체 표본분산을 크게 만들었습니다. 직관적으로 가장 이해하기 쉬운 설명이지만 왜 n-2이나 n-3 등이 아니라 n-1이라는 정확한 수치에 대한 설명이 안된다. 이에 대한 보충으로 아래 두 개의 설명이 필요하다. 2. 두 번째로는 샘플 분산에서는 Degrees of Freedom(자유도)가 n-1이기 때문이다. 3. 표본의 분산의 기대치를 할 경우, 수학적으로 정확하게 모집단의 분산으로 유도가 되기 때문에 n 대신 n-1로 나누어 준다. 이에 대해 자세하게 정리해놓..
위상정렬(Topological Sort) 위상정렬(topological sorting)은 유향 그래프의 꼭짓점들(vertex)을 변의 방향을 거스르지 않도록 나열하는 것을 의미합니다. 위상정렬을 가장 잘 설명해 줄수 있는 예로 대학의 선수과목 구조를 들 수 있습니다. 만약 특정 수강과목에 선수 과목이 있다면 그 선수 과목부터 수강해야 하므로, 특정 과목들을 수강해야 할 때 위상 정렬을 통해 올바른 수강 순서를 찾아낼 수 있습니다. 이와 같이 선후 관계가 정의된 그래프 구조 상에서 선후 관계에 따라 정렬하기 위해 위상정렬을 이용할 수 있습니다. 정렬의 순서는 유향 그래프의 구조에 따라 여러개의 종류가 나올 수 있습니다. 위상 정렬이 성립하기 위해서는 반드시 그래프의 순환이 존재하지 않아야합니다. 즉, 그래..
-목차- 1. SUID/SGID 2. STID 3. 실제사용자(Real User ID)와 유효 사용자(Effective User ID) 4. setreuid SUID/SGID 루트가 아닌 사용자들이 잠깐 루트의 사용권한을 써서 프로그램을 실행해야 할 필요가 있을때 주는 권한입니다. S*ID가 설정된 파일은 특정 명령어를 실행하여 root권한 획득 및 정상 서비스 장애를 발생시킬 수 있으며, 로컬 공격에 많이 이용되므로 보안상 철저한 관리가 필요합니다. SUID의 절대표기값은 4000입니다. 일반사용자가 소유자 권한으로 실행할 수 있도록 하며, 보안상 문제가 생길 확률이 높기 때문에 조심해서 사용하여야 합니다. SGID의 절대표기값은 2000입니다. 일반사용자가 소유 그룹의 권한을 실행할 수 있도록 합니다..
-목차- 1. 범용 레지스터 2. 명령 포인터 레지스터 3. Segment Register 범용 레지스터 범용적으로 사용되는 레지스터들입니다. IA-32에서 각 범용 레지스터들의 크기는 32비트입니다. EAX(Extended Accumulator Register) 산술 연산 명령에서 상수/변수 값을 저장하거나 함수의 리턴 값이 저장되는 용도로 사용됩니다. EBX(Extended Base Register) EBX는 DS 세그먼트에 대한 포인터를 주로 저장하고 ESI나 EDI와 결합하여 인덱스에 사용됩니다. EBX는 메모리 주소 지정을 확장하기 위해 인덱스로 사용될 수 있는 유일한 범용 레지스터입니다. ECX(Extended Counter Register) 반복 명령어 사용 시 반복 카운터로 사용됩니다. E..
먼저 해당 실행파일의 main을 disassemble한다. AT&T 형식에서 Intel 형식으로 전환하여 준다. 이렇게 하여 전체 어셈블러 소스를 볼 수 있다. AT&T 형식과 인텔 형식에서, procedure prelude 부분에서 mov의 인자의 순서가 다르게 나온다. 착각할 여지가 많은 부분이므로 주의해서 보도록해야한다. 또한 다른 부분에서도 그러한 현상이 나타나는지 확인해봐야 할것이다. info registers 명령을 통해서 현재 상태의 레지스터 값을 볼 수 있다.
TLB(변환 색인 버퍼) 변환 색인 버퍼(Translation Lookaside Buffer, TLB)는 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시로, 약칭은 TLB이다. TLB는 최근에 일어난 가상 메모리 주소와 물리 주소의 변환 테이블을 저장하기 때문에 일종의 주소 변환 캐시라고 할 수 있다. TLB는 CPU와 CPU 캐시 사이, CPU 캐시와 메인 메모리 사이 등 여러가지 다른 레벨의 캐시들 사이에서 주소를 변환하는데 사용할 수 있다. 현재 모든 데스크탑 및 서버용 프로세서는 하나 또는 그 이상의 TLB를 메모리 관리 하드웨어에 가지고 있다. 페이지 단위나 세그먼트 단위로 처리하는 가상 메모리를 사용하는 거의 모든 하드웨어는 TLB를 사용한다. CPU는 1차적으로..
Parallel Hardware Coordination 각 코어들은 작업을 협력적으로 수행(이를 Coordination이라 한다)해야 하는데, 다음을 주의해야 한다. Communication : 통신, 프로세스 간 데이터를 전달할 수 있어야 한다. Load balancing : 부하 분산, 한 프로세스만 고역에 시달리게 두어선 안 된다. Synchronization : 동기화, 한 프로세스의 작업이 다른 프로세스들 보다 지나치게 앞서 있어선 안된다. SISD 단일명령-단일자료(SISD, Single Instruction, Single Data )은 전산에서 한 프로세서가 한번에 하나의 명령어를 처리할 때 하나의 메모리에 저장되어 있는 한 데이터를 이용하여 처리하는 것을 일컫는 용어입니다. 폰 노이만 구조..
CPU scheduling 문맥교환(Context Switching) 새로운 프로세스에게 CPU를 할당하기 위해 현재 CPU가 할당된 프로세스의 상태 정보를 저장하고, 새로운 프로세스의 상태 정보를 설정한 후 CPU를 할당하여 실행되도록 하는 작업. (Overhead가 발생하는 주요 원인) CPU 스케줄링이란? 메모리에 있는 준비(Ready) 상태의 프로세스 중 하나를 선택해 CPU자원을 할당하는 것 CPU 스케줄링이 일어나는 시점 실행상태에서 대기상태로 전환될 때 (예, 입출력 요청) - Non preemptive(비선점) 실행상태에서 준비상태로 전환될 때 (예, 인터럽트 발생) - preemptive(선점) 대기상태에서 준비상태로 전환될 때(예, 입출력이 종료될 때) 종료될 때(Terminated) ..
목차 그래프란? 그래프와 트리의 차이 무향그래프, 유향(방향)그래프 인접, 가중치 그래프 그래프 표현 인접 행렬 인접 리스트 간선 리스트 그래프 탐색 깊이 우선 탐색(DFS) 너비 우선 탐색(BFS) 그래프 표현 방법과 시간복잡도 그래프란? 그래프란, 객체(사물 또는 추상적 개념)들과 객체들 사이의 연결관계를 표현합니다. 예를 들면 지하철에서 다른 역으로 가는 최단 경로를 찾아주는 서비스도 그래프 알고리즘을 사용합니다(무향 그래프).또한, 정점(Vertex)들의 집합과 정점을 연결하는 간선(Edge)들의 집합으로 구성된 자료구조입니다. 다음과 같이 그래프를 표현할 수 있습니다. G = (V, E), V = 정점들의 집합, E = 간선들의 집합. V개의 정점을 가지는 그래프는 최대 V(V -1)/2 개의 ..
서론 다익스트라 알고리즘은 도로 교통망 같은 곳에서 나타날 수 있는 그래프에서 꼭짓점 간의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 컴퓨터 과학자 에츠허르 다익스트라가 1956년에 고안했으며 삼년 뒤에 발표했습니다. 최단 경로 알고리즘은 네트워크 라우팅 프로토콜에서 널리 이용되며, 특히 IS-IS(Intermediate System to Intermediate System)와 OSPF(Open Shortest Path First)에서 주로 사용됩니다. 그래프에서 정점까지 최단 경로를 구하는 문제는 여러가지 방법이 있습니다. 하나의 정점에서 다른 하나의 정점까지 최단 경로를 구하는 문제 하나의 정점에서 다른 모든 정점까지의 최단 경로를 구하는 문제 하나의 목적지로 가는 모든 최단 경로를 구하는 문제..
DFS와 BFS 이번 포스팅에서는 DFS와 BFS에 대해서 자세히 설명하도록 하겠습니다. DFS(Depth First Search) : 깊이 우선 탐색 DFS는 맹목적 탐색 방법의 하나로 탐색 트리의 최근에 첨가된 노드를 선택하고, 이 노드에 적용 가능한 동작자 중 하나를 적용하여 트리에 다음 수준(level)의 한 개의 자식 노드를 첨가하며, 첨가된 자식 노드가 목표 노드일 때까지 앞의 자식 노드의 첨가 과정을 반복해 나가는 방식입니다. 트리나 그래프에서 한 루트로 탐색하다가 특정 상황에서 최대한 깊숙히 들어가서 확인한 뒤 다시 돌아가 다른 루트로 탐색하는 방식입니다. 대표적으로 백트래킹(부모 노드로 되돌아오는 과정)에 사용합니다. 일반적으로 재귀 호출을 사용하여 구현하지만, 단순한 스택 배열로 구현하..
Client/Server Architecture 클라이언트(일반적으로 GUI를 사용하는 어플리케이션)를 서버에서 분리하는 네트워크 구조이다. 각각의 클라이언트 소프트웨어 인스턴스는 서버에 요청을 전송할 수 있다. 하나의 서버에 복수의 클라이언트가 접속하게 된다.(일대다 관계) 서버 유형 어플리케이션 서버(게임, 채팅, 메신저, 증권 거래 서버 등), 파일 및 FTP 서버, 터미널 서버, 메일 및 DNS서버가 있습니다. 클라이언트/서버 기능 서버기능 수동적 서비스 제공자(Passive, Slave), 클라이언트 요청을 처리하기 위해 대기, 요정(request)을 처리한 후, 결과를 클라이언트에 회신(reply) 클라이언트 기능 능동적, 의뢰자(Active, Master), 서버가 수행할 수 있는 요청을 전..
N계층 구조에서의 성능이란 N계층 서버의 성능을 클라이언트를 제외한 서버군(server farm) 전체가 상호작용하며 클라이언트의 요청을 처리하는 능력입니다. 성능을 개선하기 위해서는 각 계층 서버 용량의 총합이 아니라, 가장 낮은 성능을 가진 자원 혹은 가장 큰 병목지점에 의해 좌우되므로 이점을 유의하며 개선해야 합니다. 어떻게 튜닝할 것인가 하드웨어, 소프트웨어(서버 소프트웨어) 및 운영체제의 메커니즘을 이해해야 합니다. 또한 자료구조 및 알고리즘에 따라 성능이 달라집니다. 그리고 튜닝을 수행함에 있어서 늘 가장 좋은 효과(성능)을 얻을 수 있는 방법은 병목지점을 찾아내고, 그것을 해결하느 ㄴ것입니다. 따라서, 서버 전체의 성능을 분석하는 것 뿐만 아니라 계층 간, 계층 별 성능을 측정할 수 있는 기..
HTTP통신 HTTP통신은 Hyper Text Transfer Protocol의 약자 입니다. Hyper Text(웹 문서를 구성하고 있는 언어인 HTML을 의미합니다)를 전송하기 위한 프로토콜입니다. HTML이란? HTML은 Hyper Text Markup Language의 줄인말로, Hyper Text, 즉 단순하게 text 의미를 넘어서(Hyper) 링크, 이미지 등 다양한 것들을 표현할 수 있다는 의미입니다. HTML은 웹 문서의 뼈대를 구성하는 언어입니다. 모든 웹 문서는 HTML로 이루어져 있고, HTML로 이루어진 문서 만이 브라우저를 통해 웹 문서로서 읽어질 수 있습니다. HTTP의 구성 HTTP통신은 기본적으로 요청(Request)과 응답(Response)으로 이루어져 있습니다. 클라이언..
아파치 서버 MPM(Apache Multi-Processing Modules) 아파치 서버가 클라이언트에게서 받아들인 요청을 처리하기 위하여 자식 프로세스들에게 분배하는 모듈입니다. prefork 방식과 worker 방식이 있습니다. Prefork 하나의 자식 프로세스가 하나의 스레드를 갖는 구조로, 자식 프로세스는 최대 1024개까지 가능합니다. 프로세스로 운영되기 때문에 스레드 간 메모리 공유를 하지 않습니다(독립적이라 안정적인 대신에 메모리를 많이 사용합니다.). 실행 중인 프로세스 복제하여 실행합니다(메모리 영역까지 같이 복제). 응답 프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식이며, 일반적으로 single CPU 또는 Dual CPU에서 성능이 좋습니다. wo..
여태 나는 iptables 가지고 방화벽 규칙 설정을 하려고 애를 썻었다. 하지만 이제 우분투에서는 사용하지 않는것 같다. ufw이걸 사용한다. 예를 들면 ufw allow 22 이렇게 자세한건 나중에
a factor in blocking that has an effect on the response variable but is of no interest to the research topic. and a nuisance variable is a random variable(if the nuisance factor is unkown). "Nuisance variable" has been used in the context of statistical surveys to refer information that is not of direct interest but which needs to be taken into account in an analysis. blocking 을 사용하였으므로, nuisanc..
virtual memory 모든 프로세스는 자신만의 가상 주소 공간을 가지고 있습니다. 32비트/64비트 프로세스는 각 비트수에 맞게 최대 4GB/16GB의 주소 공간을 가집니다(4GB : 0x00000000 ~0xFFFFFFFF, 16GB : 0x000000000000000 ~ 0xFFFFFFFFFFFFFFFF) 모든 프로세스들을 자신만의 주소 공간을 가지기 때문에, 특정 프로세스 내에서 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 대해서만 접근이 가능합니다. 다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가능 합니다. 즉, 가상메모리는 프로세스의 logical memory와 physical memory를 분리하기 위해 생겼습니다. 또한, 프로세스가 실제 필요로 ..
정규분포 정규분포 란? 정규분포는 수집된 자료의 분포를 근사하는 데 자주 사용되며, 이것은 중심 극한 정리에 의하여 독립적인 확률변수들의 평균은 정규분포에 가까워지는 성질이 있기 때문입니다. 정규분포는 2개의 매개 변수 평균과 표준편차에 대해 모양이 결정되고, 이때의 분표는 아래와 같이 표기합니다. 특히, 평균이 0이고 표준편차가 1인 정규분포 를 표준 정규 분포(standard normal distribution)이라고 합니다. 정규 분포 밀도 함수에서 를 통해 X를 Z로 정규화함으로써 평균이 0, 표준편차 1 인 표준 정규분포를 얻을 수 있는 것입니다. Z-분포라고 부르며 Z-분포로 하는 검정(test)를 Z-검정이라고 합니다. 정규분포의 성질 정규분포는 좌우 대칭의 종 모양(Bell curve)으로..
https://12bme.tistory.com/272 [테스트] JMeter와 성능 테스트 1.1 JMeter란 Apache JMeter는 웹 애플리케이션처럼 클라이언트-서버 구조로 된 소프트웨어의 성능 테스트를 위해서 만들어진 100% 순수 자바 프로그램입니다. 스테파노 마조끼가 개발했으며, 이는 현재 톰캣(Tomc.. 12bme.tistory.com load 테스트를 하는 이유 : 시스템의 성능을 벤치 마크하기 위한 테스트를 의미합니다. 이 테스트는 부하(Load)를 순차적으로 증가시키면서 응답시간이 급격히 증가하거나 더는 처리량이 증가하지 않거나 시스템의 CPU와 Memory 등이 기준값 이상으로 증가하는 등 비정상 상태가 발생하는 임계점을 찾아내고 이를 바탕으로 성능 이슈에 대한 튜닝과 테스트를 ..
F분포 F 분포(F-distribution 또는 Snedecor's F distribution 또는 Fisher–Snedecor distribution)은 통계학에서 사용되는 연속 확률 분포로, F 검정과 분산분석 등에서 주로 사용된다. 또한, 분산의 비교를 통해 얻어진 분포비율이다. 이 비율을 이용하여 각 집단의 모집단분산이 차이가 있는지에 대한 검정과 모집단평균이 차이가 있는지 검정하는 방법으로 사용한다. 즉 F = (군간변동)/(군내변동)이다. 만약 군내변동이 크다면 집단간 평균차이를 확인하는 것이 어렵다. 분산분석에서는 집단간의 분산의 동질성을 가정하고 하기 때문에 만약 분산의 차이가 크다면 그 차이를 유발한 변인을 찾아 제거해야 한다. 그렇지 못하면 분산분석의 신뢰도는 나빠지게 된다. F분포의 ..
##제가 공부하면서 쓴거라 오류가 있을 수 있습니다 분산분석(변량분석)이란? 변량분석은 둘 이상의 집단 간 평균 점수를 비교하고자 할 때 실시하는 분석방법입니다. 차이검증(T검정)으로는 두 집단 끼리만 비교할 수 있지만 변량 분석을 이용하면 더 많은 집단 끼리도 비교할 수 있습니다. 평균의 차이검증 분산분석은 (영향을 주는 변수 : 범주형자료, 영향을 받는 변수 : 연속형 자료) 일때 적절한 통계적 분석 방법입니다. 범주형 자료의 집단이 두개일 경우 T검정, 범주형 자료의 집단이 세개 이상일 경우 분삭분석을 실시합니다. 일원배치 분산분석을 하기 위해서는 3가지의 조건이 부합되어야합니다. 정규성 각 모집단의 분포가 정규분포여야 합니다. 등(동)분산성 각 모집단 간의 분산이 동일해야 합니다. 독립성 각 모집..
환경 변수는 각각의 계정마다 설정되어 있는거 같다. 내 user에서 설정하면 다같이 공통으로 적용 되는줄 알았는데 안되었다. 그래서 루트에서 사용하려면 또 따로 해주어야 한다. 하지만 export를 이용한 변경은 일시적이라고 한다. 위와 같이 추가 시켜주면 된다. 영구적 방법 : .bashrc에 추가하여 사용하면 됩니다. 각 프로필마다 있으므로 알아서 해. 아니야 루트에만 있네 보니까 / 이것만 root인줄 알았는데 /root도 있었네ㅋㅋㅋㅋㅋㅋㅋㅋ신기해 아무튼 bashrc로 들어간다 그래서 파일 맨마지막에 이렇게 추가해준다 그리고 source 명령어를 사용하여 변경된 것을 저장하여 준다. 그런데 색이 바뀌었다. 처음엔 root권한에서 나가진건가 생각했는데 그렇지 않았다. path만 추가했을뿐인데. 아무..
TCP 통신과정 TIME_WAIT소켓에 대해 이야기하기 전에 먼저 TCP의 통신 과정을 살펴봅니다. 위의 그림을 보면 통신을 시작하기 전에 최초의 연결을 맺게 되는 과정을 3-way handshake라고 합니다. 1.클라이언트는 서버로 통신을 시작하겠다는 SYN을 보내고, 2.서버는 그에 대한 응답으로 SYN+ACK를 보냅니다. 3.마지막으로 클라이언트는 서버로부터 받은 패킷에 대한 응답으로 ACK를 보냅니다. 이렇게 3-way-handshake를 정상적으로 마친 다음 클라이언트는 서버에 데이터를 요청합니다. 그림을 보면 HTTP통신일 경우 GET /index.html과 같이 요청하고, 통신을 모두 마친 후에는 연결을 종료합니다. 이 과정을 4-way handshake라고 합니다. 연결을 맺을 때는 연결..
쿠버네티스 기본 개념 쿠버네티스가 어떻게 동작하는지, 설치는 왜 이리 어려운지, 설정 파일은 왜 그렇게 복잡한지 이해하기 위해 쿠버네티스의 디자인과 구성 요소, 각각의 동작 방식을 알아보겠습니다. 쿠버네티스에서 가장 중요한 것은 desired state - 원하는 상태 라는 개념입니다. 원하는 상태라 함은 관리자가 바라는 환경을 의미하고 좀 더 구체적으로는 얼마나 많은 웹서버가 떠 있으면 좋은지, 몇 번 포트로 서비스하기를 원하는지 등을 말합니다. 쿠버네티스는 복잡하고 다양한 작업을 하지만 자세히 들여다보면 현재 상태current state를 모니터링하면서 관리자가 설정한 원하는 상태를 유지하려고 내부적으로 이런저런 작업을 하는 로직을 가지고 있습니다.이러한 개념 때문에 관리자가 서버를 배포할 때 직접적..
CPU란? 중앙처리장치(CPU: Cnetral Processing Unit)는 사람의 두뇌와 같이 컴퓨터 시스템에 부착된 모든 장치의 동작을 제어하고 명령을 실행하는 장치입니다. 중앙 처리장치는 제어장치, 연산장치, 레지스터 그리고 이들을 연결하여 데이터를 전달하는 버스로 구성되어 있습니다. CPU의 구성장치 제어장치(control unit) 제어장치(Control Unit)는 컴퓨터에 있는 모든 장치들의 동작을 지시하고 제어하는 장치입니다. 제어장치는 명령 레지스터에서 읽어들인 명령어를 해독하여 해당하는 장치에게 제어 신호를 보내 정확하게 수행하도록 지시합니다. 연산장치(ALU, Arithmetic) 연산장치(ALU, Artihmetic)는 제어장치의 명령에 따라 실제로 연산을 수행하는 장치입니다. 연..
CPU cache cpu cache란? cache memory는 속도가 빠른 장치와 느린 장치 사이에서 속도차에 따른 병목 현상을 줄이기 위한 범용 고속 buffer 메모리를 지칭합니다(SRAM이라고도 합니다). CPU에서는 CPU 코어와 메모리 사이에서 속도차에 따른 병목 현상을 완화하는 역할을 합니다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어합니다. 대부분의 프로그램은 한번 사용할 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있습니다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, CPU가 필요한 데이터를 캐시에서 먼저 찾도록 하면 성능을 향상시킬 수 있습..
Hyper threading 하이퍼 스레딩이라는 기술을 사용하게 되면 멀티코어를 사용해야 할 작업에서 20~30% 성능향상이 있습니다. 단, 멀티코어가 필요없는 싱글코어로도 충분한 작업에서는 오히려 10%정도의 성능이 저하됩니다. 위의 그래프에 대해 설명합니다. 첫번째 그래프에서 주황색과 파란색의 막대가 각각 시간적 흐름에 따라 하나의 프로세스에서 필요로 하는 자원의 양을 나타내고 있습니다. 멀티태스킹이 이루어지는 원리는 운영체제 상에서 매우 작은 시간 단위로 각각의 작업을 번갈아가며 실행시키기 대문에 가능한 것입니다. 따라서 두번째 그래프에서 묘사된 대로 하이퍼스레딩이 적용되기 전의 일반적이 상황에서 두개의 작업이 완료될 때까지 각각의 작업을 따로 실행시킨 것과 동일 한 시간이 걸리게 됩니다. *세번째..
표준 편차와 표준 오차에 대해서 알아보겠습니다. 제가 이 둘을 헷갈려해서 따로 정리하여보았어요~ 그런데 저 뿐만아니라 많은 분들도 헷갈려 하시더라구요. 표준편차 (SD, Standard Deviation) - 점수집합 내에서 점수들 간의 상이한 정도를 나타내는 산포도 측정 도구 - 표준편차가 클수록 평균값에서 이탈한 것 - 표준편차가 작을수록 평균값에 근접한 것 - 변수값이 평균값에서 어느 정도 떨어져 있는지를 알 수 있음 모표준편차 표본표준편차 왜 분모가 n-1인지는 다른 글에 써놓았습니다. 표준오차 (SE, Standard Error) - 표본추출의 과정에서 발생하는 오차와 연관된 것으로 추정량의 정도를 나타내는 측정 도구 - 표본이 모집단으로부터 얼마나 떨어져 있는지를 나타내는 것(모집단이라는거에 ..
기본적으로 Docker 컨테이너는 호스트 머신의 CPU 자원을 제한없이 사용할 수 있습니다. 즉, 하나의 컨테이너가 수행될 때 CPU-Intensive 한 작업을 돌리면, 호스트 머신의 CPU 자원을 점유해버리는 상황도 발생할 수 있습니다. 이는 컨테이너간 독립적인 환경을 구축할 수 없음을 의미하기 때문에 CPU 사이클에 대한 쿼터(Quota)를 적용할 필요가 있습니다. Docker는 기본적으로 CFS 스케줄러를 사용하며, 버전 1.13이상에서 실시간 스케줄러를 이용할 수 있습니다. CFS 스케줄러를 이용하기 때문에 설정들이 CFS 스케줄러와 연관되어 있습니다. CPU에 대한 실시간 스케줄링은 다음과 같이 할 수 있습니다. cpu를 할당해서 sysbench 테스트를 진행해보겠습니다. cpu 0과 1, 2..
X명령어 x 명령어는 프로그램 실행시 메모리를 검사할 때 사용합니다. (gdb) x/옵션 기준점 여기서 기준점은 메모리 주소이며 ebp, eip, esp 등의 레지스터로 표시해도 됩니다. 아래는 사용예시입니다. x/4wx $ebp (ebp를 기준으로 16진법(x)으로 4바이트 단위(w)로 4개 보여준다. (gdb) x/4wx $ebp 0xbfffedf8 : 0x41414141 0xb5c3b8c3 0xbfc2bfc3 0xbfffee00 x/8wx $ebp (ebp를 기준으로 16진법(x)으로 4바이트 단위로(w) 8개 보여준다.) (gdb) x/8wx $ebp 0xbfffedf8 : 0x41414141 0xb5c3b8c3 0xbfc2bfc3 0xbfffee00 0xbfffee08 : 0xbfffee50 0..
Docker network docker0는 container가 통신하기 위한 가상 linux bridge 입니다. bridge는 기본적으로 L2 통신 기반이며, 만약 container가 하나 생성되면 이 bridge에 container의 interface가 하나씩 binding 되는 형태입니다. 따라서 container가 외부로 통신할 때는 무조건 docker0 interface를 지나야합니다. 만약 외부와 연결을 해야할 경우에는 호스트에 veth(=virtual eth)라는 네트워크 인터페이스를 생성하고 컨테이너의 eth와 연결이 됩니다. veth 인터페이스는 사용자가 직접 생성할 필요 없이 도커엔진에 의해 자동으로 생성이 됩니다. veth 인터페이스 뿐만 아니라 docker()라는 브리지도 있는데, ..
도커는 기본적으로 컨테이너에 172.17.0.x 의 IP를 순차적 할당(내부 네트워크)을 받습니다. 외부로 컨테이너의 어플리케이션을 노출하기 위해서는 컨테이너IP 와 호스트IP를 바인딩 해야 합니다. 위 그림은 사용 예시입니다. -p [호스트 포트] : [컨테이너 포트] 다음은 호스트 7777 포트를 컨테이너의 80포트와 바인딩의 예입니다. 여러개의 포트노출을 위하여 -p옵션을 여러개 사용합니다. 도커 컨테이너 외부노출 아키텍처
쿠버네티스란? 쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다. 컨테이너 오케스트레이션이 하는 일은 여러 개의 서버에 컨테이너를 배포하고 운영하면서 서비스 디스커버리Service discovery같은 기능을 이용하여 서비스 간 연결을 쉽게 해주는 것입니다. 서버마다 app01, db01, cache01 같은 이름을 지어주고 하나하나 접속하여 관리하는 것이 아니라 server1, 2, 3, 4..를 하나로 묶어 적당한 서버를 자동으로 선택해 애플리케이션을 배포하고 부하가 생기면 컨테이너를 늘리고 일부 서버에 장애가 발생하면 정상 동작 중인 서버에 다시 띄워 장애를 방지합니다. 다양한 배포 방식 컨테이너와 관련된 많은 예제가 웹(프론트엔드+백엔드) 애플리케이션을 다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #include #include #include #include using namespace std; int pillar; vector pillar_information; void receive_pillar_data() { int location; int hight; for(int pillar_number = 0; pillar_number > location; cin >> hi..
레이어 저장방식 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가에 이릅니다. 처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백메가를 다시 다운받는다면 매우 비효율적일 수 밖에 없습니다. 도커는 이런 문제를 해결하기 위해 레이어layer라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줍니다. 이미지는 여러개의 읽기 전용read only 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됩니다. ubuntu 이미지가 A + B + C의 집합이라면, ubuntu 이미지를 베이스로 만든 nginx 이미지는 A + B + C + nginx가 됩니다. web..
여기서 다뤄볼 것은 아래와 같습니다. Docker 버전확인 pull 명령으로 이미지 받기 images 명령으로 이미지 목록 출력하기 run 명령으로 컨테이너 생성하기 ps명령으로 컨테이너 목록 확인하기 start 명령으로 컨테이너 시작하기 restart 명령으로 컨테이너 재시작하기 attach 명령으로 컨테이너에 접속하기 exec 명령으로 외부에서 컨테이너 안의 명령 실행하기 stop명령으로 컨테이너 정지하기 rm 명령으로 컨테이너 삭제하기 rmi 명령으로 이미지 삭제하기 Docker 버전확인 pull 명령으로 이미지 받기 images 명령으로 이미지 목록 출력하기 run 명령으로 컨테이너 생성하기 docker run 형식입니다. 여기서는 ubuntu이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 안의..
Docker 정의 도커는 리눅스 컨테이너 기반으로 하는 오픈소스 프로젝트이며, 반가상화보다 경량화된 방식입니다(운영체제 수준의 가상화). 또한 하드웨어를 가상화하는 계층이 없습니다. 네임스페이스, 컨트롤 그룹 같은 리눅스 커널 기능을 이용해서 운영체제 위에 컨테이너들을 생성하는 것입니다. 애플리케이션 실행에 필요한 것을 하나로 모아두고 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행환경을 구축 및 운용하기 위한 오픈소스 플랫폼입니다. 응용 프로그램을 개발, 배포 및 실행하기 위한 개방형 플랫폼입니다. 컨테이너란? host OS 상에 논리적인 구획(컨테이너)를 만들고, 애플리케이션을 작동하기 위해 필요한 라이브러리나 애플리케이션등을 하나로 모아, 별도의 서버인 것 처럼 사용할 수 있게 만드는 것. ..
Linux 컨테이너 리눅스 컨테이너에 대해 전반적인 내용을 알아보겠습니다. 리눅스 컨테이너를 살펴보면 OS 내부는 물리적 자원을 관리하는 "커널 공간"과 애플리케이션을 실행하는 "사용자 공간"으로 나누어집니다. 컨테이너형 가상화 기술은 사용자 공간(User space)를 나누어 각각의 사용자 프로세스에서 보이는 리소스를 제한하는 방법입니다. 사용자 영역 인터페이스라고도 합니다. 기존 가상화 기술과 LXC 차이점 널리 사용되고있는 가상화 기술로는 Xen과 KVM이 있으며, 이것을 사용하여 호스트 OS (또는 하이퍼 바이저)에서 가상 머신 환경을 만들고 그 위에 OS를 실행시켜 여러 OS 환경을 구축할 수 있습니다. KVM과 같은 기존의 가상화 기술에서는 가상머신이 실제 물리적인 하드웨어를 Emulate하기..
LXC의 구현 LXC와 비슷한 기술로 “chroot”라는 것이 있습니다. chroot는 프로세스의 루트 디렉토리를 변경하는 것으로, 이를 통해 프로세스가 액세스 할 수있는 디렉토리를 제한하거나 시스템 라이브러리와 관련 라이브러리를 로드 할 수있습니다. 그러나 chroot에서 제어 할 수있는 파일이나 디렉토리에 대한 액세스만으로, 네트워크 및 프로세스 등을 컨트롤 할 수는 없습니다. 또한 FreeBSD 에는 chroot를 발전시킨 툴로서 “jail”라는 기능이 탑재되어있습니다. jail는 파일 시스템에 대한 액세스뿐만 아니라 프로세스 및 장치 등의 자원에 대해서도 제어가 가능합니다. LXC가 jail과 유사한 개념으로 구현 되었습니다. cgroups은 OS가 관리하는 다양한 리소스를 중앙에서 제어하기 위한..
CFS Bandwidth 테스크 그룹별로 shares 값을 설정하여 cfs 태스크의 스케줄 할당 비율을 조절할 수 있습니다. 여기서 또 다른 cfs 태스크의 스케줄 할당 비율을 조절할 수 있는 cfs bandwidth 방법을 소개합니다. 테스크 그룹에 매 cfs_period_us 기간 마다 cfs_quota_us 기간 만큼 런타임을 할당하여 사용한다. 소진되어 런타임 잔량이 0이하가 되면 다음 period가 오기 전까지 남는 시간은 스로틀링 한다. 즉 해당 그룹을 대표하는 스케줄 엔티티가 상위 cfs 런큐로부터 dequeue되어 활동을 잠시 정지하게 된다. 이렇게 하여 다른 태스크 그룹에게 시간 할당을 양보한다. cfs_period_us bandwidth 기간 (us) cfs_quota_us bandwi..
태스크란? 프로세스 리눅스 개발자 입장에서 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 의미합니다. 더 자세히 말하면 파일 시스템에서 메모리로 로드한 코드, 데이터(프로그램)와 이를 커널에서 관리하기 위한 task_struct 구조체를 말하며 커널이 제공하는 방법을 통하지 않고서는 다른 프로세스와 상호작용하지 않으며(shared_memory) 한 프로세스의 잘못된 동작이 다른 프로세스에 영향을 미치지 않는 각각의 테스크입니다. 리눅스 커널에서는 프로세스와 스레드를 구별하지 않고 전부 태스크로 인식합니다(별다른 설정이 없을 경우). OS 커널이 부트업되어 준비된 경우 유저 레벨에서 디스크로부터 application을 로드하여 자원(메모리, 파일, 페이징, 시그널, 스택..
문제 : https://programmers.co.kr/learn/courses/30/lessons/1832# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #include #include using namespace std; int MOD = 20170805; int cache[500][500]; int move(int m, int n, int y, int x, vector& city_map) { if(x > n-1 || y > m..
문제 :https://www.acmicpc.net/problem/2302 2302번: 극장 좌석 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1) www.acmicpc.net 풀이 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include using namespace std; int n, m; int sit[41]; void makesit() { sit[0] = 1; sit[1] = 1; sit[2] = 2; for(int i = 3; i > n; ..
문제 : https://www.acmicpc.net/problem/2303 2303번: 숫자 게임 N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이기게 된다. 세 장의 카드가 (7, 8, 10)인 경우에는 합은 7+8+10 = 25가 되고 일의 자리 수는 5가 된다. 어떤 사람이 받은 카드가 (7, 5, 5, 4, 9)인 경우 (7, 4, 9)를 선택하면 합이 20이 되어 일의 자리 수는 0이 되고, (5 www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2..
출처 : https://www.acmicpc.net/blog/view/9 배열 A가 있고, 여기서 다음과 같은 두 연산을 수행해야하는 문제를 생각해봅시다. 구간 l, r (l ≤ r)이 주어졌을 때, A[l] + A[l+1] + ... + A[r-1] + A[r]을 구해서 출력하기 i번째 수를 v로 바꾸기. A[i] = v 수행해야하는 연산은 최대 M번입니다. 세그먼트 트리나 다른 방법을 사용하지 않고 문제를 푼다면, 1번 연산을 수행하는데 O(N), 2번 연산을 수행하는데 O(1)이 걸리게 됩니다. 총 시간 복잡도는 O(NM) + O(M) = O(NM)이 나오게 됩니다. 2번 연산이 없다고 생각해봅시다. 수를 바꾸는 경우가 없기 때문에, 합도 변하지 않습니다. 따라서, 앞에서부터 차례대로 합을 구해놓는..
알고리즘을 풀다 보면 좌표압축이라는 테크닉이 필요합니다.저는 좌표압축을 "순위가 중요한 알고리즘에서, 입력값의 갯수보다 입력값의 범위가 클 때 사용하는 방법", 이라고 생각하고 있습니다. 1차원의 좌표로 예를 들어보겠습니다.n개의 x값 을 입력 받아, 입력 중 두개의 x1,x2를 선택하여 사이에 존재하는 점의 개수를 구하는 작업이 있다고 가정합시다.x의 범위는 int형의 범위인 -2^31 ~ 2^31-1 이고 중복은 없습니다. n은 5000 이하입니다.입력은 n : 7, -2^31, -10000, 0 , -2000, 3, 6, 30000 , x1 = -10000, x2 = 30000 대략적으로 보면 그림과 같이 나타나게 됩니다. x1,x2 사이의 값을 구하게 되면 4개의 값이 나오게 됩니다. 이 경우 위..
문제 : https://programmers.co.kr/learn/courses/30/lessons/1833 코딩테스트 연습 - 캠핑 | 프로그래머스 캠핑 무지를 돌보느라 지친 콘은 한적한 시골의 한 캠핑장에 놀러 갔다. 캠핑장은 텐트를 칠 수 있는 넓은 평지를 제공하고 있는데, 이 평지에는 이미 캠핑장에서 설치해 놓은 n개의 쐐기가 박혀 있다. 캠핑장 이용 고객은 이 쐐기들 중 한 쌍을 골라 다음과 같은 조건을 만족하도록 텐트를 설치해야 한다. 텐트는 직사각형 형태여야 한다. 텐트의 네 면이 정확하게 동, 서, 남, 북을 향해야 한다. 대각에 위치하는 텐트의 두 꼭짓점이 정확하게 선택한 두 개의 쐐기 programmers.co.kr 주어진쐐기들 중 2가지를 고르는 것이 기본적인 풀이 방법이라 생각되어 ..