항해99

[항해99 Bootcamp] [0227-0303] [mini project] [Weekly I Learned]

Chris_Kwak 2023. 3. 2. 12:12

Mini Project 회고

 

클라이언트와 서버의 전체적인 소통 구조, 소통 방식에 대해서의  작업 방식과 작업 진행,
기획부터 기능 설계까지, 궁극적으로 클라이언트가 어떤 행동을 할 것이며 어떤 것을 필요로 할 것인가?그것에 어떤 API 가 필요하고 구체적으로 어떤 URI 를 설정할 것이며, 어떤 기술을 사용해서 그것을 구현할 것인가?
API 가 잘 작동했을 시에, 어떤 Response 를 클라이언트에 전달할 것이며, 그렇지 않을 때는 어떤 에러 메세지를 클라이언트에 전달할 것인가? 
Validation 은 어떻게 해야할 것인가?
클라이언트가 Req.body 에 원하는 값이 아닌 다른 값을 넣었을 때는 어떻게 Validate 할 것인가?
이 모든 변수와 예측과 경우의 수를 고려해서 서비스를 설계해야 한다.
처음부터 직접적으로 코딩을 할 것이 아니다.
도구를 만들기 전에는 그 도구가 무엇을 위해서 존재할 것인지 필수적으로 생각하고 설계해야만 한다. 클라이언트와 서버가 협업해서 이 모든것을 사전에 논의하고 도구의 존재성을 철저하게 정립해야만 한다.
설계도를 가능한 최대한 자세히, 목표와 지향점을 설정하라. 이 과정은 결국 클라이언트와 서버의 지속적인 소통으로 이루어진다.
사용자가 결국 어떤 서비스를 어떻게 사용하는 가에 대한 것.
서버에서도 이것은 중요하다. API 는 따로 따로 존재하는 것 처럼 보이지만, API 를 사용할 때 그 API 에 동반되어야 하는 필연적인 API 가 존재하는 것이다. 그것은 결국 추상적인 개념에서, 모든 API들은 독립적으로 존재하면서 동시에 서로가 영향을 주고 받아 복합적인 유기체로서도 기능해야 한다는 사실이다.
생성 API 는 조회 API 를 동반해야 하며, 조회하려면 생성해야만 한다. 생성을 생성 자체로서만 사고할 수 있는가? 인간과 컴퓨터 사이에서의 정체성 갈등은 본질적인 문제로 드러난다.


LAP LAYERED ARCHITECTURE PATTERN

데이터 공간과 공간 별 역할의 분리.


관리 대상의 분리를 꾀합니다. 서로 다른 계층으로 코드를 분리함으로써 복잡성을 다룸으로써 계층별 변화를 쉽게 관리할 수 있습니다.(확장 가능성이 높습니다.)
각 층마다 특정 역할을 하고, 테스트에 용이하며, 계층들은 독립적이기에 유지 및 관리보수에 용이합니다.

 

Presentation Layer
Client => In this example, the presentation layer is responsible for handling HTTP requests and responses using the Express.js framework.
이 예에서 프레젠테이션 계층은 Express.js 프레임워크를 사용하여 HTTP 요청 및 응답을 처리합니다.

const express = require('express');
const app = express();
const userController = require('./controllers/userController');

app.get('/users', userController.getAllUsers);

app.listen(3000, () => {
    console.log('Server started on port 3000');
});

Service => The business logic layer contains the user service which retrieves
data from the data access layer and performs any necessary business logic.
비즈니스 로직 계층은 데이터 액세스 계층에서 데이터를 검색하고 필요한 비즈니스 로직을 수행하는 사용자 서비스를 포함합니다.

const userDao = require('../dataAccess/userDao');

module.exports = {
    getAllUsers: async () => {
        const users = await userDao.getAllUsers();
        return users;
    },
};

Repository =>
Finally, the data access layer is responsible for interacting with the database and returning data to the business logic layer.
마지막으로, 데이터 액세스 계층은 데이터베이스와 상호 작용하고 데이터를 비즈니스 논리 계층으로 반환하는 역할을 합니다.

const db = require('../database/db');

module.exports = {
    getAllUsers: async () => {
        const query = 'SELECT * FROM users';
        const result = await db.query(query);
        return result.rows;
    },
};

MySQL DATABASE Relationship

유저와 스크립트는 1 : N 관계입니다.
스크립트는 유저에 속합니다.
유저와 플러스 스크립트도 1 : N 관계입니다.

스크립트와 플러스 스크립트는 1 : N 관계입니다.
플러스 스크립트는 유저와 스크립트에 속합니다.


Query 최적화

글 조회시 필요한 유저 정보, 댓글 정보를 한 번에 가져오도록 쿼리 최적화를 진행했습니다.