• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

FP의 단점(?)을 극복하기 위한 질문 드립니다.

20.03.19 09:29 작성 조회수 185

0

FP를 보면 결국 기존의 데이터를 수정하지 않고 새로운 카피본을 만드는 것인데, 메모리의 낭비로 이어질 수 있어서 작은 데이터에서는 문제는 없으나 대용량 데이터에서는 문제가 될 것 같습니다. 강의를 들으면서 이 문제의 해결 방안에 대한 기대를했었는데 별다른 언급이 없었네요.

이제 실무에 적용하려고 검토 및 준비를 하다보니 대용량 데이터 핸들링에서 이슈가 분명히 나올것 같아서관련자료를 찾아보니 이러한 문제점을 해결하기 위해서 persistent data structure를 사용하는것 같은데, 알려주신 FP와는 어떻게 접목시켜야 하는지요...? (결국 immutable.js 와 같은 오픈소스를 사용해야 하는지요...)

그동안 강의를 들으며 공부한 내용을 실제로 활용하기 위해서(올려주신 3개의 강의 모두 듣고 현재도 계속 반복중입니다) persistent data structure 와 FP에 대한 활용, 또는 persistent data structure가 아니더라도 FP에서 대용량 데이터를 다루는 방법에 대한 강의 또는 설명이 반드시 있어야 될 것 같습니다.

이야기가 약간 벗어난것 같은데...질문의 요점은

- FP로 대용량 데이터 핸들링시에 어떻게 처리를 해야하는것이 효율적인지에 대한 질문입니다. 

끝으로 좋은 강의 감사합니다

답변 3

·

답변을 작성해보세요.

0

저는 대부분의 경우에서 이와 같은 튜닝은 불필요하다고 보고 있습니다 :) 

감사해요~

0

digilog님의 프로필

digilog

질문자

2020.03.19

빠르고 자세한 답변 감사드립니다. 조언해 주신 부분에서

'FP에서 배열내 값을 직접 리무브하면서 다루는 식의 튜닝만큼 튜닝은 이뤄지지 않습니다'

언급하신 내용은 직접 리무브하는 방식으로도 실무에서 사용하는지요? 개인적으로도 사람이 직접 튜닝하는것이

제일 좋을것 같은데 이렇게 하는 방법이 올바른 것인지 궁금합니다.

예를들어 

go( data,

,map

....(FP가 아닌 리무브 등 외부 데이터 수정 function)

 ,take

이런식의 로직을 구성하는것을 실무에서도 사용해도되는지요..?

아니면 일단 FP는 FP로직만을 태우고 나중에 정리는 하는방법이 좋은지, 어떤 방식이 유지보수나 효율이 좋은지

궁금합니다.

끝으로 다시한번 빠르고 친절한 답변 감사드립니다.

0

안녕하세요.

일단 persistent data structure(영속성)를 사용하기 위해서는 immer.js 를 추천드립니다.

그런데 영속성의 개념은 원래의 map fiilter 사용시에도 이루어집니다.

배열이라는 데이터는 2개를 사용하지만, 배열 내부의 값이 객체인 경우 레퍼런스만 바라보기 때문입니다.

만일 시작하는 list 값을 아예 사용하지 않을 경우라면 결과적으로 map filter 를 하여 새로운 배열이 만들어진 후에는 이전 배열은 사라지기 때문에 메모리 상의 큰 문제가 없습니다.

이 상황에 있어서는 immutable.js를 사용해도 더 이득을 얻을 수는 없습니다.

immutable.js나 immer.js 를 사용해서 이득을 얻을 수 있는 상황은 '배열안에 객체안에 배열안에 객체 안에 배열'과 같이 구성된 깊은 값이 있을 때 안쪽 깊은 곳의 값과 연관된 부분만 변경된 복사된 전체 배열을 추가로 만들어서 2개의 변수를 유지하고 싶을 때 이득을 얻습니다.

FP에서 대용량 데이터를 다루는 부분에 있어서는 지연성 같은 개념 등도 이점이 있습니다.

그 외에 경우는 FP에서 배열내 값을 직접 리무브하면서 다루는 식의 튜닝만큼 튜닝은 이뤄지지 않습니다.

제 경험상 결론적인 부분을 말씀드리자면, map, filter, reduce를 쓰는 경우에 결국 큰 배열은 메모리에서 사라지고 reduce를 통해 남은 최종 값만 남기 때문에 큰 이슈가 없습니다.

또한 객체를 랩핑하여 또 다른 객체를 만드는 객체지향적인 해법보다 기본 객체만 사용하는 함수형 기법이 오히려 nodejs의 실시간 메모리 사용이 더 효율적으로 나왔습니다.

답변이 되셨을지 모르겠네요..

감사합니다. :)