REST(Representational State Transfer) API
소프트웨어 프로그램 아키텍처의 한 형식
웹의 모든 자원에 고유한 ID인 HTTP URI 를 부여
Client Side를 정형화된 플랫폼이 아닌 모바일, PC, 어플리케이션 등 플랫폼에 제약을 두지 않는 것을 목표
HTTP URI를 통해 자원을 명시하고, HTTP Method (POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD OPERATION을 적용하는 것을 의미
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
특징:
a. 클라이언트 / 서버 구조 :
- 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역활이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동할 수 있게 한다
b. 무상태성 (Stateless)
- 서버에서 어떤 작업을 하기 위해 상태정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주면 되기 때문에 구현이 쉽고 단순해진다.
c. 캐시 처리 가능 (Cacheable)
- HTTP라는 기존 웹표준을 사용하는 REST의 특징 덕분에 기본 웹에서 사용하는 인프라를 그대로 사용 가능하다.
- 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.
- 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있다.
d. 자체 표현 구조 (Self - descriptiveness)
- JSON을 이용한 메시지 포멧을 이용하여 직관적으로 이해할 수 있고 REST API 메시지만으로 그 요청이 어떤 행위를 하는지 알 수 있다.
e. 계층화 (Layered System)
- 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 계층 등 중간매체를 사용할 수 있어 자유도가 높다
f. 유니폼 인터페이스 (Uniform)
- Uniform Interface는 Http 표준에만 따른다면 모든 플랫폼에서 사용이 가능하며, URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍쳐 스타일을 말한다
- 특정 언어나 기술에 종속되지 않는다.
JVM이란?
Java Virtual Machine, 자바 가상 머신
자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것
자바와 OS 사이에서 중개자 역할을 수행하여 자바가 OS에 구애받지 않고 재사용을 가능하게 해줌
메모리 관리, 가비지 컬렉션을 수행한다.
스택기반의 가상 머신이다.
구성
- 클래스 로더: 클래스를 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈
- 실행 엔진: 클래스를 실행시키는 역할
- 인터프리터: 한 줄씩 수행
- JIT 컴파일러: 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일 하여 네이티브 코드로 변경
네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행된다.
Garbage Collection 가비지 컬렉션
불필요한 메모리를 알아서 정리해주는 가비지 컬렉터
- Young 영역(Young Generation)
- 새롭게 생성된 객체가 할당(Allocation)되는 영역
- 대부분의 객체가 금방 Unreachable 상태가 되기 때문에, 많은 객체가 Young 영역에 생성되었다가 사라진다.
- Young 영역에 대한 가비지 컬렉션(Garbage Collection)을 Minor GC라고 부른다.
- Old 영역(Old Generation)
- Young영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역
- Young 영역보다 크게 할당되며, 영역의 크기가 큰 만큼 가비지는 적게 발생한다.
- Old 영역에 대한 가비지 컬렉션(Garbage Collection)을 Major GC라고 부른다.
- Stop The World: JVM이 애플리케이션의 실행을 멈추는 작업. GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업이 중단되고, GC가 완료되면 작업이 재개된다.
- Mark and Sweep: Mark=사용되는 메모리와 사용되지 않는 메모리를 식별하는 작업, Sweep: Mark 단계에서 사용되지 않음으로 식별된 메모리를 해제하는 작업.
제네릭: 자바에서 안정성을 맡고 있다. 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에서 사용하는 것으로 컴파일 과정에서 타입체크를 해주는 기능. 객체의 타입을 컴파일 시에 체크하기 때문에 객체 타입 안정성을 높이고 형변환의 번거로움을 줄여준다.
- final class
다른 클래스에서 상속하지 못한다. - final method
다른 메소드에서 오버라이딩하지 못한다. - final variable
변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 된다.
오버라이딩(Overriding)
상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미한다. 자바의 경우는 오버라이딩 시 동적바인딩된다.
오버로딩(Overloading)
메소드의 이름은 같다. return 타입은 동일하거나 다를 수 있지만, return 타입만 다를 수는 없다. 매개변수의 타입이나 갯수가 다른 메소드를 만드는 것을 의미한다. 다양한 상황에서 메소드가 호출될 수 있도록 한다. 언어마다 다르지만, 자바의경우 오버로딩은 다른 시그니쳐를 만드는 것으로, 아예 다른함수를 만든것과 비슷하다고 생각하면 된다. 시그니쳐가 다르므로 정적바인딩으로 처리 가능하며, 자바의 경우 정적으로 바인딩된다.
- public
어떤 클래스에서라도 접근이 가능하다. - protected
클래스가 정의되어 있는 해당 패키지 내 그리고 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다. - (default)
클래스가 정의되어 있는 해당 패키지 내에서만 접근이 가능하도록 접근 범위를 제한한다. - private
정의된 해당 클래스에서만 접근이 가능하도록 접근 범위를 제한한다.
TDD 란 무엇인가
Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다. 말 그대로 테스트가 코드 작성을 주도하는 개발방식
MVC
컨트롤러 : 일종의 조정자, 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 또 클라이언트가 보낸 데이터가 있다면 모델에 전달하기 쉽게 데이터를 가공한다. 모델이 업무를 마치면 그 결과를 뷰에게 전달한다.
모델: 비지니스 로직을 구현하는 영역으로 응용프로그램에서 데이터를 처리하는 부분이다. 데이터베이스에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행한다.
뷰: 컨트롤러로부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 한다. 화면에 표시되는 부분으로 추출한 데이터나 일반적인 텍스트 데이터를 표시하거나 입력폼 또는 사용자와의 상호작용을 위한 인터페이스를 표시하는 영역이다.
git-flow
feature > develop > release > hotfix > master
github-flow
array: 논리적 저장 순서와 물리적 저장 순서가 일치, 인덱스로 해당원소에 접근 가능, 삽입/삭제시 shift
linked list: 각각의 원소들은 자기 자신 다음에 어떤 원소인지만 기억하고 있음. 검색, 삽입,삭제시 복잡도
스택: lifo 차곡 차곡 쌓이는 구조
큐: fifo 먼저 들어간 놈이 먼저 나옴
트리: 비선형 자료구조
GET: 가져오는 것, 요청하는 데이터가 HTTP Request Message의 Header 부분에 url 이 담겨서 전송
url 상에 ? 뒤에 데이터가 붙어 request 를 보내게 되는 것이다. 이러한 방식은 url 이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적, 보안이 필요한 데이터에 대해서는 적절하지 않다
POST: 서버의 값이나 상태를 변경하기 위해서, 또는 추가하기 위해서 사용. HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다.
UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)
비연결형 프로토콜
IP 데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지않고 보내는 방법을 제공
포트들을 사용하여 IP 프로토콜에 인터페이스를 제공
DNS, 코드가 간단, 사전에 설정이 필요하지 않고 후에 해제가 필요하지 않음
TCP Transmission Control Protocol, 전송 제어 프로토콜
신뢰성, 순차적인 전달
종단간에 신뢰성이 있는 바이트 스트림을 전송.
송신자, 수신자 모두가 소켓이라고 부르는 종단점을 생성함으로써 이루어진다.
연결설정은 3-way handshake를 통해 행해진다.
양방향으로 동시에 일어날 수 있고 각 연결이 정확히 2개의 종단점을 가지고 있다.
멀티캐스팅, 브로드캐스팅 지원 x
프로세스(Process)
실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU 의 할당을 받을 수 있는 것을 말한다. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하여 프로세스라고 한다.
프로세스 제어 블록 PCB는 특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조
스레드
프로세스의 실행 단위라고 할 수 있다.
한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있다.
하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티스레딩
멀티스레딩 장점 :메모리 공간과 시스템 자원 소모가 줄어들게 된다 프로그램의 응답 시간이 단축된다.
단점: 동기화 작업이 필요하다.
동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤 하는 것이다.
하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다.
스케줄러: 프로세스를 스케줄링
장기 스케줄러: 메모리와 디스크 사이의 스케줄링을 담당.
단기 스케줄러: CPU와 메모리 사이의 스케줄링을 담당
중기 스케줄러: 여유공간 마련을 위해 프로세스를 통으로 메모리에서 디스크로 쫓아냄(swapping), 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절
캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리
데이터 지역성: 기억 장치 내의 정보를 균일하게 access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조
- 시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성.
- 공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
데이터베이스의 특징
독립성
무결성 : 데이터 유효성 검사
보안성
일관성 : 데이터의 불일치성 배제
데이터 중복 최소화
정규화란?
관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업
트랜잭션이란?
작업의 완전성을 보장해 줌
논리적인 작업 셋을 모두 완벽하게 처리/처리하지 못할 경우 원상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않도록 함
트랜잭션의 특징:
원자성: 아무런 문제가 발생되지 않았을 경우에만 모든 작업이 수행
일관성
고립성: 각각 독립적으로 수행
지속성
락 = 동시성을 제어하기 위한 기능
트랜잭션 = 데이터의 정합성을 보장하기 위한 기능
교착상태란?
두개 이상의 트랜잭션이 특정 자원의 락을 획득한 채 다른 트랜잭션이 소유하고 있는 락을 요구하면 아무리 기다려도 상황이 바뀌지 않음
nosql
대량의 분산된 데이터를 저장하고 조회하는데 특화
스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소
메모리에 임시 저장하고 응답
동적인 스케일 아웃 지원, 가용성을 위하여 데이터 복제
싱글톤 패턴
애플리케이션에서 인스턴스 하나만 만들어서 사용하기 위한 패턴
'💻dev > 🖥️CS' 카테고리의 다른 글
CS | 최근에 기억에 남는 기술 면접 질문 - 답변 모음 (개발자 취준) (2) | 2023.09.22 |
---|---|
CS | CPU 스케줄러와 스케줄링 알고리즘 (0) | 2023.08.12 |
CS | Design Pattern (디자인패턴) (0) | 2023.08.12 |
CS | Operating System (운영체제) (0) | 2023.08.12 |
좋은 코드, 그것이 알고 싶다 (0) | 2023.03.08 |