목록분류 전체보기 (185)
hmk run dev
디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 설계문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 것입니다. 선배 개발자 분들의 시행착오 끝에 그중 가장 효과적이라고 알려진 패턴으로 잘 활용할 수만 있다면 적지 않은 시간과 노력, 시행착오를 줄일 수 있습니다. 간략하게 미리 알아두고 풀고 싶은 문제가 있을 때 적재적소에 적용한다면 좋겠습니다! 디자인 패턴 용도에 따라 나누기 가장 대중적으로 널리 알려진 나누는 기준은 생성, 구조, 행동으로 나눈 기준입니다. 생성 패턴(Creational Pattern) 객체 인스턴스를 생성하는 패턴으로, 객체를 생성하는 방법과 시점을 추상화하고, 코드의 유연성, 재사용성 및 유지보수성을 향상시킵니다. 싱글턴 패턴(Singleton Pat..
이 글로 얻을 수 있는 것 - 메모리릭을 디버깅 할 수 있는 자신감! - Node.js 환경이든 브라우저 환경이든 크롬 브라우저의 Memory 탭에서 메모리 누수의 범인을 찾을 수 있음! 메모리 누수(Memory Leak)이란? 메모리 누수는 실제로는 필요하지 않은데, 메모리를 계속 차지하고 있는 현상 메모리 누수가 있으면 뭐가 문제일까? JS를 동작시킬 메모리가 부족하니까, 성능이 좋지 않게 된다. - GC의 활동이 늘어나면, CPU 사용량이 늘어난다. - CPU intensive한 작업이 늘어나면, 이벤트 루프가 블로킹되서 연산이 느려진다. 띄워놓은 Node.js 서버가 죽는다. - SIGABRT 등의 시그널로 인한 프로세스 종료 - 인스터스가 재시작되고 일부 요청에 대한 응답이 실패할 수 있음 - ..
의도적 수련이란 자신의 기량 향상을 목적으로 반복적으로 하는 것이다. 단순 노동이 아니라 자신의 약점을 개선하려고 노력하는 것만이 의도적 수련이다. 업무를 하면서 의도적 수련을 같이 하려면 업무를 하면서 빠르게 피드백받고 교정하면서 성장하는 "애자일 철학"이 필요하다. 양치질을 30년 했다고 매일 똑같은 패턴, 강도로 반복만하니 양치질의 고수라고 하지 않는다. 같은 일을하더라도 어떤 분야에서 전문가가 되려면 의도적 수련을 해야한다. 개발을 예로들면, 단순한 것을 개발하더라도, 더 빠르게, => 속도, 기존 로직 혹은 비즈니스 요구 파악, 이전에 쌓아 놨던 재사용성의 도움 더 안전성 있게, => 테스트 더 재사용 가능하게, 더 확장에 용이하게, 더 동료들이 이해하기 쉽게, 위와 같은 사항들을 항상 상기시키..
15년 차 정도되는 시니어 개발자분이 감사하게도, 회사생활에 대한 사내 세미나를 열어주셨다. 평소에 같은 동료로서, 같은 개발자로서 존경심을 갖고 계셨던 분이 해주셨던 말들을 짧게 요약해 보고, "어떤 사람이 일을 잘하는 사람인가?"에 대한 개념이 잘 서지 않을 때마다 봐야겠다. 프로? 아마추어? 어떤 한 분야(종목)에 대해서 - 아마추어 : 돈을 내고 즐긴다. - 프로 : 돈을 받고 직업으로 일한다. ex) 게이머 - 아마추어 : 시간이 날 때 틈틈이 즐긴다. 꼭 승리하지 않아도 즐거우면 OK - 프로 : 목표는 승리, 승리를 위해서라면 합법적인 모든 방법을 동원해서 목적달성 프로(의식)? - 몸값에 맞는 가치를 한다. > 사장님 또는 고객은 쉽게 돈을 주지 않는다. > 항상 내가 생각하는 것보다 훨씬..
디자인 패턴이란? 소프트웨어에서 디자인 패턴은 반복적으로 발생하는 문제 상황에 대한 해결책을 제시하는 일반적인 설계 템플릿입니다. 디자인 패턴은 소프트웨어 공학에서의 최선의 실천 방법을 정리하고, 재사용 가능한 코드를 작성하기 위한 지침을 제공합니다. 디자인 패턴은 다음과 같은 주요 목적을 가지고 있습니다: 재사용성: 디자인 패턴은 특정 문제에 대한 해결책을 제공하므로, 해당 문제가 발생할 때마다 동일한 패턴을 재사용할 수 있습니다. 이를 통해 코드의 재사용성이 증가하고, 개발 시간과 비용을 절감할 수 있습니다. 유지보수성: 디자인 패턴은 코드의 구조화를 도와주며, 코드의 의도를 명확하게 전달합니다. 이는 코드를 이해하고 유지보수하는 과정을 단순화하고 오류를 방지할 수 있도록 돕습니다. 확장성: 디자인 ..
polling 클라이언트가 평범한 http request를 서버로 계속 날려서 이벤트 내용을 전달받는 방식이다. 가장 쉬운방법이지만 클라이언트가 계속적으로 request를 날리기때문에 클라이언가 많아지면 서버의 부담이 급증하게 된다. http request connection을 맺고 끊는것 자체가 부담이 많은 방식이다. 그리고 클라이언트에서 실시간정도의 빠른 응답을 기대하기도 어렵다. polling은 http 오버헤드가 발생한다는 단점이 있다. 하지만 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용할 수 있는 방식이다. (ex. 대시보드 갱신) SocketSSE(Server-Sent-Event) Socket SSE 브라우저 지원 대부분 브라우저에서 지원 대부분 모던 브라우저 지원(polyfills 가..
교착 상태 해결 - 예방 - 회피 - 검출 후 회복 교착 상태 예방 참고로, 교착 상태 조건 중 하나라도 충족되지 않는다면 교착상태는 절대로 발생하지 않는다. - 애초에 교착 상태가 발생하지 않도록 예방 - 교착 상태 발생 조건(상호 배제, 점유와 대기, 비선점, 원행 대기) 중 하나를 없애버리기 상호배제 없애기 모든 자원을 공유 가능하게 만든다? => 이론적으로 가능하지만 현실적인 해결법은 아니다. 점유와 대기 없애기(자원을 할당받은 상태에서 자원을 대기하는 것) 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분 => 자원의 활용률을 낮출 수 있는 방식 비선점 조건을 없애기 선점이 가능한 자원(e.g CPU)에 한해 효과적 => 모든 자원이 선점 가능한 것은 아니다. (한 프..
프로세스가 실행이 되려면 자원이 필요합니다 두 개 이상의 프로세스가 각자 갖고 있는 자원들을 그저 기다리기만 한다면, 그 어떤 프로세스도 실행되지 못하고 이를 교착상태라고 합니다. 식사하는 철학자 문제로 엿보는 교착상태 보이는 것처럼 원형 식탁에 다섯 명의 철학자가 앉아 있고 철학자 앞에는 음식과 포크가 있습니다. 음식을 먹으려면 꼭 2개의 포크가 필요합니다. 모든 철학자들이 동시에 위와 같은 순서로 식사를 한다면, 모든 철학자들이 식사를 하지 못하게 된다. 이런 식으로 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상을 "교착상태"라고 합니다. 여기서 철학자는 프로세스고 포크는 실행에 꼭 필요한 자원 식사는 자원을 이용함 => 실행에 빗댈 수 있습니다. 서로가 점거하고 있는 자원을 서로가 기다리면..
자바스크립트에서 함수 호출 방식인 Call by Value와 Call by Reference에 대해 알아보겠습니다. 먼저, 각각의 개념을 살펴보고, 이것이 리액트에서 상태값을 업데이트 할 때 어떻게 작용할 수 있는지 살펴볼 것입니다. 자바스크립트에서 함수를 호출할때 매개변수를 할당 받을 수 있습니다. 매개변수는 여러개가 될수도있고 단일값일수도있고 객체나 또 다른 함수가 될 수도 있습니다. 매개변수를 전달하는 방식에 따라서 Call by value , Call by reference 로 나눌 수 있습니다. Call by Value (값에 의한 호출) Call by Value는 함수에 인자를 전달할 때, 해당 값의 복사본이 함수로 전달되는 방식을 말합니다. 이는 원시 데이터 타입(숫자, 문자열, 불리언 등)..
가비지 콜렉션이란? 가비지 콜렉션은 자바스크립트 엔진이 자동으로 더 이상 사용되지 않는 메모리를 찾아내고 해제하는 프로세스를 의미합니다. 개발자가 명시적으로 메모리를 해제할 필요가 없어져 코드 작성이 간편해지는 장점이 있습니다. 메모리 관리의 중요성 메모리 관리는 프로그램의 성능과 안정성에 직접적인 영향을 미칩니다. 메모리 누수가 발생하면 시스템이 불안정해지고, 성능이 저하될 수 있습니다. 가비지 콜렉션은 이러한 문제를 해결하여 개발자가 메모리를 효율적으로 사용할 수 있도록 도와줍니다. 가비지 콜렉션의 작동 원리 자바스크립트 엔진은 주기적으로 가비지 콜렉션을 수행합니다. 이때, 더 이상 사용되지 않는 객체를 찾아내고, 해당 객체가 참조하는 메모리를 해제합니다. 이는 프로그램이 실행 중에 동적으로 생성되는..