From 1e2abaa5aef493cd6ec7759d492e325e7acd8502 Mon Sep 17 00:00:00 2001 From: jonathan Date: Sun, 28 Jan 2024 03:21:39 +0000 Subject: [PATCH] =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\204\261\354\244\221)HTTP\353\236\200?.md" | 146 ++++++++++++++++++ ...0\354\235\270\352\260\200\354\232\224?.md" | 2 + ...0\355\225\234 \352\263\240\354\260\260.md" | 134 ++++++++++++++++ 3 files changed, 282 insertions(+) create mode 100644 "doc/(\354\236\221\354\204\261\354\244\221)HTTP\353\236\200?.md" create mode 100644 "doc/\354\230\244\353\235\274\355\201\264 \354\213\234\355\200\200\354\212\244 Cycle\352\263\274 Cache\354\227\220 \353\214\200\355\225\234 \352\263\240\354\260\260.md" diff --git "a/doc/(\354\236\221\354\204\261\354\244\221)HTTP\353\236\200?.md" "b/doc/(\354\236\221\354\204\261\354\244\221)HTTP\353\236\200?.md" new file mode 100644 index 0000000..ebcde62 --- /dev/null +++ "b/doc/(\354\236\221\354\204\261\354\244\221)HTTP\353\236\200?.md" @@ -0,0 +1,146 @@ +## **HTTP(Hyper-Text Transfer Protocol)란?** + +1. 클라이언트와 서버 간의 통신을 위한 규칙을 정의 +2. HTML , 이미지, 동영상 등의 하이퍼미디어 문서를 전송하고, 웹 브라우저와 웹 서버 간의 상호작용을 지원 + + + +## **HTTP의 동작방식** + +- Stateless(무상태성) + + 1. 각 요청은 서버에 저장된 상태 정보를 사용하지 않고 독립적으로 처리된다. + 2. 각 요청은 이전 요청과 관련이 없으며 서버는 클라이언트의 상태를 유지하지 않습니다. + + + +>> **무상태성을 지키지 않은 경우(서버 사이드 렌더링(SSR)을 통해 구현)** + +사용자 컴퓨터 ←→ 주문 API서버(서버) + +API 서버 : 세션 체크 및 로그인 등 체크가 필요하므로 순수한 무상태성이라고 보긴 힘듬? + +>> **무상태성을 엄격하게 지킨 경우(클라이언트 사이드 렌더링(CSR)을 통해 구현)** + +사용자 컴퓨터 ←→ 프론트서버(서버) ←→ 주문 API서버(서버) + +프론트 서버 : 세션 체크 및 로그인 관리 + +API 서버 : 프론트 서버를 통해 세션 체크 및 로그인 등 체크가 끝났으므로 순수한 API 요청만 검증하면 됨. + + + + + +[https://sanghoo.tistory.com/54](https://sanghoo.tistory.com/54) + + + +**1. 장점** + +>> 확장성 + +독립적이기 때문에 서버는 각 요청을 개별적으로 처리 가능 + +>> 간단한 구현 및 유지보수 + +서버가 클라이언트의 상태를 유지하지 않기 때문에 서버 측에서의 복잡한 세션 관리가 필요하지않음 + + + +**2.단점** + +>> 상태유지의 부재 + +각각의 요청이 독립적으로 처리되기 때문에 클라이언트의 상태를 서버가 기억하지 않으므로 일부 불편할수 있음 + +>> 세션관리의 어려움 + +특정 작업의 진행 상태를 유지하거나 사용자 세션을 효과적으로 관리하기 위해서는 클라이언트와 서버 간의 추가적인 처리가 필요 + + + +- Request-Response + + 1. 클라이언트는 서버에게 요청을 보내고, 서버는 이에 대한 응답을 반환한다. + + + +## 메서드 + +>> GET + + 1. 특정한 리소스를 가져오도록 요청하며 데이터를 가져올때만 사용해야한다. + +```java +GET /index.html HTTP/1.1 +Host: www.google.com +``` + + + +>> POST + + 1. 서버로 데이터를 전송하며 유형은 Content-Type 헤더로 나타난다. + +```java +POST /submit HTTP/1.1 +Host: www.google.com +Content-Type: application/x-www-form-urlencoded + +username=seungbok&password=1234 +``` + + + +OPTIONS / PUT / DELETE / PATCH + +``` +url : www.google.com/user +GET(조회) : 유저를 가져온다. +DELETE(삭제) : 유저를 지운다. +PATCH(수정) : 유저를 수정한다. +PUT(덮어쓰기) : 유저를 덮어쓴다. +``` + +## HTTP응답코드 + +# [수신 성공(200)](https://developer.mozilla.org/ko/docs/Web/HTTP/Status) + +### 1. 200 OK + +- 정상적으로 수행되었을때 + +### 2. 301 Moved Permanently + +- 해당 URI이 다른 주소로 바뀌었을때 + +```java +HTTP/1.1 301 Moved Permanently +Location: http://www.example.org/index.asp +``` + +### 3. 400 Bad Request + +- 해당 요청이 잘못된 요청일때 보내는 코드. +- 주로 요청에 포함된 input 값들이 잘못된 값들로 보내졌을때 + +### 4. 401 Unauthorized + +- 유저가 해당 요청을 진행 할때 먼저 로그인을 하거나 회원 가입을 하는등 사전권한이 필요할 때 + +### 5. 403 Forbidden + +- 유저가 해당 요청에 대한 권한이 없음 +- 예를 들어 권한이 존재하는 유저만 볼 수 있는 데이터를 요청 할때 + +### 6. 404 Not Found + +- 요청된 URL이 존재 하지 않을때 + +## 참조 사이트 + +HTTP 상태 코드 : [https://developer.mozilla.org/ko/docs/Web/HTTP/Status](https://developer.mozilla.org/ko/docs/Web/HTTP/Status) + +HTTP : [https://developer.mozilla.org/ko/docs/Web/HTTP](https://developer.mozilla.org/ko/docs/Web/HTTP) + diff --git "a/doc/TIL\354\235\264 \353\255\220\355\225\230\353\212\224 \355\216\230\354\235\264\354\247\200\354\235\270\352\260\200\354\232\224?.md" "b/doc/TIL\354\235\264 \353\255\220\355\225\230\353\212\224 \355\216\230\354\235\264\354\247\200\354\235\270\352\260\200\354\232\224?.md" index ae9d6e8..0928def 100644 --- "a/doc/TIL\354\235\264 \353\255\220\355\225\230\353\212\224 \355\216\230\354\235\264\354\247\200\354\235\270\352\260\200\354\232\224?.md" +++ "b/doc/TIL\354\235\264 \353\255\220\355\225\230\353\212\224 \355\216\230\354\235\264\354\247\200\354\235\270\352\260\200\354\232\224?.md" @@ -9,3 +9,5 @@ - 공부한 내용 정리 - 단순하게 `Control C + Control V`가 아닌 다른 사람이 읽는다는 생각으로 작성해주세요. + + diff --git "a/doc/\354\230\244\353\235\274\355\201\264 \354\213\234\355\200\200\354\212\244 Cycle\352\263\274 Cache\354\227\220 \353\214\200\355\225\234 \352\263\240\354\260\260.md" "b/doc/\354\230\244\353\235\274\355\201\264 \354\213\234\355\200\200\354\212\244 Cycle\352\263\274 Cache\354\227\220 \353\214\200\355\225\234 \352\263\240\354\260\260.md" new file mode 100644 index 0000000..1b117f7 --- /dev/null +++ "b/doc/\354\230\244\353\235\274\355\201\264 \354\213\234\355\200\200\354\212\244 Cycle\352\263\274 Cache\354\227\220 \353\214\200\355\225\234 \352\263\240\354\260\260.md" @@ -0,0 +1,134 @@ + + +# 📌 시퀀스(Sequence)란? + +시퀀스는 유일한 값을 생성해주는 오라클 객체이다. 자동 일련번호를 생성하는 Object + +오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 **MAX(컬럼) + 1** 또는 **시퀀스**를 사용하여 일련번호를 부여해야 한다. + +# 📌 시퀀스내 Cycle 옵션은? + +최대값 또는 최소값에 도달한 후에도 시퀀스가 ​​계속해서 값을 생성함을 나타내려면 지정합니다 . + +오름차순 시퀀스는 최대값에 도달한 후 최소값을 생성합니다. 내림차순 시퀀스가 ​​최소값에 도달한 후 최대값을 생성합니다. + +``` +// MAXVALUE = 5 인 시퀀스 -> [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5] +``` + +# 📌 시퀀스 내 캐시(Cache)란? + +더 빠른 액세스를 위해 데이터베이스가 사전 할당하고 메모리에 유지하는 시퀀스 값 수를 지정합니다. 이 정수 값은 28자 이하일 수 있습니다. + +``` +// MIN = 1, MAX = 10, CACHE = 3 인 시퀀스 +현재 값 : 2 +캐시 메모리 : 3, 4, 5 + +seq.nextval() + +현재 값 : 3 +캐시 메모리 : 4, 5, 6 +``` + + + +간단한게 시퀀스에 대해 알아보았다. + +시퀀스에 생성 및 사용 방법에 대해 논의하고자 하는건 아니기 때문에 기본적인 설명은 생략한다. (오라클 공식문서 확인) + + + +# ❓ 퀴즈 + +아래의 시퀀스 생성은 성공할까요? + +```sql +CREATE SEQUENCE seq_no +START WITH 1 +INCREMENT BY 2 +MAXVALUE 5 +MINVALUE 1 +CYCLE +CACHE 3; +``` + + + +Oracle Live SQL → [https://livesql.oracle.com/](https://livesql.oracle.com/) + + + + + + + +위 처럼 시퀀스를 생성하려고하면 ORA-04013 에러가 발생합니다. + +" **ORA-04013: number to CACHE must be less than one cycle** + + + +→ 직역하면 캐시의 수는 한 사이클 보다 적어야 합니다. 왜? + + + + +``` +시작값 : 1 +최소값 : 1 +최대값 : 5 +증가값 : 2 +CYCLE : O +CACHE : 3 +``` + +위 시퀀스가 가질 수 있는 값은 1, 3, 5, 1, 3, 5, 1, 3, 5 .. '1', '3', '5' 즉 3개(=한 사이클) 뿐이다. + +그런데 캐시 사이즈가 3이라면 위 시퀀스의 사이클인 3개의 값은 계속 캐시 메모리를 점유할 것이고, 사실상 무한 캐시를 진행하게 된다. 그렇다면 한정된 캐시 메모리에 무한한 점유가 가능하고, 이를 오라클에서 제한한 것이라고 추측하고 있다. + +공식 문서에 따르면 아래의 공식이 Cycle 시퀀스에 캐시 사이즈의 최대치를 의미한다 + +```sql + CEIL ( (MAXVALUE - MINVALUE) / ABS (INCREMENT) ) +``` + +위 공식을 적용하면 (5 - 1) / 2 = 2 가 나오고, 해당 구조의 시퀀스의 최대 캐시 사이즈는 2 이다. + + + +``` +1 ~ 200 시퀀스 / 캐시 20 +현재 시퀀스 : 3 / 캐시 메모리 : 4 ~ 23 + +대기 시간이 김(우선 순위 밀림) + +캐시 메모리 소멸 + +현재 시퀀스 : 3 / 캐시 메모리 : X + +nextval + +다음 시퀀스 : 24 +``` + + + +추가로 캐시의 최소값은 1이아니라 2인데, 이는 캐시 사용의 목적에 이유가 있다고 생각한다. + +캐시는 본래 일정한 공간을 할당하여 빠른 속도로 접근하기 위함인데, 1개의 공간만 사용한다면 사용할 때마다 다시 캐시 메모리에 재할당해야한다. + +CYCLE 시퀀스에서 많은 캐시 사용, 1개의 캐시 사용은 일반적으로 비효율적인 캐시 메모리의 사용이 아닐까 싶다. + +그래서 똑똑한 오라클 개발자 분들이 예외 처리를 하지 않았을까..? 하하 정도로 정리된다. + + + +특별히 중요한 개념까지는 아닌 것 같지만, 그래도 이런 주제는 흥미롭다. + + + + + +참조 → [https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-SEQUENCE.html#GUID-E9C78A8C-615A-4757-B2A8-5E6EFB130571](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-SEQUENCE.html#GUID-E9C78A8C-615A-4757-B2A8-5E6EFB130571) [https://stackoverflow.com/questions/43226047/maximum-value-allowed-for-cache-in-cycle-sequence](https://stackoverflow.com/questions/43226047/maximum-value-allowed-for-cache-in-cycle-sequence) +