분류 전체보기

    [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이..

    [library] devtools 라이브러리

    devtools 라이브러리는 애플리케이션 개발에 있어 유용한 기능들을 제공한다. 개발생산성 향상에 도움을 줄 수 있는 devtools의 기능을 소개한다. Spring-boot Devtools 기능 Automatic restart : 소스가 변경될때마다 애플리케이션을 자동으로 재시작해준다. 개발자가 소스 수정 후 서버를 재실행하는 과정을 줄일 수 있다. Live Reload : 정적자원(html, css, js) 수정 시 새로고침 없이 바로 적용 가능. 의존성 추가 의존성을 추가하기 위한 방법은 다음과 같다. build.gradle에 의존성 추가 dependencis { compileOnly 'org.springframework.boot:spring-boot-devtools' }인텔리제이 환..