분류 전체보기
서투른 공감
오늘 나의 시선을 사로잡은 글귀는 위의 사진과 같다. 여기 작가는 물고기와 지렁이등의 생명체에게는 동정심을 느끼지 못하지만 새같은 생명체에게는 동정심을 느끼는 것 같다. 그러면서 자신의 동정심은 인간과 동물을 차별하는 동정심이 아니라고 한다. 동정심, 나라는 범위를 특정 대상까지 넓혀서 그 대상의 상황에 공감하는 것, 그렇기에 같은 정을 느끼는 마음이라 선조들께서 이름을 지은것이 아닐까라는 생각이 든다. 공감, 동정심에서 가장 중요한 부분이다. 공감은 타인의 감정에서 세상을 보고 경험할 수 있는 능력이라는 의미이다. 우리가 동물에게 동정심을 느낀다는 것은 동물이라는 다른 종의 생물의 감정을 느끼고 그 동물의 시선에서 세상을 경험한다는 의미이다. 이는 참 어려운데 인간은 다른 동물이 어떤 감각기관으로 어떻..
[C++ STL] Map 사용법 이모저모
최근에 코테 주 언어를 모종의 이유로 C++로 바꾸게 되었다. C++에서 Map자료 구조 활용의 이모저모를 정리해보았다. Map이 뭔데? Map은 Key-value 형태로 데이터를 정리하는데 사용된다. unordered_map과의 차이점은 key를 기준으로 정렬을 내부적으로 시킨다는 것이다. 좀 더 깊이 이야기해보자면 Map은 C++내부적으로 Red-Black Tree로 구현되어 있기 때문에 Search, Insert, Delete에서 최악의 시간의 경우 O(logN)의 시간이 보장되는 무시무시한 놈이다. 대학교 2학년때 이거 구현한다고 진짜 밤날샌거 생각하면 진절머리가 난다. 문법 1. 정의 std::map 변수명; 로 선언하게 된다. 자료형은 단순하게 int, string등이 들어갈수도 있고 새롭게 ..
[Spring] SpringSecurity와 Jwt : 이론편
이번 글에서는 SpringSecurity를 이용한 Jwt방식의 인가 처리에 대한 방식과 관련 용어를 정의해보겠다. 용어 설명 우리가 SpringSecurity를 이용해서 client 요청에 대해서 인증을 하고 권한을 부여하기 위해서 이를 위해 노력하는 등장인물들에 대해 먼저 알아봐야한다. 1. Filter Spring Security는 request에 대해서 Dispatcher servlet이 처리하기 전에 Filter를 통하여 request에 대한 검사를 진행하고 해당 request에 대해서 권한을 부여해준다. 권한을 부여해주는거는 다르게 말하면 request에 대해서 SecurityContext를 부여한다고 이야기할 수 있다. 2. SecurityContext SecurityContext란 무엇일까?..
진부한 이야기
진부한 이야기는 그만큼 그 이야기를 이해하기 어려워서 이다. '독서를 많이 해라' 이건 우리가 유치원 때부터 아니면 우리가 글자를 깨우치고부터 계속 듣는 말이다. 독서는 어느 순간 우리에게 지루하고 따분한 이야기로 전락했다. 유튜브나 인스타 같은 자극적인 매체에 빠져 독서라는 것을 소홀히 하거나 인터넷 뉴스를 읽듯 독서를 다루게 된다. 대학이라는 교육기관을 졸업하고 취업을 한 나조차도 독서의 중요성에 대해서 간과하고 단순한 자기계발의 일환으로 생각했다. 이는 너무나도 부끄러운 일이다. 독서는 쉽게 하는 게 아니다. 물론 쉽게 읽을 수 있는 책들도 존재한다. 하지만 내가 독서를 통해 세상을 경험하고 옛사람들의 지혜를 얻고자 한다면 우리가 강연을 집중해서 듣듯이 책을 읽어야 한다고 생각한다. 그렇게 하지 못..
Docker -v ?
Docker에는 -v옵션이 있다. 해당 옵션이 왜 필요한지를 모르겠어서 구글링 해보아도 한국어 설명이 부족한것 같았다. 이에 공식 document를 보고 정리해보고자한다. 도커의 Layer 구조 도커의 컨테이너는 아래와 같은 Layer들로 구성되어있다. Docker Container는 Image를 기반으로 실행이 된다. 이렇게 실행된 container의 경우 image layer 최상단 층에 container layer를 추가하게 된다. 이때 container layer의 경우 R/W layer이고 나머지 Layer는 Read-Only layer이다. 이는 어찌보면 당연한 구조인데 한개의 docker image로 여러 container를 실행시키고자 한다면 docker image에 해당하는 layer는 ..
LockFreeHashing
Fine-grained Lock의 문제 멀티 쓰레드 상황에서 Hash에 consistency를 유지하고 싶다면 hash의 key에 lock을 걸어서 사용하는게 일반적인 방식일 것이다. 우리는 Hash를 사용하는 이유는 시간복잡도가 매우 낮기 때문일 것이다. 하지만 hash key 1개당 가지고 있는 데이터 수가 늘어나게 되면 이러한 시간복잡도로 인한 장점은 무색해진다. 따라서 Bucket 크기를 늘려야하는 시점이 오게 된다. Fine-grained Lock을 사용하는 상황에서 bucket을 증가시킨다고 하면 어떤 식으로 증가시켜야할까? 다음 그림을 보자 이 상황에서 우리가 bucket의 크기를 늘리게 된다면 늘어난 bucket에 대해 lock을 할당해야할 것이다. 하지만 lock의 갯수를 늘리는게 맞는 ..
LockFreeList
1. Locking Mechanism의 문제 우리가 멀티쓰레드 상황에서 쓰레드간 공유자원에 대하여 consistency를 위해 Locking Mechanism을 사용하곤 한다. 이러한 Lock의 경우 다음과 긑은 문제를 야기하게 된다. DeadLock : 당연하다. Priority Inversion : OS의 스케줄링에 따르면 우선순위가 낮은 프로세스가 먼저 Lock을 획득하게 되어 우선순위가 역전되는 현상이 발생한다. Convoying : Locking을 획득하고 이를 해제하기 까지 가장 속도가 느리게 걸리는 프로세스에 의해 다른 프로세스들의 속도 또한 지연되는 현상을 의미한다. Async-signal unsafety : function이 signal handler에서도 안전하게 호출될 수 있는 것을 ..