본문 바로가기

[OOP] 의존과 DI (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위..
[OOP] 상속과 조립 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위..
[네트워크] HTTP Cache 이해하기 들어가며 개발자가 되기 위해서는 정말 다양한 지식을 알아야 합니다. 그중에서도, 네트워크는 필수적으로 알아야 하는 분야라고 생각했지만, 막상 네트워크를 제대로 공부한 적은 드물었습니다. 이번 기회에 네트워크에 대해 조금씩이라도 공부하면서 개발자로서의 기본을 쌓기 위해 노력하고 싶습니다. 이 글은 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식(김영한) 강의를 보고 공부한 내용입니다. 자세한 내용은 강의를 참고해주세요. 캐시 캐시가 없다면, 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드하여야 합니다. 하지만 인터넷 네트워크는 매우 느리고 비싸며, 브라우저 로딩 속도 또한 느립니다. 이 상황에서 서버에서 받아야 할 리소스가 많아진다면, 서버와 브라우저 사이에서 라운드 트립이 많아질 ..
[OOP] 다형성 (객체 지향과 디자인 패턴) 들어가며 스타트업의 개발자로서 좋은 설계가 우선인가, 아니면 빠른 기능 개발이 우선인가 항상 고민하곤 했습니다. 제가 다녔던 스타트업은 빠르게 기능 개발을 해서, 시장에서 인정받아야 했기에, 빠른 시간 안에 많은 기능을 개발해야 했습니다. 그러다 문득 추가 기능을 개발하거나, 기존 기능을 수정해야 할 때, 많은 어려움을 겪곤 했습니다. 그렇게 일을 마치고, 더 나은 개발자가 되기 위한 공부를 하면서 제가 작성한 코드는 배려가 부족한 코드였다는 것을 깨달았습니다. 제가 개발한 코드는 당장의 기능 개발은 빠르게 할 수 있더라도, 재사용성이 대단히 떨어졌고, 가독성 또한 대단히 떨어졌습니다. 또한 기능을 수정하거나 추가할 때도 광범위한 코드를 건드려야만 했기에 효율성도 떨어졌습니다. 빠르게 기능을 개발하기 위..
[네트워크] HTTP 이해하기 들어가며 개발자가 되기 위해서는 정말 다양한 지식을 알아야 합니다. 그중에서도, 네트워크는 필수적으로 알아야 하는 분야라고 생각했지만, 막상 네트워크를 제대로 공부한 적은 드물었습니다. 이번 기회에 네트워크에 대해 조금씩이라도 공부하면서 개발자로서의 기본을 쌓기 위해 노력하고 싶습니다. 아래 내용은 인프런의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 공부하며 작성했습니다. 아래 내용을 보다 자세히 알고 싶으신 분들은 링크를 참고해주세요. HTTP Hyper Text Transfer Protocol의 약자로 인터넷에서 데이터를 주고받을 수 있는 프로토콜입니다. 프로토콜이라는 것은 하나의 규칙이기 때문에 프로그램은 이 규칙에 맞춰 서로 정보를 교환할 수 있게 됐습니다. 주로 사용하는 HTTP/1.1은..
[일기장] 아홉수 소년 당신에게 당신을 아홉 살에 처음 만났습니다. 운이 좋게도 고등학교 때 재회하여 잊지 못할 행복한 열아홉을 보냈고, 당신을 스물아홉에 보냈습니다. 우연하게도 아홉이 들어간 나이에 당신과 늘 함께 했습니다. 한국에는 나이의 끝자리에 9가 오면 해야 할 일을 다음 해로 미루는 미신이 있는데, 괜찮다면 당신을 보내는 일 또한 미룰 수 있다면 좋겠습니다. 인생이 힘들 때, 술 한 잔 마시고 싶을 때, 언제든 전화하라고 말해준 당신. 언제 한 번 당신이 생각나서, 우리가 처음 만났던 초등학교와 당신이 살았던 집을 한 바퀴 돌았습니다. 술에 취해 함께 걸었던 공원과 잠깐 시간나면 맥주 한 잔 하자며 나오라고 했던 호프집은 시간이 지나도 그대로였습니다. 혹여나 사는 게 바빠 당신을 잊게 된다 하더라도, 당신과 함께한..
[Web] Proxy를 알아보자 들어가며 웹 서버와 WAS에 관하여 공부하면서, 웹 서버를 프록시 서버로 활용할 수 있다는 것을 알았습니다. 이때 프록시는 무엇이고, 프록시를 왜 사용해야 하는지 모르고 있다고 생각했습니다. 이 기회에 네트워크 상에서 프록시에 대해 정리하여, 개발자로서의 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. Proxy 프록시의 사전적 의미는 '대신', '대리'입니다. 그럼 네트워크 프록시에서, 프록시 서버는 무엇인가 대신 혹은 대리로 처리하는 서버라고 생각할 수 있습니다. 즉 PC끼리 네트워크 통신을 할 때, PC끼리 직접 통신하지 않고, 중간에서 대리로 통신하는 것을 '프록시'라고 합니다. 프록시 서버는 보안 목적이나 캐싱 등의 기능을 제공합니다. 프록시의 종류는..
[Web] Web Server와 WAS 들어가며 누군가 제게 웹 서버와 WAS의 차이점에 대해 물었습니다. 이때 명확하게 차이점에 대해 설명하지 못했습니다. 웹 서버와 WAS를 내가 제대로 모르고 있다고 생각했습니다. 이 기회에 웹서버와 WAS를 정리하여, 개발자로서의 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 이 글은 [Web] Web Server와 WAS의 차이와 웹 서비스 구조 글을 참고했습니다. 웹서버와 WAS 웹서버와 WAS에 대해 살펴보겠습니다. Web Server 먼저 웹 서버는 하드웨어와 소프트웨어로 구분됩니다. Web 서버가 설치되어 있는 컴퓨터를 Web Server의 하드웨어 개념이며, 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 콘텐츠(html, jpeg, cs..
[Project] 프로젝트 삽질기31 (feat Rate Limiting 구성) 들어가며 NestJS로 개발하면서, 무차별적으로 API 요청을 하는 공격을 받은 경험이 있습니다. 이 경험을 통해 외부로부터 오는 해커들의 공격으로부터 방어하기 위해서는 Rate Limiting이 필요하다는 것을 알았습니다. 이 글은 NestJS에서 Rate Limit을 보다 잘 활용하려면 어떻게 해야 할지 고민하기 위해 작성된 글입니다. NestJS Rate Limiting 무차별 대입 공격으로부터 앱을 보호하기 위해 일종의 속도 제한을 구현하는 옵션입니다. 간혹 운영 중인 서버에 DoS(Denial of Service) 공격을 받게 된다면, 서버 인스턴스의 리소스가 MAX가 되고, 무응답 상태가 나타날 수 있습니다. 이때 express-rate-limit을 활용하면 허용 가능한 접근 횟수 및 간격을 ..
[Project] 프로젝트 삽질기30 (feat helmet 구성) 들어가며 NestJS로 개발하면서, 외부로부터 오는 해커들의 공격에 어떻게 대응할 수 있을지 고민하곤 했습니다. 그때 helmet이라는 라이브러리를 알 수 있었습니다. NestJS에서 helmet을 보다 잘 활용하려면 어떻게 해야 할지 고민하기 위해 작성된 글입니다. 이 글은 [NODE / 보안] 📚 helmet 모듈 사용법 - 웹 보안은 내가 👮 글을 참고했습니다. 해당 링크 글을 보시면 더 잘 이해되실 겁니다. NestJS Helmet helmet 모듈은 웹서버를 외부의 공격으로부터 보호해주는 대표적인 노드 보안 모듈입니다. helmet 모듈은 다양한 HTTP 헤더를 자동 설정해줘서 서버 애플리케이션의 보안을 강화해줍니다. helmet을 활용하려면 모듈을 설치해주고, 선언만 하면 됩니다. npm in..