전체글533 2. 좋은 함수 만들기 - 암묵적 입력/출력 지난 시간에 부작용 (부수효과) 함수에서 어떻게 최대한 부작용과 거리두기를 해서 좋은 함수를 만드는지 간단한 예제로 연습해봤다. 이번 시간에는 좋은 함수가 되기 위해 관리해야할 부작용이란 어떤 것들이 있는지 알아보자. 1. 암묵적 입력/출력 좋은 함수는 "부작용 (부수효과) 이 없으며, 멱등성을 유지할 수 있는 함수" 라고 했다. 이 부작용 (부수효과) 함수에는 크게 2가지 특징이 있다. 암묵적 입력 (implicit input) 암묵적 출력 (implicit output) 1-1. 암묵적 입력 (implicit input) 암묵적 입력이란 함수의 입력값으로 명시적으로 전달되지 않는 파라미터를 의미한다. 예를 들자면 다음과 같은 경우 암묵적 입력이다. 함수의 인자는 없는데 함수 내부에서 쿠키에서 값을 가.. 2023. 3. 1. 다른 관점에서 보기 최근에 읽었던 전국이라는 춘추+전국시대 배경의 소설책에서 나온 이야기인데 꽤 와닿는게 많았다. 지리소라는 꼽추가 있었다. 그는 흉측하고 장애도 있어 남들이 멸시했으나 바느질과 키질로 곡식을 불려 10명이나 되는 식구를 먹여 살렸다. 나라에서 전쟁이 터지자 멀쩡한 장정들을 징집했는데 지리소는 팔팔하게 다녀도 징집되지 않았다. 나라에서 성을 쌓는다며 부역을 시켜도 그는 제외였다. 기근이 들어 나라에서 구휼미를 풀 때는 불구라는 이유로 일반인보다 많이 받았다. 그는 많은 식구를 건사하고도 벌이가 남아 주변 사람을 챙겼고 일반인보다 장수했다. 남들이 쓸모없다고 여기는 게 오히려 장점이 된 경우로 무용지용(無用之用) 의 다른 예화라고 할 수 있다. 전국 17권 중 (장자에서 나오는 일화와 같다) 쓸모없는 것도 관.. 2023. 2. 26. 일의 난이도 높이기 요즘 여러 채널을 통해 고민 상담을 받다보면 빈번한 사례가 "더이상 성장한다는 느낌을 받지 못해서 이직을 고민중이다" 라는 것이다. 그래서 성장한다는 느낌은 어떤 것인지 물어보면 사람마다 답변이 다양하다. 다만, 많은 경우 "새로운 경험을 할 때" 성장한다고 느낀다는 답변을 받는다. 그 부분에 대해서는 100% 동의하진 않는다. 요즘은 "성장" 이란 단어를 쓰는 것이 조심스럽다. "성장라이팅" 이란 이야기를 많이 들었기 때문인데, 그렇기 때문에 이 글은 어디까지나 "성장에 대한 갈망"이 있는 분들에게만 해당한다. "모든 개발자가 이렇게 되어야만 한다" 를 의미하진 않는다. 마침 최근에 본 재미난 글이 있다. 단축키 표현이 과격(?) 해서 조심스럽지만 IDE의 단축키를 익히는 것의 유용함을 이야기해주셔서 .. 2023. 2. 14. PostgreSQL14 Memoize 성능 비교 (feat. 13 vs 14 Nested Loop) PostgreSQL에서는 3가지의 Join 알고리즘을 지원한다. Nested loop join Hash join Merge join 이 중 Nested loop join 은 가장 보편적인 Join 방식으로 그 작동 방식에는 결국 반복적인 스캔이 있다. 만약 반복적인 스캔의 하위 결과가 매번 같다면 이를 캐시해두고 반복적인 스캔에서 계속 사용한다면 어떨까? 아마도 JavaScript의 메모이제이션 을 알고 있다면 이해하기 쉬울것 같다. PostgreSQL 14에서 memoize 이 도입되었다. 그리고 AWS의 Aurora PostgreSQL 역시 PostgreSQL 14.x를 지원하고 있어 해당 옵션을 사용할 수 있다. Memoize 로 성능 개선을 얼마나 얻을 수 있을지 한번 알아보자. 1. 성능 테스트.. 2023. 1. 30. no-return-await 는 항상 정답일까 보편적으로 JS/TS 에서는 async 함수를 사용할때 return 만 필요한 경우에는 굳이 await를 명시하지 않았다. 실제로 ESLint 룰 상에서도 이에 대한 규칙을 갖고 있다. no-return-await 하지만 해당 규칙에서도 이 규칙을 적용하면 안되는 예를 소개하는데, 다음과 같다. await thenable 인 값을 나타내기 위해 사용하려는 경우 return await 회피의 성능상의 이점을 원하지 않는 경우 함수를 스택 추적에 표시하려는 경우 (디버깅에 유용함) 마지막의 "함수를 스택 추적에 표시" 가 이번 포스팅의 주제이다. Node.js를 비롯한 백엔드에서는 에러가 발생한다면 해당 에러에 대한 상세한 Trace가 거의 대부분 필요하다. Node.js에서는 await 없이 Promise.. 2023. 1. 24. Spring Boot 3.x 실행이 안될 경우 (feat. IntelliJ) 스프링 부트 3.0 이 출시되었다. (현재 최신은 3.0.1 이지만) 3.0 부터는 Java 17부터 지원된다. 그러다보니 기존에 Java8, 11등을 사용하시던 분들은 3.x 스프링 부트 프로젝트를 실행할때 에러들을 만나게 되는데, 이번에 나도 똑같이 경험해서 정리하게 되었다. 문제 스프링 부트 3.0.1 프로젝트를 실행할 일이 생겼다. 그래서 기존에 설치된 IntelliJ에서 Gradle Import를 시켰더니 다음과 같이 방다한 에러 메세지와 함께 실행이 되지 않았다. 기존 노트북에서 모두 Java 11로 프로젝트를 구동시켰었다. No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The .. 2023. 1. 20. 이전 1 2 3 4 5 ··· 89 다음