개발 12

npm-check-updates와 npm audit으로 Node.js 패키지 취약점 손쉽게 관리하기

Node.js로 프로젝트를 만들다 보면 수십 개, 많게는 수백 개의 패키지를 설치하게 된다. 직접 설치한 것도 있지만 대부분은 의존성으로 따라온 것들이다. 문제는 이 패키지들 중 하나라도 취약점이 생기면, 전체 프로젝트가 위험해질 수 있다는 점이다. 아직 보고되지 않은 잠재적인 취약점까지 개발자 선에서 모두 찾아내고 조치하는 건 사실상 불가능에 가깝다. 그렇기 때문에 적어도 이미 보고된 취약점에 대해서는 빠르게 대응하는 태도가 필요하다. 이런 취약점은 공개된 만큼 악용될 가능성도 높고, 보안 사고로 이어질 위험도 크다. 보고된 취약점에 대응하는 방법은 크게 두 가지다. 하나는 내가 직접 package.json에 선언한 의존성 패키지의 버전을 가능한 최신으로 유지하는 것, 다른 하나는 이런 패키지에 딸려온..

TypeScript Enum, 그리고 숨어있는 활용 꿀팁

TypeScript의 Enum의 기본 개념과 사용법Enum이란?Enum(열거형)은 TypeScript에서 여러 개의 상수 값을 하나의 그룹으로 묶어 관리할 수 있게 도와주는 데이터 타입이다. 주로 코드의 가독성을 높이고, 유지보수를 편리하게 하는 데 사용된다. Enum을 사용하면 숫자나 문자열 값을 명확한 이름으로 나타낼 수 있어 코드 작성과 관리가 쉬워진다.Enum의 기본 사용법기본적인 Enum 사용법은 다음과 같다.enum Direction { Up, Down, Left, Right,}let move: Direction = Direction.Up;console.log(move); // 0 출력이 코드에서 Direction은 Enum 타입으로, Up, Down, Left, Right는 Enum의..

TypeScript에서 interface와 type 중 무엇을 사용할까?

TypeScript에서는 interface와 type을 모두 사용하여 객체의 구조를 정의할 수 있다. 하지만 두 가지 개념 사이에는 미묘한 차이가 있다. 이번 글에서는 interface와 type의 특징과 차이점, 그리고 언제 어떤 것을 사용하는 것이 더 적절한지 정리해보겠다.interface와 type의 특징interfaceinterface는 TypeScript에서 객체의 구조를 정의하는 기본적인 방법으로, 다음과 같은 특징을 가진다.객체의 구조를 명확하게 정의할 수 있다.선언 병합(Declaration Merging)이 가능하다.implements 키워드를 사용하여 클래스에서 타입 검사를 수행할 수 있다.extends 키워드를 사용해 확장할 수 있다.typetype은 보다 범용적인 타입 정의 방식으로..

소프트웨어 코드 테스트에 대한 나의 생각 - 프론트엔드 테스트는 필요할까

