문자열로 받은 파라메터를 가지고 함수를 호출하는 경우 (아마) 가끔 쓸일이 있는 eval() 호출자와 동일한 권한으로 코드를 실행할 수 있기 때문에 위험하다. 예를들어 FileAPI를 사용하는 경우 엑세스하여 악의적인 작업을 수행할 수 있기 때문이다. eval과 new Function 모두 문자열을 js 코드로 분석한다는 공통점이 있지만 다음의 차이가 있다. eval 은 현재 실행 컨텍스트에서 구동되면 실행지점의 지역변수에 엑세스 할 수 있다. 그러나 Function은 지역변수에 엑세스 할수 없기 때문에 더 안전하다. RunCode.ts class RunCode{ public static exec(obj:any){ return Function(` "use strict"; return ( ${obj} ) ..
vite 번들러를 사용한 proxy 설정 1. vite 로 preact-ts 설치 $ yarn create vite https://vitejs.dev/guide/#trying-vite-online Vite Next Generation Frontend Tooling vitejs.dev 이후 설치 질문이 나오는데 설치하고자 하는 앱을 선택한다 ex) preact-ts 2. 설치된 vite에서 vite.config.ts 파일의 proxy 설정 vite가 설치되면 root의 vite.config.ts 파일 설정을 통해서 proxy 를 적용할 수 있다. API를 적용하기 위해서 jsonplaceholder 의 https://jsonplaceholder.typicode.com/todos/1 를 예로 들겠다. 주의!..
yarn berry 에러: yarn berry를 찾을 수 없다는 문구가 포함 Internal Error: The "yarn-path" option has been set (in /home/hjj/wsl-poc/test/.yarnrc.yml), but the specified location doesn't exist (/home/hjj/wsl-poc/test/.yarn/releases/yarn-3.2.1.cjs). at i (/home/hjj/.node/corepack/yarn/3.2.1/yarn.js:449:11811) at async r (/home/hjj/.node/corepack/yarn/3.2.1/yarn.js:449:10914) 1. 프로젝트에서 .yarnrc.yml 파일을 제거한다 2. yar..
한개의 Repository에서 여러개의 remotes를 포함하고 있을 때, 브랜치를 가져온 뒤 pull 하는 경우 "git refusing to merge unrelated histories" 이런 에러를 만난다면 다음의 case일 확률이 높다. 현재 상황 $ git remote origin tutorial2 여기에서 원격의 tutorial2/main 브랜치를 로컬로 가져와서 동기화($ git pull) 하고 싶다. git pull 하면 refusing 에러가 난다. 당연하다. 에러가 나는 이유? 조금만 생각하면 당연하다. *origin/master에서 분기 처리하여 만든($ git checkout -b main)브랜치는 "origin =/= tutorial2" 로 저장소가 다른 브랜치 이다. maste..
이런 글 적는게 오글거려서 언젠가 삭제하거나 사라지겠지만, 나 포함 고군분투했던 직원들과 선배들 친구들이 있었기에... 그 마음이라도 헤아리고자 독려하고 싶어 그냥 적기로 했다. 드디어 회사를 떠난다 2020년 9월 다니던 직장에 큰 양해를 구하고(너무나 미안하게) 스타트업에 합류하여 빌드 해 보기로 했다. 역시나 과정은 숱한 가시밭길이었으며 험난했다. 무엇보다 '기준'이 없다는 점이 제일 큰 삽질이었다. 2020년 10월 중순 참여과제에 사건이 터졌다. 나 포함 2명으로 축소된 개발팀으로 2인 사무실에서 시작했다. 2022년 5월 현재 25명으로 성장했고 나름 굵직한 정부 과제 사업을 연속으로 수주하며 발전 중이다. 사내에 직원이 없어서 땜빵으로 연명했던 클라우드 MSP에도 팀이 생겼고 계약 고객도 더..
nestjs 에서 passport를 사용한 local 인증 구현 흐름 분석 passport 에서 아쉬운 점 1. Request 객체의 user key로 결과값을 반환 받는데, 공식문서에서 설명이 미흡한 점. 2. 위의 1번 항목, local.strategy 에서, user key 대신 다른값으로 받을 수 있도록 속성 변경 못하는 점(내가 못찾았거나) 3. Interface를 만들어서 usernameField, passwordField, requestField 로 기본 제공되었다면 어땠을까 함. 위의 3번 항목, 직접 사용자가 인터페이스를 구현하여 보완 하면 사용과 분석이 편리할 듯 함. Source code 필요패키지 설치 후, 모듈과 서비스를 cli로 설정 $ npm install --save @nes..
소프트웨어 설계의 5가지 원칙으로 SOLID라는 것이 있다. 흔히 객체지향 설계 기법으로 알려져 있지만, 꼭 객체지향 소프트웨어 설계에만 한정되는 것은 아니고 절차적 프로그래밍 기법으로도 적용할 수 있다. 설계 원칙을 만들고 공부하고 적용하는 이유는 무엇일까? 예측하지 못한 변경사항이 발생하더라도 유연하고 확장성이 있도록 시스템 구조를 설계하기 위해서다. 좋은 설계란, 기본적으로 시스템에 새로운 요구사항이나 변경이 있을 때 가능한 한 영향받는 부분을 줄이는 것이다. 즉 잘 설계한 시스템은 이해하기 쉽고, 바꾸기도 쉽고, 재사용하기도 쉽다. 1. 단일 책임 원칙 (SRP; Single Responsibility Principle) 객체는 단 하나의 책임만을 가져야 한다. 어떤 클래스를 변경해야 하는 이유는..
이번 실무 프로젝트에서 사용한 타입스크립트 설정파일이다. 컴파일러 옵션에 대한 정확한 작동 방식을 돕기 위해서 꼼꼼하게 설명해 놓았다. .tsconfig.json { "compilerOptions": { // js와 jsx 파일도 포함시키도록 한다. 점진적으로 바꿔나갈때 사용 "allowJs": true, // 모듈 타입.nodejs는 commonjs를 사용하므로 설정함 "module": "commonjs", // es6 모듈 사양에 따라 commonJS모듈을 가져올 수 있다. 기본 내보내기가 없는 모듈에서 대체 모듈 가져오기를 실행한다. import foo from 'foo' 와 import * as foo from 'foo' "esModuleInterop": true, // 사용할 es 버전 "tar..
Windows 10 작업표시줄 아이콘이 깨지는 경우가 발생 하는 경우 해결법 해결 방법1. 작업표시줄에서 삭제하고 재등록 하기 a) 작업표시줄에서 아이콘에 마우스 우클릭하여 제거 한다. b) 다시 프로그램을 찾아서 마우스 우클릭하여 작업표시줄에 등록해본다. 해결 방법2. 아이콘캐시 삭제 a). 먼저 숨김 파일과 숨김 폴더를 표시해야 한다. 윈도우즈 탐색기 상단에서 "보기 > 옵션 > 폴더 및 검색 옵션 변경" 클릭한다 b). "숨김 파일, 폴더 및 드라이브 표시" 에 ● 체크 해주고 확인 c). 현재 사용하고 있는 PC의 내 계정 폴더에 아래와 같이 접근한다. C:\Users\[내 사용자 계정]\AppData\Local d). IconCache.db 파일을 찾아서 삭제한다. e). 삭제하고 재부팅