-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
67 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,67 @@ | ||
# FE 카카오 선물하기 6주차 과제: 배포 & 협업 | ||
# FE 카카오 선물하기 6주차 과제: 배포 & 협업 | ||
|
||
## 1단계 구현 사항 | ||
|
||
- [x] 회원 API 구현 (회원가입, 로그인) | ||
- [x] 카테고리 API, 상품 API, 상품 옵션 API 리팩토링 (에러 처리 블록 추가) | ||
- [x] 상품 옵션 기능 추가 | ||
- [x] 상품 상세 페이지에서 옵션도 선택할 수 있도록 UI 추가 구현 | ||
- [x] 위시 기능 구현 | ||
- [x] 위시 GET, POST, DELETE api 구현 | ||
DELETE는 비동기 함수는 구현했지만, 요청이 wishId(위시 고유 번호)로 가기 때문에 | ||
위시 페이지에서는 요청을 보내고, 상품 상세 페이지에서는 요청을 보내지 않습니다 | ||
(상품 상세 페이지에서 삭제 요청을 보내기 위해서는 productId가 필요하다고 생각했습니다). | ||
추후 DTO 수정해야 할 것 같습니다. | ||
- [ ] 주문 API 구현 | ||
|
||
비동기 통신을 모두 훅으로 만들고 데이터가 필요한 컴포넌트에서 import하여 사용하도록 했습니다. | ||
|
||
## 2단계 구현 사항 | ||
|
||
배포 주소: | ||
http://kakao-gift-deploy.s3-website-ap-southeast-2.amazonaws.com/ | ||
우상단 API 선택을 통해 요청 호스트를 바꿉니다. | ||
(개발자 도구 콘솔에서 base url 확인 가능합니다. api 작동하는 것 확인했지만 네트워크 에러가 자주 뜹니다.) | ||
|
||
## 3단계 질의응답 | ||
|
||
### 질문 1. | ||
|
||
SPA 페이지를 정적 배포를 하려고 할 때 Vercel을 사용하지 않고 한다면 어떻게 할 수 있을까요? | ||
|
||
--- | ||
|
||
정적 배포 호스팅 서비스로는 Vercel을 제외하고도 Netlify, GitHub Pages, AWS S3, EC2 + Nginx 등이 있습니다. | ||
이번 과제에서는 Vercel과 S3를 사용해보았는데, 그 중 S3에 대해 간략히 설명하겠습니다. | ||
|
||
정적 데이터를 담는 버킷인 S3 버킷을 만들고, 빌드한 프로젝트를 이 버킷에 업로드합니다. | ||
CloudFront을 함께 사용하면 CDN으로 사용자와 가까운 서버에서 더 빠른 페이지 응답이 가능하고, 도메인 커스텀이나 HTTPS로 변환도 가능합니다. | ||
|
||
### 질문 2. | ||
|
||
CSRF나 XSS 공격을 막는 방법은 무엇일까요? | ||
|
||
--- | ||
|
||
**CSRF** (Cross-Site Request Forgery, 사이트 간 요청 위조): 사용자가 의도와 무관한 요청을 서버에 보내게 하거나 상태 변경(수정, 삭제)하게 하는 공격 | ||
|
||
방어 방법 | ||
|
||
1. GET 요청과 POST/PUT 요청을 구분합니다. GET은 읽기 전용으로 사용하고, form 태그로 값을 받을 경우 POST를 이용합니다. | ||
2. 요청 전송 시 (서버에서 발급해준) 토큰을 함께 전송합니다. 서버에서는 이 토큰으로 사용자를 인증 후 요청을 처리하도록 합니다. | ||
3. 서버에서 요청의 Referer 헤더를 검증하여 요청이 올바른 출처에서 왔는지 확인합니다. 하지만 이 정보는 조작이 가능하여 다른 방법과 함께 보조적인 수단으로 사용하는 것이 좋습니다. | ||
4. CAPCHA와 같은 추가적인 인증 수단을 사용합니다. 해당 인증을 통과하지 못하면 요청 자체를 막습니다. | ||
|
||
**XSS** (Cross-Site Scripting, 사이트 간 스크립팅): 다른 사용자의 브라우저에 악의적인 스크립트를 삽입하여 실행되게 만드는 공격 | ||
|
||
방어 방법 | ||
|
||
1. XSS는 사용자의 입력 값(파라미터)에서부터 발생하므로, 입력 값을 인코딩하여 해당 값이 읽히지 않도록 합니다. | ||
특수 문자나 기호를 HTML Entity로 변환하여 전송하는 방법이 있습니다. 이렇게 하면 HTML 태그가 변환되어서 읽히지 않습니다. | ||
2. 출력 값을 인코딩하는 방법도 있습니다. 출력 시 사용자 입력을 HTML, JavaScript, URL 등의 컨텍스트에 맞게 인코딩하여 악성 스크립트가 실행되지 않도록 합니다. | ||
|
||
### 질문 3. | ||
|
||
브라우저 렌더링 원리에 대해 설명해주세요. | ||
|
||
--- |