전체 글 206

SQL 공부

지원한 협력사 중 한곳의 코딩테스트에 SQL문 문제가 있다. 팀플에서 백엔드였고(일단은) 자연스럽게 협력사 지원도 백으로 갔는데 DB를 다른 한 팀원이 전담해서 SQL을 전혀 모르는 상황... SQL 공부도 하긴 해야하는데, 팀플때부터 내다버린 SQL은 우선순위 최하위까지 내려감 안다는 부분도 사실 내가 아는게 맞나 싶어서 했던거라도 잘 알자는 마인드로 이미 배운 것 위주로 보고 있기 때문 주니어의 입장에서 모르면 그냥 모르는거겠지만, 안다는 곳에서 허점이 많으면 여러모로 문제가 있다 생각해서... 보이저엑스 기술면접을 보면서 느꼈다. 근데 코테 보고 면접 보고, 라인 필기시험 대비 CS공부도 하고 미루다보니 어느새 듀가 내일 ㅋㅋ큰일났네 그래도 백엔드 지원이고, 어디든 들어가면 결국 써야 할 내용인데 ..

구직 기록 2022.03.31

Virtual Memory와 Paging System

CPU는 프로세스의 빠른 실행을 위해 필요한 코드를 메모리에 올려두어야 한다. 하지만 필요해질 모든 데이터를 메모리에 올릴 경우, 메모리의 용량은 제한적이고 특정 순간에 모든 데이터를 다 사용하진 않기 때문에 메모리 점유에 비효율이 생긴다. 가상 메모리는 이 "특정 순간에 사용되는 메모리 영역은 제한적이다"는 점에 초점을 두어, 필요한 데이터만 메모리에 두고 나머지는 보조기억장치에 저장된 상태를 유지하는 시스템이다. 프로세스가 요구하는 데이터는 OS에 의해 메모리에 올라가기 때문에 모든 프로세스는 메모리를 전적으로 사용하고 있는 것 같은 환경에서 동작하고, 이런 프로세스의 착각(?) 때문에 가상 메모리라 불린다. 가상 메모리 시스템에서 프로세스가 점유중인 CPU는 실제 물리적 메모리 주소가 아닌 Virt..

CS 2022.03.22

프로세스 메모리의 구조, 동적 할당과 가용 리스트의 관리

프로세스가 실행되면 프로세스를 수행하기 위한 정보가 메모리에 로드되는데, 이는 크게 코드, 데이터, 힙, 스택 영역으로 구분된다. 코드 영역은 프로세스를 구성하는 코드 텍스트, 데이터 영역은 프로세스 전체에 선언된 전역 변수를 관리하는 영역이고, 프로세스에 할당된 메모리에서 가장 앞(값이 작은 주소)에 존재한다. 반대로 스택 영역은 각 스레드별로 선언된 지역변수, 매개변수를 관리하는 영역이고, 이름에서 알 수 있듯이 할당된 메모리 구역의 끝에서부터 역순으로 채워지는 스택의 구조이다. 이 세 영역은 컴파일 단계에서 그 크기가 정해지는데, 프로세스의 런타임에 인터랙션이 존재하는 경우 컴파일 단계에서는 크기를 예측할 수 없는 메모리의 요구가 발생한다. 이 요구에 대해 메모리를 할당하기 위해 존재하는 것이 데이..

CS 2022.03.21

이진 탐색 트리의 한계와 이를 보완하는 Red Black Tree

Red Black Tree는 이진 탐색 트리의 일종이고, 이진 탐색 트리는 이진 트리의 일종이다. 이진 트리는 단순히 자식이 최대 2개인 트리로 그냥 위상적 개념이니 넘어가고, 이진 탐색 트리는 이 이진 트리에다가 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 크다는 규칙을 적용해 탐색을 용이하게 만든 트리구조이다. 이러한 이진 탐색 트리에서 탐색을 진행할 시, 탐색에 소요되는 시간는 최대 트리의 깊이가 되며 이는 평균 시간복잡도 O(logn)으로 표현된다. 하지만 평균 O(logn)의 시간복잡도는, 트리의 구성에 따라 최대 O(n)까지 늘어나게 된다. 예를 들어 루트 노드 생성 후 트리에 새 엘레먼트의 삽입이 항상 이전 값보다 큰 값만 들어올 경우, 트리의 깊이는 n이 되며 이는 linked li..

CS 2022.03.21

Array와 Linked list

array와 linked list가 둘다 선형 자료구조라 그런지, 이 둘의 비교대조가 기술면접의 단골 질문인 것 같다. 머리속에서 가물가물한 온갖 트리들과는 다르게 이쪽은 지금도 확실히 기억나니 한번 정리해보자. array는 엘레먼트에의 액세스가 시간복잡도 O(1)의 상수 시간에 가능한 선형 자료구조이다. 이를 가능케 하기 위해 각 엘레먼트는 물리적으로 정렬되어 있다. 예를 들어 8바이트 char* 포인터를 저장하는 array의 경우, array의 시작인 0번째 원소의 주소가 X라면 10th 엘레먼트는 X+80바이트의 위치에 액세스하는 것으로 접근이 가능하다. 가장 단순한 자료구조이긴 하지만, 이 O(1)의 액세스를 유지하기 위해 원소의 삽입과 삭제 시에는 재편이 필요하다. 예를 들어 100개의 엘레먼트..

