Skip to content

Commit

Permalink
문서 동기화
Browse files Browse the repository at this point in the history
  • Loading branch information
johnson434 committed Jan 28, 2024
1 parent 17c3b67 commit 1e2abaa
Show file tree
Hide file tree
Showing 3 changed files with 282 additions and 0 deletions.
146 changes: 146 additions & 0 deletions doc/(작성중)HTTP란?.md
Original file line number Diff line number Diff line change
@@ -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)

2 changes: 2 additions & 0 deletions doc/TIL이 뭐하는 페이지인가요?.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@
- 공부한 내용 정리
- 단순하게 `Control C + Control V`가 아닌 다른 사람이 읽는다는 생각으로 작성해주세요.



134 changes: 134 additions & 0 deletions doc/오라클 시퀀스 Cycle과 Cache에 대한 고찰.md
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 1e2abaa

Please sign in to comment.