Ligntning Network비트코인을 통해서 어떤 상품을 결제한다고 하면, 기존의 비트코인 프로토콜 상에서는 최소한 10분은 기다려야 안심하고 상품이나 서비스를 제공받을 수 있다. 내가 비트코인을 전송하는 트랜잭션이 블록에 포함되어서 컨펌되려면 10분의 시간이 필요하기 때문이다.만약 그 금액이 크다면 판매자 입장에서는 1컨펌으로는 안심할 수 없으니 더 긴 시간을 기다려서 충분한 수의 컨펌이 이루어질 때까지 기다려야 안심하고 상품이나 서비스를 제공할 수 있을 것이다. 라이트닝 네트워크 (줄여서 LN이라고도 한다.) 는 이 문제를 해결하기 위해, 비트코인 프로토콜을 기반의 즉각적인 페이먼트를 할 수 있는 프로토콜이다. 그래서 비트코인을 첫 번째 레이어 프로토콜로 봐서 LN을 그 위에 세컨드 레이어로 프로..
컨센서스컨센서스는 말 그대로 '합의'를 말한다.비트코인에서 컨센서스라고 하면, 비트코인을 채굴하는 채굴자들 사이에 공통적으로 합의하고 있는 내용을 말한다.특히 비트코인에서 중요한 합의는 Canonical Block Chain에 대한 합의가 중요하다.각각의 노드마다 생각하는 Canonical Block Chain이 다르다면, 누구는 어떤 블록이 유효하다고 하고, 누구는 유효하지 않다고 말할 것이기 때문이다. 또한 블록체인은 일종의 은행장부와 같다.어떤 노드는 이 블록체인에 따르면 A가 100만원을 갖고 있다고 해서 A가 100만원을 송금하려고 하는데, 어떤 노드는 A가 50만원 밖에 갖고 있지 않다고 여겨서 거부하면 A입장에서는 난 100만원을 갖고 있는데 왜 50만원으로 인식이 되는지 이해할 수 없을 것..
데이터베이스에서는 다양한 이유로 레코드를 정렬해야 할 때가 있다. - order by 와 같은 SQL을 처리해야 할 수도 있고- 트리 인덱스에 데이터를 많이 넣고자 할 때도 정렬이 필요하고- projection 연산 결과로 중복을 제거할 때도 정렬이 유용하며- 조인을 구현할 때 정렬을 사용하여 조인할 수도 있다. 우리가 흔히 쓰는 정렬 알고리즘은 in place 방식이라고 하더라도 O(N)의 공간복잡도가 필요하다.하지만 요즘 메인 메모리의 크기가 점점 늘어나고는 있음에도 처리해야 할 데이터는 너무 많아서 메인 메모리만으로는 모든 데이터를 한번에 정렬할 수 없다.그렇다고 디스크를 메모리처럼 보고 정렬하기에는 너무 많은 입출력 비용이 발생하기 때문에 디스크 접근 비용을 최소화하면서 적은 메모리로 데이터를 정..
SQL 문장을 실제로 컴퓨터가 실행할 때는 어떤 과정으로 실행될까?먼저 SQL은 확장된 형태의 관계 대수로 변환된다.그리고 이 관계 대수식을 기반으로 '질의 처리 계획'을 만드는데, 이는 관계 대수 연산자를 노드로 하는 트리로 표현된다.트리의 각 노드에는 해당 연산자가 어떤 알고리즘을 사용할 것인지 표시하는 라벨이 있다.이렇게 관계 대수 연산자는 질의 수행의 기본 단위가 되며, 이 연산자들의 동작을 구현하는 것은 최대 성능을 위해 최적화 되어 있다. 시스템 카탈로그DBMS가 쿼리를 처리할 때, 어떻게 처리할 지 결정하는 과정에서 테이블의 구조와 인덱스 등의 데이터를 참고한다.이 정보는 '시스템 카탈로그'라는 특별한 '테이블' 에 저장된다. (데이터 딕셔너리, 카탈로그라고 부르기도 한다.)실제 테이블 데이..
자소서 모집 기간 : 2024-10-28 09:00 ~ 2024-11-11 18:00 자소설 닷컴 구경하다가 우연히 3학년도 지원 가능한 인턴을 발견해서 지원했다.기간이 넉넉하긴 했는데, 여유부리다가 마감 당일 학교 가면서 버스랑 지하철에서 지원서를 작성했다..다행히 대기업 지원 자소서를 몇 번 읽어본 적이 있어서 어떤 식으로 써야할 지 감은 왔는데, 문항이 500자라서 내용을 줄이느라 힘들었다. 1번 문항 = 전공 관련 학습 경험 (500자)2번 문항 = 지원 동기 & 입사 후 이루고 싶은 목표 (500자)3번 문항 = 전공 성적 나열 (1000자) 1번은 전공 / 알고리즘 / 개발(프로젝트) 3가지로 분류해서 작성했고,2번은 LG CNS 사이트 찾아보니 Mu Career Up (MCU) 라고 부서..
https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 생각보다 재미있게 푼 그래프 문제백준 티어로 치면, 골드5 정도 될 것 같다. 막대 그래프 = 1자로 연결된 트리도넛 그래프 = 사이클 1개인 그래프8자 그래프 = 사이클이 2개인 그래프 이때 각각의 그래프를 식별할 수 있는 특징을 잡아내면 된다. 막대 그래프는 사이클이 없다.도넛 그래프는 사이클이 존재하며, 모든 정점의 out degree 가 1개이다.8자 그래프는 사이클이 존재하며, 1개 정점의 out degree = 2, 나머지 정점의 ..
해시 기반 인덱스해시 기반 인덱스는 등호 조건 조회에 최적화된 인덱스 기법이다.(범위 조건 조회에는 사용할 수 없다. 탐색 키가 일 때, a >= 10 과 같은 질의를 수행하려면 10, 11, 12, .. 를 모두 해싱해야 하며, a = 10 에 대해서도 b, c 를 임의의 값을 모두 지정해서 해싱해야 하기 때문이다.반면 a = 1, b = 2, c = 3 과 같이 조건이 명확할 때는 매우 빠르게 원하는 데이터를 찾아낼 수 있다. 정적 해싱 정적 해싱 기반의 인덱스는 primary bucket page 와 overflow page 로 구성된다.하나의 인덱스 파일은 0 ~ N-1 까지의 고정된 크기의 버켓으로 이루어지며, 처음에는 버켓 당 하나의 기본 페이지만 존재한다.버켓은 데이터 엔트리를 갖고 있고,..
https://www.acmicpc.net/problem/1166 이분탐색 심화 개념을 사용해야 하는 문제.. (나도 알고 싶지 않았다)문제 자체는 간단하다.어떤 정육면체 N개를 W*H*L 직육면체 안에 넣고자 할 때, 이 정육면체의 한변의 길이를 최대한 늘리는 것이 문제 풀이이다.단순히 직육면체와 같은 부피를 갖는 N개 정육면체에 대한 한변 길이 구하기로는 풀 수 없다. 극단적으로 얇은데 큰 직육면체를 생각하면 된다. (1 x 10억 x 10억) 내가 맨 처음 생각한 풀이는 (알고보니 정해였지만) 이분탐색이다.주어진 직육면체의 세 변 중 가장 짧은 변의 길이를 반씩 나누면서 그 변의 길이를 정육면체의 변의 길이로 할 때 N개 이상의 상자를 담을 수 있는지 계산하는 것이다. s = 0, e = min(W..
https://www.acmicpc.net/problem/4315 재미있는 트리 연습 문제아이디어 + 구현 모두 깐깐한 문제였다.각 노드가 갖고 있는 구슬 개수가 모두 1개가 되도록 할 때 구슬을 옮기는 최소 횟수를 구하는 문제이다. 내가 생각한 풀이 흐름은 다음과 같다. 1. 전체 트리를 DFS 돌면서 현재 자신을 root 로 하는 서브트리에 대해 이 서브 트리가 가지고 있는 모든 구슬의 개수, 필요한 구슬의 개수를 구한다. 만약 가지고 있는 구슬이 필요한 구슬보다 많다면, 그 차이를 return 하여 부모 노드로 여분 구슬을 넘긴다. DFS 실행이 끝나면 모든 노드는 자신을 루트로 하는 서브트리 모두를 채울 수 있도록 딱 맞게 구슬을 갖고 있거나, 모자라거나 둘 중 하나의 상태가 된다. 2. 두번째로..
https://www.acmicpc.net/problem/4436 가볍게 브론즈 문제를 하나 풀어봤다. (솔브드 마라톤 시스템 추천 문제)모든 k 값을 1부터 다 시도해보면서 브루트포스로 구현하면 되는 문제다. 근데 푸는데 생각보다 시간이 오래 걸렸다.. 그 이유는 set 연산자를 착각해서 그렇다.나는 s.union() 메서드가 기존 집합에 자동적으로 더해주는 줄 알았는데, 기존 집합이 변하지 않고, 새로운 합집합을 반환한다는 점을 프린트로 찍으면서 디버깅하느라 10분정도 걸려서 푼 것 같다.. 이 문제 덕분에 파이썬 집합 연산은 새로운 집합을 반환하므로 기존 집합을 덮어써야 한다는 것을 깨달을 수 있었다. import sysinput = sys.stdin.readlinewhile True: try..