전체 글

slow but steady wins the race
Problem Solving

[BOJ] 1600 - 말이 되고픈 원숭이

풀이처음엔 DP 문제라고 생각했으나, 부분 문제의 최적의 해가 전체 솔루션의 최적의 해가 될 수 없겠다는 생각이 들었다. 가령 아래와 같은 경우, K = 1이라고 가정해보자. 좌측 상단의 끝점이 [0,0]이라고 가정한다면 [1,2]까지의 최적해는 1이 된다. 0000000011111110 반면 [0,0]부터 [1,2]를 거치고, [3,3]으로 가는 경우는 4가 된다. 그렇지만 이 단계에서의 [1,2]까지의 최적해는 3이다. K를 [0,0] -> [1,2]에 소모한다면 벽을 넘어갈 수 없기 때문이다. 따라서 탐색 문제라는 생각이 들어서 BFS로 해결할 수 없을지 고민했다. 일반적인 완전탐색과 다른 점은 K를 동적으로 사용할 수 있다는 점이다. 말처럼 이동하느냐 마냐에 따라 해당 격자까지의 거리가 달라진다...

운영체제

[Operating System] Process

이번 아티클에서는 Process에 관해 정리한다. * 새롭게 알게 되는 내용이 있다면 지속적으로 업데이트합니다. Program vs. Process프로그램은 디스크에 저장되어 있는 실행 가능한 파일을 의미한다. 이는 커널에 의해 메모리로 로드되어 실행될 수 있는데, 이 경우 프로세스라고 한다. 따라서 프로세스를 프로그램의 '인스턴스'라고 표현하기도 한다. 프로세스는 실행과 스케줄링의 가장 기본적인 단위이다. 다만 스레드라는 개념이 도입되기 시작하면서, 스레드에 대한 스케쥴링도 가능해졌다. 하지만 스레드는 독립적인 실행 메모리를 가지지 않기 때문에, 실행의 기본 단위라고는 이야기하기 어렵다. Process ID프로세스는 Process ID(PID)로 식별되는데, 이를 통해 프로세스를 식별할 수 있다. 유닉..

자료구조

[Data Structure] Trie

이번 아티클에서는 자료구조 중 하나인 트라이(Trie)에 대해 알아본다. 트라이의 핵심우선 용어에 대해 이해하는 것이 도움이 될 것 같다. Trie는 Retrieval Tree에서 추출한 단어라고 한다. 즉, 트라이는 트리이면서 검색(Retrieval)을 위해 사용될 수 있다. 그렇다면 트라이가 어떻게 검색에 활용될 수 있다는 것일까? 보통은 문자열 검색에서 트라이를 많이 활용하게 된다. 필자를 포함하여 대부분의 사람들은 검색창 자동완성 기능을 사용해 본 경험이 있을 것이다. 'coffee'를 검색하려고 할 때, 'cof' 까지만 치더라도 coffee라는 단어가 자동완성이 된다. 그렇다면 수많은 단어들 사이에서 cof가 coffee와 연관되어 있다는 사실은 어떻게 알아낼까? 사전에 기록된 모든 단어에 대..

회고

LG CNS Software Engineer 인턴 및 최종 전환 회고

지난 8월을 마지막으로 LG CNS Software Engineer 인턴을 마치게 되었다. 6월 중순부터 시작했으니 약 두 달을 다닌 셈인데, 시간이 정말 빠르게 지나간 것 같다. 채용연계형 인턴이었는데, 운이 좋게도 정규직으로 전환되게 되었고 졸업 후 입사하게 될 예정이다! 졸업하기 전에 취업할줄은 꿈에도 몰랐는데, 정말 운이 좋았던 것 같다고 생각한다. 배운 점입사하기 전까진 사실 실무 경험이 없어서, ‘이러이러할 것이다‘ 라고 예측하기 일쑤였다. 즉 판단 기준이 이론에 맞춰져 있고, 실제 경험에 맞춰져 있지 않는 경우가 대부분이었다. 입사하고 나서 운이 좋게도 과제가 아닌 실제 현업 프로젝트에 투입되었고, 모 사를 대상으로 하는 프로토타이핑을 수행했다. 기술은 대부분 처음 사용하는 것 투성이었는데,..

회고

2024년 상반기 돌아보기

이제 6월도 마무리되고 있는데, 이쯤에서 한 번 회고를 작성하면 좋을 것 같다는 생각이 들었다. 일기도 쓰지 않기 때문에 돌아볼 일이 많이 없는데, 회고를 통해 개괄적이라도 돌아보는 계기가 되었으면 한다! 인턴 준비 (1, 2월)우아한테크코스 수료 이후, 12월은 대부분 쉬었다. 아무래도 우테코 생활동안 제대로 쉬어 본 적이 없기도 하고.. 리프레시 기간도 필요하다는 생각이 들었기 때문이다. 1월부터는 누구나 그렇듯 새해 다짐과 함께 인턴을 빡세게 준비해야겠다는 생각을 가지게 됐다! 1, 2월은 인턴 공고가 많이 뜨는 시즌이라 빠르게 준비를 시작하게 되었다. 사실 코딩테스트가 제일 관건이었는데, 알고리즘 문제 자체를 좋아하지 않기도 하고, 초반 진입장벽이 너무 높다는 생각이 많이 들었어서 포기하는 경우가..

