지금 주인장은 Nest.js 공부 중 ···
Sign In

리캡

개발에 관련된 내용을 리캡합니다.
전체
타입스크립트
설정
자바스크립트
브라우저
컴퓨터 구조
Git
April 19, 2026 6:23 PM
1.
error.vue — 루트에 배치 (pages 뎁스와 같은 위치)
app/ pages/ layouts/ error.vue ← app/ 밖, 프로젝트 루트 바로 아래
Nuxt가 자동으로 감지하며 404, 500 등 모든 에러를 받습니다.
<!-- error.vue --> <template> <div> <h1>{{ error.statusCode }}</h1> <p>{{ error.statusCode === 404 ? '페이지를 찾을 수 없습니다.' : '서버 오류가 발생했습니다.' }}</p> <button @click="clearError({ redirect: '/' })">홈으로</button> </div> </template> <script setup lang="ts"> const props = defineProps<{ error: { statusCode: number; message: string } }>() </script>
💬
clearError
Nuxt가 제공하는 에러 상태를 초기화하는 composable
error.vue 가 렌더링되었다는 것은 Nuxt 내부적으로 에러 상태가 계속 잡혀있다는 것이고, 단순히 useRouter().push('/') 로는 그 상태가 남아서 에러 페이지가 계속 보일 수 있다.
2.
pages/[...slug].vue — catch-all 라우트
error.vue 대신 페이지 레이아웃(헤더 등)을 그대로 유지하고 싶을 때 씁니다.
// pages/[...slug].vue <script setup> throw createError({ statusCode: 404, message: 'Not Found' }) </script>
👍
April 14, 2026 7:26 PM

typeof

값에서 타입을 뽑아옵니다.
const user = { id: 1, name: 'kim' } as const type User = typeof user; // { id: number, name: string }

keyof

객체 타입의 키만 뽑아 유니온으로 만든다.
type User = { id: number, name: string }; type UserKey = keyof User; // 꼭 keyof는 타입으로 선언된 타입 선언문에만 사용 // result : 'id' | 'name'

keyof typeof

