반응형

개발 8

DB 정규화 한줄 설명

" 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. " - 위키백과 - 정규화 안하면 정규화되지 않은 데이터베이스의 중복된 데이터는 데이터의 수정에 큰 비용이 들게 할 뿐만 아니라, 데이터의 갱신 / 삽입 / 삭제가 제대로 이루어지지 않는 갱신 이상, 삽입 이상, 삭제 이상을 발생시킬 가능성이 있다. 용어 슈퍼 키 : 행을 특정할 수 있는 속성 집합 후보 키 : 더이상 줄일 수 없는 슈퍼 키 기본 키 : 후보 키 중 테이블의 대표로 선택된 키 정규화와 정규형 정규화된 데이터베이스는 특정 정규형을 만족하게 된다. Ex) 제1정규화가 된 데이터베이스는 제1정규형을 만족한다. 제1정규형(1NF 또는 최소형) 중복되는 항목이 없으며, 모..

개발/DB 2021.02.07

자바스크립트 for, while label

자바스크립트에의 반복문에도 label 기능이 있다. a:for(let i = 0; i < 4; i++) b:for(let j = 0; j < 4; j++) { if(i === j && i === 1) continue a; console.log(i, j); } let i = 0; a:while(true) { console.log("J"); b:while(true) { if(i === 10) break a; console.log(i); i++; } } continue 또는 break 뒤에 반복문의 label 이름을 붙여, 해당 반복문 바로 아래에서 break 또는 continue를 쓴 것과 같은 효과를 낼 수 있다.

개발/Javascript 2021.02.05

자바 ArrayList Vector 차이

자바에 있는 두 배열, ArrayList와 Vector 사이에는 어떤 차이가 있을까? Vector 클래스의 메서드들에는 synchronized 키워드가 붙어있다. ArrayList 클래스의 메서드들에는 synchronized 키워드가 붙어있지 않다. 즉, synchronized 키워드가 붙어있는 Vector 클래스는 여러 개의 스레드에서 같은 객체의 메서드를 동시에 실행하는 일을 막아 준다. 반면 ArrayList 클래스는 여러 개의 스레드에서 같은 객체의 메서드를 동시에 실행할 수 있으므로 아무 생각 없이 다중 스레드 환경에서 사용하면 문제를 일으킬 가능성이 있다. 또, ArrayList에서 내부적으로 존재하는 실제 배열의 길이를 알 수 없는데 반해, Vector에서는 그 길이를 capacity 메서드..

개발/JAVA 2021.01.04

자바스크립트 큰 숫자 편하게 표기하는 법

큰 숫자를 표시할 때 콤마가 안 찍혀 있으면 읽기 힘들다. JS에서는 콤마 대신 언더스코어를 이용해 숫자를 예쁘게 표기할 수 있다. console.log(1_000_000); // 백만 console.log(1_0000_0000); // 1억 console.log(1_23_456); // 간격이 달라도 상관없다 console.log(0b0011_0110); // 다른 진수도 작동된다 console.log(1_1.5_5); // 소수부분에도 쓸 수 있다 원하는 숫자 사이에 언더스코어를 하나씩 껴넣어 주면 끝이다. 백 단위로 끊는 대신 천 단위로 끊을 수도 있다. 그냥 마음대로 끊어도 된다. 1_0000_0000_0000_0000_0000_0000n // 1자(秭) 물론 BigInt를 표기할 때에도 사용할 ..

개발/Javascript 2021.01.04

AWS EC2 파일 업로드 with FileZilla

FileZilla를 이용하면 EC2에 손쉽게 파일을 업로드 할 수 있다. FileZilla를 이용해 EC2 인스턴스에 연결하기 위해서는 AWS에서 받은 pem 파일 또는 putty용으로 변환한 ppk 프라이빗 키 파일이 필요하다. 혹시나 이 파일이 어디에 위치해있는지 잊어버렸다면, 인스턴스에 연결할 때 사용하는 putty 연결 속성을 Load한 후 Connection - SSH - Auth를 들어가서 ppk 파일의 위치를 얻을 수 있다. FIleZilla를 키고 왼쪽 위의 "사이트 관리자 열기" 아이콘을 눌러 사이트 관리자 창을 연다. New site로 사이트를 추가해주고, 프로토콜 : SFTP 호스트 : EC2 인스턴스의 퍼블릭 IPv4 DNS 또는 IPv4 주소 로그온 유형 : 키 파일 사용자 : u..

개발/AWS 2021.01.03

Typescript infer 키워드, 함수 반환값 구하기

/** * Obtain the return type of a function type */ type ReturnType any> = T extends (...args: any) => infer R ? R : any; ReturnType, es5 타입스크립트 기본 라이브러리에 들어있는, 함수의 리턴 타입을 알아내는 타입 함수(?)다. infer 키워드는 extends 구문에서, 아무데에나 들어가서 그 위치에 들어갈 수 있는 최대한의 타입을 유추한다. 그리고 그것을 extends 문이 참일 때 반환될 구문에서 사용할 수 있다. 위 함수를 보면 문제점을 하나 알 수 있는데, 함수가 입력에 따라서 반환값의 타입이 바뀌는 경우 이를 정확히 찾아낼 수 없다는 것이다. 이를 해결하기 위해서 GetReturnType이..

개발/Typescript 2021.01.02

JSFuck 원리

자바스크립트를 다뤄본 사람이라면, 특히 주변에 JS를 사용하는 사람이 있다면 이것을 들어 본 적이 있을 것이다. "JSFuck" JSFuck - Write any JavaScript with 6 Characters: []()!+ www.jsfuck.com 주로 JS를 까는(...)용도로 인용당하는데, ()+[]! 이 여섯 문자만 가지고 자바스크립트에서 할 수 있는 모든 일을 할 수 있다는 점에서 까이곤 한다. 뭐 저런 해괴한 언어가 다 있냐는둥... [][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!..

개발/Javascript 2020.11.28
반응형