끝을 보는 용기

Day 093 - Baro5Nda(바로온다) 프로젝트 10%, 목표는 인후염에서 벗어나기

writingforever162 2025. 1. 7. 23:52

1. 프로젝트 진행 상황 및 계획

🥇 API 명세서, ERD, 데이터베이스 스키마(Database Schema) 확정 짓기 (진행 중, 25.01.08 완료 목표)
🥈 Baro5Nda(바로온다) 주문 CRUD 구현 끝내기 (진행 전, 25.01.08 완료 목표)

🥉 Baro5Nda(바로온다) 주문 CRUD를 팀 프로젝트에 합치기 (진행 전, 25.01.08 완료 목표)
4️⃣ Spring 심화 프로젝트 도전 과제 6단계 문서 작성 끝내기 (진행 중, 25.01.08 오전 완료 목표)

5️⃣ 대출한 전자책 10% 이상 읽기 (진행 중, 25.01.08 완료 목표)  

 

2. 'Baro5Nda(바로온다)'란?

(1) 프로젝트 소개

▶ 고객은 음식을, 사장님은 주문을 빠르고 쉽게 받을 수 있도록 돕는 음식 배달 앱 아웃소싱 프로젝트

(2) 이름의 의미 

Baro(바로): 빠르고 간편한 음식 배달 서비스

▶ 5: 별점 5점 만점 

▶ 5Nda(온다): ON 버튼을 누르듯 클릭만으로 쉽고 빠르게 음식을 주문할 수 있다는 점을 강조함

(3) 상세 설명: 고객은 앱으로 간편하게 주문하고 주문 현황을 쉽게 추적할 수 있다. 사장님은 가게를 최대 3개까지 열 수 있으며 가게마다 손쉽게 주문을 받을 수 있다. Baro5Nda(바로온다)는 이러한 기능으로 고객과 사장님 모두 5점 만점으로 만족하기를 목표로 한다. 

 

3. 프로젝트 S.A(Starting Assignments)

(1) API 명세서 

(2) ERD(Entity Relationship Diagram)

(3) 데이터베이스 스키마

더보기
CREATE TABLE USERS (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '고객 식별자',
    email VARCHAR(255) NOT NULL UNIQUE COMMENT '고객 이메일',
    password VARCHAR(255) NOT NULL COMMENT '고객 비밀번호',
    authority ENUM('USER', 'OWNER') NOT NULL COMMENT '권한 (USER / OWNER)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '삭제 여부',
    deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '삭제일'
);

CREATE TABLE OWNERS (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사장님 식별자',
    email VARCHAR(255) NOT NULL UNIQUE COMMENT '사장님 이메일',
    password VARCHAR(255) NOT NULL COMMENT '사장님 비밀번호',
    authority ENUM('OWNER') NOT NULL COMMENT '권한',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '삭제 여부',
    deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '삭제일'
);

CREATE TABLE STORES (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '가게 식별자',
    owner_id BIGINT NOT NULL COMMENT '사장님 식별자(외래키)',
    store_name VARCHAR(255) NOT NULL COMMENT '가게 이름',
    minimum_purchase BIGINT NOT NULL COMMENT '주문 최소 금액',
    opens_at TIME NOT NULL COMMENT '여는 시간 (날짜 제외)',
    closes_at TIME NOT NULL COMMENT '닫는 시간 (날짜 제외)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '삭제 여부',
    deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '삭제일',
    FOREIGN KEY (owner_id) REFERENCES OWNERS(id)
);

CREATE TABLE MENUS (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '메뉴 식별자',
    store_id BIGINT NOT NULL COMMENT '가게 식별자(외래키)',
    menu_name VARCHAR(255) NOT NULL COMMENT '메뉴 이름',
    menu_price BIGINT NOT NULL COMMENT '메뉴 가격',
    menu_info VARCHAR(255) COMMENT '메뉴 정보',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '삭제 여부',
    deleted_at TIMESTAMP NULL DEFAULT NULL COMMENT '삭제일',
    FOREIGN KEY (store_id) REFERENCES STORES(id)
);

CREATE TABLE ORDERS (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '주문 식별자',
    user_id BIGINT NOT NULL COMMENT '고객 식별자(외래키)',
    store_id BIGINT NOT NULL COMMENT '가게 식별자(외래키)',
    order_status ENUM('PENDING', 'ACCEPTED', 'CANCELED', 'DELIVERING', 'DELIVERED') NOT NULL COMMENT '주문 상태',
    menu_name VARCHAR(255) NOT NULL COMMENT '주문한 메뉴 이름',
    total_count BIGINT NOT NULL COMMENT '주문한 메뉴 총 수량',
    ordered_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '주문일',
    status_updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '주문 상태 수정일',
    FOREIGN KEY (user_id) REFERENCES USERS(id),
    FOREIGN KEY (store_id) REFERENCES STORES(id)
);

CREATE TABLE REVIEWS (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '리뷰 식별자',
    user_id BIGINT NOT NULL COMMENT '고객 식별자(외래키)',
    order_id BIGINT NOT NULL COMMENT '주문 식별자(외래키)',
    store_id BIGINT NOT NULL COMMENT '가게 식별자(외래키)',
    rating BIGINT NOT NULL COMMENT '리뷰 별점 (5점 만점)',
    contents VARCHAR(255) COMMENT '리뷰 내용',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    FOREIGN KEY (user_id) REFERENCES USERS(id),
    FOREIGN KEY (order_id) REFERENCES ORDERS(id),
    FOREIGN KEY (store_id) REFERENCES STORES(id)
);

4. 회고

이번에는 반드시 인후염에서 벗어날 테다.


팀장님 뒤에서 묵묵하게 돕는 팀원이니까.

 

팀 전체의 의견을 구하거나 아이디어를 낼 때 말고 무언가를 결정해야 할 때는 가만히 팀장님의 판단을 기다리는 팀원이 되기로 했다. 팀 프로젝트 때 두 번 팀장 자리에 앉아 봤으니, 이번에는 '튀지 않게' 노력하기로 했다. 힘들지만 지금 능력치가 100이라고 했을 때 120을 요구하는 '주문' 기능을 맡겠다고 했다. 시간이 흐를수록 프로젝트가 어려워지는데, 이번에 맡은 부분이 가장 어렵지 않을까 싶었다. 공부할 거리와 숙달해야 할 거리는 차고 넘치는데 '이 상태로 취업할 수 있을까?'라는 걱정에 전날 밤새 뒤척였으면서도 오늘 전자책을 한 권 빌렸다. 도서관에 가서 종이책을 빌려서 읽으면 더할 나위 없이 좋겠지만, 밖으로 나가기 쉽지 않은 만큼 차선책을 골랐다. 부디 이번에 빌린 책이 지식의 공백을, 프로젝트를 하나하나 해나갈수록 커지는 불안감을 날려주면 좋겠다.