분류 전체보기 41

Docker & Kubernetes

------아직 진행 중인 글입니다------ 1. Docker 1.1. Docker 개념 Docker는 애플리케이션 개발, 이동(shipping) 및 실행, 테스트 및 배포를 위한 개방형 플랫폼(open platform)이다. Docker는 컨테이너(container)라고 하는 격리된 환경을 통해 애플리케이션을 인프라에서 분리해 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공한다. Docker를 이용하면 지정된 호스트(host)에서 여러 컨테이너를 동시에 실행할 수 있다. 도커를 이용하면 웹 서버가 컨테이너에 설치되고, 컨테이너가 설치된 운영체제는 "도커 호스트"라고 부른다. 하나의 도커 호스트에는 여러 개의 컨테이너가 만들어질 수 있고, 각각 독립적으로 실행되기 때문에 각자 독립적인 포트와 파일..

Server/Docker 2023.01.09

JVM

JVM을 구체적으로 이해하기 전에 프로그래밍 언어와 프로그램 컴파일과 실행에 대해 알아보자. 1. 프로그래밍 언어 이진수(binary code)인 0과 1 컴퓨터의 CPU는 이진수밖에 이해하지 못한다. 기계어(machine language) 이진수 명령어들로 구성된 언어 어세블리어(assembly language) 사람이 직접 기계어 프로그램을 작성하는 것은 힘들기 때문에 기계어의 각 명령을 ADD, SUB, MOVE 등 가급적 표현하기 쉬운 상징적인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 어셈블리어(assembly language)가 만들어졌다. 고급 언어 어셈블리어 역시 사람이 다루기 힘들고, 다양한 프로그램이나 자료를 표현하기에는 한계가 있다. 고급 언어는 사람이 이해하기 쉽고..

Java 2022.12.02

단위 테스트(Unit Test)

------아직 진행 중인 글입니다------ TDD에 대해 더 자세히 알고 싶다면 아래 링크 클릭! https://daily-studygo.tistory.com/39 TDD 1. TDD(Test Driven Development) 우리는 보통 개발할 때, 설계(디자인)를 한 이후 코드 개발과 테스트 과정을 거치게 된다. 하지만 TDD는 기존 방법과는 다르게, 테스트케이스를 먼저 작성한 이후에 실제 daily-studygo.tistory.com 이전에 TDD의 중요성에 대해 알아보았다. TDD에서 얘기하는 테스트는 단위 테스트를 의미한다. 단위 테스트에 대해서 알아보자. 1. 단위 테스트 & 통합 테스트 1.1. 단위 테스트(Unit Test) 단위 테스트는 하나의 모듈(하나의 기능 또는 메소드)을 기준..

MST(Minimum Spanning Tree)

1. MST(Minimum Spanning Tree) 1.1. Spanning Tree(신장 트리) 개념 신장트리란 하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 이 때 모든 그래프가 포함되어 서로 연결되면서 사이클이 존재하지 않는다는 조건은 트리의 성립 조건이기도 하다. n개의 정점을 가지는 그래프의 최소 간선의 수는 (n-1)개이고, (n-1)개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 되고 이것이 바로 Spanning Tree가 된다. 즉, 그래프에서 일부 간선을 선택해서 만든 트리 1.2. MST(Minimum Spanning Tree, 최소 신장 트리) 개념 Spanning Tree 중에서 사용된 간선들의 가중치 합이 최소인 트리 각 간..

알고리즘 2022.11.29

최단 경로 알고리즘

최단 경로 알고리즘은 말 그대로 가장 짧은 경로를 찾는 알고리즘이다. '한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우', '모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우' 등의 다양한 사례가 존재한다. 1. Dijkstra(다익스트라) 1.1 개념 다익스트라는 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다. '음의 간선'이 없을 때 정상적으로 동작한다. 다익스트라는 기본적으로 그리디 알고리즘으로 분류된다. 매번 '가장 비용이 적은 노드'를 선택해서 임의의 과정을 반복하기 때문이다. DP를 활용한 최단 경로 탐색 알고리즘이라고 할 수도 있다. 여기서 DP가 적용되는 이유는, 굳이 한 번 최단 거리를..

알고리즘 2022.11.29

DP(Dynamic Programming)

