개발 35

[이슈] 스네이크 케이스 <-> 카멜 케이스 변환시 성능 이슈 해결 (feat. defineProperty, laze access)

You don't know JS 를 스터디하면서 defineProperty 같은 함수는 내부적으로 쓰이는거고 서비스 개발할땐 별로 쓰일일이 없겠다 생각하고 넘겼는데, 어쩌다보니 써야하는 상황이 왔고, 나름 훌륭하게 해결한것 같아서 정리하고 공유할겸 글을 남기게 되었다. 이슈 상황 API 서버와 통신할때 JSON 을 통해서 데이터를 주고받는 상황이다. 이때 서버에선 스네이크 케이스를 사용하고, 클라이언트에선 카멜 케이스를 사용한다. 이때 클라이언트에선 받아온 JSON의 key들을 카멜 케이스로 변환해주어야 하는데, 방법은 여러가지가 있다. key를 순환하면서 변경시키기 defineProperty 를 사용하여 laze access 내가 직접 작업한 방법은 위에 2가지 인데, 우선 별 생각 없이 key값을 순..

개발/Javascript 2021.05.27

[빅데이터를 지탱하는 기술] 빅데이터 입문기 #4

3-1 대규모 분산 처리의 프레임워크 구조화 데이터 vs 비 구조화 데이터 구조화 데이터 SQL로 데이터 집계할때 명확히 정해진 스키마가 있음 비구조화 데이터 이미지, 동영상 등 정해진게 없는 데이터 스키마리스 데이터 기본 서식은 있지만 스키마 정의가 안됨 ex) CSV, JSON, XML등 데이터 구조화의 파이프라인 열 지향 스토리지에선 팩트 테이블과 디멘전 테이블로 나뉜다. 팩트 테이블 시간에 따라 증가하는 데이터 디멘전 테이블 그에 따른 부속 데이터 비 구조화 데이터를 열 지향 스토리지로 변환하는 과정 데이터의 가공 및 압축을 위해 많은 컴퓨터 리소스를 사용 분산 처리 프레임워크중 Hadoop과 Spark가 있다. Hadoop 분산 데이터 처리의 공통 플랫폼 단일 소프트웨어가 아닌 분산 시스템을 구..

개발/Data 2020.12.30

[빅데이터를 지탱하는 기술] 빅데이터 입문기 #3

크로스집계란? 열 지향 스토리지! 시각화 도구들의 특징 데이터 마트의 설계 2-1 크로스 집계의 기본 테이블의 행과 열에 어떤 항목을 넣는지에 따라 크로스 테이블과 트랜잭션 테이블로 나뉜다. 크로스 테이블 행과 열이 교차하는 부분에 숫자 데이터가 들어감 데이터베이스에선 다루기 어려운 데이터 트랜잭션 테이블 행 방향으로만 증가 열 방향으로는 데이터가 증가되지 않음 크로스 집계란 트랜잭션 테이블에서 크로스 테이블로 변환하는 과정을 말한다. 엑셀로도 피벗 테이블을 통해 이용이 가능하다. 록업 테이블 - 테이블을 결합하여 속성을 늘리기 트랜잭션 테이블에 새로운 항목을 추가하지 않고, 다른 테이블과 결합하고 싶은 경우 사용함 여러가지 방법을 통해 집계할 수 있다. BI 도구를 사용한 크로스 집계 Pandas를 통..

개발/Data 2020.12.30

[빅데이터를 지탱하는 기술] 빅데이터 입문기 #2

첫번째 챕터에선 다음과 같은 내용에 대해서 알아볼 것이다. Hadoop과 NoSQL 데이터베이스의 역할과 데이터 웨어하우스를 중심으로 한 기술과의 차이? 데이터 파이프라인? 대화형 데이터 처리 스프레드시트와 BI 도구를 사용해 데이터의 변화 모니터링 배경 빅데이터의 정착 과거부터 데이터에 대한 처리는 항상 있었다. 단, 처리 속도와 방법에 문제때문에 하지 못하고 있었다. 지금은 이러한 문제가 해결되었기 때문에 빅데이터가 세상에 나오게 되었다. 빅데이터 기수의 요구 - Hadoop과 NoSQL 기존의 RDB로 취급할 수 없을정도의 데이터가 쌓이게 되었다. Hadoop - 다수의 컴퓨터에서 대량의 데이터 처리 여러대의 컴퓨터를 관리하는 프레임워크 구글의 분산처리 프레임워크인 MapReduce를 참고하여 개발..

개발/Data 2020.12.30

[빅데이터를 지탱하는 기술] 빅데이터 입문기 #1

20년 8월에 데이터를 분석하는 팀으로 이직하게 되었다. 기존에도 프론트엔드를 주로 개발해왔기 때문에 데이터를 시각화 하는 부분은 익숙하다 생각했고, 평소와 같이 개발하고 있었다. 확실히 환경이 달라지니 들려오는 여러 연관 기술들이 들려오기 시작했고, 한번 정리해보려고 했다. 책을 다 읽고난 이후에 드는 생각은 이직하기 이전에도 난 이러한 것들을 해왔었고, 여러가지 선택지중 하나를 전부인것마냥 개발하고 있었다는걸 깨달았다. 데이터를 다루고 분석함에 있어 전반적인 얘기를 하고 있고, 다양한 선택지와 방법을 제시해주고 있어서 재미있게 읽었다. 다만 생소한 용어들과 너무 넓은 범위를 다루고 있어 빠르게 읽히진 않았다. 엄청 깊이있는 내용을 다루지 않는다. 딱 입문하기 좋은 책이였던것같다. 추천받길 잘한것같다ㅎ

