타입스크립트를 사용한 웹 프로젝트1
타입스크립트를 사용한 Next.js 실습준비
앞전에 말했듯이 이제 타입스크립트를 사용하여 시중 웹 페이지를 모방해보는 리액트 프로젝트를 진행하겠다.
참고로 리액트는 이전 포스트에서 말했듯이 웹 페이지 개발을 쉽게 해주는 도구라고 보면 된다.
이 책을 다소 참조했습니다.
리액트 프로젝트 생성
- 노드 JS를 다운로드한다.
- 컴퓨터에 노드 JS가 설치되어 이제 npm 및 npx 사용이 가능해졌다.
- npm 및 npx는 파이썬의 pip와 같은 패키지 설치 관리자이다.
- 콘솔창을 열고
npx create-react-app 프로젝트 이름 --template typescript
으로 리액트 프로젝트를 생성한다.- 뭔가 깔라는 페이지가 나오면 전부 y 누르고 엔터 친다.
--template typescript
를 붙여줬기 때문에 이 리액트 프로젝트는 타입스크립트 사용을 전제로 설정된다.
- 리액트 프로젝트 폴더가 생성되었다. 해당 폴더 경로로 콘솔창을 켠 후
npm start
를 한다.- 콘솔창에 뭔가 좌라락 뜨고 주소가
localhost:3000
인 웹페이지가 생성된다. npm start
는 본인 컴퓨터를 노드 JS 서버로 하여 리액트 프로젝트를 실행한 것이다.
- 콘솔창에 뭔가 좌라락 뜨고 주소가
localhost:3000
페이지는 리액트에서 기본으로 제공해주는 메인 페이지이다. 우리는 앞으로 이것을 수정하는 식으로 개발을 진행할 것이다.
프로젝트 설정
- 프로젝트 폴더에 들어가면 아래와 같은 디렉토리가 나온다.
- .git 및 readme.md는 본인이 이 프로젝트를 깃허브 레포지토리로 설정해놓아 생긴 것이므로, 없어도 무방하다.
개발 보조모듈 설치
난잡한 코드 형식을 통일화해주는 Prettier을 설치해보자.
- 일단 VSCode에서 Prettier 확장 프로그램을 설치한다.
- 그 다음 프로젝트 디렉토리에서 콘솔창을 열고,
npm i prettier -D -E
으로 프로젝트에 prettier 모듈을 설치한다.- -D 옵션은 devDependencies 전용을 뜻한다.
package.json
파일에는dependencies
와devDependencies
라는 JSON 키가 있는데, 이들은 파이썬의 requirements.txt 같이 이 프로젝트를 실행하기 위해 필요한 모듈 정보들을 담고 있다.- dependencies는 실제 배포에 필요한, devDependencies는 개발 단계에만 필요한 모듈을 놓는다.
- 모듈을 설치하면 dependencies에 들어가는데,
-D
옵션을 주면 대신 devDependencies에 들어간다.
- -E 옵션은 버전 고정을 뜻한다. 이렇게 하면 dependencies에 이 버전 이하도 이상도 아닌 정확한 버전으로 설치되도록 설정된다.
- 참고로 dependencies를 보면 보통은 ^(버전명) 이렇게 되어 있는데, 이는 이 버전 이상으로 설치하라는 의미이다.
- -D 옵션은 devDependencies 전용을 뜻한다.
create-react-app
으로 생성한 리액트 프로젝트에는 ESLint1라는 모듈이 기본적으로 깔려 있다.이제 ESLint 설정을 해줘야 한다. 프로젝트 폴더에서
npx eslint --init
을 실행시키고, 아래와 같이 선택한다.? How would you like to use ESLint?
To check syntax, find problems, and enforce code style
? What type of modules does your project use?
JavaScript modules (import/export)
? Which framework does your project use?
React
? Does your project use TypeScript?
Yes
? Where does your code run?
Browser
? How would you like to define a style for your project?
Use a popular style guide
? Which style guide do you want to follow?
Airbnb: https://github.com/airbnb/javascript
(이거는 취향 차이긴 한데, 보통 Airbnb를 가장 많이 사용한다.)
? What format do you want your config file to be in?
JSON
? Would you like to install them now with npm?
Yes설정이 끝나면 폴더에
.eslintrc.json
이 생길 것이다. 이 파일이 ESLint 설정을 담고 있는 곳인데, 아래와 같이 바꿔준다.
대충 ESLint가 체크하는 언어를 타입스크립트로 하고, prettier를 연동한다는 말이다.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
```json { "env": { "browser": true, "es2021": true, "node": true }, "extends": [ "plugin:react/recommended", "airbnb", "plugin:prettier/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json", "ecmaFeatures": { "jsx": true }, "ecmaVersion": "latest", "sourceType": "module" }, "plugins": [ "react", "@typescript-eslint" ], "rules": { "react/react-in-jsx-scope": 0, "react/prefer-stateless-function": 0, "react/jsx-filename-extension": 0, "react/jsx-one-expression-per-line": 0, "no-nested-ternary": 0 }, "settings": { "react": { "version": "detect" } } } ```
이제 prettier 설정을 해줘야 한다.
프로젝트 폴더에.prettierrc
파일을 생성한다. 확장자 없이!파일을 메모장으로 열어 다음과 같이 입력한다.
1 2 3 4 5 6 7 8 9
{ "singleQuote": true, //작은따옴표로도 문자열 표기 가능 "semi": true, //코드 뒤에 세미콜론 붙이기 여부 "useTabs": false, //탭키로 들여쓰기. ESLint와 같이 사용시 무조건 false로 "tabWidth": 4, //탭 길이(칸 단위) "trailingComma": "all", //배렬이나 키의 맨 뒤에 쉼표를 붙일것인지 "printWidth": 160, //한 줄 길이 제한 "endOfLine": "auto" //줄바꿈 방식(CRLF 또는 LF)-운영체제에 따라 달라요 }
이 파일은 prettier 적용 규칙을 나타낸다. 위 외에도 수많은 규칙들이 있는데, 여기서는 타입스크립트 문법에 필요한 기본적인 규칙만 설정해놓기로 한다.
위 prettier 설정을 실제 코드에 적용시키려면 VSCode 설정을 뜯어야한다. VSCode를 열어
Ctrl+,
으로 설정창에 들어간다.- 설정창에 들어가면 오른쪽 위 아이콘 모음에
이런 아이콘이 있을 것이다.
이것을 클릭하면 설정값들이 json 형식으로 저장된settings.json
파일이 열어진다. 맨 아래에 다음과 같은 항목을 추가한다.
1 2 3 4 5 6 7 8 9 10 11
... "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, "eslint.alwaysShowStatus": true, "[javascript]": { "editor.formatOnSave": false }, "editor.codeActionsOnSave": { "source.fixAll.eslint": true } }
대충 저장 시 위 prettier 설정에 맞게 형식화해주라는 의미이다.
그리고 prettier 설정은 타입스크립트 대상이므로 자바스크립트는 prettier 비활성화해준다.
- 설정창에 들어가면 오른쪽 위 아이콘 모음에
- 이제 프로젝트 폴더 내 타입스크립트 파일 하나를 열어보자.
컴파일 환경설정
tsconfig.json을 이렇게 수정해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
{ "compilerOptions": { "target": "es5", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": false, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx" }, "include": ["src/**/*"] }
- 해당 파일은 타입스크립트 컴파일 설정이다.
include:[]
는 컴파일할 파일을 설정한다. 여기서는 src 내의 모든 파일을 컴파일하도록 했다. - 마찬가지로 include에서 컴파일 제외할 파일을 설정해놓는
exclude:[]
도 있다. 따로 명시해놓지 않으면exclude:["node_modules", "bower_components", "jspm_packages"]
으로 기본 설정된다. "strict": false
는 형선언 강제 여부이다. 타입스크립트는 형선언을 하는 언어이지만 자바스크립트 기반이라 사실 하지 않아도 된다. 만약true
이면 무조건 변수에 형선언을 해야 한다.
- 해당 파일은 타입스크립트 컴파일 설정이다.
NextJS 설치
만약 본인이 Node.js 대신 Next.js를 사용하고 싶다면…
- 프로젝트를 새로 생성한다.
- 이 때
npx create-next-app 프로젝트명 --typescript
이렇게 생성하자.
- 이 때
- 프로젝트가 생성되었으면 디렉토리로 이동해
npm run dev
으로 실행한다. - 만약 본인 깃 레포지토리로 바꾸고 싶으면…(깃 레포지토리 생성 가정하에)
- .git과 readme.md를 본인 레포지토리의 것으로 덮어씌운다.
git add .
으로 변경사항을 전부 추가한다.git commit
과git push
로 레포지토리 반영한다.
- ESLint 및 prettier 설정은 위 create-react-app 때와 똑같이 해주자.
- tsconfig.json도 strict 옵션 빼고는 건들지는 말자.
앞으로 프로젝트는 next.js 환경을 전제로 개발해보겠다.
다음 시간에 계속…
자바스크립트 코드 문법을 체크해주는 확장 기능이다. ↩︎