0. 찾아보게 된 계기
- vscode 같은 에디터를 사용하다보면 아래 이미지와 같이 붉은 밑줄등으로 내 코드의 문법상 오류나 도달할 수 없는 값 등을 알려주는 경우가 있다.
- 컴파일러든 인터프리터든 난 코드를 실행시키거나 컴파일한 적이 없는데, 어떻게 가능한 건지 궁금했었다. 에디터는 어떤 원리로 내 코드를 감시하는 거지? 실시간으로 나 몰래 실행시키나?
- 찾아보니 린터(linter) 다른 말로는 린트(lint) 라는 도구가 내가 작성한 코드를 정해진 규칙에 맞게 검사해주고 있다는 것을 알았다.
- 사실 위 경우는 특별한 린터를 설치했다기보다는 vscode가 제공하는 기본 문법검사기가 찾아준 것이지만 위 검사기 또한 간단한 린터로 볼 수 있다고 한다.
1. 린터란?
- 다양한 정의들이 많지만 결국 요약하면 "코드를 작성할 때 규약을 자동으로 맞춰주는 도구"라고 말할 수 있다.
- 크게 3가지로 동작한다고 하는데 토큰화>파싱>분석 이다.
- 토큰화 : 내가 작성한 코드를 린터가 일정한 규칙으로 쪼개서 본인이(컴퓨터를 의미합니다.) 이해 할 수 있는 토큰으로 변환한다.
- 파싱 : 이 토큰을 가져와서 구조화된 트리에 형태로 변환한다.
- 분석 : 이제 이 트리를 돌면서 문법적 오류, 스타일 불일치, 잠재적인 버그 등을 검출하고 우리한테 위 이미지처럼 오류를 알려주고 대안도 제시해준다. 린터가 꼼꼼하면 꼼꼼할 수록 세팅이 더 자세하면 더 자세할 수록 좋은 도구이다.
2. 린터의 장점
- 잠재적인 버그나 오류를 사전에 찾아 유지보수에 관해서 필수적이라고 생각한다. 장점이 아니라 "필수" 라고 생각한다.
- 타입스크립트의 등장 배경에도 오류를 일찍 찾아 유지보수의 비용을 줄이는 것도 포함 되어 있는데, 사실 타입스크립트도 린팅의 기능을 가지고 있다고 볼 수 있지 않을까 싶다.
- 코드 일관성 및 스타일 통일성 확보도 중요한 장점이다. 위에서 문법검사 위주로 설명했지만 문법 검사 또한 일정한 규칙에 의한 판단이다. 즉 이걸 확장하면 각 단체나 회사마다의 코드 스타일을 맞출 수 있다는 점이다.
- 위의 이유등을 조합하고 이리저리 다양한 관점에서 보면 생산성 향상, 프로젝트 품질 향상 등등으로 다양하게 말할 수 있을 것이다.
3. 대표적인 린터도구
- ESLint (JavaScript): ESLint는 JavaScript 및 JSX 코드에 적용되는 확장 가능한 린팅 도구입니다. 맞춤 설정이 가능한 규칙과 플러그인을 제공하여 사용자가 선호하는 스타일과 약속을 따르는 코드를 작성할 수 있습니다.
- Pylint (Python): Pylint는 Python 코드 품질을 향상시키기 위한 강력한 린팅 도구입니다. PEP 8 스타일 가이드를 지원하며, Python 코드를 가독성과 일관성 있게 유지하는 데 도움이 됩니다.
- RuboCop (Ruby): RuboCop은 Ruby 개발자에게 인기 있는 린팅 도구로, Ruby 스타일 가이드를 따르는 코드를 작성할 수 있도록 도와줍니다. 또한, 자동 수정 기능을 통해 쉽게 스타일 개선이 가능합니다.
- TSLint (TypeScript): TSLint는 TypeScript 코드를 린팅 해주는 도구입니다. 코드 규칙을 적용하여 개발자가 코드 품질과 일관성을 유지할 수 있게 도와줍니다. 최근 TypeScript 프로젝트에서는 ESLint를 이용하는 경우도 많습니다.
- Stylelint (CSS/SCSS): Stylelint는 CSS, SCSS, Less 등의 스타일시트를 검사하고 일관된 스타일을 적용하는 데 도움을 주는 린터입니다. 사용자 정의 규칙과 플러그인을 지원하며, 다양한 스타일 가이드에서도 사용이 가능합니다.
출처 : ai
린터도구는 그냥 이런게 있구나 정도
4. 요약
여러분들 vscode나 다른 에디터에서 빨간 줄 뜨거나 참조 못하는 값이나 의미 없는 코드들은 글씨 연해지면서 알려주는 거
걔 이름 린터에요. (혹은 린트)
도구 마다 차이는 있겠지만 일반적으로는 여러분들 코드를 수정하면 변화를 감지해서 위에 말한 3가지 동작이 반복적으로 작동한다고 합니다.
'CS > Terminology' 카테고리의 다른 글
IT용어 - 메모리 누수(memory leak) (0) | 2023.07.10 |
---|---|
IT용어 - 하드코딩&소프트코딩 (0) | 2023.07.08 |