전체 글 20

쓰이는 알고리즘 - 그래프 알고리즘 기초(BFS, DFS, 최단경로 알고리즘, 백트래킹)

알고리즘에서 그래프는 실제 세계의 현상이나 사물을 정점, 노드, 간선으로 표현하여 나타내기 쉽다. 따라서 경로, 방법 탐색 등의 각종 문제 해결의 상황에서 자주 활용된다. 본 포스팅에서는 그래프와 관련된 기초 용어는 다루지 않으니 궁금한 사람은 구박사님(=구글링)께 물어보도록 하고, 그래프 공부를 하며 정리하는 과정에서 얻은 insight를 공유하고자 한다. 1. BFS(너비 우선 탐색 = 형제 우선) - 정점들과 같은 레벨에 있는 노드들을 먼저 탐색하는 방식 - 그래프를 나타내기 위해 각 노드를 Key, 그리고 각 key와 간선으로 연결된 노드를 관리하는 list를 value로 가지는 map활용 - 앞으로 방문할 노드를 관리하는 큐(need_visit), 방문했던 노드를 관리하는 큐(visited), ..

SQL(Oralce) - 대용량의 데이터를 빠르게 수정/삭제 하고싶다면

최근 시스템 장애로 인해 약 50만 건의 데이터를 manual하게 일괄 업데이트 해야할 일이 생겼다 이 때, 널리 사용되는 update구문을 사용하게 되면 시간이 꽤 많이 소요될 수 있는데 그 이유는 오라클의 구조에 있다. 오라클은 data의 update/delete 시, 일종의 snapshot/rollback을 위해 기존의 데이터를 undo segment와 redo log에 기록을 한다. 따라서 undo segment와 redo log 작업을 회피하여 update/delete할 수 있는 방법을 소개하려 한다. - Undo Segment 위 소개글에서 잠깐 Undo Segment에 대한 언급을 하여 궁금한 사람이 있을까 정리를 해둔다. CTAS에 대해 궁금한 사람은 다음 문단으로 넘어가 참고하길 바란다...

PROGRAMING/DATABASE 2021.01.29

쓰이는 알고리즘 - Recursive Call (재귀 호출) 언제 쓸까?

