프로그래밍
프로그래밍/Programming
2020. 4. 12.
[web] Web Server와 WAS_개념과 특징
Web Server HTTP Protocol을 기반으로 하여 Client(웹 브라우저)의 요청을 서비스하는 기능을 담당한다. 대표적인 Web Server에는 Nginx, Apache Server, IIS(Windows 전용 Web Server) 등이 있다. Web Server는 요청의 종류에 따라 정적인 컨텐츠를 제공할 경우, WAS를 거치지 않고 바로 Client에 응답을 전달하고, 동적인 컨텐츠를 요청받은 경우, Client의 Request를 WAS에 보낸 뒤 WAS의 처리 결과를 Client에 응답으로 전달한다. Web Server는 정적 컨텐츠 만을 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다. 하지만, Web Server 만을 사용한다면 Client가 원하는 요청에 대한 결과를 모두 ..
프로그래밍/IoT
2020. 4. 9.
[IoT] AWS IoT로 IoT 서비스 개발 시작하기
멀게만 느껴졌던 IoT 서비스를 직접 설계하고 구현하고 있다. 이 한 문장이 엄청 거창하게 보이지만, 이것이 가능한 데에는 여러 Cloud에서 IoT 서비스를 설계할 수 있도록 기본적인 리소스를 제공해주기 때문에 진입장벽은 많이 낮아진 것 같다. Cloud 서비스를 바탕으로 IoT 시작하기 AWS IoT의 Developer Docs를 살펴보면, AWS IoT 서비스를 다음과 같이 설명한다. "인터넷에 연결된 Device가 AWS Cloud에 연결할 수 있고, Cloud의 애플리케이션이 인터넷에 연결된 디바이스와 상호 작용할 수 있게 하는 서비스" 즉, AWS IoT를 사용하면 인터넷에 연결된 제품과 AWS 클라우드 간의 양방향 통신이 가능한 서비스를 설계하고 구현할 수 있다는 것이다. AWS Consol..
프로그래밍/Node.js
2020. 4. 8.
[Node.js] NPM Debug 모듈 사용법
A tiny JavaScript debugging utility modelled after Node.js core's debugging technique. Works in Node.js and web browsers. Debug(NPM 모듈)는 console.log()를 대신할 수 있는 로깅(디버깅) 모듈로 아래와 같은 장점을 갖고 있다. 로그를 구조화하여 구성 및 기록할 수 있다. 특정한 로그만 볼 수 있도록 지정할 수 있다. 모듈의 크기가 작아(81.5 kB) 활용하는 데에 부담이 없다. debug 모듈 사용법 const debug = require('debug'); const server = new debug('app:server'); const request = new debug('app:requ..
프로그래밍/Database
2020. 4. 7.
[DB] 정규화(Normalization)와 역정규화(DeNormalization)
정규화 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. (출처 Wikipedia) Data Model 과정에서 Entity 사이의 관계(Level, Depth 등)를 분석하여 다수의 Relation으로 분리하는 과정을 말한다. 정규화는 이렇게 함으로써 데이터의 일관성(Consistency)과 모델의 응집도(Cohesion)를 높이는 것을 지향한다. 정규화는 일관성(Consistency)을 향상시킨다. 정규화는 하나의 논리적 Database에서 여러 테이블에 동일한 데이터(column)가 관리되지 않도록 설계하는 과정이다. 만약, 여러 테이블에서 필요한 데이터라면 해당 Entity의 Level은 최상위 Level에 속하게 될 것이고..
프로그래밍/Node.js
2020. 4. 5.
[Node.js] Node.js로 SMS 인증번호 시스템 구현하기
최근 대부분의 서비스에서 회원가입 또는 로그인을 할 때, SMS 인증번호를 통한 Auth Check를 하는 경우가 많다. (물론 최근에는 카카오톡 메시지로 인증번호를 전달하는 경우도 많아졌지만) 대부분의 회사에서는 SMS 인증과 관련된 API가 구성되어 있다. 만약, 개별 프로젝트를 진행 중인 상황에서 SMS 인증번호를 통한 Auth 로직을 구성해야 한다면 어떻게 해야할까? SMS 전송 API의 선택 SMS 인증번호 로직을 구현하기 위한 1단계는 문자 전송 API를 선택하는 것이다. 적당한 구글링을 통해 각자의 필요나 상황에 따라 가장 적합한 SMS 전송 API를 찾을 수 있을 것이다. (만약, E-Mail 인증을 택한다면, E-Mail 인증 서비스를 제공해주는 API도 충분히 찾을 수 있다.) SMS ..
프로그래밍/Programming
2020. 4. 4.
[OS] Semaphore(세마포어)와 Mutex(뮤텍스)
기존에 구축해놓았던 프로젝트의 구조 변경이 필요한 순간이 찾아왔었다. 몇 가지 이슈로 인해 Singleton Pattern에 기반한 구조 변경이 필요하였고, 관련 디자인 패턴을 검색하는 과정에서 'Semaphore'라는 공통의 키워드를 발견하게 되었다. 세마포어(Semaphore) 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것. Wikipedia의 정의에 따르면 세마포어는 "두 개의 원자적 함수로 조작되는 정적 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법"으로 사용된다. 세마포어는 일반적으로 비교적 긴 시간을 확보하는 리소스에 대하여 이용하게 된다. Unix 시스템의 프로그래밍에서 OS의 리소스를 경쟁적으로 사용하는 Multi Process 환경에서 액션을 제..
프로그래밍/Database
2020. 3. 29.
[DB] 트랜잭션(Transaction)이란?
Transaction이란? 데이터베이스의 상태를 변화시키기 위해서 수행해야 할 연산들의 집합으로 하나의 작업 처리를 위한 논리적 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것을 간단하게 표현하면, SELECT, INSERT, DELETE, UPDATE의 쿼리를 사용하여 DB에 접근하는 것을 의미한다. 일반적인 경우, 작업 처리의 단위는 한 건의 쿼리(즉 연산)가 아닌 여러 개의 연산이 복합적으로 구성되는 것이 일반적이다. 현재 작성하고 있는 글을 등록하는 작업을 생각해보자. 글의 내용을 작성한 뒤, 등록 버튼을 눌렀을 때 새로운 글이 등록된 최신 글 목록이 보여지는 작업 처리의 단위는 등록할 때의 INSERT와 최신 리스트를 보여주는 SELECT가 하나의 단위에서 구성되는 것으로 이러한 작업의 단..
프로그래밍/Database
2020. 3. 25.
[MySQL] Inner Join과 Left Join의 차이
신입 개발자 면접에서 단골 질문이었다. " Inner Join과 Outer Join의 차이점을 아시나요? " 아마 join과 관련된 차이점을 검색할 때 가장 많이 나오는 이미지가 아래의 이미지일 것이다. 가장 간단하게 표현하면 Inner Join : Table A와 Table B의 교집합을 조회 Outer Join : Table A와 Table B의 합집합을 조회 사물의 이름을 저장하고 있는 table_A와 무게를 저장하고 있는 table_B, 그리고 해당 사물과 무게의 관계를 표현하는 rel_table_a_b 3개가 있는 상황이라고 해보자. Left Join 즉, Left Outer Join을 한 결과는 아래와 같다. select * from table_a as a left join rel_table_..
프로그래밍/Git
2020. 3. 24.
[Git] 효율적이고 효과적인 개발 Process 만들기
Git이란? software 버전 관리 시스템으로 변경사항을 추적하고, 여러 개발자들 간의 작업 사항을 반영 및 공유하는 것을 말한다. 개발자들의 Open Source Platform의 산물인 Github은 분산 버전 관리 시스템(Distributed Version Control Systems)인 Git을 사용하는 Software Project를 지원하는 대표적인 서비스이다. 어떻게 Git을 사용해야할까? Git을 사용하는 방법은 무궁무진하다. googling 또는 youtube 검색을 해보면 git 활용법에 대한 Bast Practice들이 다양하게(생각보다 비슷하다) 나올 것이다. 아래와 같은 의문점이 생길 수 있다. remote repository를 fork해서 사용하는 것이 언제나 좋은 것인지? ..