-
Notifications
You must be signed in to change notification settings - Fork 44
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주차 과제 #113
전남대 FE_강호정 6주차 과제 #113
Changes from 6 commits
0cbcc15
c58c782
5ac9330
95a609f
a177a32
918c544
5300672
03d65f0
febfaef
5600465
6491ec4
690e92e
57ed942
0fc19b3
13252cf
413aba1
e1954aa
49820ef
9a1274a
7296417
102106f
a7d59bb
d2d4b81
ba289a1
c99bdec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,43 @@ | ||
# react-deploy | ||
# react-deploy | ||
|
||
### 질문의 답변 작성 | ||
|
||
- 질문 1. SPA 페이지를 정적 배포를 하려고 할 때 Vercel을 사용하지 않고 한다면 어떻게 할 수 있을까요? | ||
|
||
> **SPA** : 단일 페이지 애플리케이션, | ||
> 서버에서 필요한 데이터만 비동기로 받아와서 동적으로 현재 화면에 다시 렌더링 하는 방식 | ||
|
||
> **정적 배포** : 미리 생성된 파일을 서버에 업로드하여 배포하는 방식 | ||
|
||
github page사용한다. | ||
|
||
- 질문 2. CSRF나 XSS 공격을 막는 방법은 무엇일까요? | ||
|
||
> **CSRF** : 사이트간 요청 위조(웹 보안 취약점) | ||
|
||
1. Referer check : HTTP 요청 헤더 정보에서 Referrer정보 확인 | ||
2. CAPTCHA 도입 | ||
3. CSRF 토큰 사용 : 사용자 세션에 임의에 값을 저장하여 모든 요청마다 해당 값을 포함하여 전송하도록 함 | ||
|
||
> **XSS** : 웹 페이지에 악성 스크립트 삽입 | ||
|
||
1. 입력 값 제한 : 사용자의 입력값을 제한하여 스크립트를 삽입하지 못하도록 함 | ||
2. 입력 값 치환 : 위험한 문자 입력 시 필터링 | ||
3. 직접출력 금지 | ||
|
||
- 질문 3. 브라우저 렌더링 원리에대해 설명해주세요. | ||
|
||
1. 렌더링 엔진 : 웹 페이지의 요소들을 파싱 | ||
2. 렌더 트리 : 렌더링 엔진이 파싱한 웹 페이지 요소들을 이용하여 구성한 트리 구조 (_이 구조는 브라우저가 화면에 표시할 요소들을 정의_) | ||
3. 레이아웃 : 렌더 트리를 이용하여 브라우저의 화면에 요소들을 배치하는 과정 | ||
4. 페인팅 : 레이아웃을 이용하여 계산된 위치에 요소들을 표시하는 과정 | ||
|
||
=> 로더가 서버로부터 전달받은 리소스 스트림을 읽어오고 파서가 DOM Tree와 CSSOM Tree를 생성한다. 여기서 렌더링에 필요한 노드만 선택하여 페이지를 렌더링한다. | ||
|
||
**[api명세](https://alive-tail-1fa.notion.site/API-778e7fee2b6c45f4bf19c06ac1e15461?pvs=4)** | ||
|
||
**<백엔드 분이 주신 url>** | ||
|
||
- 아래 endpoint로 접속해볼 수 있습니다! | ||
- 52.78.81.37:8080 | ||
- ex: http://52.78.81.37:8080/api/products?sort=name,asc&category_id=1 |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,15 +7,15 @@ import { getProductsPath } from './useGetProducts'; | |
export const productsMockHandler = [ | ||
rest.get( | ||
getProductsPath({ | ||
categoryId: '2920', | ||
category_id: '2920', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아마 서버 인터페이스로 snake_case를 채택한 것 같은데, 프론트엔드에서 코드 case를 섞어 사용하면 차후 의도를 알아보기 힘들 수도 있고, 가독성을 떨어뜨릴 수도 있습니다. camelCase와 snake_case를 섞어 쓰기 보다는, 카멜케이스로 작성하였으니 서버에서 받는 데이터들도 모두 api interceptor를 통해 카멜케이스로 바꿔서 사용할 수도 있습니다. 그러면 서버 필드가 어떤 case이든지 fe입장에선 카멜케이스로 통일시킬 수 있습니다. 직접 구현할 수도 있고, 이러한 유틸은 라이브러리의 도움을 받을 수도 있습니다. |
||
}), | ||
(_, res, ctx) => { | ||
return res(ctx.json(PRODUCTS_MOCK_DATA)); | ||
}, | ||
), | ||
rest.get( | ||
getProductsPath({ | ||
categoryId: '2930', | ||
category_id: '2930', | ||
}), | ||
(_, res, ctx) => { | ||
return res(ctx.json(PRODUCTS_MOCK_DATA)); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기로 접속하면 에러가 뜨는데요. 프론트 배포된 것 맞을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아직 에러 수정하고 있습니다..!