개발

    [git] reflog : 선배의 커밋을 날렸을 때(git reset --hard복구 방법)

    어느 날 밤, 코드를 수정하여 커밋을 푸시했다. 사내 보안 시스템은 내 코드에서 보안 정보를 찾아냈고 나에게 알람이 전송되었다. 나는 git reset HEAD^를 하고 push origin 브랜치 --force를 날렸다. push를 하고 나니 내가 선배의 커밋까지 reset를 시키고 원격 리모트를 업데이트 시켰다는 것을 깨달았다. 그 순간 자리에서 일어나 소리를 질렀고 머리를 쥐어 뜯으며 내 덤벙거림을 탓했다. 나는 혼란스러운 마음에 침대에 누워 천장을 바라보았다. "아... 망했네..." 탄식이 절로 나올 수 밖에 없는 상황이였다. 그리고 멍을 때리다 지푸라기라도 잡는 심정으로 검색을 했다. 그리고 git reflog라는 것을 발견하고 터미널에 치니 remote에서 pull받고 merge된 커밋이 내..

    Next.js 웹소켓 이슈

    프로젝트를 진행하다 최근에 사용하게 된 Next.js를 이용해서 웹소켓 통신을 하는 client와 server를 동시에 구현하려고 했었다. 먼저 websocket connection이 맺어지는것을 확인하기 위해 다음과 같이 코드를 작성했다. - pages/api/monitoring/socket.ts import { Server } from "socket.io"; import { NextApiResponseServerIO } from '@/types/monitoring' const io = new Server({ path: "/api/monitoring/socket" }); io.on("connection", (socket) => { console.log('WebSocket connected success..

    데이터 파이프라인 용어 정리

    데이터 파이프라인 용어 정리

    데이터 파이프라인이란, 데이터를 수집하는 근원지 부터 데이터 저장소까지 데이터를 이전하는 구조이다. 이러한 데이터 파이프라인은 수집해야하는 데이터가 많아 짐에 따라 이를 보다 효과적으로 관리하고 저장하기 위한 목적으로 개발 및 발전이 되어왔다. 이번 글에서는 데이터 파이프라인을 구성하는 요소들에 대한 간단한 설명을 해보려고 한다. 먼저 기본적인 데이터 파이프라인의 구조를 보자.데이터 소스 업무 시스템을 위한 RDB나 로그등을 저장하는 파일 서버를 데이터 소스라고 한다. 이러한 데이터 소스에 저장되어있는 데이터를 흔히들 로우 데이터라고 한다. 물론 여기서 데이터 소스를 파일 서버라고 하는 경우는 배치 처리에서 쉽게 떠올릴 수 있고 스트림으로 데이터를 받아오는 상황에서는 메세지 브로커들이 데이터 웨어하우스 ..

    Hadoop 1.0

    Hadoop 1.0

    하둡은 왜 필요할까? 우리가 RDB에 데이터를 저장할 때는 데이터를 행을 기준으로 저장하는데 이를 우리는 행 지향 데이터베이스라고 한다. RDB는 기본적으로 동시 접속에 좋은 성능을 보이고 낮은 지연시간을 가진다. 하지만 메모리의 부족에는 급격한 성능하락을 보이는 특징을 가진다. 이 때문에 DBMS의 성능을 측정할 때 메모리를 바꿔가면서 성능을 측정하게 되는 것이다. 여기서 우리가 데이터 처리의 관점에서 생각을 해보면 데이터 처리의 경우 열지향이라는 것을 생각할 수 있다. 우리가 판다스를 사용하기 편한이유는 column base로 데이터 추출이 용이하기 때문인것처럼 말이다. 이러한 열지향 데이터 베이스의 경우 다음 2가지 관점에서 수억건 이상 데이터를 저장하는 데이터 레이크에서 선호된다. 1) 특정 컬럼..

    [Neo4j] Neo4j의 메모리 구성

    [Neo4j] Neo4j의 메모리 구성

    DBMS의 성능에 가장 많이 영향을 미치는 config는 아무래도 메모리 일 것이다. 그렇기에 오늘은 Neo4j의 메모리 configuration을 공부해보고자 한다. 다음 글은 Neo4j 공식문서를 바탕으로 구성한 글이다. Neo4j Memory Mangement OS memory OS를 위해 남겨놓는 memory 공간을 의미한다. 이는 Neo4j가 사용하는 memory가 swap되지 않게 하기 위해서 남겨놓아야 한다. JVM heap Neo4j는 java기반 언어이기 때문에 JVM Heap을 위한 메모리가 존재해야한다. JVM Heap이란 Java에서 동적으로 생성되는 객체들이 저장되는 공간이다. 해당 메모리는 JVM Heap영역이기 때문에 Neo4J가 관리하지 않고 Java의 garbage coll..

    [Neo4j] Cypher Query - (1)

    Neo4J에서는 SQL이 아닌 Cypher라는 선언형 프로그래밍 언어를 통해 DBMS에 질의를 하게 된다. 이번 글은 DBMS 질의어의 기본인 생성, 검색, 수정, 삭제에 대한 Cypher문을 공부해보고자 한다. CREATE CREATE는 노드및 관계 를 생성하는데 사용되는 문법이다. 다음은 노드를 생성하는데 사용되는 명령문의 예시이다. CREATE (ee:Person {name: 'Emil', from: 'Sweden', kloutScore: 99}) > ()안에는 이러한 노드에 대한 정보가 들어가게 된다. > ee:Person에서 ee는 노드 variable에 해당하고 Person은 노드 Label에 해당한다. Node Label Label이 같은 노드들은 같은 set에 묶이게 되고 이러한 set을 ..

    [Neo4j] Neo4j Docker Compose

    [Neo4j] Neo4j Docker Compose

    Neo4j configuration은 진짜 많다. 이는 다음 링크에서 확인할 수 있지만 오늘은 간략한 시작방법만 정리해보고자 한다.https://neo4j.com/docs/operations-manual/current/docker/ref-settings/ Docker-specific configuration settings - Operations ManualA conversion table for the Neo4j configuration settings to the Docker format.neo4j.comdocker run다음 command를 통해 neo4j docker를 run시킬 수 있다.docker run \ --name testneo4j \ -p7474:7474 -p7687:7687..

    [Neo4j] 그래프 데이터베이스란?

    [Neo4j] 그래프 데이터베이스란?

    Graph Database의 필요성 기존에 우리가 사용하는 관계형 데이터 베이스는 객체간의 관계를 join을 통해 표현을 하곤했다. 하지만 관계의 수와 유형이 늘어나면 늘어날 수록 join은 관계들을 효과적으로 처리하지 못하게 된다. 이는 SNS를 생각하면 쉽게 이해가 되는데 우리가 LinkedIn에서 특정인의 follow수를 counting하고자 한다면 회원 정보의 테이블과 팔로우-팔로잉 관계를 나타내는 테이블을 조인하여 우리가 원하는 특정인의 팔로우 목록을 긁어오거나 저 두 단계를 순차적으로 처리해야할 것이다. 아무리 빨라도 불필요한 연산이 들어가 연산의 속도가 느려짐은 명백하다. 이외에도 - 보다 복잡한 계층적인 관계를 표현해야한다 - 관계성이 보이지 않는 객체들 사이의 관계를 파악해야한다. - 상..