값에서 타입을 뽑고, 그 타입의 키를 뽑는다.
const STATUS = { READY: 'ready', DONE: 'done'. } as const type STATUS_KEY = keyof typeof STATUS; // result : 'READY' | 'DONE'
👍
February 19, 2026 4:19 PM
overrides 는 npm(v8.3.0+)에서 의존성 트리의 특정 패키지 버전을 강제로 변경하는 필드이다.
주요 역할
보안 취약점 해결 : 간접 의존성에 보안 문제가 있을 경우, 해당 패키지만을 안전한 버전으로 강제로 변경할 수 있다.
버전 충돌 해결 : 여러 패키지가 서로 다른 버전을 요구할 때 특정 버전으로 통일할 수 있다.
호환성 문제 해결 : 특정 버전의 패키지가 필요한 경우, 전체 트리에서 해당 버전을 사용할 수 있다.
{ "overrides": { "foo": "1.0.0", // 모든 foo 패키지를 1.0.0으로 변경 "bar": { "baz": "2.0.0" // bar 패키지 내부의 baz만 2.0.0으로 변경 } } }
그 외에 yarn 에서는 resolutions , pnpm 에서는 pnpm.overrides 를 사용한다.
👍
February 19, 2026 10:55 AM
git merge : 로컬 브랜치끼리 병합한다.
로컬에 이미 존재하는 두 브랜치를 병합한다.
ex.
git merge feature-branch ( feature-branch 를 현재 브랜치에 병합하겠다는 뜻)
원격 저장소와 통신하지 않고, 로컬에만 반영된다.
git pull : 원격에서 가져와 병합한다. (fetch + merge)
원격 저장소에서 변경사항을 가져오고 (fetch) 병합 (merge)까지 한번에 수행을 한다.
ex. git pull origin main (원격 main 브랜치를 가져와서 현재 브랜치에 병합하겠다)
실제로는 git fetch + git merge FETCH_HEAD 와 동일하다.
👍
February 18, 2026 1:57 PM
데이터 속성은 사용자 정의 데이터를 HTML 요소에 저장하기 위해 사용되는 속성이다.
문장을 이어갈 때는 - 키워드를 통해 엘리먼트에 정의를 해주면 된다.
<div data-is-show="true" id="el"></div>
위와 같이 data-is-show 속성이 데이터 속성에 해당되며, 자바스크립트에서 데이터 속성에 접근을 하려면 dataset 객체를 활용하면 된다. 여기서 확인해야할 점은 케밥 케이스로 작성했던 데이터 속성의 이름이 JS 의 카멜 케이스 형식으로 매핑된다는 것이다.
예를 들어 data-is-showdataset.isShow로 접근할 수 있다.
// js const el = document.querySelector('#el'); console.log(el.dataset.isShow);
CSS에서도 데이터 속성을 활용할 수 있는데, attr() 함수나 속성 선택자를 통해 데이터 속성의 값을 기반으로 스타일을 적용할 수 있다.
[data-is-show="true"] { display: block; }
👍
February 12, 2026 2:21 PM
항목
LF
CRLF
문자
\n (Line Feed)
\r\n (Carriage Return + Line Feed)
바이트
1바이트
2바이트
운영체제
Unix, Linux, macOS
Windows
16진수
0A
0D 0A
// LF (\n) - 1바이트 "Hello\nWorld" Hello World // CRLF (\r\n) - 2바이트 "Hello\r\nWorld" Hello World // * 외적으로 보기에는 같지만, 내부적으로는 차이를 가지고 있다.

역사적 배경

CR (Carriage Return, \r) : 커서를 맨 앞으로
LF (Line Feed, \n) : 종이를 한 줄 내림
타자기는 이 둘 다를 필요로 했음, 하지만 현대에서는 아래와 같이 변했음
Unix/Linux : 컴퓨터니까 LF만 있으면 충분하다.
Windows : 하위 호완성 유지로 인해 CRLF를 계속 사용한다.

충돌 문제

1.
만약, Windows 환경의 개발자가 깃 커밋을 진행했다면 (CRLF)
2.
MAC 환경의 개발자가 Pull (LF로 변환됨)
3.
수정된 파일은 없지만, 파일 전체가 LF로 변환되면서 모두 변경된 것처럼 보임
현대에서는 LF가 표준이기 때문에, LF로 통일해서 사용하는 것이 좋다.
👍
February 11, 2026 11:14 AM
항목
@typescript-eslint/parser
@babel/eslint-parser
TypeScript 문법
완벽 지원
지원 안함
JavaScript 문법
지원
지원
타입 체크
가능
불가능
Babel 설정 필요
불필요
필요
JS와 TS를 혼합하는 프로젝트도, 타입스크립트 파서는 일반 JS도 파싱이 가능하기 때문에 @typescript-eslint/parser 로 통일하면 더 간단하게 사용할 수 있다.
👍
February 11, 2026 10:10 AM
1.
npx selint —version 으로 eslint 가 프로젝트 내에 정상적으로 설치가 되어있는지 확인해보기
2.
npx eslint ${검사하고자 하는 파일 명} 으로 터미널에서 검사 실행
3.
만약, eslint 오류가 발생한다면, 오류 로그를 읽고 그에 따른 해결방안 실행하기
(ex. 일정 패키지가 누락되어 eselint를 실행하는데 오류가 발생을 하고 있었음)
👍
February 9, 2026 4:39 PM
스크롤 체이닝은 자식 요소의 스크롤이 끝났을 때 부모 요소까지 스크롤되는 현상으로, CSS의 overscroll-behavior 속성을 사용하여 간단하게 방지할 수 있다.
contain : 스크롤 체이닝은 막지만, 브라우저 고유의 고무줄 효과 (모바일 브라우저의 위로 당김 같은) 새로고침 이펙트는 유지합니다.
none : 스크롤 체이닝은 물론, 고무줄 효과 등 모든 오버스크롤 효과를 제거합니다.
auto : 기본 값, 스크롤 체이닝을 허용합니다.
👍
February 9, 2026 9:58 AM
보통 타입의 상수 선언을 하기 위해서는 as const 를 많이 사용하게 되는데, 이때 아래와 같은 경우가 생긴다.
const obj = { hyeonwoo: { age: 29, hobby: 'basketball' }, minsoo: { age: 29, hobby: 'reading' }, gildong: { age: 29, from: 'southKorea' }, } as const
이때 단순 상수 선언만 해주었기 때문에 내부 객체의 속성 값이 다른 요소와 달라도 오류가 발생하지 않는다, 다른 요소들과 통일성을 맞춰주기 위해 하나의 추가 타입 선언을 해주어야하는데 바로 satisfies 이다.
interface ObjConfig { age: number, hobby: string } const obj = { hyeonwoo: { age: 29, hobby: 'basketball' }, minsoo: { age: 29, hobby: 'reading' }, gildong: { age: 29, from: 'southKorea' }, // from에서 IDE 오류 발생 } as const satisfies Record<string, ObjConfig>
👍
February 2, 2026 3:11 PM
1.
env.d.ts 생성
2.
tsconfig.json에서 /src.**/*.d.ts 를 `include`로 포함시키기
3.
아래 타입 정의 진행
interface ImportMeta { readonly env: { VITE_API_URL: string, ... [key: string]: string // 이 방법도 있긴하지만, IDE 및 타입스크립트가 자동 완성을 시켜주지 못함 } }
👍
January 17, 2026 12:03 PM
null과 undefined 차이점은 내부 메모리적인 측면에서 봐야 된다. 
undefined는 변수가 초기화되지 않았거나, 객체의 속성이 존재하지 않는 등의 경우에 자동으로 할당되는 값으로, 이때의 변수는 메모리에 존재하지만 값이 없기 때문에 크기가 매우 작다.
반면, null은 개발자가 의도적으로 값이 없음을 할당한 경우에 사용되는 값으로, 이때의 변수는 빈 객체를 가리키는 객체 포인터이기 때문에 주소값을 나중에라도 받기위해 크기가 있어 메모리를 차지하게 된다.
따라서, undefined 값을 가진 변수의 메모리 용량은 작고, null 값을 가진 변수의 메모리 용량은 크다고 정리할 수 있겠다. (이는 상대적인 비교일 뿐이므로 실제로는 거의 차이가 없다고 봐도 된다)
다만, 자바스크립트에서는 변수가 컴파일 시점이 아닌 런타임 시점에 동적으로 할당되기 때문에, 변수의 크기는 런타임 환경에 따라 다를 수 있어 메모리 크기는 정확히 알 수 없다.
👍
December 30, 2025 8:12 PM
https://velog.io/@wlwl99/TypeScript-type%EA%B3%BC-interface%EC%9D%98-%EC%B0%A8%EC%9D%B4

interface

extends 키워드를 통해 확장할 수 있다.
같은 이름의 interface를 정의하면 자동으로 확장되는 선언적 확장이 가능하다.
객체 (Object) 타입을 설정할 때 사용할 수 있으며 원시 자료형에는 사용할 수 없다.
computed value 사용이 불가하다.

type

& 키워드를 통해 확장할 수 있다.
선언적 확장이 불가하다.
객체 타입을 정의할 때도 사용할 수 있지만, 객체 타입을 정의할 때는 interface 를 사용하는 것이 되도록 편할 것이며, 단순한 원시 값 (Primitive 한) 이나 튜플, 유니언 타입( | ) 을 선언할 때 type 을 사용하는 것이 좋다.
computed value 사용이 가능하다.

computed value

type Subjects = 'math' | 'science' | 'sociology'; interface Grades { [key in Subjects]: string; }
👍
December 29, 2025 4:51 PM
some()
하나라도 만족하면 true 를 반환
evert()
모든 조건을 만족해야 true 를 반환
👍
Made with Slashpage