KwanIk Devlog
article thumbnail
2022년 회고록 그리고 2023년
Life/회고록 2023. 1. 14. 11:51

2020년 4월 작은 SI 업체에서 개발자 커리어를 시작한 이후로 처음으로 작성하는 회고록이다. 제목은 2022년 회고록이지만 3년간의 여정을 돌아보는 종합적인 회고록이 되지 않을까 싶다. 해마다 회고록을 적어야지 적어야지 하면서 넘겼던 것이 3년을 가득 채우기를 앞두고 이를 실행에 옮기고 있다(게으른 완벽주의자). 종합적이라 하더라도 다사다난했던 2022년을 중심으로 돌아보고, 이전 년도의 기억들을 통해 어떤 발전을 이루었는지를 위주로 다뤄보고자 한다. 2022년 핵심 키워드 동료, 반면교사, 새로운 시작 적어도 작년까지 내 목표는 '잘'하는 개발자가 되는 것이었다. 내가 생각하는 잘하는 개발자의 핵심은 1) 개인 개발 능력, 2) 의사소통 능력이었다. 개발자는 전문직이라고 볼 수 있으므로, 역시 가장..

article thumbnail
Rust를 시작하면서
Language/Rust 2023. 1. 12. 23:29

들어가며 회사 사내스터디를 통해서 Rust 라는 언어에 대해 알게되었고, 올해의 목표 중 하나로 Rust 언어에 대한 기본기를 익히고 가벼운 프로젝트를 만들어 보는 것을 계획하게 되었다(회고록은 이번주 주말에 마무리하는 걸로). 구체적인 새 언어를 시작하고자 하는 배경은 회고록에서 기재하는 것으로 하고 그렇다면 왜 Rust를 공부해야겠다고 다짐했는지를 적어보고자 한다. 우선 긴 말 필요없이 StackOverflow 설문조사 자료를 통해 확인할 수 있었던 것은 Rust가 7년 연속 가장 개발자들에게 사랑받는 언어라는 것이다. 7년 그것도 무려 7년이나!🤨 작년 말 드넓은 개발세계를 맛본 뒤로 굉장히 스스로를 우물 안 개구리라고 생각하게 되었고, 현실에 안주하는 삶을 살아오고 있었다는 것을 느끼게 되었었다...

article thumbnail
스택(Stack)

개요 스택 자료구조에 대해서 알아본다. 스택(Stack)이란? 스택은 데이터를 저장할 객체와 객체에 적용할 수 있는 연산을 함께 정의한 추상 자료형으로써, 앞으로 다룰 큐(Queue), 데크(Deque)와 같이 자료 구조 형태에 이름이 붙었다는 것에서 큰 의의를 갖는 자료형이다. 스택은 너무나도 잘 알려져 있기에 간단하게 특징을 살펴본다. 위 이미지에서 6개의 선으로 간단하게 표현해서 알아보기 힘들 수는 있지만, 아래 용어정의들을 통해서 스택의 개념을 온전히 이해할 수 있을 것이라 생각한다. 1. LIFO(Last In First Out) 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있는데, 가장 늦게 들어간 자료가 가장 먼저 나오게 된다. 2. TOP 한쪽 끝에서만 데이터 입출입이 발생한다고 하였는데, 스..

article thumbnail
무제
Life/생각생각 2022. 12. 10. 13:50

- 얼마 전 응급실을 두 차례 다녀왔다. 자다가 흉부 쪽에 쥐어짜는 듯한 느낌이 들었고 누우면 통증이 더해져 더 이상 누워 있을 수가 없었다. 흉부쪽 통증인지라 응급실에서 별 다른 이상이 없는지 각종 검사를 하고 하루종일 갇혀있었다. CT도 찍고 심전도나 초음파도 살펴봤지만 심혈관쪽에 특이점이 발견되지는 않았다. 그러고 찾아온 주말에 여자친구가 정수리 쪽에 50원 크기의 원형탈모가 생긴 것을 발견하였다. 전문의가 상태를 진단해야겠지만, 직감적으로 스트레스 때문일 것이라는 생각이 들었다. 나름대로 스트레스를 적절히 관리하고 있다고 생각했으나, 그저 애써 무시하고 있었던 것일까. 면접을 진행할 때 기술 외적인 질문으로 항상 '본인만의 스트레스 관리방법이 있는가?'를 물어보곤 했다. 어쩌면 나 스스로에게 가장..

