VS Code 숨은 기능을 쓰면 웹개발 코딩 속도가 달라진다
변수 이름 하나를 바꾸려고 파일 열 개를 돌아다니고, 방금 닫은 코드를 다시 찾느라 폴더를 뒤지고 있나요? 이런 시간은 실력 부족이 아니라 에디터를 단순한 메모장처럼 사용해서 생기는 손실일 가능성이 큽니다. Visual Studio Code에는 메뉴를 훑어봐도 쉽게 발견되지 않지만, 웹개발 작업의 반복을 크게 줄여 주는 기능이 숨어 있습니다.
코딩은 문자를 빠르게 입력하는 일이 아니라 변경 범위를 정확히 파악하고 안전하게 수정하는 과정입니다. 코딩의 기본 개념을 실제 프로젝트에 적용하려면 입력 속도보다 탐색, 검증, 반복 작업 자동화가 더 중요합니다. 아래 기능은 확장 프로그램을 무작정 늘리지 않아도 바로 써먹을 수 있는 실전형 웹개발 팁입니다.
파일을 찾지 말고 코드의 관계를 따라가면 빨라집니다
심볼 검색은 파일 검색보다 한 단계 정확합니다
프로젝트에서 user라는 단어를 검색하면 인터페이스, API 응답, 테스트 데이터, 주석까지 수백 건이 나올 수 있습니다. 이럴 때 전체 텍스트 검색만 고집하면 원하는 함수로 가는 데 시간이 오래 걸립니다. VS Code에서 Ctrl+P 또는 Cmd+P를 누른 뒤 @를 입력하면 현재 파일의 함수, 클래스, 메서드 같은 심볼만 골라 이동할 수 있습니다.
프로젝트 전체를 대상으로 찾고 싶다면 명령 팔레트에서 Go to Symbol in Workspace를 실행하거나 단축키로 심볼 검색을 엽니다. 파일명이 기억나지 않아도 함수명 일부만 알면 됩니다. 예를 들어 주문 금액 계산 로직을 찾을 때 파일 트리를 펼치는 대신 calculateTotal을 입력하면 구현 위치에 곧바로 접근할 수 있습니다.
- @: 현재 파일 안의 함수와 클래스 등 심볼을 검색합니다.
- @:: 현재 파일의 심볼을 종류별로 묶어서 보여 줍니다.
- #: 워크스페이스 전체에서 심볼을 검색할 때 활용합니다.
- : 뒤에 줄 번호를 붙이면 특정 줄로 바로 이동할 수 있습니다.
- Ctrl+Tab 또는 Control+Tab: 최근 열었던 편집기 사이를 파일 트리 없이 오갑니다.
정의 이동과 호출 계층을 함께 써야 수정 범위가 보입니다
함수 이름 위에서 정의로 이동하는 기능은 익숙해도 참조로 이동, 구현으로 이동, 호출 계층 보기까지 쓰는 사람은 의외로 적습니다. 선언부만 보고 수정하면 그 함수를 호출하는 화면이나 테스트를 놓치기 쉽습니다. 반대로 참조 목록을 먼저 보면 변경으로 영향을 받을 파일을 작업 전에 확인할 수 있습니다.
특히 인터페이스와 구현체가 나뉜 TypeScript 프로젝트에서는 Go to Definition이 타입 선언으로만 이동할 수 있습니다. 이때 Go to Implementations를 쓰면 실제 동작하는 코드에 더 빨리 도착합니다. 미니 창으로 정의를 확인하는 Peek Definition은 현재 문맥을 잃지 않는다는 장점도 있습니다.
- 수정할 함수에서 먼저 참조 목록을 엽니다.
- 호출 위치를 화면, 서버, 테스트 코드로 구분합니다.
- 구현으로 이동해 실제 반환 형식과 예외 처리를 확인합니다.
- 수정 후 참조 목록을 다시 훑어 누락된 호출부가 없는지 검사합니다.
탐색의 핵심은 파일 위치를 외우는 것이 아니라 코드 사이의 연결을 에디터에 물어보는 것입니다. 프로젝트 구조가 커질수록 이 습관의 효과도 커집니다.
여러 줄 수정은 복사와 붙여넣기보다 선택 규칙이 중요합니다
다중 커서보다 안전한 이름 변경 기능부터 고릅니다
같은 단어를 한꺼번에 수정하려고 다중 커서를 쓰면 문자열, 주석, 다른 범위의 동명 변수까지 바뀌는 사고가 생길 수 있습니다. 변수나 함수 이름을 바꾸는 목적이라면 먼저 Rename Symbol을 사용해야 합니다. 언어 서버가 코드 구조를 해석해 같은 심볼의 참조만 변경하므로 단순 텍스트 치환보다 안전합니다.
반면 반복되는 HTML 속성 추가, 동일한 접두사 입력, 여러 줄 끝에 쉼표 붙이기처럼 문법적 이름 변경이 아닌 작업에는 다중 커서가 잘 맞습니다. Windows와 Linux에서는 Alt를 누른 채 클릭하고, macOS에서는 Option을 누른 채 클릭해 커서를 추가할 수 있습니다. 같은 단어를 순서대로 선택하는 기능과 현재 선택 항목의 모든 일치 항목을 고르는 기능도 구분해서 써야 과도한 수정이 줄어듭니다.
| 상황 | 추천 기능 | 이유 |
|---|---|---|
| 함수·변수 이름 변경 | Rename Symbol | 코드 구조에 연결된 참조만 변경하기 쉽습니다. |
| 반복된 HTML 속성 편집 | 다중 커서 | 여러 위치에 같은 입력을 빠르게 추가할 수 있습니다. |
| 규칙이 있는 문자열 변경 | 정규식 검색·치환 | 그룹을 보존하며 형태를 바꿀 수 있습니다. |
| 세로로 정렬된 텍스트 수정 | 열 선택 | 같은 열의 문자만 직사각형으로 선택할 수 있습니다. |
- 한 항목씩 일치 대상을 늘릴 때는 Add Selection to Next Find Match를 사용합니다.
- 현재 단어의 모든 일치를 고를 때는 Select All Occurrences of Find Match를 사용합니다.
- 선택한 각 줄의 끝에 커서를 만들면 배열이나 객체 속성을 빠르게 편집할 수 있습니다.
- 실행 전에는 상태 표시줄의 선택 개수를 보고 예상보다 많은 위치가 잡히지 않았는지 확인합니다.
정규식 치환은 캡처 그룹을 알면 생활 도구가 됩니다
API에서 받은 키 목록을 자바스크립트 객체 형식으로 바꾸거나, 오래된 클래스 이름에 접두사를 붙이는 작업은 손으로 반복할 필요가 없습니다. 검색창의 정규식 버튼을 켜고 바꿀 부분을 괄호로 묶은 뒤 치환식에서 $1, $2처럼 재사용하면 됩니다. 예를 들어 data-(.+)=를 찾고 aria-$1=로 바꾸는 식입니다.
다만 프로젝트 전체 치환은 되돌리기만 믿고 실행하기보다 검색 결과를 파일별로 검토해야 합니다. 생성 파일, 잠금 파일, 빌드 결과물은 제외 설정에 넣고, 먼저 한 파일에서 결과를 확인하세요. 검색 결과 옆의 개별 치환 버튼을 이용하면 적용할 항목만 선택할 수 있어 정규식이 익숙하지 않은 사람에게도 안전합니다.
- 작은 샘플 문자열에서 찾기 패턴이 원하는 범위만 잡는지 확인합니다.
- 대소문자 구분과 전체 단어 일치 옵션을 상황에 맞게 켭니다.
- 치환 미리보기에서 캡처 그룹의 위치가 뒤바뀌지 않았는지 봅니다.
- 변경 파일 목록을 확인한 뒤 저장하고 테스트를 실행합니다.
이 과정 역시 프로그램에 처리 규칙을 정확히 전달하는 작업입니다. 더 넓은 의미의 프로그래밍 개념처럼, 반복 작업을 명확한 입력과 출력의 규칙으로 바꾸면 사람의 실수를 줄이면서 속도를 높일 수 있습니다.
프로젝트별 설정과 자동화가 팀의 손동작을 통일합니다
저장할 때 필요한 동작만 조용히 실행시킵니다
포맷터를 설치했는데도 팀원이 저장한 파일마다 따옴표나 들여쓰기가 달라진다면 확장 프로그램보다 설정 범위를 먼저 살펴봐야 합니다. 사용자 설정은 모든 프로젝트에 적용되지만, 워크스페이스 설정은 현재 저장소에만 적용됩니다. 프로젝트 루트의 .vscode/settings.json에 합의한 설정을 두면 저장 시 포맷, 사용하지 않는 import 정리, 특정 언어의 기본 포맷터를 팀 단위로 맞출 수 있습니다.
여기서 숨은 함정은 모든 저장 동작을 무조건 자동화하는 것입니다. 대형 파일에서 매번 전체 수정 작업이 돌면 저장이 느려지고, 포맷터와 린터가 같은 규칙을 서로 다르게 고치면 코드가 계속 흔들릴 수 있습니다. 포맷은 Prettier, 오류 규칙은 ESLint처럼 역할을 분리하고 format on save와 code actions on save의 책임을 명확히 잡는 편이 좋습니다.
- 언어별 설정을 사용해 JavaScript, TypeScript, JSON의 기본 포맷터를 따로 지정합니다.
- 저장 시 전체 린트 수정이 부담스럽다면 명시적으로 실행할 작업만 고릅니다.
files.exclude는 화면에서 숨기는 용도,search.exclude는 검색 대상을 줄이는 용도로 구분합니다.editor.rulers로 권장 줄 길이를 표시하면 리뷰 전에 긴 코드를 발견하기 쉽습니다.- 팀에 필요한 확장은
.vscode/extensions.json에 추천 목록으로 남기되 자동 설치를 강제하지 않습니다.
Tasks와 복합 명령으로 터미널 전환을 줄입니다
npm run dev, 타입 검사, 단위 테스트를 매번 터미널에 다시 입력하는 습관도 줄일 수 있습니다. VS Code의 Tasks는 자주 쓰는 명령에 이름과 단축키를 붙이고, 여러 작업의 실행 순서까지 정의합니다. 프론트엔드 개발 서버와 목 API 서버를 함께 띄우거나 테스트 전에 타입 검사를 수행하는 흐름을 저장해 두면 새 팀원도 같은 순서로 실행할 수 있습니다.
문제가 발생한 위치를 터미널 문자로만 보여 주지 않고 편집기 오류로 연결하려면 problem matcher가 유용합니다. 도구가 출력하는 파일명, 줄 번호, 오류 메시지 형식을 VS Code가 해석하도록 지정하면 오류를 클릭해 해당 코드로 바로 이동할 수 있습니다. 이미 지원되는 TypeScript 등의 기본 matcher가 있다면 직접 복잡한 정규식을 만들기 전에 재사용하는 편이 낫습니다.
- 명령 팔레트에서 작업 구성 기능을 열고 현재 프로젝트의 실행 명령을 등록합니다.
- 개발 서버처럼 계속 실행되는 작업은 백그라운드 작업으로 표시합니다.
- 타입 검사와 테스트처럼 독립적인 작업은 병렬 실행을 고려합니다.
- 빌드 뒤 배포 미리보기를 띄워야 한다면 순차 실행으로 의존 관계를 지정합니다.
- 실패한 명령의 종료 코드가 제대로 전달되는지 일부러 오류를 만들어 확인합니다.
좋은 자동화는 명령을 숨기는 장치가 아니라 팀원이 같은 명령을 같은 조건으로 재현하게 만드는 장치입니다. 자동 실행 전에 터미널에서 원래 명령이 정상적으로 실패하고 성공하는지부터 확인하세요.
확장 프로그램도 같은 기준으로 골라야 합니다. 다운로드 수가 많다는 이유만으로 설치하면 시작 속도와 메모리 사용량이 늘고, 어떤 확장이 저장 내용을 바꾸었는지 추적하기 어려워집니다. 프로필 기능으로 업무용, 학습용, 특정 프레임워크용 확장 구성을 분리하고 문제가 생겼을 때 Extension Bisect를 실행하면 충돌을 일으키는 확장을 절반씩 제외하며 빠르게 찾을 수 있습니다.
상품 카드 수정 한 건을 VS Code 기능으로 끝까지 따라가 봅니다
요청을 받은 순간부터 영향 범위를 좁힙니다
실제 상황을 하나 따라가 보겠습니다. 쇼핑몰 상품 카드에서 discountRate라는 속성을 discountPercent로 바꾸고, 할인율이 없을 때 배지가 사라지도록 수정해 달라는 요청이 들어왔습니다. 파일 트리를 뒤지기 전에 워크스페이스 심볼 검색으로 상품 카드 컴포넌트를 열고, Find All References로 속성이 사용되는 위치를 확인합니다.
검색 결과에는 컴포넌트, API 변환 함수, 스토리 파일, 단위 테스트가 나타났습니다. 일반 텍스트 검색 결과에는 문서 예시와 목 데이터도 추가로 잡힙니다. 여기서 곧바로 전체 치환하지 않고 TypeScript 타입 선언의 속성 위에서 Rename Symbol을 실행합니다. 그러면 타입에 연결된 실제 참조가 먼저 바뀌고, 문자열 키나 JSON 목 데이터처럼 언어 서버가 추적하지 못한 항목은 별도로 검토할 수 있습니다.
- 참조 목록에서 운영 코드와 테스트 코드를 먼저 구분합니다.
- 이름 변경 기능으로 구조적으로 연결된 참조를 수정합니다.
- 이전 이름을 전체 검색해 문자열 키와 문서 예시의 잔여 항목을 찾습니다.
- 미니 정의 창으로 새 속성의 타입이
number | null인지 확인합니다. - 변경 파일을 저장하기 전에 소스 제어 패널에서 예상 파일만 수정됐는지 봅니다.
실행과 검증도 편집기 안에서 끊김 없이 이어갑니다
이제 배지 조건을 discountPercent > 0으로 바꾸고, 여러 테스트 데이터의 속성을 열 선택과 다중 커서로 수정합니다. 모든 일치 항목을 한 번에 선택하지 않고 목 데이터 블록 안에서만 커서를 추가합니다. 숫자 0, null, 양수 값의 사례를 각각 만들어 할인 없음, 데이터 없음, 할인 적용 상태를 구분합니다.
저장 시 포맷과 import 정리가 실행되지만, 테스트 데이터의 의미까지 자동으로 검증해 주지는 않습니다. 등록해 둔 복합 Task로 타입 검사와 해당 컴포넌트 테스트를 병렬 실행합니다. 오류 패널에 “possibly null” 경고가 뜨면 클릭해 조건문으로 이동하고, null을 먼저 거른 뒤 숫자 비교가 실행되도록 표현식을 고칩니다. 수정 뒤 같은 Task를 다시 실행해 오류가 사라지는지 확인합니다.
- 상품 카드 스토리를 열어 할인율이 양수일 때 배지가 표시되는지 봅니다.
0일 때 배지가 숨겨지고 빈 공간도 남지 않는지 확인합니다.null응답에서 화면 전체가 깨지지 않는지 검사합니다.- 이전 속성명으로 전체 검색해 코드와 목 데이터의 잔여 참조가 0건인지 확인합니다.
- 소스 제어의 변경 비교 화면에서 자동 포맷 때문에 무관한 줄이 바뀌지 않았는지 살핍니다.
마지막으로 커밋할 파일을 하나씩 스테이징합니다. 이때 줄 단위 스테이징을 활용하면 같은 파일에 섞여 있던 개인 메모나 다음 작업의 변경을 제외할 수 있습니다. 변경 비교 화면에서 이름 교체, 조건 처리, 테스트 추가만 남은 것을 확인하면 리뷰어도 수정 의도를 짧은 시간에 이해할 수 있습니다.
이 사례에서 타이핑 자체는 작업의 작은 부분에 불과합니다. 심볼 탐색으로 시작해 안전한 이름 변경, 제한된 다중 편집, Task 실행, 오류 위치 이동, 줄 단위 스테이징까지 연결했기 때문에 수정 범위를 놓치지 않은 것입니다. AI가 만든 코드까지 검증하는 산업이 주목받는다는 관련 기술 기사처럼 자동화가 늘수록 검증 과정의 가치는 더 커집니다. 상품 카드 한 건을 처리하더라도 빠르게 입력하는 사람보다 영향 범위를 확인하고 결과를 재현하는 개발자가 결국 더 빠르게 일을 끝냅니다.

- 이전글“새로고침했는데 왜 그대로죠?” 웹개발 캐시 오류 해결법 26.08.20
- 다음글웹개발 입문은 HTML·CSS·자바스크립트 순서가 가장 빠르다 26.08.18
등록된 댓글이 없습니다.
