서론 즐겨보는 개발 관련 유튜브 중 하나인 노마드코더에서 흥미로운 영상을 게시했다. 기존 자바스크립트의 변수 const, var, let을 대체할 강력한 키워드인 using 이라고 소개했다. 역시 프로유튜버답게(??) 어그로를 잘 끄셔서 자연스레 정주행했다. 현재 자바에서 타입스크립트로 전향한 지금, 꽤나 중요한 이슈사항이 될 것 같아서 포스팅하여 정리해보려고 한다. https://www.youtube.com/watch?v=-NmwyJ5S-IY&t=151s 기존의 자바스크립트 변수 간단하게 기존 변수들에 대해 알아보자. es6에서 포함된 기능중 하나는, 변수 선언에 사용할 수 있는 키워드인 let, const의 추가였다. 혹여 단순 using에 대한 정보만을 얻고자한다면, 스크롤을 많이 내려야 할 것 같..
현재 프로젝트 환경이 docker - gitactions을 통한 CI/CD구축이 되어 있어 너무 생소했다. 실습 겸 새로 프로젝트를 하나 생성하여 CI/CD를 구축해 볼 계획이다 그러기에 앞서 Token을 발급해보자 발급 방법 1. Settings - Developer Settings Settings에 들어가서 최하단에 Developer Settings에 들어간다. 2. Personal access tokens 에서 Generate new token 토큰 발급을 해준다. workflow, write, delete권한은 주어야 한다. [Feedback tracking] Fine-grained personal access tokens · community · Discussion #36441 This topi..
에러 메세지 JWT Guard설정 후 테스트를 위해 서버를 실행했을 때 발생 원인 그대로 번역하면 메타타입은 생성자가 아니라는 것 같음. metatype is not a constructor에러는 커스텀 가드를 사용할 때 발생할 수 있는 일반적 오류중 하나이며 @UseGuards() 데코레이터에 가드 클래스를 전달할 때 메타타입 정보가 올바르게 전달되지 않을 때 발생한다고 한다. 즉, 인스턴스를 전달하는 것이 아니라 생성자 함수를 전달해야한다. //before @UseGuards(AuthGuard) //after @UseGuards(AuthGuard()) 문제가 된 부분을 수정해주었음. 새로운 에러 In order to use "defaultStrategy", please, ensure to import..
서론 9개월 정도를 스프링만 사용하던 신입 개발자인 나에게 갑작스레 실무에서 Node.js를 사용해야하는 상황이 닥쳤다. 기존 backend 코드를 보니 모듈을 import하는 것들이 대부분 @nestJS/어쩌고로 되어있는 typescript였다. 실무를 위해 빠른 적응이 필요했다. 나중에 node와 typescript, nest등에 대한 적당히 자세한(?) 공부 및 포스팅을 진행할 것이다. 간단하게 알아본 바로는 다음과 같았다. NestJS는 서버 측 노드 애플리케이션을 구축하기 위한 프레임워크로 Express와 같은 HTTP Server Framework를 내장하고 있고, 대부분 TypeScript로 구성되어 있다고한다. 이미 셋팅되어있는 개발환경을 다시 뜯어보기전에, 어떻게 개발환경을 셋팅하는지 부..
명령어 정리 npx npm 5.2.0버전부터 제공되는 명령어로 npx를 사용하면 install 없이 일회성으로 패키지를 실행하거나 명령을 실행할 수 있다. 1. npm init - package.json 생성 2. npm install / npm i - npm 모듈을 로컬(현재 프로젝트 내부)에 설치 - 옵션으로 --save / -S, --save-dev / -D를 사용 가능 - --save / -S는 dependency에 추가하는 명령어인데 npm 5버전 이후로는 자동으로 dependency에 추가됨 - --save-dev / -D는 devDependencies에 추가. 개발 환경에서만 사용하는 모듈 3. npm uninstall moduleName - 설치한 모듈 삭제 4. npm dedupe - 중..
서론 드디어 아래의 쿼리를 QueryDSL로 뽑아내서 View시켜볼 수 있게 되었다. select C.CHAMPION_ID, C.PRICE, ROUND((C.PRICE-CP.PRICE)/CP.PRICE*100) as PERCENT from Champion C, (select CC.CHAMPION_ID, CC.PRICE from ChampionPriceLog CC where (CC.CHAMPION_ID, CC.CREATE_DATE) in(select CCC.CHAMPION_ID, MAX(CCC.CREATE_DATE) AS CREATE_DATE from ChampionPriceLog CCC group by CCC.CHAMPION_ID) order by CC.CHAMPION_ID) as CP where C.C..
셋팅 def queryDslVersion = '5.0.0' dependencies { //QueryDsl // 필수 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" implementation "com.querydsl:querydsl-core:${queryDslVersion}" // QueryDsl 쿼리 타입 생성 (QClass 생성 시 @Entity 탐색) annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" // java.lang.NoClassDefFoundError:javax/persistence/Entity 에러 방지 annotationProc..
서론 토이 프로젝트 진행 중 아래와 같은 쿼리 사용이 필요했고, QueryDSL을 한 번 사용해보기로 했음. select C.CHAMPION_ID, C.PRICE, ROUND((C.PRICE-CP.PRICE)/CP.PRICE*100) as PERCENT from Champion C, (select CC.CHAMPION_ID, CC.PRICE from ChampionPriceLog CC where (CC.CHAMPION_ID, CC.CREATE_DATE) in(select CCC.CHAMPION_ID, MAX(CCC.CREATE_DATE) AS CREATE_DATE from ChampionPriceLog CCC group by CCC.CHAMPION_ID) order by CC.CHAMPION_ID) as..