전체 글

전체 글

    사람은 변한다

    나는 예전부터 피드백이 고팠다. 특히 나를 성장시킬 수 있는 양질의 피드백에 큰 갈증이 있었다. 첫 회사에서 CTO님께 종종 여쭤봤던 것 같다. 제가 뭘 더 하면 성장할 수 있을까요? 어떤 점을 채워나가야 할까요? CTO님은 무리하지 말고, 페이스 잃지 말고, 성장에 대한 욕구를 변치 않게 지금처럼만 하면 된다고 말했다. 지금처럼만 해서 될까요? 그리고 성장에 대한 욕구 변할것 같지 않은데... 사람은 생각보다 금방 변하더라구요. 씁쓸하게 말씀하시던 CTO님의 그 말이 오래도록 잊혀지지 않는다. 지금 생각해보면 그 말을 듣고 오기가 생겼던 것 같다. 남들은 다 변하더라도 나는 변하지 말아야지. 늘 치열하게 노력해야지. 진짜 잘해져야지. 주말 내내 놀지는 말아야지. 최소한 하루는 뭐라도 의미있는 일을 해야..

    React + xState

    2023.03.20 개발팀 세미나

    Typescript의 공변성과 반공변성

    공변성과 반공변성 '공변성(Covariance)'과 '반공변성(Contravariance)'은 Typescript를 다루는 개발자라면 누구나 매일매일 접하고 또 사용하는 개념이지만, 나를 포함해서 해당 개념을 매번 의식하고 인터페이스를 설계하는 사람은 많지 않을 것이다. 공변성과 반공변성이 타입스크립트에서 가지는 의의를 이해하기 전에, 먼저 공변성이 뭔지, 반 공변성이 뭔지부터 이해하고 가보자. 공변성 더 많이 파생된(더 구체화된) 형식을 사용할 수 있다. I 형식의 변수에 할당할 수 있다. 쉽게 풀어서 설명하려고 해도 되지 않으니 예시를 들어서 한 번 살펴보자. 다음과 같은 타입 A,B,C가 있다. type A = string type B = string | number type C = string |..

    TCP/IP 인터넷(네트워크) 계층

    TCP/IP 인터넷(네트워크) 계층 역할 세 줄 요약 IP 프로토콜을 사용하여 호스트 간의 통신에 필요한 주소 관리와 경로 제어를 수행한다. 패킷을 라우팅하여 수신 호스트까지 전달한다. 데이터의 오류 확인 및 수정을 위한 ICMP 프로토콜을 제공한다. 주요 프로토콜 프로토콜이란? 패킷 교환 과정에서 정보를 주고받는 데 사용하는 규약이며, 송/수신 호스트의 주소 지정과 패킷 분할 및 조립 기능을 담당 = 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약 IP 프로토콜 (Internet Protocol) 대표적인 프로토콜 (IP가 이미 인터넷 프로토콜의 약자인데 왜 IP 프로토콜이라 부르는지...?) 송/수신 호스트가 패킷 교환 네트워크(PSN: 패킷 스위칭 네트워크)에서 정보를 주고받는데 사용..

    나는 무엇을 하고 싶은가

    정말로 내가 하고 싶은게 무엇일까? 돈을 많이 버는 것? 얼마가 내가 만족할만한 많은 돈인가? 말 그대로 나는 무엇을 하고 살고 싶은지, 앞으로 5년 후, 10년 후에 어떤 일을 하고 싶은지에 대한 고민이 많다. 학창 시절에는 성인이 되고 직장인이 되면 진로고민(?)은 더 이상 하지 않을 줄 알았는데, 나름 획일화된 평가 시스템과 방향성이 제시되던 학창 시절과는 다르게 지금은 어떤 길이 후회가 적은 길일지에 대해 예측하기가 더욱 어렵다. 인생에 있어서 좋은 기회라는 것은 내 선택과 노력으로 어느정도 이끌어낼 수 있는 것이라고 생각하면서도, 찾아온 그것이 기회인지 아닌지를 판단하는 것이 너무나도 어렵다. 정말 좋은 기회인지 아닌지 판단하기 어려우면 기회라고 볼 수 없는게 아닌가? 싶은 생각도 들고...? ..

    프로세스 스케줄링(Process scheduling)

    Scheduler? 기본적으로 모든 프로세스는 크게 두 가지 단계로 이루어져 있다. 하나는 CPU만 사용하는 CPU burst 단계, 다른 하나는 I/O(input/output) 작업만 하는 I/O burst 단계이다. 각 프로세스는 CPU에 할당되어 작업을 하게 되고, 해당 CPU의 자원을 점유하여 하고자 하는 동작을 실행한다. 문제는 I/O busrt 단계에서는 CPU가 놀게 된다는 점이다. CPU가 노는 시간을 줄이기 위해 고안된 방법이 바로 스케줄링, 이러한 동작을 하는 모듈을 스케줄러라고 한다. 목적 프로세스 스케줄링은 다음 두 가지 목적을 위해 존재한다. CPU의 성능을 높인다 프로그램의 성능을 높인다 CPU 입장에서의 성능이란? 다음과 같이 나타낼 수 있다. CPU 이용율: 전체 시간 중 쉬..

    [디자인 패턴] 커맨드 패턴, 팩토리 메서드 패턴, 상태 패턴

    커맨드 패턴 세 줄 개념 실행 기능 단위로 캡슐화 함으로써 여러 기능을 실행할 수 있는 재사용성 높은 클래스 설계 기능 자체를 캡슐화 하기 때문에 Invoker와 Reciver간의 의존성 자체를 제거(기능 자체의 세부구현 변경이 Invoker와 Reciver의 수정 없이 이뤄질 수 있음) 기능 자체를 다루는 로직이 필요할 때 사용(되돌리기, 히스토리 기록 등) 유용한 사례 실행 취소가 가능한 명령들을 다양하게 다뤄야 하는 텍스트 에디터 보상 트랜잭션 공유 리소스를 바탕으로 병렬 처리를 원할 때(ex. 커맨드 단위로 멀티 스레드에서 동작) 느낀 점 처음에 커맨드 패턴을 코드상에서 봤을 때 마치 side effect를 적극적으로 사용하는 패턴으로 보였음 excute()의 반환 타입이 실질적인 응답 데이터를 ..

    [디자인 패턴] 싱글톤, 데코레이터

    싱글톤 패턴 세 줄 개념 클래스의 인스턴스화를 단일 인스턴스로 제한하여 하나의 객체 사용을 강제하는 패턴 두 개 이상의 인스턴스화를 방지하는 게 핵심 구현 방법 메모리 사용에서의 이점 + 하나의 데이터 출처를 강제하는 용도로 사용 유용한 사례 Logger 많은 곳에서 사용되며 사이드 이펙트가 없고 인스턴스를 재활용했을 때의 효용이 높음 공유 리소스에 대한 동시 엑세스 제어 리소스에 대한 엑세스를 전역에서 요구 하나의 객체만 존재해야 하는 경우 위 세 개의 조건을 모두 만족하는 경우 고려해 볼 수 있음(무조건 사용해야 하는것이 아님) 문제점 싱글톤은 SRP를 위반한다 싱글톤 객체는 자기 자신의 인스턴스를 감시하는 책임 + 스스로의 구성정보를 제공하는 책임. 두 개의 책임을 가지고 있는 객체 메모리 관리에 ..

    DragGPT + Stream

    DragGPT 익스텐션이 기본적으로 non-stream으로 동작하다 보니, 응답을 다 받기까지의 로딩 속도가 매우 답답하게 느껴지는 부분이 있었다. 고쳐야지... 하고 매번 생각만 하며 게으름을 피우다 보니 이제야 작업을 하게 되었다. 기존에 DragGPT를 만들며 재미있게 개발했던 포인트 중 하나는 XState였는데, 사실 이번에 코드를 오랜만에 보는 만큼 XState가 낯설게 느껴지지 않을까 하는 걱정이 있었다. 그러나 실제 개발 단계에서는 걱정을 무색하게 만들 정도로 편하게 작업할 수 있었다. 기존 채팅 상태머신에 receiving 상태를 하나 추가해서 작업하는 것만으로도 관심사를 많이 좁혀서 작업할 수 있었는데, state 패턴의 장점을 극한까지 느낀 것 같았다. 작업을 하면서 알게 된 사실인데,..

    많이 늦은 2022회고

    연 초에 회고를 6시간 동안 쓰다가 날려먹은 이후... 회고를 다시 쓸 엄두가 나지 않아 하염없이 미루고 있었다. 문득 이러다가 2년치 회고를 쓰겠다는 생각이 들어 빠르게 압축본으로 적어보려고 한다. 상반기 재작년 말에 이직을 한 후, 작년 상반기에는 새로운 조직에 적응하며 배우는 게 참 많았다. 개발팀의 학습 문화나 코드 리뷰 문화에서 얻은 것들을 체화하고, 그 과정에서 사용하지 않았던 근육을 사용하는 듯한 고통과 짜릿함을 동시에 느꼈던 시기였다. 테스트 코드 React 유닛테스트 코드 작성을 시작하면서 테스트란 무엇이고 왜 해야 하는지, 그리고 유지보수 가능한 테스트 코드 작성을 위해 무엇을 고려해야 하는지에 대한 고민과 인사이트를 많이 얻은 시기이다. 역설적으로 테스트 코드를 작성하다가 잘못된 컴포..