이 글은 인프런 제로초님의 '[리뉴얼] React로 NodeBird SNS 만들기' 를 바탕으로 정리한 내용입니다.
새로 고침이나 주소 검색, 검색엔진에서 들어왔을 때는 바로 데이터가 보이고, 링크같은 걸 눌렀을 때는 잠깐 로딩창이 보인다. 점점 빨라지는 이유는 캐싱을 사용 했기 때문이다.
Q. 검색 엔진에 노출이될까?
→ 구글은 가능하다. 넥스트를 쓰면 쉽게 검색 엔진에 노출될 수 있다.
npm init
npm i next@9
{
"name": "react-nodebird-front",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "next"
},
"author": "yurilee",
"license": "ISC",
"dependencies": {
"next": "^9.5.5"
}
}
npm run dev // run next
> react-nodebird-front@1.0.0 dev
> next
next는 pages 폴더를 인식해서 이 안의 파일들을 개별적인 페이지 컴포넌트로 만들어준다. (코드 스플리팅) 폴더 이름은 무조건 pages이여야 한다.
pages 안에 페이지들을 만들 때 가끔씩 바로 반영 안되는 경우가 있다. 이럴 경우에는 다시 키면 된다.
run dev run
리액트를 사용할 때는 리액트 라우터, 서버 사이드 렌더링도 설정해줘야 하는데 , 넥스트는 페이지는 알아서 라우터까지 해준다. 프론트 서버가 있기 때문이다.
pages> folder 도 가능하다.
npm i prop-types
prop 로 넘기는 애들은 이것을 통해 한번 검사해주면 된다. 타입스크립트라면 prop types가 필요 없겠지만 자바스크립트로 하고 있기 때문이다.
import React from 'react'
import PropTypes from 'prop-types'
const AppLayout = ({ children }) => {
return (
<div>
<div>
공통메뉴
</div>
{children}
</div>
)
}
AppLayout.propTypes = {
children: PropTypes.node.isRequired,
}
export default AppLayout
children 은 node 라는 타입이다. react의 node이다. 화면에 그릴 수 있는 모든 것들이 노드다. return 안에 들어갈 수 있는 것. (node.js의 node가 아님)
npm i eslint -D
npm i eslint-plugin-import -D
npm i eslint-plugin-react -D
npm i eslint-plugin-react-hooks -D
{
"parserOptions": {
"ecmaVersion": 2020, // 버전
"sourceType": "module", // script 버전이 아닌 module 버전
"ecmaFeatures": {
"jsx": true
}
},
"env": {
"browser": true,
"node": true,
"es6": true
},
"extends": [ // 규칙, 엄격한 규칙은 아님 지금 해놓은 것은, 추후 바꿀 예정
"eslint:recommended",
"plugin:react/recommended"
],
"plugins": [
"import",
"react-hooks"
],
"rules": {}
}
Q. why Next.js ?
→ 서버 사이드 렌더링을 하려면 리액트랑 노드js 둘다 필요하다. 스프링 장고 등등도 대체 가능. 중요한 것은 서버가 있어야 가능하다는 점이다.
Q. material ui / ant.design 차이?
→ 차이가 없다. 선호의 차이
Q. cors 설정
→ 프론트 서버, 백엔드 서버 도메인이 다르다. 포트만 다르긴 한데.. 포트만 달라도 cors 걸린다. 백엔드 서버에서 설정해줘야 한다. 프론트 서버에서는 쿠키 보내는 것 설정 필요.
→ 브라우저 - 프론트 서버 사이에는 cors 문제가 안일어나지만 프론트 서버 - 백엔드 서버 사이에 일어남
Q. 리액트?
→ 고객 경험이 중요, 웹앱같은 느낌이다. 검색엔진이 필요하면 넥스트 필요하고 아니면 안써도 됨.
Q. 몽고디비?
→ 85퍼센트 이상 sql 만 쓰는 게 나을 것 같다.
→ 모든 테이블은 관계들이 있다. 대부분의 서비스는 관계가 있다. 그러므로 sql 추천
→ 몽고디비를 사용하는 경우..? : 보통 로그를 쌓을 때 사용된다. 로그가 여러가지 형태가 있을 경우, 여러 케이스에 대처하기 위해서이다. 이런 경우에는 몽고디비를 사용하는 경우가 좋다.
Q. react? vue? 둘중에 무엇을?
→ 일단 1개에 집중하도록 하자. 수요가 많은 react
현재 회사에서 로그 정보들을 관리하기 위해 몽고디비를 사용하고 있는데 이유가 있었군. 🗯