전체 글 22

[etc] Property 'get' does not exist on type 'FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyBaseLogger, FastifyTypeProviderDefault>'.

예전에 사용하던 서버 보일러 플레이트를 동작시키니 제목과 같은 오류가 계속 나오는 것이다. 분명 잘못된 것이 없는 것 같지만 계속 오류가 나길래 fastify공식 사이트에서 제공하는 가이드 라인 형태로 작성해도 안돼..... 수 시간의 삽질 끝에 이건 무조건 의존성 문제다라고 생각하고 전부 최신버전으로 설치... 근데 똑같은 오류...!! 잠깐 최신버전으로 깔았으면 문법도 최신버전에 맞는 문법을 써야지 문제 해결!! 아래의 예시처럼await server.listen(3000); // Fastify v4에서는 지원하지 않음!await server.listen({ port: 3000 }); // Fastify v4에 맞춘 코드라이브러리도 시간이 지남에 따라 문법과 형식이 바뀐다. Fastify v3에서는..

개발/etc 2025.02.01

[etc] npm -D 옵션

nodemon과 같은 개발 당시에만 쓰이는 툴들이 있다. 이런 툴들을 일반 npm i로 다운받게 되면 패키지 파일의dependencies에 포함되어 앱을 구동할 때는 필요 없지만 개발 했을 때의 흔적으로 같이 다운받아 지게 되어 불필요한 용량으로 남게됩니다. 때문에 -D 또는 - dev와 같은 옵션으로 dependencies에 포함되지 않고 devDependencies에 포함되어 -production 플래그 를 사용하여 다운받으면 실제 앱 구동에 필요한 파일만 다운받을 수 있습니다.  예) npm i -production  결론) npm i -D를 통해 의존성에서 제외시킬 수 있고, npm i -production을 통해서 제외된 패키지을 다운받지 않고 구동에 필요한 패키지만 다운받을 수 있다.

개발/etc 2025.01.09

[etc]node.js 버전에 따른 호환성 문제....

새로운 node 프로젝트 중에 npx tsc --init이 명령어를 입력했더니"Segmentation fault      "$NODE_EXE" "$NPX_CLI_JS" "$@""라는 오류가 뜨는게 아닌가 node를 삭제했다가 다시 깔아도 보고 패키지를 전역으로 설치해도 보고 별짓을 다 했는데도 도무지 안되길래node를 두 단계 낮은 버전으로 설치하니 언제 그랬냐는 듯 해결되었다.....진짜 이래서 최신 버전은 걸러야 된다....

개발/etc 2025.01.08

[etc] 배열은 좌표계다

코딩을 하다 보면 배열을 다룰 때가 많은데 가끔 배열을 마치 좌표계처럼 생각하고 이용하는 나를 볼 수 있었다. A[x] = y처럼 말이다. A[y][x] = z처럼도 나타낼 수 있다. n차원 배열은 n+1차원 좌표계 그 자체로 사용하거나 n차원 데이터에 어떤 작업을 해줄 수 있다.함수에 배열을 포함시키면 함수값을 저장하고 있을 수도 있다.int A[];public void plus(int a) { A[a] = a + 1;} 배열을 좌표계처럼 보는 이러한 접근법을 다차원 배열을 이해하는데 보다 직관적인 인사이트를 제공해 주는 것 같다. 실제 이미지 처리, 그래픽스, 행렬계산, 시뮬레이션과 같은 분야에서 다차원 배열이 많이 사용되니 이와 같은 시각으로 배열을 한번 바라보는 것도 좋을 것이다.

개발/etc 2024.07.21

[Algorithm] 버킷 리스트 없이 버킷정렬을 구현할 수 있을까?(feat. 계수 정렬, 향상된 버킷정렬)

버킷 정렬버킷 정렬은 원소들이 균등 분포(Uniform Distribution) 일 때 유용하게 사용할 수 있는 정렬 알고리즘입니다. 버킷 정렬 알고리즘의 대략적인 흐름은 다음과 같습니다.[a, b] 범위의 원소들을 [0, 1)의 범위로 매핑시켜 준다.각각의 원소들의 배열의 사이즈(n)를 곱하여 정수부만 취하여 인덱싱 해준다.(이때 0~n-1 인덱스 각각의 기댓값은 1로 균등하다.)버킷 리스트(리스트 배열)에 인덱싱 된 값들을 매핑하여 넣어준다.각각의 버킷을 부분 정렬한다.정렬된 원소들을 원래 리스트에 복사해 준다. 이러한 버킷 정렬의 시간 복잡도는 Θ(n)로 이론상 매우 뛰어나지만 다른 Θ(nlogn) 정렬 알고리즘보다 조금 느린 정도의 퍼포먼스를 보여줍니다. 왜냐하면 버킷 리스트를 생성하고 관리하는데..

