Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

강원대 FE_윤채연 6주차 과제 Step2, Step4 #120

Open
wants to merge 10 commits into
base: ychy61
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'plugin:@typescript-eslint/recommended',
'airbnb/hooks',
'airbnb-typescript',
'prettier',
'plugin:storybook/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
project: './tsconfig.json',
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 'latest',
sourceType: 'module',
},
plugins: [
'react',
'@typescript-eslint',
'react-hooks',
'json-format',
'simple-import-sort',
'@emotion',
'prettier',
],
rules: {
'react/react-in-jsx-scope': 'off',
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
'@typescript-eslint/consistent-type-imports': 'warn',
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
},
],
'import/extensions': ['off'],
'import/no-extraneous-dependencies': ['off'],
'react/jsx-filename-extension': [
'warn',
{
extensions: ['.tsx', '.js', '.jsx'],
},
],
'@typescript-eslint/no-use-before-define': ['off'],
},
ignorePatterns: ['**/build/**/*', '.eslintrc.js', 'craco.config.js'],
settings: {
'import/resolver': {
typescript: {},
},
},
};
25 changes: 25 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

.yaml
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/.vscode
/node_modules

8 changes: 8 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"singleQuote": true,
"semi": true,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 100,
"arrowParens": "always"
}
36 changes: 36 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import type { StorybookConfig } from '@storybook/react-webpack5';
import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin';
import path from 'path';

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/preset-create-react-app',
'@storybook/addon-onboarding',
'@storybook/addon-interactions',
],
webpackFinal: async (config) => {
config.resolve?.plugins?.push(
new TsconfigPathsPlugin({
configFile: path.resolve(__dirname, '../tsconfig.json'),
}),
);

return config;
},
framework: {
name: '@storybook/react-webpack5',
options: {
builder: {
useSWC: true,
},
},
},
docs: {
autodocs: 'tag',
},
staticDirs: ['../public'],
};
export default config;
16 changes: 16 additions & 0 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { Preview } from '@storybook/react';
import '@/styles';

const preview: Preview = {
parameters: {
actions: { argTypesRegex: '^on[A-Z].*' },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
};

export default preview;
39 changes: 38 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,38 @@
# react-deploy
# 카카오 테크 캠퍼스 - 프론트엔드 카카오 선물하기 편

### 실행 방법
```
git clone https://github.com/kakao-tech-campus-2nd-step2/react-deploy week6
git checkout ychy61
cd week6
npm install
npm run start
```
## step0 - 기본 코드 준비

[🔗 link](https://edu.nextstep.camp/s/hazAC9xa/ls/Ipv4p6na)

## 1단계 - API 명세 협의 & 반영

- [X] 팀 내에 배포 될 API가 여러개 일 경우 상단 네비게이션 바에서 선택 가능하게 함
> API를 통일하여 구현하지 않음

## 2단계 - 배포하기

- [X] 본인이 원하는 방식으로 배포
- [ ] 서버 API가 의도대로 잘 동작하는지 확인하고, 문제가 있다면 해결


## 4단계 - 질문의 답변을 README에 작성
### 6주차 질문
- 질문 1. SPA 페이지를 정적 배포를 하려고 할 때 Vercel을 사용하지 않고 한다면 어떻게 할 수 있을까요?
> SPA 페이지를 Vercel을 사용하지 않고 정적 배포하려면, GitHub Pages, Netlify, Amazon S3와 같은 다른 클라우드 호스팅 서비스를 이용할 수 있습니다. 이는 대부분 정적 파일 호스팅을 지원하며, 설정도 간편하다는 장점이 있습니다.
- 질문 2. CSRF나 XSS 공격을 막는 방법은 무엇일까요?
> CSRF 공격을 방지하기 위해 서버 측에서는 CSRF 토큰을 활용하고, XSS 공격을 방지하기 위해서는 사용자 입력을 적절히 이스케이핑하고, Content Security Policy (CSP)를 설정하여 스크립트 실행을 제한할 수 있습니다.
- 질문 3. 브라우저 렌더링 원리에대해 설명해주세요.
> 1. 브라우저가 서버로부터 받은 HTML 문서를 파싱하여 DOM(문서 객체 모델) 트리를 구성합니다.
2. CSS 코드를 파싱하여 CSSOM(CSS 객체 모델) 트리를 구성합니다.
3. DOM과 CSSOM을 결합하여 렌더 트리를 형성합니다. 이 트리는 실제로 화면에 표시되는 요소들만 포함합니다.
4. 렌더 트리의 각 노드가 화면의 정확한 위치와 크기를 계산합니다.
5. 계산된 레이아웃에 따라 요소들을 화면에 그리는 과정입니다.
이런 원리를 통해 사용자에게 최종적으로 보여지는 페이지가 렌더링됩니다.
9 changes: 9 additions & 0 deletions craco.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const path = require('path');

module.exports = {
webpack: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
};
Loading