소프트웨어 개발에서 코드 테스트는 단순히 실행해 보며 기능을 확인하는 단계를 넘어, 코드 품질 개선과 유지보수성 향상, 그리고 장기적인 제품 안정성을 보장하는 핵심 요소로 자리 잡았다. 여기서 언급하는 테스트는 제품을 직접 사용하는 방식이 아니라, 코드 기반의 자동화 테스트를 의미한다. 개인적으로는 유닛 테스트를 주로 활용하며, TDD(Test-Driven Development) 방법론을 선호한다. 직접 주도하지는 않았지만, 테스트 커버리지 100%를 달성한 경험이 있으며, 테스트가 전혀 없는 환경에서 테스트 문화를 구축하고 지속적으로 커버리지를 향상시킨 경험도 있다. 다양한 테스트 방법론과 적용 방식TDD 외에도 BDD(Behavior-Driven Development)와 DDD(Domain-Drive..

개발 2025.02.11

Next.js에서 Firebase Remote Config(원격 구성) 수정하기

Firebase Remote Config란 애플리케이션의 각종 기본값들을 Firebase를 통해 손쉽게 관리할 수 있도록 하는 클라우드 툴이다. Firebase 원격 구성 | Firebase Documentation 앱 업데이트를 게시하지 않고도 일일 활성 사용자 수 제한 없이 무료로 앱의 동작과 모양을 변경할 수 있습니다. firebase.google.com 각종 기본값들의 경우 애플리케이션의 탭 리스트가 될 수도 있고 각종 스태틱한 값들이 될 수 있다. 이러한 값들의 경우 서비스 기획이나 정책에 따라 언제든지 변경될 수 있다. 이럴 경우 보통 데이터베이스와 백엔드를 통해 관리를 하게 되는데 이것을 구현하는게 어렵지는 않지만 번거롭고 시간이 걸릴 수 있어서 프로덕트 스케줄에서 우선순위에서 밀릴 수 있다..

개발/웹 개발 2021.12.22

Typescript 타입을 배열로 정의해보자

Typescript는 Javascript를 Java, C, Swift, Kotlin처럼 정적 타입으로 쓸 수 있게 해주는 Javascript의 슈퍼셋이다. 빌드가 되면 브라우저 또는 Node.js가 이해할 수 있는 퓨어한 Javascript로 바뀌어 동적 타입인 Javascript의 태생적 한계를 극복하고 Javascript 생태계를 보다 안정적으로 쓸 수 있게 해준다. 다음을 살펴보자 let a = 1; console.log(typeof a); // number a = 'abc' console.log(typeof a); // string Javascript는 이처럼 변수를 선언해서 number 타입을 넣었다가 string 타입을 넣었다가 자유롭게 쓸 수 있다. 이처럼 동적 타입이기 때문에 때로는 변수를..

tsconfig의 baseUrl, paths 설정

개발을 하다 보면 직접 만든 utils 또는 프론트엔드의 경우 components 폴더, styles 폴더 등 현재 작업 파일과 다른 경로의 파일들을 import 시켜야 할 때가 있다. import 시킬 필요가 없는 파일은 아주 단순한 스크립트이거나 온갖 로직을 하나의 파일에 다 작성할 때인데 별로 좋지 않은 패턴이다. 그래서 파일의 상단에는 다음과 같은 현상이 일어난다. import styled from 'styled-components'; import { TextField } from '../../components/textfield'; ... line 1과 line2가 import 방식이 조금 다른 것을 알 수 있다. line 1의 styled의 경우 styled-components라는 npm 패키..

Mac에서 Open JDK 설치

Java와 Kotlin 관련 내용은 나중에 Spring으로 백엔드를 구현할 때 포스팅하려 했는데, Private NPM을 위한 Nexus를 설치하려다가 JDK 설치 이슈를 만나서 이렇게 먼저 포스팅하게 됐다. 보통 Oracle의 JDK를 많이 쓰곤 하는데, 일반 유저 입장에서 JDK로 만들어진 프로그램을 돌리려고 Oracle JDK, JVM을 설치하는 것은 전혀 문제가 없지만 JDK 기반 프로그램을 개발하는 입장에서는 라이선스 이슈가 신경이 쓰일 수밖에 없다. 물론 개인 프로젝트나 회사에서 내부적으로만 쓰는 거면 별 상관이 없다고는 하지만 뭔가 불안하다. 그래서 Open JDK를 많이들 설치하곤 한다. 나도 Open JDK를 설치하려고 이것저것 찾아보았는데 잘 되지 않았다. 일단 Home brew 설치가..

node.js 및 npm 버전 업데이트

실무에서는 레거시 프로젝트도 있어서 node 버전 관리 프로그램을 따로 쓰기도 하지만 개인 컴퓨터는 굳이 그럴 필요까진 없고 그냥 LTS 버전만 써도 별 문제가 없다. 근데 LTS버전도 아예 새롭게 바뀌는 경우도 있고 마이너 업데이트가 되는 경우가 있다. 그래서 개인 컴퓨터에서도 가끔은 업데이트를 해주는 게 좋다. 참고로 내 개인 컴퓨터 환경은 macOS Big Sur 11.3, M1 칩셋이며 이 환경에서 진행을 했다. $ node -v $ npm -v 버전을 찍어보니 node는 14.16.0, npm은 7.10.0이었다. 다운로드 | Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org nod..

TypeScript 환경 설정 - tsc, tsc-watch 설치

VSCode 기준 기본적으로 tsc를 전역 설치해야 한다. 그런데 TypeScript 는 그대로 런타임에 돌지 않고 JavaScript로 변환된 다음에 실행되기 때문에 소스코드를 고칠 때마다 tsc를 돌려서 빌드를 해줘야 한다. 그게 귀찮아서 tsc-watch를 설치한다. $ npm install -g tsc tsc-watch # 필요시 sudo 포함하여 명령 . 이번 포스트에서는 설치만 적고, 활용법은 나중에... tsc, tsc-watch 활용법 TypeScript는 JavaScript처럼 그 자체로 런타임에서 돌지 않는다. 다시 말해, TypeScript는 JavaScript로 컴파일이 되어야 Node.js든 브라우저에서든 작동할 수 있다. TypeScript는 JavaScript의 정적 타입 버전..