개발/Algorithm 2024.07.14

[Data Structures] 리스트 - 배열 리스트

리스트란?가장 대표적이면서 기본적인 자료구조를 뽑으라면 리스트를 뽑을 수 있습니다. 리스트란 '줄 세워져 있는 데이터' 또는 '죽 늘어선 데이터'를 의미합니다. 예를 들어 쇼핑 목록 리스트, 고객 리스트 등 연속적으로 저장된 데이터 등을 예로 들 수 있습니다. 리스트의 작업이러한 리스트를 구현하려면 원소의 삽입이나 삭제 등의 작업을 구현해야 할 것입니다. 리스트의 기본적인 작업 목록을 ADT(추상 데이터 타입) 리스트로 나타내면 아래와 같습니다.i번째 자리에 원소 x를 삽입한다.i번째 원소를 삭제한다.원소 x를 삭제한다.i번째 원소를 알려준다.원소 x가 몇 번째 원소인지 알려준다.리스트의 사이즈(총 원소의 수)를 알려준다.리스트 구현이러한 리스트를 구현하는 방법에는 크게 배열에 원소들을 쭉 배치하는 방법..

[Java] 지네릭스(generics)

지네릭스란?지네릭스란 jdk1.5부터 도입된 개념으로 여러 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 단계에서 타입체크(compile-time type check)를 해주는 기능입니다.이에 따라 객체의 타입 안정성이 높아지고 형변환의 번거로움이 줄어들게 되었습니다.지네릭 클래스 선언과 사용지네릭 타입은 클래스와 메서드에 선언할 수 있습니다. 먼저 클래스에는 아래와 같이 선언된 클래스 Box를 지네릭 클래스로 선언하고 싶으면 클래스 옆에 ''를 붙이고 object를 'T' 로 바꿔주면 선언이 됩니다.class Box{ object item; void setItem(object item){this.item = item;} object getItem(){return item;}}c..

개발/Java 2024.05.25

[Java] 인터페이스(Interface)

자바에서는 추상 메서드(abstract method)라는 개념이 있습니다. 추상 메서드란 아래와 같이 메서드의 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것 입니다.abstract void example1(int num1, int num2); abstract void example2(String name);이와 같은 추상 메서드를 포함하고 있는 클래스를 추상 클래스(abstract class), 오직 추상 메서드와 상수만을 멤버로 가지는 클래스를 인터페이스(interface)라고 합니다. 이와 같이 메서드를 미완성 상태로 선언해 놓는 것이 무슨 의미가 있을까요? 그것은 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상클래스에서는 선언부만 작성해 놓고, 실제 내용은 상속받는 ..

개발/Java 2024.05.15

[Git] 브랜치 병합 방법 Merge, Squash, Rebase (Fast-Forward, 3-way-merge)

여러명이 같이 개발을 진행할 때 서로 다른 브랜치들을 자주 병합을 하게 됩니다. 이 때 어떤 브랜칭 전략이 있으며 어떤 방식으로 병합이 이루어지는지 알아보겠습니다. Merge 일반적으로 많이 사용되는 병합 방법이며, 커밋 이력을 모두 남길 때 사용합니다. $ git checkout main $ git merge my-branch 이 방식은 상황에 따라 다시 Fast-Forward 방식과 Recursive 방식으로 나뉩니다. Merge (Fast-Forward) 새로운 브랜치 my-branch 가 main 브랜치로부터 분기된 이후 main 브랜치에 새로운 커밋이 올라오지 않았다면, my-branch 가 main 와 비교하여 최신의 브랜치라고 할 수 있습니다. 즉, my-branch가 base인 main을 ..

개발/Git 2024.02.27

[Java] 오토 박싱 & 오토 언박싱

자바에는 기본 타입과 Wrapper 클래스가 존재합니다. 기본 타입 : int, long, float, double, boolean 등 Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등 Wrapper 클래스 Wrapper 클래스란 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 의미합니다. 기본 타입의 데이터가 객체로 취급받아야 하는 경우 예를 들어, 메서드의 인수로 객체 타입만이 요구되는 경우에 쓰입니다. 또한 Wrapper 클래스로 인하여 더욱더 객체지향적인 프로그래밍이 가능해집니다. 자바의 기본 타입에 대응하여 제공하고 있는 래퍼 클래스는 다음과 같습니다. 기본 타입 래퍼 클래스 byte Byte short Short int Integ..

개발/Java 2024.02.27