1. DP(동적 계획법) 1.1. 개념 어떤 문제는 메모리 공간을 약간 더 사용하면 연산 속도를 비약적으로 증가시킬 수 있는 방법이 있다. 대표적인 방법이 바로 DP이다. DP는 큰 문제를 작게 나누고, 같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 기법이다. 큰 문제를 작게 나누는 방법은 분할 정복 방식이 있다. 하지만 DP와의 차이점은 DP는 문제들이 서로 영향을 미치고 있다는 점이다. 퀵 정렬을 예로 들면, 한 번 pivot이 자리를 변경해서 자리를 잡게 되면 그 기준 원소의 위치는 더 이상 바뀌지 않고 그 피벗값을 다시 처리하는 부분 문제는 존재하지 않는다. 반면에 DP는 한 번 해결했던 문제를 다시금 해결한다는 점이 특징이다. DP는 아래 조건을 만족할 때 사용할 수 있다. ..

알고리즘 2022.11.29

DFS & BFS

그래프 알고리즘으로, 문제를 풀 때 상당히 많이 사용한다. 경로를 찾는 문제 시, 상황에 맞게 DFS와 BFS를 활용하게 된다. 1. DFS 1.1 개념 깊이 우선 탐색이며 DFS(Depth-First Search)라고 부른다. 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 재귀함수를 통해 구현한다.(스택 자료구조를 이용하는 알고리즘이기 때문) 모든 경로를 방문해야 할 경우 사용에 적합하다. 이 알고리즘을 구현할 때 가장 큰 차이점은, 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사 해야 한다는 것이다. 이를 검사하지 않을 경우 무한루프에 빠질 위험이 있다. 1.2. 시간 복잡도 인접 행렬 : O(V^2) 인접 리스트 : O(V+E) V는 접점, E는 간선을 뜻한다 1.3. C..

알고리즘 2022.11.29

정렬

정렬 알고리즘에 대해 본격적으로 살피기 전에, 제자리 정렬과 안정 정렬의 개념에 대해 알아보자. 제자리 정렬(in-place sorting) 제자리 정렬은 추가적인 공간이 필요하지 않은 정렬이다. merge sort처럼 요소를 분할하면서 추가적인 공간을 필요로 하지 않은 정렬이다. 현재 배열 안에서 정렬이 다 이뤄지는 것이다. 이러한 정렬에는 버블, 삽입, 선택 정렬 등이 있다. 제자리 정렬 장점은 공간 복잡도와 공간 지역성이다. 공간 지역성이란 특정 데이터와 가까운 주소가 순서대로 접근되는 경우를 말한다. 공간 지역성의 이점은 메모리를 계속 할당 받지 않아도 되는 데 있다. 병합 정렬 같은 경우에는 새로운 메모리를 계속 할당 받는데 이러한 메모리들은 연속적이지 않아 지역성이 좋지 않다. 하지만 선택, ..

알고리즘 2022.11.28

알고리즘

1. 알고리즘 1.1. 알고리즘 정의 수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것이다. 즉, 알고리즘은 어떤 일을 해결하기 위한 방법과 절차라고 할 수 있다. 1.2. 알고리즘의 조건 입력 외부에서 제공되는 자료가 0개 이상 존재해야 한다. 출력 적어도 2개 이상의 서로 다른 결과를 내야 한다. 명확성 수행과정은 무엇을 하기 위한 것인 지 명확하게 정의되어야 한다. 유한성 알고리즘의 명령어대로 수행했을 때 처리된 후 종료되어야 한다. 효율성 모든 과정은 명백하게 실행가능한 것이어야 하며, 시간적 공간적 효율성을 가져야 한다. 2. 복잡도 복잡도(Complexity)는 알고리즘의 성능을 나타내는 척도이다. 복잡도는 시간..

알고리즘 2022.11.28

HTTPS & SSL

1. HTTPS 1.1. HTTPS가 나온 배경 HTTP는 단순 텍스트를 교환하므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다. 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 이런 HTTP 보안 이슈를 해결해주는 프로토콜이 'HTTPS'이다. HTTPS는 HTTP 메세지(텍스트)를 암호화한다. 1.2. HTTPS HTTPS에서 S는 Over Secure Socket Layer을 뜻한다. HTTPS란 인터넷 상에서 정보를 암호화하는 SSL/TLS프로토콜을 이용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다. HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)라는 프로토콜로 대체한 것이다. => SS..

CS/네트워크 2022.11.24