네트워크

HTTP/1.1와 비교하면서 알아보는 HTTP/2

HTTP/1.1과 HTTP/2HTTP/2는 HTTP/1.1과 어떤 점이 다른지 알아보기에 앞서, 왜 HTTP/2가 등장하게 되었는지를 먼저 이해하도록 하자. HTTP의 유래는 하이퍼텍스트 전송으로, 실은 논문을 전송하기 위해 만들어진 프로토콜이다. 즉, 텍스트로 구성된 문서 전송에 있어서 최적화된 프로토콜이라는 것이다. 하지만 최근의 웹 서비스를 살펴보면, 단순히 문서 교환을 위해 HTTP가 사용되는 것이 아니라, 이미지나 비디오와 같은 다양한 포맷의 정보를 전송하는 경우가 많아졌다. 즉, 요구사항이 시대의 흐름을 따라 변화하였다는 것인데, 기존의 HTTP/1.1로는 이러한 요구사항을 대응하기가 어려워졌다. 가장 큰 문제는 성능이었는데, 대표적으로는 헤더를 예시로 들 수 있겠다. HTTP 메세지의 경우 ..

네트워크

gRPC basic concepts

Remote Procedure CallgRPC는 구글에서 개발한 프레임워크다. 따라서 앞에 'g'가 붙은 것임을 유추할 수 있을 것이다. 그렇다면 RPC는 무엇인가? gRPC라는 개념을 알아보기에 앞서 RPC(Remote Procedure Call)에 대해 이해해보자. RPC는 직역하면 원격 프로시저 호출로, 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술이다. 쉽게 말해, 다른 컴퓨터나 프로세스에 있는 함수를 마치 내 것인것 마냥 원격으로 호출할 수 있다는 것이다.  기본적으로 RPC는 네트워크 기반으로 동작하도록 설계되었다. 즉, 원격으로 내 컴퓨터에 있는 다른 프로세스의 함수를 호출하는 것이 1순위 목적이 아니라, 네트워크를 타고 다른 노드에 있는 함수를 호출하는 ..

네트워크

ZeroMQ & basic ZeroMQ Patterns

선조의 개발자들은 클라이언트나 서버를 구현하기 위해 Berkeley Sockets와 같은 Socket API를 사용해 프로그램을 작성했을 것이다. 다만 Socket API의 경우 운영체제와 바로 맞닿아 있는 부분이기에, 저수준의 지엽적인 내용이 많고 사용하기가 복잡하다. 따라서 자주 발생하는 부분은 패턴으로 정의하고, 추상화하고자 하는 니즈가 자연스레 생겨났다. 그 결과 전송 계층 위에서 네트워크를 제어할 수 있는 소프트웨어들이 등장하게 되었고, ZeroMQ는 그러한 소프트웨어 중 하나이다. ZeroMQ 소개 ZeroMQ는 분산 어플리케이션이나 동시처리 어플리케이션에서 활용할 수 있는 고성능 비동기 메세징 라이브러리이다. 다만 이 말의 뜻을 개인적으로는 이해하기 어려워서 추가적으로 조사해봤다. 분산 어플..

네트워크

TCP Error Control

앞서 TCP의 흐름 제어, 혼잡 제어를 살펴봤다. 이외에도 TCP는 오류 제어라는 기법을 사용하는데, 이번 글에서 어떻게 TCP가 오류에 대한 제어를 수행하는지 살펴본다. 우선 오류 제어가 무엇인지, 왜 필요한지 당위성부터 알 필요가 있다. TCP는 Survivalability가 중요한 프로토콜이다. 신뢰성 있는 통신을 지향하며, 가능한 효율적으로 작동한다. 통신은 오류가 발생할 수 있다. 잡음이 발생해 패킷이 손상되거나, 순서가 잘못되었거나, 버려지는 등 항상 의도한대로 동작할 순 없다. 따라서 이러한 오류가 발생했을 때 적절히 대처하는 방법이 필요한데, 그것이 오류 제어다. TCP 오류 제어는 여러 기법들을 사용해서 진행된다. 크게는 총 3가지 기법을 사용한다고 말할 수도 있는데, 체크섬, ACK, ..

네트워크

TCP Congestion Control

혼잡 제어(Congestion Control)은 안정적인 네트워크 구축을 위해 필요한 기능이다. 인터넷을 비롯한 모든 네트워크는 하드웨어적 한계가 존재하므로 감당할 수 있는 용량이 정해져 있다.  이러한 용량을 초과하는 경우, 높은 대기 시간, 연결 시간 초과 및 패킷 손실과 같은 현상들이 발생하게 된다. 네트워크를 사용하는 입장에서는 이러한 정체가 발생하는 것을 좋아하진 않을 것이다. 또한 이러한 상황이 계속 누적되어 네트워크 정체가 점점 악화될 수도 있는데, 이를 혼잡 붕괴(Congestion Collapse)라고 부르기도 한다. 따라서 정체가 발생했다면 전송하는 패킷의 수를 줄이는 등의 작업이 필요하다. 그리고 이러한 관리 기법을 혼잡 제어(Congestion Control)이라고 한다.  TCP의..

teo_99
테오의 학습기록