분류 전체보기

    [typeScript] 타입스크립트를 왜 쓸까?

    타입스크립트를 왜 쓸까 타입스크립트도 결국 자바스크립트이다. 타입스크립트도 자바스크립트와 크게 다르지 않다. 따지고 보면 JS의 확장 느낌 자바스크립트에 타입에 대한 내용을 확장시킨것이 타입스크립트이다. 타입스크립트는 컴파일 후에 자바스크립트 파일을 떨군다.(tsc -w) 결과적으로 JS파일을 생성한다는 점에서 왜 굳이 타입스크립트를 쓰는지에 대한 의문이 생기는데 그 의문을 해결해보자. 다음과 같은 함수가 있다고 하자 function sum(x, y) {{ return x + y; } sum 함수가 파라미터로 어떤타입의 인자를 받는지, 어떤타입으로 리턴해주는지 명확하지가 않다. 자바스크립트는 dynamic typing을 지원하고 있다. 예를 들어 해당 함수에 x =3 , y = '5' 값을 인자로 넘겨줬..

    [mongoDB] MongoDB에 대하여

    NoSQL "Non Relation Operation Database SQL" 관계형 데이터베이스가 아닌 SQL 나는 관계형 DB만을 사용해봤고 사용해왔다. NoSQL 비관계형 데이터베이스에 대해선 들어보기만 했지 실제로 사용해본적은 없었다. 데이터직군에 있는 지인도 NoSQL을 사용하고 요즘 채용공고에도 MongoDB와 같은 비관계형 데이터베이스가 많이 보인다. NoSQL에 대해 알아보자 feat.몽고디비 일반적인 관계형데이터베이스는 데이터의 중복을 제거하고 무결성을 보장하기 위해 정규화를 진행한다. (1,2,3 정규화) 이러한 정규화 과도한 JOIN으로 성능저하의 문제를 야기한다. 당장 내가 사용하는 쿼리만 봐도 JOIN이 난무한다. 하지만 NoSQL은 중첩데이터 형태를 띔으로 불필요한 JOIN을 최..

    동기와 비동기

    개발을 하다보면 수도없이 들어보았을 동기와 비동기에 대해 다뤄보겠다. 동기(Synchronous) 동기 처리 방식은 직렬적으로 작업을 수행한다.(순차적 실행) 하나의 작업(Thread1)이 수행할 동안 다음 작업(Thread2)는 대기한다. Thread1이 종료되면 Thread2을 수행한다. 하나의 작업이 종료될때까지 다음 작업들은 Blocking(작업중단)된다. 비동기(asynchronous) 비동기 처리 방식은 병렬적으로 작업을 수행한다. 하나의 작업(Thread1)이 작업을 시작하고 종료되기를 기다리지 않고 다른 작업을 처리할 수 있다. 하나의 작업이 종료되지 않은 상태여도 대기하지 않는다.(non-Blocking) Blocking 요청한 작업을 마칠때까지 계속 대기한다. Thread관점에서 요청한..

    [DNS] DNS란 무엇인가

    DNS(Domain Name System) DNS란 도메인 주소를 IP 주소로 변환하는 시스템 - 웹사이트 링크에 접속했을 때 우리는 도메인 주소를 사용한다. (ip주소 대신) - 도메인 주소를 실제 네트워크에서 사용하는 ip주소로 바꾸고 해당 ip주소로 접속하는 과정이 필요 - 이러한 과정을 DNS(도메인 네임 시스템) 이라고 한다. - 이러한 시스템은 전세계적으로 약속된 규칙을 사용한다. 상위 기관에서 인증된 기관에게 도메인을 생성하거나 ip주소를 변경할 수 있는 권한을 부여한다. DNS의 구성요소 1. 도메인 네임 스페이스 (Domain name Space) 2. 네임 서버 (Name Server) _ 권한있는 DNS 서버 3. 리졸버 (Resolver) _ 권한없는 DNS 서버 '해당 도메인은 해..

    [node] pm2로 프로세스를 관리해보자

    node를 사용하다보면 ctrl + C 로 서버를 종료한 후 다시 서버를 띄워주는 행위를 반복하게 된다. 또한 node는 싱글스레드로 동작하고 단일cpu코어에서 실행되기 때문에 멀티코어 시스템을 사용할 수 없다. 이러한 문제들을 해결하기 위해 등장한것이 pm2라는 녀석인데 이 녀석에 대해 알아보자. npm install pm2 ( -g 는 붙이지 않겠다.) pm2를 설치 후 package.json을 한번 확인해 준 후 실행해보자. pm2 start pm2.js pm2 list 실행 혹은 리스트를 출력하면 실행중인 프로세스를 확인할 수 있다. 그런데, 서버를 껐다 다시 시작하는 경우가 많아서 pm2를 인스톨한것 같은데.. pm2 start pm2.js --watch pm2 실행 시 '--watch' 를 뒤..

    [node] Express

    node.js 기반의 웹 프레임워크(요청에 따른 응답데이터 추출) 앞서 포스팅한 방법으로 express 모듈을 설치해준다. 'npm i express' express 모듈설치 후 npm사이트에서 제공하는 코드를 긁어와서 실행해주자 const express = require('express') const app = express() const port = 3000 app.get('/', function (req, res) { res.send('Hello World') }) app.listen(port, () => { console.log('Example app listening on port ${port}') }) node index.js 콘솔창에는 아무런 변화가 없을텐데 브라우저를 열어 'localhos..

    [node] npm

    npm Node Package Manager npm npm 다운로드는 터미널에서 'npm install ***' 이런식으로 설치한다. 설치하기 이전에 npm init 을 입력해서 npm을 시작해주자. npm init을 하게되면 package.json 파일이 생성된다. package.json은 설치한 모듈에 관한 의존정보들도 함께 관리해준다. 설치된 모듈들을 정리해주는 메모장과 같은 느낌 npm을 시작하고 모듈을 하나 다운받아보자. 'npm install figlet' (install 은 i로 써도 된다.) npm install 할때 -g 를 붙이게 되면 해당 프로젝트가 아니라 전역으로 해당 모듈을 사용할 수 있다. 하지만 충돌 가능성이 있으니 충돌을 방지하기 위해 전역이 아닌 프로젝트 단위로 설치하는 것..

    [java] Optional

    Optional 클래스는 Java8부터 지원한다. 1. Optional이란?? [NPE(NullPointException)] 개발을 하다보면 무수히 많은 널포인트익셉션 오류를 마주하게 된다. 해당 오류를 피하기 위해선 null값 체크를 통한 개발을 해야 하는데, null체크를 하기 위해 변수가 많은경우에는 코드가 더러워지게 된다. if(name != null && StringUtil.isNotEmpty(name)){ name.sort(); }[Optional] Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있다. null이 올 수 있는 데이터를 Wrapper클래스로 감싸 NPE가 발생하지 않도록 해준다. Optional클래스는 아래와같이 value값을 저장하기 때문에 값이 null이..