서버의 상태를 알려주는 HTTP 상태 코드

최근의 모던 어플리케이션은 완전히 네트워크 위에서 돌아가는 프로그램이라고 해도 과언이 아닐 정도로 프로그램의 비즈니스 로직에서 통신이 차지하는 비중이 높다. 클라이언트 어플리케이션은 백엔드에 위치한 서버와 통신하여 현재 로그인한 사용자의 정보를 받아오거나, 새로운 게시글을 생성하기도 하고, 때로는 Web Socket을 통해 서버에서 발생한 이벤트를 구독하여 푸시 메세지나 채팅과 같은 기능을 구현하기도 한다.

나는 프론트엔드를 안다고 말할 수 있을까?

이번 포스팅에서는 개발보다는 약간 철학적인 고민 이야기를 해보려고 한다. 사실 이 고민은 필자가 처음 개발을 시작할 때부터 가지고 있던 고민인데, 아직도 해답을 찾지 못했던 질문이기에, 이번 포스팅은 필자의 생각을 제시하는 것이 아니라 질문을 던지는 느낌으로 끄적여볼까한다.

필자가 개발을 시작하고 나서 6년 동안이나 하고 있는 이 고민은 바로 “안다는 것은 무엇인가?”이다.

Question Driven Thinking - 스스로 질문하며 학습하기

처음 프로그래밍을 배우던 시절을 떠올려보자. 아닌 사람도 있겠지만 대부분의 사람들은 처음 프로그래밍을 배울 때 학교나 학원에서 누군가에게 가르침을 받으며 공부했을 것이다. 프로그래밍을 처음 접하는 입문자에게 독학의 길은 너무 멀고 험난하기 때문이다.

어떻게 하면 안전하게 함수를 합성할 수 있을까?

함수형 프로그래밍에서 코드를 작성한다는 것은 프로그램에서 수행해야하는 여러가지 행위들을 함수로 표현하고, 또 그 함수들을 요리조리 잘 합성해가며 거대한 프로그램을 만들어나가는 패러다임이다.

결국 함수형 프로그래밍에서 함수를 합성하는 행위라는 것은 이 패러다임의 근간이 되는 개념이기 때문에 굉장히 큰 의미를 가질 수 밖에 없는데, 문제는 이렇게 함수를 합성하는 과정에서 크고 작은 현실적인 문제들이 빵빵 터진다는 것이다.

변하지 않는 상태를 유지하는 방법, 불변성(Immutable)

이번 포스팅에서는 순수 함수에 이어 함수형 프로그래밍에서 중요하게 여기는 개념인 불변성(Immutable)에 대한 이야기를 해보려고 한다.

사실 순수 함수를 설명하다보면 불변성에 대한 이야기가 꼭 한번은 나오게 되는데, 대부분 “상태를 변경하지 않는 것”이라는 짧은 정의로 설명하거나, 혹은 불변성을 해치는 행위들을 예시로 들고 이런 행위들을 금지 행위로 규정하며 설명을 진행하게된다.

수학에서 기원한 프로그래밍 패러다임, 순수 함수

이전에 작성했던 기존의 사고 방식을 깨부수는 함수형 사고 포스팅에 이어, 이번 포스팅에서는 함수형 프로그래밍이 지향하는 관점을 실제 프로그램에 구현하기 위해 알고 있어야하는 필수적인 개념 중 하나인 순수 함수(Pure functions)에 대한 이야기를 해볼까 한다.

20대의 마지막, 2019년을 돌아보며

이제 필자의 마지막 20대를 보내는 2019년도 어느덧 10일 정도 밖에 남지 않았다. 물론 서른이 된다고 해서 크게 달라지는 것은 없지만, 스무살이 되었을 때 이후 처음으로 나이 앞 자리가 바뀌는 만큼 기분이 싱숭생숭 하기도 하다.

기존의 사고 방식을 깨부수는 함수형 사고