1. 재귀 호출이란? - 함수 안에서 동일한 함수를 호출하는 형태 - 어떤 상황에서 하나의 큰 문제가 여러 개의 같은 작은 문제로 분할(분할 정복)하여 해결가능한 경우 사용됨 - function(n)의 결과 값에 function(n-1)이 포함된 경우 - 동일한 process를 쪼개고 쪼개다 보면 멈춰지는 지점이 있음 (러시아 인형이랄까.. 인형안에 인형. 인형안에 인형...) 2. 재귀 호출의 패턴 public int function(arg){ if (arg > n){ return function(arg-1); } else{ return m; } } public int function(arg){ if (arg

쓰이는 자료구조 - Tree, Heap (Hash와 Tree의 성능비교 포함)

1. Tree가 뭐에요? - Node(이파리)와 Branch(가지)를 이용해서 원형 사이클 관계를 이루지 않도록 계층적(나무와 닮음)으로 구성한 데이터 구조 - 대표적으로 이진 트리의 구조로 자료 탐색 알고리즘 구현을 위해 사용되어진다. - Node: 트리에서 데이터를 저장하는 구성 요소 - Branch: 트리와 트리를 연결하는 요소. 결국 하나의 Node에는 data와 다음 Node에 대한 link값을 가진다. - Root Node: 최상위 노드 - Terminal Node(Leaf Node): Child Node가 하나도 없는 노드 - Sibling: 동일한 Parent Node를 가진 노드 - Level: 트리의 층 수 - Depth: 트리에서 Node가 가질 수 있는 최대 Level - Sibli..

쓰이는 자료구조 - Hash Table

1. 왜, 해시 테이블인가? - 해시: 어떤 값을 고정된 길이로 변환하는 것 - 해싱 함수(Hashing Function): Key에 대해 산술 연산(고정된 길이로 변환)을 수행하여 데이터 위치를 찾을 수 있는 값을 출력하는 함수 - 해시 값(=해시 주소): Key를 해싱 함수로 연산하여 얻은 값. 이를 기반으로 해시 테이블에서 Key에 대한 데이터 위치를 찾을 수 있다. - 해시 테이블: K(=Key, 키)에 V(=Value, 데이터)를 저장하는 데이터 구조 -> 빠른 검색을 할 수 있다. 그 과정을 예로 들어볼까. 실제로는 복잡하겠지만, 이해를 위해 간단하게 예를 들어보겠다. - 해싱 함수: K % 8 - 해시 테이블 크기: 8 (8개의 데이터를 저장할 수 있는 공간) 전화번호부가 있다. 총 8명의 ..

쓰이는 자료구조 - Array, Stack, Queue

모든 학문이 그렇듯, CS(Computer Science)역시 base가 잘 잡혀있어야 그를 기반으로 응용해나갈 수 있다. 백엔드 개발을 예로 들어볼까. 유저(클라이언트)를 대상으로 어떤 서비스를 제공하는 시스템을 개발하고 싶다. 그러기 위해선, 시스템을 구축하기 위한 Framework 기술을 알아야하고, 이를 배포 및 운영할 수 있는 Server 지식도 알아야하며, 데이터 관리를 위한 기술도 알아야한다. 그 중에서 가장 중요한 내용은 뭘까. 우리의 목표는 고객을 대상으로 "서비스"를 제공하는 것이라 했는데, 앞서 말했던 정보들은 서비스를 제공하기 위한 "수단"으로써 필요한 내용들이다. 본질은 "서비스"이다. 이 서비스를 비지니스 로직에 따라 처리될 수 있도록 구현하는 능력. 이는 자료구조 및 알고리즘에..

내가 살 집, 내가 찾는다 2 - 사회초년생을 위한 전세대출

이전 포스팅에선 내 근로 상황에 맞는 전세 대출 상품 추천을 해줬다면, 이번 포스팅에선 어렵고 복잡하게 설명된 대출 상품을 좀 더 쉽게 풀어볼 참이다. 신용 등급이 상대적으로 낮을 수밖에 없는 사회 초년생이나 무직자에게도 큰 금액인 전세 자금을 대출해줄 수 있는 이유는 주택도시보증공사(이하 HUG)나 한국주택금융공사(이하 HF)에서 보증을 해주기 때문인데, 국가 정책의 일환으로 HUG나 HF의 보증이 필요한 전세 대출 상품의 경우엔 규정이 꽤나 자주 바뀌어 은행원들도 헷갈릴 수 있기에 대출 상담 전 스스로 공부를 할 필요가 있다. 은행원은 필요한 금융 서비스를 받을 수 있도록 도와주는 사람이지, A to Z로 지원해주는 사람이 아니라는 것을 명심하자. "야, 나 진짜 억울한 일 있었어." "뭔데?" "청..

LIFE/FINANCE 2021.01.23

내가 살 집, 내가 찾는다 1 - 내게 맞는 계약 유형, 대출 유형

25년간 지방 토박이로 살아오다 벌써 2년 차 주니어 서울러이다. 머리가 나쁘면 돈이라도 많으랬나. 돈이 없으면 머리라도 좋으랬나. 처음 서울로 올라왔을 당시엔 신세 지낼 곳도 없고, 돈도 없고, 그렇다고 알고 있는 것도 없었다. 정말 아무것도 없었다. 재직뿐만 아니라, 무직인 청년들을 대상으로 전월세 대출을 지원해주는 정책도. 전월세 계약 시 작고 소중한 돈 한 푼 아낄 수 있는 달달한 팁도. 그래서 서울 생활 1년 차엔 보기 좋게 실패했다. 집 한쪽에선 누수 문제로 꽤 오랫동안 머리 아팠고, 월세를 줄였더니 관리비가 과하게 늘어났다. 조삼모사면 다행이고, 당시엔 이게 손해인 줄도 몰랐지. 아무튼 2021년 새 해를 맞이하며 새로운 보금자리를 구할 땐 같은 실수를 반복하지 않겠다 다짐했다. 그 결과 만..

LIFE/FINANCE 2021.01.23

리눅스 - 유선랜 고정 IP할당

학교에서 라즈베리파이를 활용해서 프로젝트를 시작하려다가 처음부터 엄청 해맸다. 학교에선 동적으로 할당받은 IP를 사용할 수 없고, 고정 IP를 사용해야 했기 때문이다. 네트워크에 대해서도 잘 알지못하는데 인터넷을 보니 계속 뭘 바꾸라고 바꾸라고 하는데 뭘 알 수가 있어야지. 1. sudo nano /etc/network/interfaces 수정 리눅스 기반의 운영체제에서 네트워크 설정과 관련된 파일이다. 현재 시스템(리눅스 등 운영체제)에서 사용가능한 네트워크 인터페이스에 대해 관리한다. 파일을 열었을 때 어떤 내용이 적혀있다면, 모두 지우고 아래와 같이 작성해도 좋을듯 하다. # source-directory: 해당 경로에 있는 디렉토리 내에서 여러 파일들을 접근하여 네트워크 설정을 가져온다. # in..

성능향상을 위한 개발 1 - Batch Job, Quartz Scheduler

2021년을 맞이하며 나도 어느덧 2년차 개발자가 되었다. 작년이 0년차였음 1년차인가. 작년엔 사내 시스템에 대한 큰 그림을 그려가기위해 온 시간을 할애했다면 나름 2년차인 올해엔 그 그림을 글로써 적어 누군가(최소한 나)와 공유를 해보기로 했다. 아는 것을 글로 적는 건 또 다른 문제이니까. 물론 개발에 있어 skill up하는 것이 우선이지만, 이러한 일들이 결국 skill up에 긍정적인 영향을 줄 것이라 믿는.. 믿어본다. 공학을 전공했지만 나름 문과 성향이 짙어 개발자의 인생에 내가 잘하는 무엇인가를 더해보고 싶었는데, 지금이 그 시작이 되는 것 같아 꽤나 설레이기도 한다. 사실 지금 글 다쓰고 폰트 수정하고 있었는데 맥북 꺼져서 설레는 감정은 다 사라지고 남은건 분노 뿐이다. 됐고, 어디 그..