CS 2022.03.21

[ML] 신경망이란 무엇인가

https://yuihyun.notion.site/1-c917939293444bdebf7a930479658ed5 1장 : 신경망이란 무엇인가 이해를 돕기위한 예시부터 시작 : 숫자 이미지가 어떤 숫자를 나타내는지 판단 yuihyun.notion.site 유튜브 3Blue1Brouwn 채널의 딥러닝 강의 1장을 보며 생각을 정리한 내용이다. 생각을 정리해볼 필요가 있어서 노션으로 작성했다. 머신러닝이 말이 러닝이지 사실 함수를 커스텀한다는건 머신러닝을 하는 지인들에게 들어서 알고는 있었다. 물론 "알고만" 있었는데... 이번 강의를 들으면서 본질적으로 무엇인지에 대해 좀더 디테일하게 알게 된 것 같다. 머신러닝에서의 "머신"은 X차원 데이터 입력층을 [0,1]^N의 실수 치역, 즉 기계가 답을 내야 하는 ..

CS 2022.03.21

Garbage Collection과 Memory Leak

정글의 malloc 구현 전산학 프로젝트를 진행하면서 묵시적, 명시적 가용리스트를 구현하고, 가용리스트 탐색 방식을 first, next, best fit으로 바꿔보기도 하며 수많은 동적 할당 방식을 접했다. 하지만 어떤 방식의 동적 메모리 할당을 택하더라도, 그것이 개발자의 판단에 기반하는 "동적" 할당인 이상, 할당한 당사자가 명시적으로 메모리를 해제할 의무가 있다. 그리고 그 의무로 인해 해제된 메모리에 접근하여 에러가 발생하거나, 해제를 하지 않아 memory leak이 발생하는 등의 각종 문제가 유발된다. Garbage Collection은 동적 할당의 해제를 자동화하는 시스템으로, 이를 통해 위의 각종 문제들을 개선한 환경을 보장한다. C에서는 개발자가 메모리를 사용 후 해제해야하는 전적인 책..

CS 2022.03.20

Dynamic Programing

Dynamic Programing은 목표한 문제를 풀기 위해 위상적으로 연결된 부분 문제들로 나누어 푸는 방법이다. 예를 들어 "D"라는 해결하기 까다로운 문제가 있을 때, 먼저 "A"라는 답을 자명히 낼 수 있는 부분문제로부터 시작한다. 이 자명해로부터 "B"를 해결하고, 그로부터 "C"를 해결하는 연속적인 과정을 거쳐, 마지막으로 문제 "D"를 해결하는 것이 DP이다. 이때, A로부터 B를 도출하고, B로부터 C를 도출하고, C로부터 D를 도출하는 이 부분문제간의 간선, 즉 규칙성은 문제가 무엇이냐에 따라 다르며, 이를 점화식으로써 명확히 하는 것이 DP의 핵심이다. 점화식을 구한 뒤에는, 문제가 단순하고 변수가 적을 경우 (피보나치, 하노이 등) 점화식으로부터 수학적으로 일반항을 직접 구해 바로 본..

CS 2022.03.20

팀 프로젝트 이후.

팀 프로젝트는 마무리됐지만, 사실 이대로 끝내기는 아까운 아이템이다. 첫 일지에서 말했듯이 원래 계획한 주제가 날아갔는데 새 주제는 없는, 피치못할 상황에 처해 비단주머니에서 꺼내버린 아이템이라, 다시 주머니 속으로 주워담을 생각을 하고 있다. 하나의 프로덕트로써 사용성을 고려하며 만들었다 치더라도, 결국 이 팀 프로젝트는 정글에서의 우리의 성장과 현재 역량을 보여주기 위한 프로젝트였다. 때문에 정말 쓸모있고 쓰고싶은 무언가를 만든다는 방향과는 달랐던 부분도 많았다. 프로덕트로써의 세일즈에 반하는 부분이 있어도 나를 포함한 팀원 전체의 성장과 구현력에 초점을 맞추다 보니 감수하고 진행한 것도 있고, 시간과 능력의 한계 때문에 실패가 치명적인 부분들은 우회하는 식으로 넘어가기도 했다. 여럿이 역할분담을 하..

Day ~38 : 마무리 작업, 최종발표

최종 발표 토요일까지 남은 기간은 마무리 작업을 하며 보냈다. 프론트의 마무리 작업을 앱에 merge하고, 포스터 세션에 보여줄 포스터를 만들고, 발표에 못오시는 분들을 위한 홍보 영상도 만들고, 최종 리허설에서 지적받은 디테일들을 고치고. 딱 하나 대공사가 있었다면, 발표 PPT의 포커싱 팀원들 모두 한게 많다보니 모든걸 다 담고싶어서 이걸했다 저걸했다 잔뜩 담았는데, 그 결과 '아 뭔가 열심히 했구나 근데 그게 뭔진 모르겠어' 같은 감상을 받으셨다고 한다. 운영진도 멘토님도 비슷한 느낌이라 그부분을 많이 뜯어고쳤다. 이게 시연 이후의 발표 후반부를 거의 다 갈아엎는 수준의 대공사였다보니, 발표 퀄리티에도 좀 타격이 있었다. 안그래도 발표를 못하는 몸이라 거의 발표 흐름을 외우는 수준으로 머리에 때려넣..