Develope 58

i18n 다국어를 적용하며 VSCode i18n-ally로 관리 쉽게 하기

다국어(i18n) 지원이 필요한 프로젝트를 진행하다 보면, 키 값만으로 번역을 관리하는 것이 점점 불편해집니다.예를 들어, 아래 코드에서welcome_message가 실제로 어떤 한국어 문장인지 바로 알기 어렵습니다.이 글에서는 VSCode i18n-ally 플러그인을 이용해 번역 키를 직관적으로 관리하는 방법을 소개합니다.i18n-ally란?i18n-ally는 Visual Studio Code에서 i18n 번역 관리 기능을 제공하는 확장 프로그램입니다.주요 기능은 다음과 같습니다.번역 키 실시간 툴팁키 자동 완성미사용 번역 키 탐지JSON, YAML, JS/TS, PO 등 다양한 번역 파일 형식 지원이 플러그인을 사용하면, 번역 파일을 열지 않아도 키에 해당하는 실제 번역 문장을 바로 확인할 수 있습니..

Develope/기타 2025.08.11

peerDependencies와 peerDependenciesMeta 가이드

peerDependencies와 peerDependenciesMeta 가이드package.json을 다루다 보면 dependencies와 devDependencies는 익숙하지만, peerDependencies는 헷갈릴 때가 많다.특히 라이브러리나 플러그인을 만들 때 중요한 역할을 하지만, 잘못 사용하면 버전 충돌이나 예상치 못한 에러를 초래할 수 있다.또한, peerDependenciesMeta를 활용하면 특정 패키지를 선택적으로(optional) 의존하도록 설정할 수 있다.이 글에서는 peerDependencies와 peerDependenciesMeta의 개념과 올바른 사용법을 정리해 보려고 한다.1. peerDependencies란?peerDependencies는 패키지가 호환되는 다른 패키지의 특..

Develope/기타 2025.02.24

TypeScript 브랜딩(Branding) 개념과 활용법

TypeScript 브랜딩(Branding) 개념과 활용법TypeScript를 사용하다 보면, 동일한 기본 타입을 공유하지만 서로 다른 의미를 갖는 값을 구분하고 싶을 때가 있다. 예를 들어, 숫자로 표현되는 UserId와 OrderId를 혼동해서 사용하는 실수를 방지하고 싶다면 어떻게 해야 할까?이런 경우에 브랜딩(Branding) 기법을 활용하면 타입을 더욱 안전하게 관리할 수 있다.1. TypeScript 브랜딩이란?브랜딩(Branding)은 TypeScript의 타입 시스템을 활용하여 기본 타입(primitive type)에 의미를 부여하는 기법이다. 이를 통해 동일한 기본 타입을 사용하지만, 의도치 않은 값의 혼용을 방지할 수 있다.예를 들어, 아래와 같은 코드에서 number 타입을 직접 사용..

Develope/기타 2025.02.11

Chrome 브라우저 언어 설정 변경 및 navigator.language

다국어를 지원하기 위해서는 i18next와 같은 프레임워크를 사용하여 개발을 진행할 수 있다.이러한 개발 과정에서 다국어 기능이 정상적으로 작동하는지 테스트를 위한 환경을 구성하고자 함에 있어, Chrome 브라우저 언어 설정을 변경하는 방법이 필요하였으며,그러기에 이 글에서는 Chrome 브라우저에서 언어 설정을 변경하는 방법과 이에 따른 navigator.language의 동작을 정리하고자 한다.Chrome 브라우저 언어 설정 변경 방법1. Chrome 설정 열기Chrome 브라우저를 실행한다.오른쪽 상단의 점 세 개(⋮) 아이콘을 클릭한다.메뉴에서 설정을 선택한다.2. 언어 설정으로 이동설정 페이지 상단의 검색 창에 "언어"를 입력한다또는 설정 > 고급 > 언어를 차례로 클릭하여 언어 설정 화면으로..

Develope/기타 2025.01.06

더 나은 코드 품질을 위한 SOLID 원칙

