본문 바로가기

Computer Science

(19)
틀리는 무서움이 줄어들었다. 예전에 공통 컴포넌트나 공통 로직 만드는 게 너무 무서웠다. - 내가 잘못 만들어서 다른 부분에 악영향을 주면 어떡하지... - 만들어 둔 게 다른 부분에서 쓰여서 수정하기 어려우면 어떡하지... 요런 고민이 너무 많았는데, 지금은 달라졌다. 실수나 틀림은 당연한 것이다. 처음부터 완벽할 수는 없다. 완벽한 것은 미신이다. 실수나 틀림을 무서워하기보다는 그냥 지금 최선을 다할 생각을 하자. 같은 실수를 안 하고 최선을 다하다보면, 완벽에 가까워질 것이다. 그리고, 나중에 버그 생겼을 때 만 개를 수정할 생각하면 정말 답도 없다 생각이 든다. 공통된 거 잘 만들어서 잘 사용하는 게 중요하다.
Monolithic Architecture vs MSA(Micro Service Architecture) MSA 정의 MSA는 1개의 시스템을 독립적으로 배포 가능한 각각의 서비스로 분할한 것입니다. 각 서비스는 API를 통해 데이터를 주고 받으며 1개의 큰 서비스를 구성합니다. Monolithic Architecture(모놀리식 아키텍쳐)의 한계점을 극복하고자 등장하였습니다. 실제로 모놀리식 아키텍쳐가 너무 커졌다면 MSA로 교체하는 것이 이로울 수 있습니다. 대표적으로 넷플릭스, 아마존 등의 기업이 이 구조로 교체하고 서비스 속도 등에서 굉장한 이점을 보았습니다. 모놀리식 아키텍쳐의 장점 손쉬운 배포 - 파일 또는 디렉토리가 하나이기 때문에 쉬운 개발 - 하나의 코드 베이스를 이용하기 때문에 개발이 쉽고 디버깅이 쉽다. 성능 - 단 하나의 API로 MSA의 여러 API가 수행하는 것처럼 기능을 수행할 수..
이분탐색 이분탐색이란? - 정렬되어 있는 리스트에서 탐색 범위를 반씩 줄이며 특정 원소를 찾는 탐색하는 알고리즘입니다. (정렬이 되어있지 않다면, 정렬해야합니다.) - 반씩 좁혀가며 탐색하므로 O(log n)의 시간 복잡도를 가집니다. 이분 탐색 구현 function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left
우선순위 큐 와 힙(Heap) 우선순위 큐란? - 우선순위가 가장 높은 데이터를 꺼내는 자료구조입니다. - 일반적으로 우선순위 큐는 힙(Heap)이란 자료구조로 구현됩니다. 힙은 트리구조로 가장 높은 우선순위를 가진 것을 루트노드로 정렬합니다. (주로 최소 힙과 최대 힙으로 구현됩니다.) - 가중치가 있는 그래프에서 주로 사용합니다. 대표적으로 다잌스트라 알고리즘이 있으며, 이를 통해서 최단 거리를 구하는 알고리즘을 구할 수 있습니다. - 힙의 원소를 추가하거나 제거할 때, 트리를 탐색하므로 일반적으로 O(log n)의 시간 복잡도를 가집니다. Heap vs BST(Binary Search Tree) - 힙과 BST는 모두 트리를 기반으로 하는 자료구조입니다. 하지만, 둘은 정렬 부분에서 큰 차이가 있습니다. - 힙의 경우 우선순위를..
BFS(Breadth-First Search) 알고리즘 BFS란? 그래프 또는 트리를 얕은 단계부터 넓게 탐색하는 알고리즘이다. 주로 큐를 이용하여 구현하며 상세한 알고리즘에 따라 다를 수 있지만, 방문한 곳을 표시하지 않으면 무한루프 등에 빠질 수 있는 위험이 있다. 완전탐색의 일종이며, 모든 인접 지점을 차례로 방문한다. 대표적 예시로 네트워크 탐색, 최단 경로 문제 등이 있다. BFS의 작동원리 1. 중복방문을 체크할 visited 배열과 시작 노드를 큐에 넣는다. - node = 1, visit = {}, queue = [1] 2. 가장 우선적으로 넣은 큐 값을 현재 노드로 사용한다. 그리고 현재 노드와 연결된 노드를 찾고, 모두 큐 안에 넣는다. node = 1, Queue = [2,3,4], visit = [1] 3. 2를 반복한다. node = ..
[ETC] Native App, Mobile App, Wep App, Hybrid App Native App Native한 언어로 만들어진 앱으로 흔히 말하는 모바일 어플리케이션을 의미합니다. ex). 안드로이드 앱, IOS 앱 네이티브 앱의 장점 웹앱, 하이브리드앱에 비해서 압도적으로 성능이 좋습니다. 네이티브 API를 사용가능하며, 플랫폼과 더욱 밀착되어있습니다. 네이티브 앱의 단점 플랫폼에 한정적이고 제약이 있습니다. Mobile App/ Wep App 모바일 앱은 기존의 PC에 최적화된 사이트를 모바일 크기에 맞게 줄여서 표현한 사이트입니다. 또한, 풀 브라우저 방식을 사용하여 페이지 리로드시 속도가 느린 단점이 있습니다. 웹 앱은 웹 기술로 모바일 크기에 최적화하여 만든 사이트입니다. SPA가 적용되어 실행속도가 모바일 앱에 비해서 빠릅니다. 웹 앱의 장점 웹 사이트를 보는 것이기 ..
DFS(Depth-First Search) 알고리즘 DFS란? 그래프 또는 트리를 탐색하며 깊은 단계를 우선적으로 선택하여 최대한 깊게 탐색하는 알고리즘이다. 주로 재귀와 스택을 이용하여 구현하며 상세한 알고리즘에 따라 다를 수 있지만, 방문한 곳을 표시하지 않으면 무한루프 등에 빠질 수 있는 위험이 있다. 완전탐색의 일종이며, 백트래킹이 없을 시 굉장히 많은 시간을 소모할 수 있다. 대표적 예시로 미로탐색과 경우의 수 문제가 있다. DFS의 작동원리 1. 중복방문을 체크할 visited 배열과 시작 노드를 선정한다. - node = 1, visit = [] 2. 현재 노드와 연결된 노드를 찾고, 연결된 노드 중 하나로 다시 dfs를 실행한다. 이 때, 방문한 노드는 visit 배열에 기록한다.( 이, 때 연결된 남은 노드를 나중에 보고 현재 노드랑 연결..
에라토스테네스의 체 정의 그리스의 수학자이자 지리학자인 에라토스테네스가 고안한 소수(素數)를 찾는 방법으로, 이 방법으로 소수를 찾으려면, 2부터 시작해 자연수를 차례로 쓴 다음, 2 이외의 2의 배수, 3 이외의 3의 배수, 5 이외의 5의 배수의 순서로 수를 지워나가 끝에 남는 수가 소수이다. 아이디어 1. 0-n까지 들어있는 배열을 만든다. 여기서 소수가 아닌 숫자는 모두 0이 될 것이다. 2. 1을 0으로 만든다. (1은 소수가 아니므로 처리한다.) 3. 반복문을 돌리면서 만약 해당 숫자가 살아 있다면, 그 숫자는 소수이다. 그리고 그 숫자의 n배는 소수가 아니므로 0으로 바꾼다. 4. 마지막에 filter를 이용하여 0을 제거하면 소수만 모여있는 배열이 남는다. 구현 function solution(n){ // 1..