오늘은 면접문제를 정리하는 시간을 가졌다.
대부분의 문제는 아는 문제이고 답 또한 알지만, 면접 때 이 문제를 자신의 언어로 얘기하는 것은 다른 문제이다.
여기서는 이번에 새로 알게 된 문제와 새삼 다시 곱씹어보게 된 개념을 정리하고자 한다.
CORS는 Cross Origin Resource Sharing의 준말이다.
추가 HTTP 헤더를 사용해서 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에게 알려주는 체제이다, 여기서 출처(Origin)란 Protocol, Host, Port를 합친 것을 의미한다.
방식에는 3가지 방식이 존재한다.
Simple Requst
- 서버에 API를 요청할 때, 서버는 Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에게 전달해서 브라우저는 이 값을 토대로 CORS 동작을 수행할 지 판단한다.
- 요청 메소드는 GET, HEAD, POST 중 하나여야 한다.
- Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width를 제외한 헤더는 사용할 수 없다.
- Content-Type 헤더를 사용할 경우, application/x-www-form-urlencoded, multipart/form-data, text/plain 만 허용된다.
Preflight Request
- 서버에 예비 요청을 보내서 안전한지 판단한 후, 본 요청을 보내는 방법이다.
- 예비 요청과 본 요청을 나누어서 전송하고, 예비 요청을 Preflight라 부른다. 이 요청을 보내기 위해 OPTIONS 메소드가 사용된다.
Credential Request
- 요청에 인증 관련 정보를 담을 수 있는 옵션인 credential 옵션을 사용해서 리소스를 요청한다.
- 이 인증정보가 포함되면 브라우저는 Access-Control-Allow-Origin만 확인하는 것이 아니라 더 빡빡한 검사 조건을 추가한다.
이 Cors는 전에 알았던 키워드였지만, 자세히는 이번에 새로 알게 되었다. 이렇게 면접준비를 하며 새로 알게되는 것은 정말 좋은 일이 아닐수가 없다.
이어서 RDBMS에서의 정규화를 다시 곱씹어 보게 되었다.
정규화는 테이블 간의 데이터 중복 저장 방지를 위해 하나의 테이블을 두개의 테이블로 분리시키는 것을 의미한다.
중복 저장을 방지함으로써, 무결성을 유지하고, DB의 저장 용량을 줄일 수 있다.
제1 정규화
- 테이블의 Column이 원자값(Atomic Value)을 갖도록 테이블을 분해한다.
제2 정규화
- '제1 정규화'를 진행한 테이블에서 기본키가 두 개 이상(복합 컬럼)인 경우, "완전 함수 종속"을 만족하도록 테이블을 분해한다.
- 완전 함수 종속은 기본키를 구성하는 부분집합이 다른 속성에 종속하지 않도록 하는 것이다.
즉, 기본키의 일부분이 다른 컬럼을 결정하는 일이 없어야한다.
제3 정규화
- '제2 정규화'를 진행한 테이블에서 "이행적 종속"을 없애는 것이다.
- 이행적 종속이란 A -> B, B -> C일 때, A->C가 성립되는 것, 즉, 기본키 외의 다른 Column이 그 외의 다른 Column을 결정할 수 없다.
BCNF 정규화
- '제3 정규화'를 진행한 테이블에서 모든 결정자가 후보키가 되도록 테이블을 분해한다.
마지막으로 Access Token과 Refresh Token의 차이를 알게 되었다. 이전에는 애매하게 넘어간 개념이지만, 이번에 공부하면서 개념을 확실하게 하였다. Access Token과 Refresh Token은 다음과 같은 과정을 거치며 사용된다.
- 로그인 인증에 성공한 클라이언트는 Refresh Token, Access Token을 서버로 받고, 로컬에 저장한다.
- 클라이언트는 헤더에 Access Token을 넣고(Authorization) API 통신을 한다.
- 만약 Access Token이 만료 되었다면, 서버가 해당 클라이언트를 거절한다. 거절한 클라이언트는 Access Token 대신 Refresh Token을 넣어서 API를 재요청한다.
- Refresh Token으로 사용자의 권한을 확인했으면 새로운 Access Token을 발급한다.
- Refresh Token이 만료되었다면 클라이언트는 재로그인을 해야한다.
이외의 여러 개념을 정리했지만, 기억에 남는 것은 위의 것들이다. 내일도 이어서 면접 문제를 정리해보자.
'부트캠프 일지' 카테고리의 다른 글
부트캠프 68일차 후기 (1) | 2024.03.06 |
---|---|
부트캠프 67일차 후기 (0) | 2024.03.05 |
부트캠피 64일차 후기 (1) | 2024.02.28 |
부트캠프 63일차 후기 (1) | 2024.02.27 |
부트캠프 62일차 일지 (0) | 2024.02.26 |