본문 바로가기

분류 전체보기

(104)
Index가 무엇인가? 그리고 장 단점 정리 두꺼운 책 맨 뒤(혹은 앞)에 있는 '색인' 이 이거라고 보면 된다. 뭐 예를들어 자바스크립트 책을 공부하는데 갑자기 함수를 공부하고 싶으면 색인(index)를 찾으면 된다. 1장 변수 12p 1.1 var의 정의 1.2 let의 정의.. 2장 함수 25p 2.1 함수 정의와 선언 2.2 콜백함수 미리 색인을 설정해 놓으면 25p로 바로 갈수 있는 원리와 비슷하다 또 다른 비유를 들자면, 도로 표지판이라고 보면 된다 내가 원하는 데이터를 찾기위해 떠나는 여정(?)이라고 할까? '저 서울에서 부산 가려고 하는데 어떻게 가요?' '아 일로 가면 대전으로 가고요, 대전에서 대구 가고요, 대구에서 부산가면 됩니다' 먼저, 우리가 어떤 정보를 조회하는 쿼리를 작성하면 내부적으로 한줄 한줄 조회하여 (full ta..
Postgresql 내부 살펴보기 내 DB는 어떻게 저장되는가? Mysql등을 쓰면서도 한번도 생각 안해본 주제이다. 어떻게 동작하는지 알면 최적화도 쉽게 할거라는 생각에서 이걸 공부하게 되었다. 먼저 포스트그레스가 설치된 폴더에서, data폴더에 base라는 폴더가 또 있다. 거기 들어가보면 왠 숫자들이 있고, 이것의 정체는 다음과 같다 우리가 만들었던 폴더들이 아래에 보인다. templete폴더는 어... 일종의 복사본 같은건데 이건 나중에 또 설명할 기회가 있으니 우선 패스. 그럼 내가 만들었던 instagram_clone폴더에 가면 8kb 단위의 수많은 파일들이 있다. 이게 바로 우리가 저장한 데이터 들인데... heap 파일이라고 부른다. 파일을 뜯어보면 users 테이블의 정보나 hashtag id, primary key, 그..
Instagram DB practice(1) (유데미 stephen grider 강사의 sql, postgresql 강의를 참고했습니다) DB 설계 자체는 그렇게 어렵지 않았다. 이전에도 미니프로젝트 등에서 몇번 해 봤기 때문에... (그런데 웃긴건 ORM을 몇번 썼다고 SQL을 다 까먹었더라... 그래서 지금 더 SQL쪽을 하고 있다) 사실 Instagram 전부를 했다기 보다는 그냥 포스팅, 유저정보 정도? 우선 내가 짜보고 강의를 통해 확인했는데, 두세가지 정도 알게된 사실이 있다. 1. created_at 과 updated_at 둘다 쓰지 않을때도 많다! - 사실 내가 DB 설계할때는 거의 이 두가지(생성날자, 업뎃날자)는 쌍으로 붙어 다녔는데 updated_at은 '좋아요' 기능 혹은 '해쉬태그' 기능에는 필요가 없다. 왜냐. 좋아요는 업..
COALESCE와 ::(double colon) 의미 COALESCE(병합) 은 어떨때 쓰는가? SQL은 굉장히 직관적이다 SELECT 는 말 그대로 선택이고 MAX는 최대값, JOIN은 합치기 등등.. 근데 유난히 이 COALESCE는 한국어로 병합인데 이건 좀 이해하기 힘들더라... 어쨋건... 이걸 쓰는 이유는 Null값을 다루기 위해서다. CREATE TABLE purchase_log ( purchase_id varchar(255) , amount integer , coupon integer ); INSERT INTO purchase_log VALUES ('10001', 3280, NULL) , ('10002', 4650, 500) , ('10003', 3870, NULL) ; 이 상태에서 할인가격을 구하려면 amount 에서 coupon을 빼야 할..
DB diagram.io 첫 입문 딱 봐도 뭔가 VSC를 켠 기분이 든다 최근 DB공부를 하고 있는데, SNS의 정석인 인스타그램 DB를 구상해보기로 했다. 해시태그부터 시작해서 태그까지 헤보고 있고 자세한 내용은 SQL 카테고리에 곧 올릴 예정인데, 사실 ERD를 몇번 그려보기도 했지만, 수많은 도구들이 있는데 바로 이 DB diagram.io 가 특히 눈에 띄었다. 바로 왼쪽의 저 VSC 코드입력창처럼 코드로 작성한다는것! 처음에는 '아 이거 전용 문법을 또 따로 배워야 되나?' 싶어서 좀 걱정했는데 사실 테이블 한 두세개정도 그려보면 대강 감이 온다. 뭔가 클래스 인스턴스 만드는것처럼 테이블을 생성하면 된다. 개인적으로 왼쪽에 코드를 쓰고 오른쪽에 테이블을 보는게 몇번 하다보니 익숙해져 버렸다. 물론 무료버전이며, 월 9달러 내면 ..
Check 키워드로 제약조건 설정(DB Validation) 하기 DB에서 Validation 설정하기 Validation은 이전에 Node와 Nest.js를 하면서 각종 라이브러리를 사용해봤다 (JOI나 express-validator, Nest Interceptor 등...) 그런데 DB에서 자체적으로 Check를 통해 Validation을 수행할수 있다는건 처음 알게 되었다. 그런데 사실 Validation이 중요한 작업이긴 한데... 사실 좀 귀찮은것도 사실이다. 하지만 그럼에도 DB에도 최대한 안전장치를 걸어두면 좋은 이유가 있다. 예를들어 Node.js를 사용하다가, Go로 개발할 일이 생겼다고 가정해보자. 그런데 실수로 Go로 개발한 부분이 Validation을 빼먹거나, 오류가 생기는 상황이 생긴다면? DB에 Validation에서 그런 상황을 막아주게 ..
틸트(~) 연산자와 ~~ 알아보기 현재 목표는 프로그래머스의 0레벨 100문제를 전부 풀어보는것인데 현재 100개중 45개를 푼 상태이다. 그래서 곧 고지가 눈 앞인데... 다른사람의 풀이를 보다가 ~~ 연산을 사용해서 몫을 구하는 사람들이 있어 틸트(~)가 뭔지 알아보다가 적는 포스팅이다. 이진수와 Not 연산 나는 인간이니까 십진수가 거의 디폴트로 박혀있는 상태이지만, 컴퓨터는 이진법(0,1)로 연산한다는걸 마음속에 저장하면서 프로그래밍을 배워야 한다. JS에서 ! 를 붙이면 NOT이 된다는건 아는데, 그럼 물결(틸트)는 뭐냐? 이진수로 바꾸고 NOT을 붙인다는 소리인데... 사실 잘 와닫지 않는다. 예를들어 1을 틸트연산자 ~1을 출력하면 -2가 출력되는데, 이 원리를 간단히 알아보자면 1을 이진수로 바꾸면 00000001(2) 인..
Node.js의 구성 - libuv의 존재 (Udemy node advanced concept 강의내용 + 추가로 공부한 내용들 정리) 노드JS의 정의부터 짚고 넘어가야될 것이, 노드 JS는 프레임워크나 프로그래밍 언어가 아니라, 자바스크립트 런타임 환경이라는 것이다 (첫 입문할때 다들 무슨 서버 이름같은건줄 안다) 그 베이스에는 V8엔진이 있고, 또 중요한것은 libuv의 존재인데, 이건 C++로 작성된 코드이기에 이걸 뜯...어보기엔 너무나 거대하다. 노드JS 표준 라이브러리에인 crypto에는 'pbkdf2' 라는 함수가 있다. crypto는 hash 라이브러리로, 이 함수는 password와 salt 등을 받아 암호화를 해주는 핵심 함수이다. 깃허브에 올라온 코드를 살펴보면, 1. process.binding() 을 통하여 자바스크립트로 ..