본문 바로가기
제가 왜 백엔드 개발을 하고 있을까요?/Node.js

[Node.Js] 모놀리식 서비스 만들기_01 설계

by asj8000 2019. 5. 2.
반응형

오류 지적은 언제나 환영입니다 :-)

아래의 게시물의 초반. 모놀리식 아키텍처와 이어지는 내용입니다.

링크 : https://asj8000.tistory.com/entry/마이크로서비스-아키텍처

 

모놀로식 아키텍처를 설명하기 위해 넣었던 사진의 데이터 관리와 데이터 접근 부분을 설계하려한다. 먼저 좀 더 자세히 정의를 해보자면,

 

회원 관리와 데이터 관리 기능의 API를 제공한다.

형식은 REST API를 제공한다.

회원 관리는 크게 3가지 기능을 제공한다.

1. 회원 등록

2. 회원 인증

3. 회원 탈퇴

회원 정보는 사용자 명과 패스워드로 구성한다.

 

데이터 관리는 회원 데이터를 제외한 모든 데이터를 포함하는 용도로 적어둔 것이다.

예시를 들자면 쇼핑몰이라면 등록되어 있는 상품들, 블로그라면 포스팅된 게시물들이 있다.

데이터 관리에는 3가지 기능을 제공한다.

1. 데이터 등록

2. 데이터 조회

3. 데이터 삭제

 

 

이제 시스템을 구성해보자.

위의 요구사항대로 REST웹 API 시스템을 제작해야하며,

소규모 모놀리식 아키텍처로 개발하기 때문에 API 서버 하나와 데이터베이스로만 구성해야 한다.

 

REST API 설계

REST에 간단히 설명하자면, 자원 지향 구조로 접근하고자 하는 자원에 고유한 URL을 부여하는 방식이다.

http의 Get, Post, Put, Delete 메소드를 활용해 같은 자원 내에서 생성, 조회, 수정, 삭제를 처리한다.

 

아래의 링크는 http의 주요 저자인 Roy Fielding가 제작한 REST를 소개하기 위한 논문이다.

https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf

 

자원을 기준으로 API를 설계하기에 동작을 기준으로 설계할 떄에는 어색한 부분이 발생하지만, 데이터 관점에서는 직관직인 설명이 가능하기에 널리 활용된다.

 

위에서 적은 요구사항에 따라 개발하려면 HTTP 호출을 위한 기능별 메소드와 URI을 정의해야한다.

정의된 기능들을 데이터 관리와 회원 괸리로 묶어 REST API를 설계하려 한다.

 

회원 관리 REST API

회원 관리에 필요한 API의 URL은 /members 로 지정하며, 회원 등록은 post, 회원 인증은 get, 탈퇴는 delete로 정의한다.

회원 정보는 '사용자명'과 '패스워드'로 구성하며 회원 등록과 인증은 전부 '사용자명'과 '패스워드'를 입력하기로 한다.

탈퇴에서는 '사용자명'만 받도록 한다.

기능 메소드 URI
회원 등록 POST /members
회원 인증 GET /members
회원 탈퇴 DELETE /members
파라미터 의미 타입
Username 사용자명 String
password 패스워드 String

데이터 관리 REST API

이 게시글의 목표를 블로그로 가정하고, 데이터는 게시물과 같은 데이터가 들어간다 생각하고 설계한다.

데이터 관리의 URL은 /post로 지정하고, 게시물의 정보는 제목, 카테고리, 게시물내용, 날자로 구성한다.

기능 메소드 URI
게시글 등록 POST /post
게시글 보기 GET /post
게시글 삭제 DELETE /post
파라미터 의미 타입
name 게시글 제목 String
category 카테고리 String
wirte 게시글 내용 String
day 작성 날자 Number


데이터베이스 설계

회원 관리, 데이터 관리를 만들기 위해서는 해당 데이터를 저장할 곳이 필요하다.

데이터를 저장하기 위한 저장소로 관계형 데이터베이스(Relational Database)와 비관계형 데이터베이스(NoSQL)를 사용한다. 관계형 DB의 대표적인 예시로 MySQL이 있고, 비관계형 DB의 대표적인 예시로 MongoDB가 있다.

비관계형 데이터베이스는 관계형 DB에 비해 특화된 목적의 데이터를 저장하는 데 탁월한 성능을 보이므로 개발 목적에 맞게 선택하는 것이 중요하다.

이 게시물에서는 MariaDB를 사용하려 한다.

다운로드 경로 : https://mariadb.org/download/

다운로드 과정은 생략한다.

 

mysql client를 실행하여 사용할 DB를 먼저 만들어보자.

CREATE DATABASE monolithic;
use monolithic;
CREATE TABLE IF NOT EXISTS `members` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(128) NOT NULL,
  `password` varchar(256) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `post` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `category` varchar(128) NOT NULL,
  `write` text NOT NULL,
  `day` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

이렇게 DB의 설계가 끝났다. 구현에 관한 포스팅은 다음 게시물에서 진행하도록 한다.

 

반응형

댓글