백엔드 개발 및 REST API 이해하기

김재현·2022년 8월 29일
0

오프라인 특강

목록 보기
10/12
post-custom-banner

백엔드 개발

  • 눈에 보이지 않는 서버에서 작용하는 기술을 개발.
  • 데이터베이스 설계, REST API 개발 등을 의미
    소규모 프로젝트에서는 DB와 REST API 개발을 백엔드에서 담당.
  • 주로 Spring, Express, NestJS, Flask, Django 등의 프레임워크 이용.

데이터베이스 설계 - ERD

  • 백엔드 개발시, 기능을 먼저 고민해보고 필요한 DB를 설계해야 함.
  • 사용자, 게시글 등을 '자원'이라고 한다면, 자원은 엑셀처럼 테이블(표)로 표현 가능.
  • ERD 그리는 팁
    • 각 자원에 들어갈 정보(이름, 비밀번호 등)
    • 각 자원간 관계 표시(사용자는 여러 개의 게시글을 작성할 수 있음. )
    • 1:1, 1:N, M:N 관계에 유의하며 도식할 것.
    • 툴을 이용하면 간편하게 할 수 있다.

ERD 관계 표현 예시

관계 표현 기호

DB 조작을 쉽게 - ORM

  • DB를 구체화했다면, 실제로 코드에 반영하자.
  • 객체지향 프로그래밍은 클래스를, 관계형 데이터베이스는 테이블을 사용하여 불일치가 발생.
  • ORM은 객체 간의 관계를 바탕으로 SQL을 자동으로 생성, 객체 모델과 관계형 모델의 불일치 해소.
  • 객체지향 코드를 이용, 좀 더 직관적으로 로직에 집중하여 개발 가능.
  • 재사용성 및 유지보수 간편화.
  • DBMS 종속성을 줄여줌. DB종류를 바꾸더라도 ORM을 사용하면 코드에 영향을 주지 않는다.
  • SQLAlchenmy, JPA/Hivernate, ...

ORM 전과 후

사용 전

SELECT * FROM user WHERE user.point=10;

  • SQL 문을 직접 하드코딩해서 작성
  • 재사용, 유지보수, 리팩토링 어려움
  • DB 종속성 상승

사용 후

`user=user.objects.filter(point=10)

  • 관계형 DB가 객체에 매핑, 직관적으로 이해.
  • 재사용, 유지보수, 리팩토링 용이
  • DB를 바꿔도 코드를 바꿀 필요가 없다.

JSON 형식으로 요청/응답

JSON이란?

  • 데이터를 저장하거나 전송할 때 (특히 REST API) 많이 사용되는 경량의 데이터 교환 방식.
  • 키값(key-value) 형식으로 되어있는 텍스트 → {"user" : "홍길동"}

백엔드와 프론트엔드의 통신

  • 프론트에서 버튼을 누르거나 사용자 조작을 통해 데이터 또는 데이터에 대한 작업 요청이 발생.
  • 백엔드는 이에 맞게 응답을 해야함.
  • 이 응답을 JSON(.json) 형식으로 반환.

URL 설계하기

  • 백엔드 서버로 요청을 보낼 때, 미리 정의해둔 URL주소로 요청을 보내야 함.
  • URL 설계를 할 때는, REST API 표준 가이드라인을 준수할 것.
  • 복수형 사용
    ( /post vs /posts, /post/2 vs /posts/2 )
  • 언더바_ 대신 대시 - 사용


REST API 설계 가이드

데이터 넘기기 : 쿼리스트링, 파라미터, 바디

  • URL이나 HTTP body를 이용해 백엔드 서버로 어떤 작업(검색, 필터링 등)을 요청할 지 전달할 수 있다.
  • 쿼리스트링 : ? 뒤에 붙으며 & 기준으로 변수를 키값 형태로 전달.
  • 파라미터 : / 뒤에 붙으며 숫자, 스트링 등의 들어감
  • 바디 : JSON 형태로 HTTP body에 넣어서 전달.
  • 위 두개는 URL, 아래는 HTTP body.

URL을 이용한 검색, 필터링, 오더링, 페이지네이션

http://api.server.com/posts?q=긴급&post-type=notice&order=created-at&offset=0&limit=5

  • posts : 조회할 자원 → 게시글 (posts) 테이블
  • q : 검색 → “긴급”을 검색어로 제목에 포함한 게시글
  • post-type : 필터링 → 공지사항 (notice) 타입
  • order : 정렬 기준 → 생성일 (created-at) 기준
  • offset, limit : 페이지네이션을 위한 페이지 시작값(offset)과 페이지당 항목 개수(limit) → 페이지당 5개 항목이 있을 때 1 (0) 페이지
  • ?&으로 URL을 구분한다.

API 테스팅 : Postman

  • Postman을 이용해 간단하게 API 테스팅이 가능

RESR API

post-custom-banner

0개의 댓글