Rest api 설명
- 다른 사람들이 이해하기 어렵다
- 명확한 패턴이 없다
- URL 에는 동사를 쓸 수없다 -> 명사로 구분해야함(add, create, delete...CRUD)
uniform interface 스타일
1. 자원에 대한 식별
- 자원은 객체 (자원 = URI)
- 상태는 변화 가능 -> 변하지 않는 식별자 필요
- 고유한 식별자로 URI를 통해 자원을 식별해야한다
- 식별자를 통해 특정한 데이터를 지정할 수 있다
(영화에 대한 정보면 movies로 자원을 지정)
2. 표현을 통한 자원에 대한 조작
- 특정한 상태의 자원에 대한 표현
- 자원은 다양한 방식으로 표현 가능
- 자원 : 해당 소프트웨어가 관리하는 모든 것
- 문서, 그림, 데이터 ... 등등
- 자원 : 해당 소프트웨어가 관리하는 모든 것
클라이언트 <-> 서버 자원의 상태 정보를 전달한다
- 보통 json, xml 등으로 데이터를 주고 받는 게 일반적
3. 자기 서술적 메시지
- 메세지는 스스로에게 설명해야 한다
4.
HTTP methods
- GET : 읽기, 조회
- POST : 생성
- PUT : UPDATE
- DELETE : 삭제
client <-> Server 사이 http 프로토콜로 통신 (여러 방법 중 하나)
/movies로 get요청 : 영화(명사)를 불러와라 요청
/movies로 post요청 : 영화(명사)를 생성해라 요청
...
=> 같은 URL로 http methods을 다르게 요청할 수 있다
- 코드 단축
- 사용하기 쉬움
- 구분 쉬움, 훨씬 더 이해하기 쉽다
- 다양한 클라이언트에도 통신 가능..
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
출처 :
https://www.youtube.com/watch?v=Nxi8Ur89Akw
https://www.youtube.com/watch?v=4DxHX95Lq2U
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
인덱스의 내부구조 클러스터형 DB vs Non클러스트형 DB
인덱스 란?
- 일반적으로 책의 색인이라고 생각하면 됨
- 인덱스가 없다면 하나 하나 찾아야함 -> 오래걸림
- 하지만 반드시 필요한 것은 아니다!
- 인덱스가 필요한 상황에 적절히 쓴다 -> 꼭 사용한다고 좋은 건 아니다
- 데이터 양이 많을 경우 유리
장점
- 엄청 빨리 찾는다 (SELECT문 검색 속도 향상 -> 전체 시스템 성능 향상)
단점
- 인덱스도 공간차지 해서 데이터베이스 안에 추가적인 공간 필요함
- 처음에 만들 때 시간 오래걸림
인덱스의 종류
1) 클러스터형 인덱스(Clustered Index)
- 영어 사전, 국어 사전 책 자체가 클러스터형 인덱스
- A ~Z , ㄱ~ㅎ 정렬
- KEY_NAME = PRIMARY KEY
- 한 테이블 당 1개만 지정
- 알아서 정렬되어서 들어가짐
- PRIMARY KEY, UNIQUE NOT NULL 생성시 알아서 생성됨 -> PRIMARY KEY가 더 우선시 됨
2) 보조 인덱스 , 넌클러스터드 인덱스(Secondary Index, NonClustered Index )
- 일반적 책 뒤의 찾아보기
- 인덱스 페이지를 포함하여 찾는다
- UNIQUE KEY(고유키) 로 지정하면 자동으로 보조 인덱스가 된다
- UNIQUE 또는 UNIQUE NULL로 지정한 열에 보조 인덱스 생성
- 테이블 당 여러개 생성 가능
- 데이터와 인덱스를 각각 다른 위치에 저장
- 인덱스는 해당 데이터의 위치에 대한 포인터를 포함하고 있다
- 클러스터드 인덱스 보다 검색 속도는 더 느리지만, 데이터 입력, 수정, 삭제는 더 빠르다
출처 :
https://www.youtube.com/watch?v=KZmW6VaY5BU
가비지콜렉터(Gabage Collecter)
- 프로그램 개발시 유효하지 않은 메모리 낭비되는 문제 발생 -> Gabage
- C언어 사용시 개발자가 직접 메모리 해제를 해줘야 했지만, Java 나 Kotlin 의 경우 JVM(자바 가상머신)에 의해 자동 메모리 정리해준다
- 자바가상머신이란 시스템 메모리 관리해주면서 자바 기반 프로그램이 어느 환경에서도 (어느기기, 어느 운영체제 등) 실행될 수 있게 해준다
순서
1. 프로그램 실행시 메모리 관리하는 OS에 의해 프로그램 실행에 필요한 메모리 요청
2. 메모리를 어디에 저장할껀지 그 주소를 할당함
(그 주소를 offset 주소라고 함)
3. 사용중인 메모리 인식
4. 사용하지 않은 메모리 인식
5. 가비지 메모리로 사용하고 있던 것을 다른 목적으로 사용하기 위해 메모리 해제함
한계
- 실행 시간에 작업시 성능 하락 피할 수 없음
- 메모리 누수 발생 가능성
> 참고하면 좋을 만한 곳
https://www.youtube.com/watch?v=24f2-eJAeII
'IT_study > 스터디' 카테고리의 다른 글
객체지향 설계 원칙, 트랜잭션 격리, 해쉬테이블 (0) | 2022.08.24 |
---|---|
공인ip, 사설ip, nat, 프록시서버, DHCP (1) | 2022.08.18 |
CDN, CORS, 배포 인프라 (0) | 2022.08.11 |
TCP vs UDP, 라우터 vs 스위치 (0) | 2022.07.28 |
가상메모리, Redis vs Memcached (0) | 2022.07.28 |