백엔드 개발
- 눈에 보이지 않는 서버에서 작용하는 기술을 개발.
- 데이터베이스 설계, 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 테스팅이 가능