ABOUT ME

Today
Yesterday
Total
  • [19일차] 복습(데이터베이스, API)
    교육/코드스테이츠 2022. 12. 22. 18:16

     

    데이터 베이스 종류

     

    • Oracle
      • 미국 오라클(Oracle) 사의 관계형 데이터베이스 관리 시스템(RDBMS)
      • 오픈 소스 DBMS가 있음에도 안정성과 유지보수를 보장받을 수 있다는 장점 때문에 비 IT업종 기업에서 많이 사용한다.
      • 기업용으로 주로 사용
      • 대량의 정보관리를 할 때 타 DBMS에 비해 좋은 성능을 보인다.
      • 오라클 자체 SQL 쿼리를 사용해 표준 형식과 약간 다름

     

    • MySql
      • 관계형 데이터베이스 관리 시스템(RDMS)
      • 오픈 소스이며, 다중 사용자와 다중 스레드 지원
      • 오픈 소스 라이선스를 따르기 때문에 무료로 사용 가능
      • 표준 SQL 형식 사용
      • 오픈 소스이기 때문에 기술 지원의 한계가 있음

     

    • MS-SQL
      • 미국 마이크로스프트에서 개발한 관계형 데이터베이스 관리 시스템(RDBMS)\
      • 분산된 기업환경에서의 집중된 서버 관리 도구 제공
      • 데이터베이스 관리 시스템 툴인 MS-SQL 서버 관리 스튜디오의 사용이 매우 편리함
      • 마이크로소프트 개발이다 보니 모든 버전의 Windows에서 문제없이 잘 작동됨
      • 중앙 집중식 테이버 베이스 제어로 통신 누락, 오류 발생 최소화
      • .Net 언어 구현에만 초점을 맞춰 설계됨

     

    • PostrgreSQL
      • 오픈 소스 객체-관계형 데이터베이스 시스템 (ORDBMS)
      • macOS 서버의 경우 기본 데이터베이스로 사용된다.
      • 초기 개발 단계부터 완벽한 ACID와 MVCC를 지원하는 아키텍처로 설계
      • 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 SQL 차원에서 제공
      • 테이블 상속 기능을 이용해 하위 테이블 생성 가능
      • 오픈 소스임에도 상용 RDBMS급의 기능을 제공
      • 기본적인 CRUD 성능이 경쟁 DB에 비해 좋지 않다.

     

    • MongoDB
      • 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템
      • NoSQL 데이터베이스
      • ACID 대신 BASE를 택해 성능과 가용성을 우선시함
      • 모든 데이터가 JSON 형태로 저장, 스키마가 없음
      • 다양한 인덱싱 제공
      • 일관성이 매우 중요한 작업에는 사용하기 힘들다

     

    • Redis
      • Remote Dictionary Server의 약자
      • Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비 관계형 데이터베이스 관리 시스템
      • 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS
      • 메모리 기반이기에 속도가 빠르고 간편
      • 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용
      • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 자료구조의 지원

     

    •  MariaDB
      • 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)
      • MySQL과 동일한 소스 코드를 기반, GPL v2 라이선스를 따름
      • MySQL의 개발진들이 오라클의 정책이 추구하는 바와 맞지 않아 나와서 개발한 DB
      • MySQL이 오라클에 인수되면서 만들어진 오픈소스 RDBMS
      • 위의 말한 관계로 인해 MySQL과 거의 100% 호환성을 가지고 있음
      • MySQL에 비해 애플리케이션 부분 속도가 약 4~5천 배 빠르고, 성능면에선 70% 향상을 보인다고 말함
      • 좀 더 자유로운 MySQL 정도로 이해하면 될듯함
      • 라이센스와 오라클로부터 자유로움
      • api 만들기 정리

     

     

    서버 정리

    Web Server

    • 웹브라우저(클라이언트)로부터 요청을 받아 정적인 콘텐츠(html, css, jpeg)를 처리하는 시스템
    • 종류 : Apache, Nginx, IIS

     

     WAS (Web Application Server)

    • DB 조회나 다양한 로직을 처리를 하는 동적인 콘텐츠를 처리하는 시스템
    • 종류 : Tomcat, Jeus, JBoss
    • 사용 언어 : PHP, JSP, ASP

     

    DB

    • DataBase의 약자로 데이터 집합 또는 저장소
    • 종류 : MySQL, Oracle, MongoDB 등
    • DB 테이블 : 시스템에서 데이터가 저장되는 형태로 데이터의 종류와 형식을 확인 가능함. 보
    • 컬럼(Column) : DB테이블의 열로 같은 종류로 묶인 항목 (예시 : 번호, 이름, 반, 점수)
    • 레코드(Record) : DB테이블의 행으로 항목이 1개씩 포함된 데이터 묶음
    • 쿼리(Query) :DB에 정보를 조회 요청하는 것
    • SQL (Structured Query Language) : 관계형 DB에 정보를 관리(등록/삭제/변경/조회)하기 위한 언어
    • nsert : 등록    update : 변경   delete : 삭제   select : 조회
    • 쿼리는 DB에 정보 조회를 요청하는 행위이며 SQL를 이용하여 DB에서 select하여 DB 조회 명령을 할 수 있다.
    • 쿼리 요청시 web, was가 실행되고 있어야 한다.

    출처: https://www.stevenjlee.net/2020/05/08/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-3%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0-3-tier-architecture/

     

    API

    • RESTFUL API의 3요소
    구성 요소 내용 표현 방법
    자원(Resource) 자원 HTTP URI /members/{1}, /member/
    행위(Verb) 자원에 대한 행위 HTTP Method POST, GET, DELETE, PUT
    표현(Representations) 자원에 대한 행위의 내용 (즉, 요청에 대한 Body) HTTP Message Payload (JSON, XML, TEXT, RSS 등) {  member-id:”82370”,  member-name:”홍길동“,  member-org:”10100”,  member-location:”11010” }

     

    • 서브 URL 표현식을 통해 세부 표현
    •  API내부에 다른 리소스와 관계가 있을때 서브 리소스 표현으로 그 관계를 표현한다
    METHOD API DESC.
    GET /cars/711/drivers/ 711id를 사용하는 car의 드라이버 리스트를 반환
    GET /cars/711/drivers/4 711id를 사용하는 car의 드라이버 중 드라이버 id4번인 드라이버를 반환
    POST /tickets/12/messages ticket 넘버 12번에 새로운 메시지 생성
    PUT /tickets/12/messages tcket 넘버 12번에 메시지 5번을 업데이트
    PATCH /tickets/12/messages/5 ticket 넘버 12번에 메시지 5번을 부분적으로 업데이트
    DELETE /tickets/12/messages/5 ticket 넘버 12번에 5번 메시지 삭제

     

     

    상태 코드 설명

    • Sorting: 예를들어 클라이언트가 정렬된 회사 목록을 가져오려는 경우 다음의 예처럼 처리
    • ex) GET /companies?sort=rank_asc

     

    • Filtering: 데이터셋의 데이터를 필터링 할 때, 다양한 쿼리 파라미터를 통해 필터링 처리 가능
    • ex) GET /companies?category=banking&location=india
    • (컴퍼니의 카테고리를 은행으로 정하고 은행이 위치한 장소를 인도로 필터 처리)

     

    • Searching: 검색은 다음의 예제와 같이 표현
    • ex) GET /companies?search=Digital

     

    • Pagination: 페이징 처리 예제
    • ex) GET /companies?page=23

     

    REST의 중요성

    • REST를 실행하는 기본적인 목적 중 하나는 URI 체계에 대해 미리 알고 있지 않아도 전체 리소스 집합을 탐색할 수 있기 때문이다.
    • 각 HTTP GET 요청은 응답에 포함된 하이퍼링크를 통해 요청된 개체와 직접 관련된 리소스를 찾는 데 필요한 정보를 반환해야 하며, 이러한 각 리소스에 대해 사용할 수 있는 작업을 설명하는 정보도 제공되어야 한다.
    • 이 원칙을 HATEOAS(Hypertext as the Engine of Application State)라 한다.
    • 시스템은 실질적으로 상태 시스템으로서, 각 요청에 대한 응답은 한 상태에서 다른 상태로 바꾸는 데 필요한 정보를 포함하고 있으며, 다른 정보는 필요하지 않다.

    • 이 응답에는 사람의 이름뿐만 아니라 그 사람의 이름으로 참조해야 하는 관계된 URL까지 링크로 제공해 주고 있다
    • rel은 관계를 의미. 이 예제에서 사용한 'self'라는 의미는 같은 웹 사이트를 사용하는 참조 하이퍼링크라는 뜻이다
    • href는 리소스를 고유하게 정의하는 완전한 URL이다
    • HTTP 메서드 및 지원되는 MIME 형식이 포함됨. 이 모든 정보가 있어야 클라이언트 애플리케이션이 작업을 호출할 수 있다

     

    • JSON을 통한 에러 응답 처리
      •  API는 항상 자체 필드 집합에서 오류 메시지를 반환하도록 적극 권장한다
      • JSON 오류 본문은 개발자에게 유용한 오류 메시지, 고유한 오류 코드(문서등을 통해 자세한 내용을 찾을 수 있게해야 함) 및 가능한 자세한 설명 등 몇 가지 사항을 제공한다
    {
    "코드": 1234,
    "message" : " 오류가 발생했습니다 .",
    "description" : "오류에 대한 자세한 내용은 xxxx를 참조."
    }

     

    • RESTful API 작성 예시
      • URI는 리소스 식별이 유추 될 수 있도록 작성되어야 한다
      • http(s)://{Domain name (:Port #)}/{A value indicating REST API}/{API version}/{path for identifying a resource}
      • http(s)://{Domain name indicating REST API(:Port #)}/{API version}/{path for identifying a resource}
      • http://example.com/api/v1/members/M000000001
      • http://api.example.com/v1/members/M000000001

     

    • path는 내가 무엇을 원하는지를 직관적으로 보여줄 수 있게 작성해야 한다
    • “ 사용자는 모든 상품을 조회할 수 있다 ”일 경우
      • - PATH : /products/를 활용한다
      • - 복수형으로 작성하는게 좋다
      • “ 사용자는 특정 분류의 상품을 조회할 수 있다(상품분류, 브랜드명, 가격, 상품명)”
      • - PATH :
      • /products?categories=${categotrid}&brand=${brandid}&price=${price}&productname=${productname}
      • - 이럴경우 path를 여러개로 나눌건지(로직을 나눌건지) 한번에 생성할것인지 고민 필요
      •  - 한번에 할 경우 로직이 복잡해져 백엔드에서 수고스러워진다 
      • - api는 한번 만들면 변경할 수 없으므로 신중하게 작성해야 함

     

    • 실제로 코드 상에서 날아가는 실제 요청은 " curl GET주소/api/product cotent " 이다
      • GET은 굳이 REQ가 필요없다, 받을것만 받으면되고 GET에는 바디를 안넣는다
      • POST에서 무엇을 받을것인지 쓰고, 원하는 값을 설정하면 된다
      • 데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다.
      • URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받는다.
      • 데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.
      • 유저가 누군지 정도는 헤더에 놓고 세부사항까지는 바디에 놓는다

     

    =====================================

    참고 자료

    https://bcho.tistory.com/

     

    조대협의 블로그

    실리콘밸리에서 살고 있는 평범한 엔지니어 입니다 이메일-bwcho75골뱅이지메일 닷컴.

    bcho.tistory.com

     

     

     

    '교육 > 코드스테이츠' 카테고리의 다른 글

    [24일차] Proxy & CDN  (0) 2022.12.29
    [23일차] OSI 7계층과 TCP/IP  (0) 2022.12.28
    [18일차] 데이터 파이프라인  (0) 2022.12.21
    [17일차_02] 데이터베이스 기초  (0) 2022.12.20
    [17일차_01] 데이터베이스 기초  (0) 2022.12.20
Designed by Tistory.