[바미] Java - Garbage Collection
·
프로그래밍(Basic)/이론
들어가기전에.. 안녕하세요. 하루 최소 600만건의 데이터를 처리해주는 서버를 Java(Maven)으로 개발하여 운영하고 있습니다. 서버 메모리가 점진적으로 0.1%씩 올라가는 것을 목격하게 되었고, 이를 해결하기 위해 Java 안에서 데이터들을 처리할 때 새롭게 생성하는 인스턴스를 null로 초기화를 해주었지만 여전히 메모리가 누수되는 현상이 발생되어 이 문제가 가비지 컬렉션과 관련이 있을 것 같아 찾아보던 것을 포스팅 해봅니다. Garbage Collection? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 됩니다. C언어의 경우 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 JVM의 가비지 컬렉..
[바미] Promise와 async/await
·
프로그래밍(Basic)/Javascript(TS,Node)
안녕하세요. 회사에서 저에게 자바스크립트에서 async, await사용시 블락되는 구간에 대해 질문을 받게 되었습니다. 먼저 제 블로그에 그러한 글이 있는지 찾아보았지만 Promise와 async에 관련된 글이 포스팅 된 줄 알았으나 단 한 개도 없더라구요. 그래서 겸사겸사 Javascript에서 비동기 처리에 빠질 수 없는 Promise와 async/await에 대한 내용과 저에게 질문 받은 내용을 포스팅하게 되었습니다. 만으로 2년간 Node.js를 사용하고 있었지만 아직까지 모르는 게 많다는 걸 알게 되네요. 해당 글의 내용이 정확하지 않을 수 있기 때문에 혹시나 틀린 부분이 있으시다면 언제든 지적 부탁드립니다! 물론 Javascript에서 비동기 처리를 다룰 수 있는 방법에는 여러가지가 있지만 많..
[바미] 선형성(Linearity)에 대해
·
프로그래밍(Basic)/이론
선형성(Linearity) 선형성이란 가산성과 동차성 성질을 동시에 만족하는 것을 말합니다. 가산성 (Additivity) 각각의 입력에 대한 결과를 합한 것과 입력을 합쳐서 넣은 결과가 동일하다. 이것이 가산성이고 superposition(중첩)이 가능하다고 한다. 다시 말해 복잡한 입력 x1 + x2에 대한 결과를 알기 어려울 때 이미 잘 알고 있거나 계산하기 쉬운 단순한 입력 x1과 x2를 이용해 각각의 결과를 얻고 단순히 합하기만 하면 되는 것을 말합니다. 동차성 (Homogeneity) 입력을 몇 배 늘리거나 줄였을 때 그 결과도 입력이 조정된 비율만큼 조정되는 성질을 말합니다. 선형성이 중요한 이유 예를 들어 어떤 선형적으로 거동하는 물체를 1N의 힘으로 눌렀을 때 1mm만큼 변형하고 2N의 ..
[바미] Command 패턴
·
프로그래밍(Basic)/디자인 패턴(JS)
Command 패턴 명령을 처리하는 객체를 통해 메서드와 실행되는 동작의 결합도를 낮출 수 있다 📜 원문: patterns.dev - command pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/command-pattern/ 커맨드 패턴을 사용하면 특정 작업을 실행하는 개체와 메서드를 호출하는 개체를 분리할 수 있습니다. 예를 들어 온라인 음식 배달 플랫폼을 개발한다고 가정해 보죠. 사용자는 주문하거나, 주문한 음식이 어디쯤 왔는지 확인하거나, 주문을 취소할 수 있습니다. class OrderManager() { constructor() { this.orders = [] } placeOrder(order, id) { this.orders..
[바미] Compound 패턴
·
프로그래밍(Basic)/디자인 패턴(JS)
Compound 패턴 하나의 작업을 위해 여러 컴포넌트를 만들어 역할을 분담하게 한다. 📜 원문: patterns.dev - compound pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/compound-pattern/ 앱을 개발하다 보면 종종 서로를 참조하는 컴포넌트를 만들기도 합니다. 컴포넌트들은 서로 상태를 공유하기도 하고 특정 로직을 함께 사용하기도 하죠. 아마 이런 코드는 select, 드롭다운 컴포넌트 또는 메뉴 컴포넌트에서 보았을 것입니다. 컴파운드 컴포넌트 패턴은 여러 컴포넌트들이 모여 하나의 동작을 할 수 있게 해 줍니다. Context API 아래 예제에서는 다람쥐 사진 목록을 보여주고 있습니다. 여기에 버튼을 추가하여..
[바미] Factory 패턴
·
프로그래밍(Basic)/Javascript(TS,Node)
Factory 패턴 객체를 생성하는 팩토리 함수를 사용한다. 📜 원문: patterns.dev - factory pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/factory-pattern/ 팩토리 패턴을 사용하면 함수를 호출하는 것으로 객체를 만들어낼 수 있습니다. new 키워드를 사용하는 대신 함수 호출의 결과로 객체를 만들 수 있는 것이죠. 앱에 다수의 사용자를 추가해야 한다고 가정해 보겠습니다. 사용자는 firstName, lastName, email 속성을 갖게 됩니다. 이 때 팩토리 함수를 사용해 fullName 메서드를 가진 객체를 만들어 반환합니다. const createUser = ({ firstName, lastName,..
[바미] Flyweight 패턴
·
프로그래밍(Basic)/Javascript(TS,Node)
Flyweight 패턴 동일한 객체를 다룰 때 이미 존재하는 인스턴스를 재사용한다 📜 원문: patterns.dev - flyweight pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/flyweight-pattern/ 플라이웨잇 패턴은 비슷한 객체를 대량으로 만들어야 할 때 메모리를 절약할 수 있게 해 주는 유용한 패턴입니다. 책을 추가할 수 있는 앱이 있다고 가정해 보겠습니다. 모든 책은 title, author, isbn속성을 가지고 있습니다. 그런데 도서관에는 보통 책을 한 권만 가지고 있지 않고 같은 책을 여러권 가지고 있죠? 동일한 책에 대해 새로운 클래스를 매번 생성하는것은 그다지 도움이 되지 않습니다. 그 대신 하나의 책을 ..
[바미] - Hooks 패턴
·
프로그래밍(Basic)/디자인 패턴(JS)
Hooks 패턴 앱 전체에서 함수를 통해 상태를 가진 로직을 여러 컴포넌트들에서 사용한다 📜 원문: patterns.dev - hooks pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/hooks-pattern/ React 16.8 버전에는 Hooks라는 기능이 추가되었습니다. Hooks는 React의 상태와 생명 주기 함수들을 ES2015의 클래스를 사용하지 않고 쓸 수 있게 해 줍니다. Hooks가 디자인 패턴이 아닐순 있지만 Hooks는 앱에서 아주 중요한 역할을 합니다. 여러 전통적인 디자인 패턴들은 모두 Hooks로 변경할 수 있습니다. 클래스 컴포넌트 Hooks가 추가되기 전에 React에서 상태와 생명 주기 함수를 사용하려면 ..
[바미] Render Props 패턴
·
프로그래밍(Basic)/디자인 패턴(JS)
Render Props 패턴 JSX 엘리먼트를 props를 통해 컴포넌트에게 전달한다 📜 원문: patterns.dev - render props pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/render-props-pattern/ 고차 컴포넌트 섹션에서 여러 컴포넌트가 동일한 데이터나 동일한 로직을 포함해야 할 때 컴포넌트의 로직을 재사용할 수 있게 되면 편해질 수 있다는 것을 알았습니다. 컴포넌트를 재사용 가능하게 할 수 있는 또 다른 방법으로, render prop 패턴을 사용하는 방법이 있습니다. render prop은 컴포넌트의 prop으로 함수이며 JSX 엘리먼트를 리턴합니다. 컴포넌트 자체는 아무런 것도 렌더링하지 않지 만 ..
Bami
'프로그래밍(Basic)' 카테고리의 글 목록 (6 Page)