[PROJECT] 2nd Project - Brunch Modeling

먹보·2022년 12월 18일
0

MUK_BO's Projects

목록 보기
2/5

모델링 개요 및 기획 방향

모델 : 브런치 = https://brunch.co.kr/
기간 : 2022년 11월 28일 ~ 2022년 12월 9일
GIT HUB 주소 : https://github.com/MatheGoD/My_2nd_project
기획 방향 : 브런치의 경우, 본래 특정 조건을 만족하는 유저들만이 작가가 되어 자신의 글을 출간하거나 자신의 책을 홍보하며 만약 유저가 구매를 희망할 경우 교보문고 혹은 타 사이트르 이동해 직접 책을 구매하는 방향으로 되어 있으나, 개발 환경 및 기간 상 조금 방향을 바꾸기로 하였다.
1. 누구나 다 작가가 될 수 있다.
2. 자신의 글을 작성 뒤 무료 또는 유료로 출간 할 수 있다.
3. 결제 시스템은 브런치 내부에서 카카오페이로 진행

간략한 팀원 소개 및 역할

프론트 : 3명
백엔드 : 2명
MY ROLE : 게시글 및 작가 좋아요, 게시글 CRUD, 장바구니 CRUD, 카카오 결제

시연 영상 보러가기

https://www.youtube.com/watch?v=lw5DjaUo_PU

사용한 기술 스택

백엔드 (NODE.js + EXPRESS, JavaScript, MySQL , AWS EC2 AND RDS )

ERD 설계

REVIEW :
커머스가 아니다보니, 사실 ERD 설계 같은 경우에는 간단하게 이뤄졌다. 큰 틀로 보면 유저와 글 중심으로 데이터의 관계가 성립했으며, 유저의 경우, 유저가 곧 작가가 되는 것이기 때문에 작가 테이블은 따로 만들지 않았다.

추후 시간이 남았을 시 추가 구현 사항으로 놓은게 몇 가지 있다.

  • 댓글 및 대댓글 기능.
  • 유저 갤러리 (사진)

GIT BOOK - API 명세

REVIEW :
깃북을 사용하면서 API명세를 만들어 놓으니 프론트 분들과 변수명을 맞추는 것도 데이터 구조와 REST API도 확실히 파악 할 수 있어 시간을 확실히 줄 일 수 있었다.


정기 Meeting 기록

REVIEW :

기존 1차 프로젝트 당시에도 미팅을 진행했었지만, 하나하나 세세한 기록까지 남길 생각은 하지 않았다. 이번에는 조금 더 구체적으로 기록을 남기고자 매일 회의를 하면서 기록을 진행하였고 2주 동안 진행된 미팅에서 매주 월요일마다 스프린트 미팅을 진행해 업무 진행도와 회고를 하면서 진행을 했던 덕분인지 하루 프로젝트가 거침없이 진행되어 재밌었다.


구현 코드 설명 및 코드에 대한 회고

외부 API - KAKAO 결제

const axios = require('axios');
const { paymentDao } = require('../models');
const arrangePayment = async (item_name, quantity, total_amount, tax_free_amount) => {
    const APP_ADMIN_KEY = process.env.APP_ADMIN_KEY;
    const payment = await axios({
        method: 'post',
        url: 'https://kapi.kakao.com/v1/payment/ready',
        headers: {
            'Content-type': 'application/x-www-form-urlencoded;charset=utf-8',
            Authorization: `KakaoAK ${APP_ADMIN_KEY}`,
        },
        data: new URLSearchParams({
            cid: 'TC0ONETIME',
            partner_order_id: 'partner_order_id',
            partner_user_id: 'partner_user_id',
            item_name: item_name,
            quantity: quantity,
            total_amount: total_amount,
            tax_free_amount: tax_free_amount,
            approval_url: 'http://localhost:3000/payment',
            cancel_url: 'http://localhost:3000/payment/approval',
            fail_url: 'http://localhost:3000/payment/approval',
        }),
    });

    const { tid, next_redirect_pc_url } = payment.data;
    return { tid, next_redirect_pc_url };
};

