Hello, this is Crispy!! 👋

SeungChan Lee, web developer!

100만개 item을 가장 빠르게 필터링하는 unique by를 만들어 보자

TL;DR native set, lodash, ImmutableJS의 Set을 이용한 uniqueBy 구현체의 속도/메모리 사용량/CPU 사용량을 봅니다. CPU 사용량이 많아지는 것에 대한 걱정이 없다면 ImmutableJS의 Set을 활용한 uniqueBy를 구현해 사용하세요. 꽤 많은 데이터에 대해서 uniqueBy를 빠르게 돌리고 싶다. 왜 와이 백만개 정도 되는 데이터를 돌릴 필요가 발생했다. 백만개 item 정도 되는 json array에 대한 uniqueBy를 할 필요가 생겼습니다. 실제로 백만개 item에 대해서 테스트는 하기 어려워서 그냥 native set을 이용해 개발했습니다. 개발을 하고 보니, 더 빠른 구조가 있을지 궁금해 졌습니다. chatGPT에 물어보니, TypedArray를 사용해 직접 구현하는 방법과 ImmutableJS를 이용해 구현하는 방법을 제안해 주었습니다. ...

December 25, 2024 · 5 min · 856 words · Crispy

노드에서 배치잡 돌리기(feat. child_process, cluster, worker_threads)

TL;DR node에서 배치잡을 돌리고 싶다. child_process, cluster, worker_thread 비교 io intensive + cpu intensive일 때의 비교 child_process 쓸거 함수별 사용 시점 정리 node에서 배치잡을 돌리고 싶다. 왜와이 쉽고 빠르게 배치작업을 하고 싶다. 일회성 배치작업을 해야 하는 상황이 생겼습니다. 쉽고 빠르게 익숙한 NodeJS로 배치작업을 하고 싶었습니다. io와 cpu 모두 사용하는 작업으로, 딱봐도 오래걸리는 작업이었습니다. 그냥 해보았습니다. 싱글 스레드로 작업을 진행했습니다. Promise.all로 일부 데이터만 작업을 진행했더니 20분이 걸렸습니다. 도저히 전체를 한번에 돌릴 수는 없다고 생각이 들었고, 빠르게 처리하는 방법을 찾게 되었습니다. ...

May 16, 2024 · 5 min · 1037 words · Crispy

JAVA Reflection API를 이용한 Annotation만들기

TL;DR Reflection이 뭔가 훑어 보기 Annotation이 뭔가 바라만 보기 Reflection으로 Annotation 다루기 Reflection이 뭔가 정의 Oracle의 문서에 따르면 Reflection의 정의는 아래와 같습니다. Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of applications running in the Java virtual machine. Reflection은 JVM에서 동작하고 있는 어플리케이션의 런타임 동작을 검사하거나 바꾸고자 할 때 사용하는 것이다. https://docs.oracle.com/javase/tutorial/reflect/ 주의할 점 성능 문제 야기 Reflection은 런타임에 동작을 합니다. 그렇기 때문에 동작을 할 때 JVM의 최적화 과정 일부가 동작하지 않을 수 있습니다. 그 결과 Reflection이 없는 코드와 비교했을때 느릴 수 있습니다. 보안상 제약 Reflection은 런타임에 동작해야 합니다. 그렇기 때문에 일부 보안이 중요한 맥락에서는 사용하기 어려울 수 있습니다. 내부가 드러남 Reflection은 때로 private등 가려진 정보들에 접근하게 됩니다. 이 때문에 예상치 못한 side effect가 발생할 여지가 생기고, 이식성(portability)에 영향을 줍니다. Annotation은 뭘까 정의 위키백과에 따르면 annotation의 정의는 아래와 같습니다. ...

March 16, 2024 · 3 min · 577 words · Crispy

[회고] next step ATDD with Spring 3,4주차

TL;DR 미션은 재미있었다. 리뷰어님 스타일에 따라 리뷰 내용은 다르다. 마무리 하려고 글을 쓰긴 했는데… 많이 짧네요. 미션은 재미있었다. 유저 로그인과 가격 구하기 3, 4주차의 핵심은 유저 로그인과 가격 구하기 관련 테스트 및 기능의 작성이었습니다. 유저 로그인의 경우 자칫 어려워질 수 있는 주제를 기본 코드들을 활용해 쉽게 할 수 있게 만들어 주었습니다. 추후 개인 프로젝트를 진행하면서도 참고할 법하다고 생각이 든 미션이었습니다. 리뷰어님의 스타일에 따라 리뷰 내용이 다르다. 나는 객체 지향적인 설계에 대한 피드백을 받고 싶었다. 리뷰어님의 스타일에 따라 코드에 집중하는 경우와 설계에 집중하는 경우가 있다는 걸 느꼈습니다. 그래서 어떤 점을 리뷰 받고 싶은지 명확하게 전달하는게 중요했던 것 같습니다. 추후에 다른 nextstep 프로그램에 참여한다면 계속 원하는 바를 요구해야 겠다는 생각을 많이 했습니다. ...

March 10, 2024 · 1 min · 147 words · Crispy

[회고] next step ATDD with Spring 2주차

TL;DR 인수 테스트와 함께 TDD를 함께 해보는 작업 진행 순서를 가진 데이터의 구현 팁 외부 의존성을 도메인 객체에서 활용하는 방법 배운 것 나는 평소에 outside in 테스트를 하고 있었다. inside out/outside in 인수 테스트를 이용해 테스트를 작성하는 방식으로 inside out, outside in 방법이 있습니다. inside out 방법은 도메인 객체부터 차근 차근 테스트를 쌓아 올리는 방식이고, outside in은 그 반대입니다. outside in 테스트의 과정은 웹프로젝트에서 아래와 같이 진행되었습니다. 컨트롤러를 작성한다. 서비스를 작성한다. 서비스에 대한 유닛 테스트를 작성하며 작업한다. 이때, dependency는 Mock 객체로 대신한다. 코드 작성을 마무리한다. 이러한 과정을 가진 outside in 방식의 단점은 아래와 같았습니다. ...

February 12, 2024 · 4 min · 776 words · Crispy