본문 바로가기

Dev.

(341)
2016년 블로그 포스팅 회고, 블로그를 시작하려는 사람들에게 "9개월 간의 블로그 포스팅 회고"다른 기술 블로그 글에 영감을 받아 저도 한 번 회고를 작성해봅니다. 블로그를 시작하게 된 계기받은 만큼 베풀어야 올해 3월부터 블로그를 시작했습니다. 9~10개월 정도 되었네요. 처음 이 분야에 대해 알아보기 시작했을 때의 그 막막함은 이루 말할 수 없을 정도였습니다. 하지만 다른 분야만 할까요? 많은 선배 개발자분들이 여러 채널을 통해 정보를 공유해주시고 계셨습니다. 각종 블로그, 각종 커뮤니티 등 검색 만으로 취할 수 있는 정보가 정말 많았습니다. 개발 공부 초기에 많은 도움을 받았고 받은 도움을 나 또한 베풀어야겠다고 다짐했습니다. 가르치듯 공부하기누군가에게 무언가를 설명할 때 논리적인 허점이 들어나고, 질문에 대한 답을 할 때 알고 있다고 착각하는 부분들이 드러..
[서평] 개발자가 읽은 완벽한 공부법 http://www.yes24.com/24/goods/34569935?scode=032&OzSrank=1 개발자가 읽은 '완벽한 공부법' 총 평제목에 ‘완벽한’이라는 다소 자극적인 수식어를 달고 있는 책이다. ‘빅보카’의 저자 신박사님 함께 작업하신 책이라서 읽어보았다. 정말 오랜만에 읽어보는 자기계발서이다. 결론부터 말하자면 훌륭했고 제목 그대로 완벽했다. 하지만 실제로 이 책이 독자에게 많은 도움이 되려면 책에 나온 방법에 따라 실천해야 도움이 된다. 또 이 책은 ‘공부법'을 넘어서 인생을 '어떻게 살아갈 것인가'에 대한 방향을 제시해준다. 흔한 자기계발서들은 이렇다. 흔한 자기계발서 : 나 자신을 믿어라!! 독자 : 어떤 근거로 그런 주장을 하는데? 어떻게 믿으라는 것인가? 에 대한 의문을 남긴채 ..
[DataStructure] Graph라는 자료구조에 대해서 정점과 간선의 집합, Graph 그래프 관련 용어 정리Undirected Graph와 Directed Graph(Digraph)말 그대로 정점과 간선의 연결관계에 있어서 방향성이 없는 그래프를 Undirected Graph라 하고, 간선에 방향성이 포함되어 있는 그래프를 Directed Graph라고 한다. Directed Graph(Digraph) V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u에서 vertex v로 가는 edge Undirected Graph V = {1, 2, 3, 4, 5, 6}E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vert..
[DB] 정규화는 왜 하는 것인가? 정규화는 왜 하는 것인가? #1. 정규화는 어떤 배경에서 생겨났는가?한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 갱신 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 되는 것이다. 이러한 문제를 해결하기 위해 정규화 과정을 거치는 것이다. 1-1. 갱신 이상에는 어떠한 것들이 있는가?삽입 이상(insertion anomalies) 원하지 않는 자료가 삽입된다든지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다. 삭제 이상(deletion anomalies) 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜..
[OS] 멀티스레딩에 대해서 멀티스레딩에 대해서 #프로세스와 스레드의 차이 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다. 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하여 프로세스라고 한다. 스레드는 프로세스의 실행 단위라고 할 수 있다. 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있다. 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티스레딩이라고 한다. 이 경우 각각의 스레드는 독립적인 작업..
RDB 성능 이슈 3. INDEX의 원리와 종류 RDB 성능 이슈 #3. INDEX의 원리와 종류 #왜 index를 생성하는데 b-tree를 사용하는가?데이터에 접근하는 시간복잡도가 O(1)인 hash table이 더 효율적일 것 같은데? SELECT 질의의 조건에는 등호() 연산도 포함이 된다. hashtable을 사용하게 된다면 = 연산이 아닌 등호 연산의 경우에 문제가 발생한다. 동등 연산(=)에 특화된 hashtable은 데이터베이스의 자료구조로 적합하지 않다. #B(alanced)-Tree에 대해서 B-Tree 인덱스는 디스크 I/O를 고려하여 관계형 데이터베이스에서 가장 일반적으로 사용되는 인덱스이다. 이 인덱스도 크기가 커저 보조 기억 장치에 저장되게 되는데 이 또한 디스크 I/O가 발생하게 되는 것이다. 따라서 B-Tree의 깊이를 줄여..
Sorting Algorithm을 비판적으로 바라보자. Sorting Algorithm을 비판적으로 바라보자.#1. 첫번째 의문 quick sort가 가장 좋고 빠르다며, 그래서 이름도 quick sort라며! 그런데 heap sort, merge sort는 왜 존재하며 왜 필요하지?어디에 쓰이고 있길래 살아남은 거지? 세 sorting algorithm(Quick sort, Merge sort, Heap sort)의 expected-Time Complexity는 O(n log n)으로 모두 동일하다. 하지만 Space Complexity는 merge sort만 Sorting하고자 하는 데이터의 크기 만큼이다. 그러면 일단 heap sort는 그렇다치고, 어떻게 Merge Sort가 살아남았을까? 한정된 메모리 상황에서 ‘빅 데이터'를 Sorting 해야하는..
RDB 성능 이슈 2. Transaction RDB 성능 이슈 2. Transaction 트랜잭션이란 무엇인가?트랜잭션은 작업의 완전성을 보장해주는 것이다.즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않도록 만들어주는 기능이다. 사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고 시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위가 된다. 트랜잭션과 Lock은 어떤 관계인가?잠금(Lock)과 트랜잭션은 서로 비슷한 개념 같지만 사실 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 ..