개발/Data 2020.12.30

[You don't know JS] Part3 - 부록 (feat. ES6 class)

드디어 마지막 You don't know JS 2권의 마지막인 부록이다. 정리에 앞서 목차를 정리하자면 다음과 같다. ES6 Class asynquence 라이브러리 고급 비동기 패턴 asynquence 라이브러리 와 고급 비동기 패턴의 경우 asynquence 라이브러리의 설명 정도인데, 이 라이브러리가 현재 많이 쓰이는지 잘 모르겠고, 개인적으로 필요해졌을때 보아도 늦지 않을거라고 생각한다. 커뮤니티 자체가 죽은건 아니지만 활발하게 이루어지고 있진 않았고, 최근엔 많은 대안들이 있으므로 선택적인 내용인듯 하다. 따라서 나는 따로 정리하지 않는다. 한번 보고싶으신 분들은 아래 링크를 확인하면 좋을것같다. https://github.com/getify/asynquence APPENDIX A: ES6. C..

개발/Javascript 2020.10.24

[함수형 반응형 프로그래밍] #1. 듣기를 멈추자!

목표 FRP의 정의 이벤트의 정의와 이벤트가 문제를 야기하는 경우 FRP의 목표 → 우리가 해결하려는 문제의 정의 FRP의 장점 FRP 시스템의 작동 원리 FRP의 바탕이 되는 사고방식 FRP는 표준적인 프로그래밍 언어에 간단한 라이브러리 형태로 제공되며 관찰자 패턴에서 널리 사용하는 리스너를 대신한다. FRP를 사용하면 코드가 깔끔하고, 명확하며, 튼튼해지고 관리도 쉬워진다. ⇒ 코드가 간단해진다. FRP는 우리가 기존에 하던 방식과는 다른 방식으로 문제를 해결한다. FRP는 함수형 프로그래밍의 아이디어를 기초로 하지만 FP를 몰라도 문제없다. ⇒ 즉, 함수형 프로그래밍과 FRP는 별개다?? 흠... 듣기를 멈추고 반응을 시작하자! 1.1 프로젝트, 복잡도의 벽에 부딪치다 큰 프로젝트는 어느 순간 이..

[함수형 반응형 프로그래밍] #0. Intro

최근 Javascript를 공부하면서, 개발하면서 종종 들렸던 키워드중 함수형 이라는 단어와 반응형 이라는 단어이다. 이 둘이 세트인건지, 따로따로 인건지, 합쳐졌을때 다른 의미를 갖게 되는건지 알 수 없었다. 객체지향 프로그래밍에 익숙해서 그런지 함수형 프로그래밍을 보았을때 왜 그렇게 해야되는지? 어떤 장점이 있는지 사실 잘 알지 못한다. 어려풋이 이런거 아닐까? 하는 정도이다. 그러던중 함수형과 반응형이 같이 나와있는 이 책을 발견하게 되었고, 이번기회에 함수형 반응형 프로그래밍에 대해 알아보려고 한다. 목적은 함수형과 반응형 프로그래밍에 대해서 알기를 원하는데, 함수형 반응형이라는게 하나의 다른 용어이면 어쩌지 하는 생각도 조금 든다. 알아두어서 나쁠것은 없으니 한번 알아보도록 하자.

[You don't know JS] Part3 - 6장. 벤치마킹과 튜닝

a++와 ++a 사이에 어떤것이 성능이 좋을것인가? 학부생때도 뭐가 더 좋은지 많이 고민해보았고, 써져있는 글마다 달랐다. 결론적으로 의미가 없다는걸 알게되었다. 저 둘이 성능차이가 있으면 얼마나 있을꺼고, 내 서비스에 얼마나 큰 영향을 줄수 있을까... 책에서도 그러한 미시적 성능 튜닝에 초점을 두고있진 않았다. 6.1 벤치마킹 일반적으로 많이 사용하는 성능 측정 코드이다. var start = (new Date()).getTime(); // TODO: 테스트할 작업 var end = (new Date()).getTime(); console.log(end - start); 위와같은 방법으론 정확한 성능을 알아낼 수 없다. 문제점은 다음과 같다. getTime의 최소값인 밀리세컨 이하의 값은 측정 불가 ..

개발/Javascript 2020.10.11

[You don't know JS] Part4 - 5장. 프로그램 성능

비동기 패턴 덕분에 성능 좋은 코드를 작성할 수 있었다. 하지만 근본적으로 단일 이벤트 루프 스레드에 묶여있기 때문에 한계가 있다. 이러한 문제를 극복하기 위한 3가지를 알아보았다. 1. 웹 워커 비동기 이벤트를 이용하여 스레드간에 메시지를 교환하며 자바스크립트 파일을 개별 스레드 단위로 실행하게 해준다. 메인 UI 스레드의 응답성을 높이면서도 소요 시간이 길거나 자원을 집중적으로 소모하는 작업을 다른 스레드로 분산하는 장점을 가진다. 2. SIMD CPU 수준의 병렬 수학 연산을 대량 데이터의 수치 연산 같은 고성능 병렬 데이터 연산에 특화된 JS API로 연결하는 기법이다. 3. asm.js GC나 강제변환 등 최적화 하기 어려운 영역을 피해서 자바스크립트 엔진이 이런 부류의 코드를 자동으로 인식하여..

개발/Javascript 2020.10.11