ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백엔드 기본 지식
    기타 2022. 12. 6. 16:40

    HTTP METHOD

    HTTP METHOD에는 get, post, put, delet가 있습니다.

     

    get

    클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 method입니다. 즉, 서버에서 어떤 데이터를 가져와서 보여줄 때, 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용합니다.

     

    post

    리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용되는 method입니다. 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용합니다.

    주요 차이점

    get 요청은 캐시가 되나, post는 캐시 되지 않습니다.

    get은 브라우저에 기록되지만 post는 기록되지 않습니다.

     

     

     

     

     

    HTTP 상태 코드

    주요 상태 코드

    200 : OK 요청이 성공적으로 되었습니다. 정보는 요청에 따른 응답을 반환됩니다.

    404 : 서버는 요청받은 리소스를 찾을 수 없습니다. 브라우저에서는 알려지지 않은 URL을 의미합니다. APL에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수 있습니다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있습니다.

    503 : 서버가 요청을 처리할 준비가 되지 않았습니다. 유지 보수를 위해 작동이 중단되거나 과부하가 걸린 서버일 경우 발생합니다.

     

    • 1xx (정보) : 요청받았으며, 프로세스가 계속 진행합니다.
    • 2xx (성공) : 요청을 성공적으로 받았으며 인식했고 수용합니다.
    • 3xx (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
    • 4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
    • 5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했습니다.

     

     

     

     

     

    프로세스와 스레드의 차이

    프로세스는 자원을 할당받는 작업의 단위이며,

    스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다. 

     

    스레드는 자원을 공유한다는 차이점이 있습니다.

     

     

     

     

     

    RDB와 NoSQL의 차이

    RDBMS는 정해진 스키마가 존재하고,

    NoSQL는 정해진 스키마가 없다는 것이 가장 큰 차이입니다.

     

    NoSQL은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하다는 장점이 있지만,

    데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸린다는 단점이 있습니다.

     

     

     

     

     

    DB에서 인덱스를 잘 사용할 경우 장점

    DB의 인덱스를 잘 사용하는 것은 데이터를 검색하는 시점에 성능 차이에 큰 영향을 미칩니다.

    대용량 데이터를 담고 있는 DB 테이블에서 필요한 데이터를 빨리 찾기 위해 인덱스가 필요합니다. 인덱스가 없거나 적절한 인덱스를 찾지 못할 경우 데이터가 담겨있는 테이블 전체를 읽어야 하기에 데이터 조회 시간이 오래 걸립니다. 인덱스는 DB 데이터의 주소를 갖고 있는 것을 의미하며, 원하는 데이터를 빠르게 찾을 수 있다는 장점을 가지고 있습니다.

     

     

     

     

     

    GC 가비지 컬렉션

    GC 가비지 컬렉션은 프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 가비지 영역을 찾아서 해제하는 기능을 의미합니다.

    Full GC

    자바 메모리는 Young, Old, Perm 세 영역으로 나뉩니다. 이 중 Perm(Permanent) 영역은 거의 사용되지 않으며 Yong(Eden, Survivor), Old 2가지 영역으로 나뉘어있습니다. 객체는 처음 생성되었을 때 Yong 영역에 있다가 Old 영역으로 넘어가게 되는데, Old 영역이 꽉 찼을 때 Full GC 가 발생하게 됩니다. 

    Full GC가 발생하면 애플리케이션에 부하가 발생하여 성능이 Full GC 발생 순간에 저하됩니다.

     

     

     

     

     

    병렬 프로그래밍

    큰 문제를 작게 나누어 동시에 해결할 때 병렬 프로그래밍을 사용합니다. 

    장점 : 큰 문제를 프로세스 혹은 스레드가 나누어 처리를 하기 때문에 처리 속도가 향상됩니다.

    단점 : 구현 난이도가 올라갑니다. 특히 큰 문제를 일정량씩 나누고, 각 분리된 테스크를 어떻게 배정해서 처리할 것인지에 대한 고민이 필요합니다. 또한, 여러 스레드가 하나의 데이터를 공유한 경우에 아래 문제를 유의해야 합니다.

     

     

     

     

     

    병렬 프로그래밍을 할 때 유의할 점 (+세마포어와 뮤텍스)

    뮤텍스 : 한 스레드, 프로세스에 의해 소유될 수 있는 key를 기반으로 합니다.

    세마포어 : 현재 공유자원에 접근할 수 있는 스레드, 프로세스의 수를 나타내는 값을 기반으로 합니다.

     

    뮤텍스나 세마포어를 쓰더라도 데드락이 발생할 수 있습니다.

     

     

     

     

     

    LRU 캐시

    Least Recently Used 캐시로 캐시 메모리가 다 차면, 가장 오랫동안 사용되지 않았던 캐시를 메모리에서 삭제하는 알고리즘입니다. 캐시를 교체하는 알고리즘이 어떤 것 들이 있는지 이해해두면 좋습니다.

     

    * 캐시 교체 알고리즘의 종류 예시

    FIFO (first in first out)

    LFU (least frequently used)

    LRU (least recently used)

     

     

     

     

     

    연결 리스트에서 값을 찾는데 시간 복잡도가 얼마나 걸리는가?

    O(n)의 시간 복잡도가 걸립니다. 뒤쪽 원소도 빠르게 검색할 수 있는 Doubly Linked List 구조도 있으며, 이는 저장 공간이 더 필요하다는 단점이 있습니다. 그 외에 Circular Linked List 등도 있습니다.

     

    연결 리스트를 수도 코드로 간단하게 구현

    수도코드 (한글버전)
    1. 데이터와 다음 데이터의 값을 가진 노드를 생성한다.
        1-1. 새 노드 생성시 다음값으로 null로 가리킨다.
        1-2. 새 링크드 리스트 생성시 객체를 생성한다.

    2. 링크드 리스트에 맞는 메소드함수를 구현한다.
        2-1. append(data):
            2-1-1. 헤드가 없으면 헤드 노드를 생성하고 null을 가리킨다.
            2-1-2. 만약 헤드가 null을 가리키면, 헤드가 새로 생성된 데이터를 가리키게 한다.
            2-1-3. 만약 헤드가 다음 데이터를 가르키고 있으면 그 다음 데이터가 새로운 데이터를 가리키게 하고 데이터를 추가한다.
        2-2. removeAt(location) : 데이터의 위치에 따라 데이터를 삭제한다.
            2-2-1. 삭제하고자 하는 데이터의 이전 데이터가 삭제하고자 하는 데이터의 다음 데이터를 가리키게 하고 삭제할 데이터는 null을 가리키게 한다.
            2-2-2. 만약 리스트의 첫번재를 삭제하려면 헤드를 다음 데이터로 바꾸고 삭제할 데이터를 삭제한다.
        2-3. indexOf(data) : 데이터를 순서대로 따라가면서 인덱스를 더해준다. 일치하는 데이터를 찾으면 인덱스를 반환한다.
        2-4. remove(data) : 원하는 위치에 데이터를 추가할 때 인덱스 값을 찾아 일치하는 값을 removeAt(index)로 삭제한다.
        2-5. insert(location, data): 원하는 위치에 데이터를 추가할 때 인덱스 값을 기준으로 위치를 찾고 데이터를 추가한다.
        2-6. isEmpty() : 자료의 수가 0 이상이면 false를 반환한다.
        2-7. length() : 리스트내 전체 자료의 수를 반환한다.

     

     

     

     

     

    스택 2개를 활용해서 Queue처럼 가동하는 클래스 만들기

    예를 들어 1 2 3 4를 큐에 넣으면 순서대로 1 2 3 4가 나옵니다. 이를 선입선출이라고 합니다.

    하지만 스택은 1 2 3 4를 넣으면, 4 3 2 1이 나옵니다. 스택은 큐와 다르게 선입후출의 구조입니다. 하지만, 스택 2개를 활용하는 경우. 2번째 스택에 아무것도 없는 상태에서 pop를 수행한다면 첫 번째 스택에 쌓여있는 값을 2번째 스택으로 이관시킬 수 있습니다.

     

     

     

     

     

    CI/CD란?

    서비스 빌드부터 배피까지의 과정을 자동화하는 과정입니다.

     

     

     

     

     

    마이크로 서비스와 모놀리틱 서비스의 차이

    마이크로 서비스는 개별 서비스 단위로 개발하는 방식이고, 모놀리틱 서비스는 하나의 통합된 패키지로 개발하는 방식입니다.

    마이크로 서비스는 개별 서비스 단위로 나누어져 있어 해당 부분만 수정 및 배포하기에 좋고, 필요한 부분만 확장하기에도 용이하다는 장점이 있습니다.

     

     

     

     

     

     

    출처

    '기타' 카테고리의 다른 글

    Django, Flask, FastAPI 비교  (0) 2022.12.03
    DNS란?  (0) 2022.12.02
    HTTP와 HTTPS  (0) 2022.12.01
Designed by Tistory.