소프트웨어 개발에서 좋은 코드 품질을 유지하는 것은 매우 중요하다. 코드가 복잡해질수록 유지보수와 확장성이 어려워지기 때문에, 코드가 처음부터 이해하기 쉽고, 유지보수하기 쉬우며, 확장 가능한 구조로 작성되는 것이 중요하다. 이러한 목표를 달성하기 위해 객체 지향 프로그래밍과 소프트웨어 설계에서 SOLID 원칙이 탄생했다.SOLID는 소프트웨어 개발에서 따르기 좋은 다섯 가지 기본 원칙의 약어로, 이 원칙들을 준수하면 더 나은 코드 품질을 유지할 수 있다. 각 원칙은 고유한 목적과 가치를 가지고 있으며, 이를 통해 소프트웨어 시스템을 보다 효율적이고 유연하게 만들 수 있다.1.단일 책임 원칙 (Single Responsibility Principle, SRP)단일 책임 원칙은 "클래스는 하나의 책임만 가..

Develope/기타 2024.08.30

JavaScript 호이스팅(Hoisting)

Javascript 호이스팅(Hoisting)JavaScript에서 호이스팅(Hoisting)은 변수 선언과 함수 선언이 코드 실행 전에 자바스크립트 엔진에 의해 최상위로 끌어올려지는 동작을 말하며, 이로 인해 코드 작성 순서와 관계없이 변수나 함수를 사용할 수 있는 것처럼 보이나, 호이스팅의 실제 동작 방식을 이해하는 것이 중요하다변수 호이스팅자바스크립트에서는 var 키워드로 선언된 변수들이 호이스팅 된다. 하지만 호이스팅 시 변수 선언만 끌어올려지고, 변수 할당은 원래 코드에서 선언된 위치에 남아 있게 된다.이는 초기화 전에 변수를 참조할 수 있지만, 이 경우 값은 undefined가 된다.console.log(a); // undefinedvar a = 10;console.log(a); // 10위 ..

Develope/Javascript 2024.08.29

CSS Grid vs Flex

CSS Grid와 Flexbox의 차이점CSS Grid와 Flexbox는 웹 디자인에서 레이아웃을 구성할 때 사용하는 강력한 도구들이다. 이 두 가지는 비슷해 보일 수 있지만, 그 용도와 기능에는 중요한 차이점이 있다. 아래에서는 CSS Grid와 Flexbox의 차이점, 장단점, 그리고 각각의 사용 사례에 대해 정리하고자 한다..1. 레이아웃 모델Flexbox: Flexbox는 1차원 레이아웃 모델이며, 이는 단일 행(row)이나 단일 열(column)에서 요소들을 정렬하고 배치하는 데 최적화되어 있다. Flexbox는 주로 요소들을 행 또는 열 단위로 나열하고 정렬할 때 유용하다.CSS Grid: CSS Grid는 2차원 레이아웃 모델이며. 그리드를 사용하여 행과 열 모두에서 요소들을 배치할 수 있다..

Develope/CSS 2024.08.29

CommonJS(CJS)와 ESModules(ESM)

CommonJS(CJS)와 ES Modules(ESM)은 JavaScript에서 모듈을 관리하고 불러오는 두 가지 방식이다.이 두 방식은 모듈의 정의, 불러오기, 사용 방법에서 차이가 존재한다.CommonJS(CJS)개요CommonJS는 Node.js에서 널리 사용되는 모듈 시스템이다. JavaScript가 서버 사이드 환경에서 사용되기 시작하면서 생겨났으며, Node.js는 처음부터 CommonJS를 기본 모듈 시스템으로 사용해 왔다.사용법모듈 불러오기: require() 함수로 모듈을 불러온다.모듈 내보내기: module.exports 또는 exports 객체를 사용해 모듈을 내보낸다.// module.jsconst message = "Hello, CommonJS!";module.exports = m..

Develope/Javascript 2024.08.27

JavaScript 클로저(Closure)

클로저(Closure)는 JavaScript의 중요한 개념 중 하나로, 함수와 함수가 선언된 어휘적 환경(Lexical Environment)을 함께 기억하는 구조이다.클로저는 주로 함수 내부에서 정의된 또 다른 함수를 통해 외부 함수의 변수에 접근할 수 있도록 하며, 이를 통해 다양한 유용한 기능을 구현할 수 있다.클로저의 기본 개념클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있는 메커니즘이며, 내부 함수가 외부 함수의 범위에 있는 변수를 "기억"하기 때문에 클로저가 형성된다.function outerFunction() { const outerVariable = "I am outside!"; function innerFunction() { console.log(outerV..

Develope/Javascript 2024.08.27