본문 바로가기

전체 글

(341)
2017년 지극히 개인적인 회고 굳이 회고를 써야하나 하는 시점에서 지금 잘하고 있는가를 고민하다가 회고를 쓰면서 정리하기로 했다. 작년에는 블로그가 인생의 절반이었기 때문에, 블로그를 중심으로 회고가 이루어졌는데 올해에는 이런 저런 많은 일들이 있었으니 주제별로 세션을 나눠 회고를 해야겠다. 블로그 회고 1. 포스팅 성격에 따른 플랫폼 분리작년에는 티스토리에만 주구장창 포스팅을 했었다. 포스팅의 성격은 신경쓰지 않고 한 플랫폼에서 카테고리만 나눠 포스팅을 했더니 뭔가 모듈화가 되어있지 않은 느낌을 받았다. (이 정도면 거의 병이다.) 그래서 미디엄이라는 플랫폼에는 에세이 형식의 글을 포스팅하기로 했고 GitHub 호스팅을 통해 새로 블로그를 만들어서 프론트엔드 분야와 각종 Tool들을 소개하는 포스팅을 하기로 했다. 그리고 세 플랫폼..
[Refactoring] 마틴 파울러, 리팩토링 정리 1편 Refactoring 1편 컴퓨터가 인식 가능한 코드는 바보라도 작성할 수 있지만, 인간이 이해할 수 있는 코드는 실력있는 프로그래머만 작성할 수 있다. What, 리팩토링이란 무엇인가 정의 리팩토링이란 겉으로 드러나는 기능은 그대로 둔 채, 아랑보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업을 말한다. 리팩토링 기법을 연달아 적용해서 겉으로 드러나는 기능은 그대로 둔 채 소프트웨어 구조를 변경한다. 목적 첫째, 리팩토링은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다. 둘째, 리팩토링은 겉으로 드러나는 소프트웨어 기능에 영향을 주지 않는다. Why, 리팩토링은 왜 필요한 것인가 1) 소프트웨어의 설계를 보다 더 나아지게 한다. 2) 코드를 더 이해하기 쉽게 만든다. 3) 코드에..
[JS] JavaScript의 Event Loop [JS] Javascript 작동 원리에 대해서, Event LoopJavscript를 공부하다 보면 이런 말을 종종 듣는다. 싱글스레드 기반으로 동작하는 자바스크립트 이벤트 루프를 기반으로 하는 싱글 스레드 Node.js 이런 말은 많이 들었지만 구체적으로 내부 원리에 대해 간단하게라도 설명하는 글은 보기 힘들다. (초심자 입장에서는 쉬운 내용이 결코 아니라고 생각한다.) 이번 포스팅에서는 "정말 싱글 스레드인가?", "싱글 스레드의 정체는 무엇이며, 어떻게 싱글 스레드인가?" "이벤트 루프는 또 무엇인가?" 등등에 대해 정말 간단히 알아보기 위해 자바스크립트가 동작하는 환경(Environment)과 자바스크립트를 해석하고 실행시키는 엔진에 대해서 알아본다. Javascript Engine ?일단 한 ..
SQL Injection이란 무엇인가 [보안] SQL Injection SQL Injection 이란 Web hacking 기법 중 하나이다. 웹 애플리케이션의 뒷단에 있는 Database에 질의(쿼리를 보내는 것)하는 과정 사이에 일반적인 값 외에 악의적인 의도를 갖는 구문을 삽입하여 공격자가 원하는 SQL 쿼리문을 실행하는 기법이다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못했을 경우에 발생한다. 요즘의 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 하는 것을 방지하기 위해 escape 함수와 prepared statement를 제공한다. SQL Injection 공격의 종류에는 크게 세 가지 유형이 있다. 인증 우회 (AB : Auth Bypass) 데이터 노출 (DD : Data Disclosu..
[SpringBoot] WebSocket을 활용한 채팅 구현하기. [SpringBoot] WebSocket을 활용한 채팅 구현하기 Spring WebSocket이란? Spring 4.0 부터 지원하고 있으며 공식문서에는 Real-time full duplex communication over TCP 이라고 설명이 되어 있다. WebSocket 프로토콜 RFC 6455는 클라이언트와 서버간의 전이중, 양방향 통신과 같은 웹 응용 프로그램을 위한 중요한 기능을 정의한다. XMLHttpRequest, 서버 전송 이벤트 등을 포함하여 웹을 보다 interactive하게 만드는 기술이다. WebSocket은 메시징(Messagine) 아키텍쳐를 의미하지만 특정 메시징 프로토콜의 사용을 요구하지는 않는다. TCP를 통한 매우 얇은 레이어로, 바이트 스트림을 메시지의 스트림으로 변..
[TCP] 3-way-handshake & 4-way-handshake [TCP] 3-way-handshake & 4-way-handshake 연결 성립(Connection Establishment) 1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다. 2) 서버는 클라이언트의 요청인 SYN(a)을 받고 클라이언트에게 요청을 수락한다는 ACK(a+1)와 SYN(b)이 설정된 패킷을 발송한다. 3) 클라이언트는 서버의 수락 응답인 ACK(a+1)와 SYN(b) 패킷을 받고 ACK(b+1)를 서버로 보내면 연결이 성립(establish)된다. 연결 해제(Connection Termination) 1) 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.2) 서버는 클라이언트의 요청(FIN)을 받고 알겠다는 확인 메세지로 ACK를 보낸다. 2-1) 그리고나서는..
[DataStructure] 5. Red-Black Tree 5. Red- Black Tree트리 자료구조 중 Red- Black Tree에 대해서 알아본다. RBT는 BST를 기반으로하는 트리 형식의 자료구조이다. BST(Binary Search Tree)효율적인 탐색을 위해서는 어떻게 찾을까만 고민해서는 안된다. 그보다는 효율적인 탐색을 위한 저장방법이 무엇일까를 고민해야 한다. 이진 탐색 트리는 이진 트리의 일종이다. 단 이진 탐색 트리에는 데이터를 저장하는 규칙이 있다. 그리고 그 규칙은 특정 데이터의 위치를 찾는데 사용할 수 있다. 규칙 1. 이진 탐색 트리의 노드에 저장된 키는 유일하다. 규칙 2. 루트 노드의 키가 왼쪽 서브 트리를 구성하는 어떠한 노드의 키보다 크다. 규칙 3. 루트 노드의 키가 오른쪽 서브 트리를 구성하는 어떠한 노드의 키보다 작다..
[Java8] 3. Optional Class 3. Optional ClassNPE(NullPointerException) 때문에 고생한 경험이 한 두 번이 아닐거라 생각한다. 그래서 Java8 에서는 하스켈, 스칼라 등의 함수형 언어에서 사용되고 있는 ‘선택형 값’ 개념의 영향을 받아 Optional 라는 새로운 클래스를 제공한다. 값이 없는 상황을 모델링하는 것이다. Optional은 선택형 값을 캡슐화하는 클래스이다. 값이 존재하면 그 값을 감싼다. 값이 없는 경우에는 Optional.empty 메서드로 Optional을 반환한다. empty 메서드는 Optional의 특별한 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드이다. null 레퍼런스와 Optional.empty()는 의미상으로 비슷하지만 실제로 차이점이 많다. null을 참조하려 하..