Coding Note
Serverless computing platform의 장점
2020.12.04 : Coding NoteLambda에 대해서 적었지만, 이런 식의 Serverless computing platform의 활용처라고 생각하면 됨. N사는 사내에 Lambda라는 플랫폼을 제공하고 있음 Serverless computing platform = Function as a Service(Faas) = event-driven compute platform 별도의 서버 없이 특정 이벤트에 대응하여 코드를 실행하거나, 직접 코드를 실행할 수 있다. 급하게 개발해야 할 때나, 가볍게 개발해야 할 때 서버 신청 / 설정 / 관리 안해도 되니 부담 적음. 배포 필요 없이 수정하면 수정하는대로 바로 반영된다는게 장점. 이러한 플랫폼의 장점과 언제 어떻게 사용하면 유용한지? A. 유저가 직접 기능 확장이 필요할 때 내 생각에 이런 ..
Promise / Future에 대한 개념 정리
2020.03.20 : Coding NotePromise / Future란? `` Future``는 미래에 실행이 완료될 것으로 예상되는 객체를 의미한다. 따라서 아직 실행되지 않은 경우나, 실행 중이지만 아직 완료되지 않은 경우를 포함하는 개념임. Future 객체에 요청한 값이 들어오기를 기다리는 동안 다른 연산을 수행할 수 있다. `` Promise`` 기본적으로 Future와 비슷하지만, Future는 외부에서 완료된 결과가 들어오기만 하므로 read-only, Promise는 강제로 내가 complete 할 수 있는 메서드를 제공한다는 차이점이 있다. (그래서 completable) 자바에서 `` Promise == CompletableFuture`` `` .complete()`` 라는 메서드를 제공하고 있음. https://stacko..
의존성 주입(DI, Dependency Injection)이란?
2019.05.10 : Coding Note의존성이란? "의존성 주입"이 무엇인지 얘기하기 전에 "의존성"이 무엇인지부터 명확히 해야 한다. 우리가 의존성 의존성 말은 많이 하는데, 의존성이라는 단어가 등장할때면 어김없이 추상적인 개념이 하나 둘 튀어나오다 보니 코드에서 정확히 뭘 의미하는건지 감을 못잡는 경우가 많다. ```java public class SimpleMovieLister { // the SimpleMovieLister has a dependency on a MovieFinder private MovieFinder movieFinder; } ``` 이게 의존성이다. 별게 아님. 그냥 한 객체에서 다른 객체 갖다 쓰면 의존성이다. 그렇다면 의존성 주입은 무엇이냐? ```java public class SimpleMovieLister..
REST api / RESTful 이란.
2019.05.03 : Coding NoteREST (Representational State Transfer) 자원(Resource), 행위(Verb), 표현(Representation) 세 가지로 구성되는 웹(HTTP)에서 사용되는 아키텍쳐 아키텍처 스타일(architectural style)이란, 그 스타일을 따르는 아키텍처가 지켜야 하는 제약조건들의 집합이다. 그냥 컨벤션 정도라고 생각해도 좋다. 자원 ? 실제 데이터와 URI. "DB에 들어가 있는 특정 레코드"같은 구체적 데이터를 의미할 수도 있고, "메인 페이지"와 같은 추상적인 데이터를 의미할 수도 있음. 이러한 데이터들과 그에 접근하기 위한 URI를 자원이라 함. 행위 ? 자원에 대한 액션이라고 생각하면 되며 HTTP Method로 행위를 나타냄 표현 ? 리퀘스트에 대한 응답으로 ..
자료 구조 선택 가이드
2018.12.20 : Coding NoteJava에서 `` Vector``는 `` ArrayList``다. `` Vector``가 있기는 하지만 사용할 필요가 없다. `` Vector``와 `` ArrayList``의 차이점은 동기화 처리에 있는데, `` Vector``는 무조건 동기화이기 때문에 단일 쓰레드에서 성능이 떨어지며 멀티 스레드 모델에서도 Collection, Map, synchronizedCollection, synchronizedList을 쓰는게 더 낫기 때문이다. deque? (발음은 deck) 양쪽에서 삽입/삭제가 가능한 원통형 구조를 생각하면 됨. C++에서 vector와 map 키-벨류 구조이긴 한데 컨테이너의 사이즈가 작아서 둘 중 뭘쓸까 애매한 경우가 있다. vector를 사용하는 경우라면, obj의 어떤 항목을 ke..
직렬화, Serialization
2017.12.01 : Coding Note어떤 언어를 사용하든 변수에 담기는 데이터는 크게 Value와 Address 두 가지로 구분할 수 있다.포인터, 객체 변수 등등은 변수 자체에 담기는 데이터가 Address다.문제는 객체를 저장/전송하려고 할 때 발생하는데, 객체 변수에 들어있는 Address를 저장/전송한다면 받는 측에서 그 Address를 참조해봐도 아무런 데이터가 없기 때문에 전혀 의미가 없다. 그래서 레퍼런스를 따라가서 실제로 의미있는 데이터인 Value를 저장하는 작업이 직렬화, Serialization이다.직렬화 결과 데이터 형식은 선택에 따라 Binary일 수도, JSON, CSV일 수도 있다. 그래서 그냥 포인터로 따라가서 직접 저장하는 방식으로도 구현할 수 있겠지만 객체 내부에서 또 다른 객체 변수가 있다던지, 클래스 내..
함수형 프로그래밍 (Fucntional)
2017.11.10 : Coding Note함수형 프로그래밍이란? 계산이나 데이터 처리 등을 함수들의 조합으로 생각하는 프로그래밍 방식 이 때의 함수들은 순수 함수여서, 언제 호출하든 어떤 input x에 대해 항상 같은 output y를 반환해야 함 이러한 함수들이 바로 `` map, filter, reduce`` 등 객체지향 프로그래밍에서는 계산이나 데이터 처리를 객체들을 조작하여 처리 객체들을 조작한다는 것은 객체의 상태를 바꾼다는 것 객체의 상태에 따라 어떤 input x에 대해 output이 y일 수도, y'일 수도 있음 이러한 점이 객체지향과 함수형의 차이점 함수형 프로그래밍과 명령형(Imperative) 프로그래밍을 같이 사용할 수 있는가? 함수형을 너무 엄격하게 적용하는 경우, 언어 자체가 강력하게 함수형을 지원하지 않으면 이렇게 ..
소켓 프로그래밍 관련 ( Socket programming )
2017.08.25 : Coding Note2016/09/20 - [Network] - TCP { TIME_WAIT }실험적, 경험적으로 판단한 내용이라 항상 이렇게 동작함을 보장하지는 않는다. ```client → output_buf → ~network~ → input_buf → recv └─────── not app layer ───────┘```TCP socket에서, socket 사이에 주고받는 데이터의 단위는 TCP segment다.client에서 `` send(str)`` 시 `` str``이 하나의 TCP segment에 들어가 전송된다.server에서 `` recv()``는 다음과 같이 동작한다.buffer에 데이터가 있는 경우 buffer에 있는 데이터를 모두 또는 지정된 크기만큼 가져오면서 blocking을 해제하고 다음 코드를..
상속, 인터페이스, 트레이트 차이점과 어떨 때 사용하나.
2017.06.30 : Coding Note상속, 인터페이스, 트레이트의 차이상속과 나머지 두 관계의 가장 큰 차이점은, 인터페이스와 트레이트는 기능 단위라는 것이다.그래서 클래스 사이에 연관 관계가 없어도 기능 단위의 공통점을 가지도록 할 수 있다. abstract추상 클래스를 사용하려면 ``java extends``를 사용해야 하므로, 상속 계층에 연결된다.추상 클래스는 반드시 하나 이상의 추상 메소드를 포함해야 한다. 추상 메소드는 하위 클래스에서 반드시 재정의되어야 한다. interface와 달리 일반 메소드도 포함할 수 있다.상속 계층을 먹고 들어간다는 점, 메소드 재정의 강제는 interface로도 가능하다는 점 때문에 신중하게 써야한다. interface인터페이스에 어떤 메서드가 있는지 알고 있다면, 각 클래스에서 인터페이스를 어떻게..
Encoding 정리. Unicode, ANSI, UTF, CP949
2017.06.05 : Coding NoteUnicode유니코드 자체는 특정 encoding 방식을 가리키는 말이 아니라, 순서(U+????)와 문자를 1:1로 매핑해놓은 하나의 코드표를 가리킨다. ANSI와 달리 전세계 글자를 하나의 코드표에 표현하기 위에 만들어졌기 때문에, Unicode 코드표 안에 전세계 글자가 모두 들어있다. UTF(Unicode Transformation Format)은 유니코드 표를 보고 문자를 bytes로 변환하는 encoding 방식이다. ex, (U+C548, 안) 이라는 문자가 있을 때, 이 문자를 어떤 바이너리 데이터로 변환할 것인가?를 결정하는 것이 UTF-8이니 UTF-16이니 하는 Encoding이라는 것이다.(U+C548, 안)은 UTF-8의 경우 0xec9588으로, UTF-16의 경우 0xc548로..
IP parsing(+C), URL parsing 정규식 pattern
2017.02.01 : Coding NoteRegex는 느리다? 그렇지 않다.compile은 오래걸리지만, evaluation할 때는 그냥 문자열 찾는 것 만큼 빠르게 잘 동작함.그래서 굳이 regex를 피할 필요는 없다. 그냥 적재 적소에 사용하면 된다. URL parsing```jsregexp [url, scheme, slash, host, port, path, query, hash]var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;``` IP parsing```python^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9..
서버 취약점 점검 체크리스트
2017.01.27이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.