const finalizePayment = async (user_id, tid, pg_token) => {
    const ADMIN_KEY = process.env.APP_ADMIN_KEY;
    const response = await axios({
        method: 'post',
        url: 'https://kapi.kakao.com/v1/payment/approve',
        headers: {
            Authorization: `KakaoAK ${ADMIN_KEY}`,
            'Content-type': 'application/x-www-form-urlencoded;charser=-utf-8',
        },
        data: new URLSearchParams({
            cid: 'TC0ONETIME',
            tid: tid,
            partner_order_id: 'partner_order_id',
            partner_user_id: 'partner_user_id',
            pg_token: pg_token,
        }),
    });
    if (response.status !== 200) {
        const err = new Error('SOMETHING WRONG WITH PAYMENT');
        err.status = 400;
        throw err;
    }
    const { item_name, amount, aid } = response.data;
    const price = amount.total;
    await paymentDao.purchaseList(user_id, item_name, price, aid);
    return 'PAYMENT MADE';
};

REVIEW :

사실 이번 2차 프로젝트에서 백엔드 부분 중 난도가 있었던 부분은 카카오 API 명세를 읽고 외부 API를 사용하는 방법이었다.

API 명세를 읽고 학습하는데 반나절 그리고 카카오 API 명세를 이용해 코드를 작성하는데 하루 정도 잡아 먹었고 나머지 기본적인 CRUD 라던가 좋아요 등은 비교적 쉽게 구현 할 수 있어서 2차 프로젝트는 1차보다는 긴장도가 조금 떨어졌다고 해도 과언이 아니었지만 외부 API를 사용하는 점이 재밌었다.

AXIOS를 이용해서 외부 API에 접근하는 방법이라던지 URLSearchParams를 이용해 바디 값으로 이용되는 data에 변화를 준다던지 그 2개의 부분 말고는 나만의 코드가 없다시피해 개인적인 만족도는 조금 떨어진 건 사실이다.

그리고 프론트에서 구현해야 될 부분이 많아 프론트 위주로 돌아가다 잊고 지나갔던 사실이 하나 있다면, 구매이력을 조금 더 구체화 해야된다는 점이다. item_name이라는 것은 유저가 선택한 여러 상품들이 하나의 배열에 담긴 것이 아닌 모든 상품들을 하나의 이름으로 치환한 것이다보니 구매 이력을 자세히 볼 수 없다는 점을 프론트가 완성이 되고 나서 깨달았던 터라 백단에서 수정하는 것이 크게 어렵지는 않지만 프론트에서는 시간 상 어려웠기에 그냥 넘어갔다.


전반적인 회고

REVIEW :

4L: Liked, Learned, Lacked, Longed for
😍 좋았던 것(Liked)
📚 배운 것(Learned)
💦 부족했던 것(Lacked)
🕯 바라는 것(Longed for)

  1. 좋았던 것(LIKED) :
    이번에는 프론트와의 소통이 너무나 만족스러웠다. 2번째라서 그런지 아니면 프로젝트를 같이 진행했던 사람들과의 케미가 좋아서 그런건지는 잘 모르겠으나 옆 팀에서는 회의 중독이 아닌가 싶을 정도로 서로 간의 업무 진행도와 개선해야 될 점등을 자주 나누고 서로 기록까지 했으며 그만큼 열정이 깊었다.

  2. 배운 것(LEARNED) :

    • 프론트와의 소통에서의 백엔드 개발자의 자세
    • GIT BOOK의 활용법
    • 외부 API 활용법 (AXIOS, FETCH, 등)
  3. 부족했던 것 (LACKED) :
    부족했던 것이라기보단 조금 아쉬웠던 것은 난이도다. 기획 방향 떄문이었는지 사실 백엔드 구현 보다는 프론트 분들의 난이도가 훨씬 높았기에 난이도가 높은 API를 다양하게 구현하지 못해 조금 아쉬웠다. AWS에 S3를 사용하여 조금 더 재밌는 API를 만들 수 있었는데 프론트에서 마크다운 형식으로 S3까지 전부 활용해서 구현을 했기에 백엔드에서 할 것이 많이 없었다.

  1. 바라는 것 (LONGED FOR) :
    다음 번 프로젝트 진행 시에는 백엔드와 프론트 간의 밸런스를 잘 맞춰 서로가 만족스러운 결과를 얻을 수 있는 여정이 되었으면 좋겠다. 그리고 의사소통의 경우에도 이 태세를 계속 이어가 그 어떤 프론트와도 이런 식으로 프로젝트가 잘 진행되었으면 좋겠다.
profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글