데이터를 주고받기 위한 아키텍처
URI로 자원을 명시하고, HTTP METHOD로 CRUD 연산을 한다.
그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘.
User logs in and then Server stores seesion data in memory. Server sends cookie to the client. Client sends auth request and cookie and then server compares session-id with stored data. Server sends response.
유저가 로그인을 하면 서버는 클라이언트에게 jwt를 발급해준다. 클라이언트는 jtw를 로컬 스토리지에 저장한다. 클라이언트는 헤더에 jwt를 넣어서 인증 요청을 보낸다. 서버는 해당 유저의 jwt가 맞는지 검증한다. 맞다면 리스판스 한다.
To sum up, for session, It it better for security because all authentication information are saved on the server. However, server doesn't keep track of the token, while client have all quthentication information. It enhances the risk of the security. 또한 페이로드가 암호화되지 않아 민감한 정보는 실릴 수 없다.
대부분의 웹 어플리케이션의 서버 확장 방식은 scale-out이다. 이 경우 정합성의 문제가 발생할 수 있다. 토큰 방식을 사용할 경우 세션 불일치의 위험을 줄일 수 있다. HTTP의 비상태성(stateless)를 그대로 활용할 수 있다는 측면에서 확장성이 좋다.
With security, access tokens have a short expiry time, so users have to log in newly every time the expiring time is closed and should have access tokens.
Token for access token again
Client requests to the server for log-in.
Server issues access and refresh tokens to the client, while stored refresh on the server.
Client saved two tokens on the local storage.
Client requests with header adding access token to the server every time.
If the access token has expired, the server responds to the state code that it has expired to the client.
Client sends refresh token for access token.
Server then validates the refresh token, and if no issue, issues a new access token.
Client map new access token origin access token.
Open Authorization
다른 웹사이트에서 패스워드를 주지 않고 웹사이트 또는 어플리케이션이 유저 자신의 정보에 access할 수 있는 권한을 허용하는 것을 말한다. 제 3의 어플리케이션 또는 웹사이트가 유저 자신의 계정에 대한 정보를 공유할 수 있도록 하는 것이다. credential 없이 서버 자원에 third-party가 access할 수 있는 권한을 주는 것을 명시한다. OAuth는 authrorization server가 제 3의 클라이언트에게 엑세스 토큰을 발급해준다. 그러면 제 3자는 액세스 토큰을 사용해서 보호된 자원에 엑세스할 수 있다.
200 OK
요청이 성공적으로 처리되었음을 나타낸다. It refers to that the request is carried out successfully. GET: resource를 불러와서 메시지 바디에 전송된다. PUT/POST: 수행 결과에 대한 리소스가 메시지 바디에 전송된다.
201 Created
요청이 성공적이었고 그 결과로 새로운 리소스가 생성되었을 때의 응답코드. 보통 POST / PUT 요청 이후에 따라온다.
400 Bad Request
This response means that the server can't understand the request for wrong semantics.
*401 Unauthorized
비인증을 의미한다.
403 Forbidden
클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있다.
404 Not Found
The server cannot found the resource requested. It means that it's unknown URL in browser.
500 Internal Server Error
It means that the Server doesn't know how to handle that.
502 Bad Gateway
CI and CD stand for continuous integration and continuous delivery/continuous deployment. Automated build-and-test steps triggered by CI ensure that code changes being merged into the repository are reliable.
어떤 작업을 위해 실행할 수 있는 파일
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
두 개 이상의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)를 동시에 처리하는 것 (병렬처리)
각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
CPU는 한번에 하나의 프로세스만 실행 가능하다. CPU에서 여러 프로세스를 돌아가면서 작업처리하는 과정을 의미한다. 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업
하나의 프로세스에서 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것
_ 불필요한 컬럼을 불러오지 않고 필요한 열만 갖고 온다. Like를 사용 시 와일드카드 문자열(%)을 string 앞 부분에 배치하지 않는 것이 좋다. 중복값을 제거하는 연산을 최대한 지양해야 한다. 중복 값을 제거하는 연산은 많은 시간을 필요로 한다. 대안으로 distinct 보다는 exists를 들 수 있다. 같은 내용의 조건이라면 GROUP BY 연산 시 HAVING보다는 WHERE 절을 이용하는 것이 좋다. 쿼리 실행 순서가 WHERE 절이 HAVING절보다 먼저 실행되서 먼저 WHERE 절로 데이터를 잘게 짤라서 효율적인 연산이 가능하다. groupby는 뭉탱이로 조건을 거는 거기 때문에 효율적이지 않다. 3개 이상의 테이블을 이너 조인 할 때는 크기가 가장 큰 테이블을 프롬 절에 배치하고 이너 조인 절에는 남은 테이블을 작은 순서대로 배치하는 것이 좋다.
트랜잭션 사용 최소화
배치 처리
프로시저 및 함수 활용
데이터 캐싱
유지보수성을 높이는 데 큰 도움이 된다.