최근 많은 언어들이 함수형 프로그래밍 패러다임을 도입하며, 이에 대한 개발자들의 관심 또한 나날히 높아지고 있다. 필자 또한 함수형 사고라는 책을 읽으면서 기존의 패러다임과 사뭇 다른 함수형 프로그래밍에 대해 많은 관심을 가지게 되었던 기억이 있다.

솔직한 피드백으로 좋은 팀워크를 만들 수 있을까? - 파워풀을 읽고

최근 4일 동안 심한 몸살에 걸려 침대에만 누워있으면서, 컴퓨터를 멀리 하고 오랜만에 책을 읽었다. 마침 입사 예정인 회사에서 “린 스타트업”과 “파워풀” 두 권의 책을 보내주었기 때문에 무엇을 읽어볼까하는 고민을 할 시간을 줄일 수 있었다.

사이 좋게 네트워크를 나눠 쓰는 방법, TCP의 혼잡 제어

혼잡 제어란, 말 그대로 네트워크의 혼잡 상태를 파악하고 그 상태를 해결하기 위해 데이터 전송을 제어하는 것을 이야기한다.

네트워크는 워낙 광대한 블랙박스이기 때문에 정확히 어디서 어떤 이유로 전송이 느려지는지는 파악하기 힘들지만, 단순히 느려지고있다 정도는 각 종단에서도 충분히 파악할 수 있다. 그냥 데이터를 보냈는데 상대방으로부터 응답이 늦게 오거나 안오면 뭔가 문제가 있다는 것이니 말이다.

패킷의 흐름과 오류를 제어하는 TCP

TCP(Transmission Control Protocol)은 원활한 통신을 위해 전송하는 데이터 흐름을 제어하고 네트워크의 혼잡 상태를 파악해서 대처하는 기능을 프로토콜 자체에 포함하고 있다.

TCP가 연결을 생성하고 종료하는 방법, 핸드쉐이크

저번에 작성했던 TCP의 헤더에는 어떤 정보들이 담겨있는걸까? 포스팅에 이어 이번에는 TCP의 핸드쉐이크 과정과 그 속에서 변화하는 TCP 상태에 대해서 한번 알아보려고 한다.

불안한 마음 정면으로 마주보기

지난 달, 다니고 싶었던 회사의 면접에서 기초 실력 부족으로 시원하게 박살났다. 다행히 면접이 끝난 직후 필자가 대답하지 못했던, 풀어내지 못했던 질문들과 문제를 깃허브에 정리해두었기 때문에 어떤 것을 공부해야하는지 바로 알 수 있었고, 한 달동안 컴퓨터 사이언스의 기초에 대한 내용을 집요하게 파헤쳤다.

TCP의 헤더에는 어떤 정보들이 담겨있는걸까?

저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었지만 이번에는 TCP 자체에 조금 더 집중해서 이야기해보려고 한다.

수학과 함께 복잡한 문제를 단순하게 만들자!

최근 많은 IT 기업들이 개발자를 채용할 때 코딩 테스트를 시행하고 있다. 회사마다 어떤 스타일의 문제를 출제하는지 차이는 있지만, 대부분 간단한 알고리즘 풀이 또는 Codility프로그래머스와 같은 사이트처럼 실무에서 겪을 만한 상황을 살짝 섞어놓는 느낌의 문제를 선호하는 것 같다.

ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Composition Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Functor Git Go bacK N Good Programmer Gravity HTTP HTTP 상태코드 HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Monad Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Question Question Driven Thinking Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 모나드 배열 성능 최적화 버전관리 번아웃 범주론 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소크라테스 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 앎이란 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 질문 질문의 힘 철학 카테고리 이론 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 펑터 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 학습론 한 달살기 함수형 사고 함수형 프로그래밍 합성 함수 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Composition Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Functor Git Go bacK N Good Programmer Gravity HTTP HTTP 상태코드 HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Monad Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Question Question Driven Thinking Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 모나드 배열 성능 최적화 버전관리 번아웃 범주론 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소크라테스 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 앎이란 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 질문 질문의 힘 철학 카테고리 이론 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 펑터 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 학습론 한 달살기 함수형 사고 함수형 프로그래밍 합성 함수 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×