article thumbnail
분할정복(Divide & Conquer)
Algorithm/알고리즘 개요 2022. 12. 5. 08:56

특정한 문제를 풀이함에 있어 큰 문제를 작은 문제로 나뉘어서 푸는 방법들에 대해서는 앞선 포스트들을 통해 계속해서 언급하였다. 오늘 다룰 분할정복(Divide & Conquer)은 그 패러다임을 가장 직관적으로 다루는 테크닉이라고 볼 수 있다. 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산해내는 것 분할정복은 아래의 세 구성요소로 다시 생각해볼 수 있다. Divide : 문제를 더 작은 문제로 분할하기 Merge : 각 문제의 답을 원래 문제에 대한 답으로 병합 Base Case : 더 이상 분할하지 않고 곧장 풀 수 있는 매우 작은 문제 세 구성요소에 대해서는 부가적인 설명이 필요없을 것으로 보이나, 분할정복으로 특정 문..

article thumbnail
동적 계획법(Dynamic Programming)
Algorithm/알고리즘 개요 2022. 11. 13. 17:00

동적 계획법은 정말 가장 많이 대회에서 출제되는 문제 유형임과 동시에 반드시 알아야만 하는 내용이기도 하다. 명확하게 '이것이 동적 계획법 문제다' 라고 분류하기 보다는 앞선 브루트 포스나 그리디 알고리즘과 같이 문제를 풀어나가는 하나의 방법으로 접근하는 것이 올바르다고 생각한다. 동적 계획법 역시 큰 문제를 작은 문제로 나누는 것에서 출발한다. 지금까지의 내용을 정리하면 아래와 같다. 브루트 포스(Brute Force): 작은 문제 하나하나 다 살펴볼거야! 탐욕법(Greedy): 작은 문제마다 답을 선택해 버릴거야! 그렇다면 동적 계획법의 메커니즘은 어떤 것일까? 다른 작은 문제에서 만들어 놓은 값을 다시 쓸거야! 즉, 작은 문제들로 분류하여 연산을 하는 과정에서 같은 연산을 반복적으로 수행해야 한다면..

article thumbnail
욕심쟁이 알고리즘(Greedy Algorithm)
Algorithm/알고리즘 개요 2022. 11. 6. 20:29

앞선 알고리즘 소개 포스트를 통해 완전 탐색을 알아보았는데, 완전 탐색(brute force)의 핵심은 큰 문제를 작은 문제로 분할하여 모든 경우를 탐색해보는 것이었으며 그 중, 작은 문제로의 분할이 가장 핵심이라고 볼 수 있다. 이는 비단 완전 탐색에 국한되는 것이 아니라 향후 다룰 동적 계획법(Dynamic Programming)이든, 지금 다룰 욕심쟁이 알고리즘이든 모든 알고리즘 문제의 가장 기본이 된다고 볼 수 있다. 완전 탐색이 모든 경우에 대해 체크한 후 최적의 해를 골라내는 것이었다면, 욕심쟁이 혹은 탐욕법(Greedy)의 경우 각 단계마다 현재 최선의 방법만을 선택하는 것을 의미한다. 다만 늘 현재의 최선의 해답만을 선택하므로, 앞으로 남은 선택지들에 대한 사항은 고려하지 않게 되는데 이로..

article thumbnail
브루트 포스(Brute Force) 알고리즘
Algorithm/알고리즘 개요 2022. 10. 31. 09:15

다양한 알고리즘 문제들을 풀이하는 방법들이 있는데 그 중 첫 번째는 역시 브루트 포스(Brute Force) 가 아닐까 싶다. 해킹 기법 중 가장 기본적인 공격 방식 중에 '무차별 대입 공격(brute-force attack)'이라는 것이 있는데, 이는 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 방식을 의미한다! 쉽게 생각하자면 아래 자전거 자물쇠를 살펴보면 된다. 이 자전거 자물쇠를 푸는 가장 쉬운 방법은 '0000' 부터 '9999'까지 하나씩 돌려보면 될 것이다. 브루트 포스(brute force) 알고리즘 역시 마찬가지다. 다른 말로 '무식하게 풀기'라고도 하는데, 특정한 문제에 발생 가능한 경우의 수를 일일이 나열하면서 답을 찾는 것이다. 최단 거리를 찾기 위해 노드 간의 경로들을 일일..

반응형