Skip to content

choiminu/Todo-Service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

124 Commits
 
 
 
 

Repository files navigation

Todo-Service

Todo-Service는 로그인한 사용자가 자신의 카테고리 안에서 할 일(Task)을 생성하고 관리할 수 있는 애플리케이션입니다.
특정 Task는 공유 링크로 외부에 공개할 수 있으며 공유 시 만료일과 권한(READ/EDIT) 을 지정해 읽기 전용 또는 편집 가능 상태로 노출할 수 있습니다.


메인페이지 할일 등록

회원가입

로그인


소스 빌드 및 실행 방법

방법 1. Docker 환경에서 실행

# 1. 소스 클론
git clone https://github.com/choiminu/Todo-Service.git

# 2. 프로젝트 폴더 이동
cd Todo-Service

# 3. Docker Compose 실행 (백엔드 + DB 컨테이너 기동)
docker compose -f backend/docker-compose.yml up -d

방법 2. Docker 없이 로컬 실행

# 1. 소스 클론
git clone https://github.com/choiminu/Todo-Service.git

# 2. 프로젝트 폴더 이동
cd Todo-Service/backend

# 3. .env 또는 application.yml(DB 접속 정보) 수정
# 예시
SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/todo_db
SPRING_DATASOURCE_USERNAME=todo_user
SPRING_DATASOURCE_PASSWORD=todo_pass

# 4. 백엔드 서버 실행
./gradlew bootRun

사용한 기술

  • Java 17
  • Spring Boot 3.5.4
  • Spring Data JPA
  • Spring Security
  • Mysql

주력으로 사용한 라이브러리

Spring Data JPA

Spring Data JPA는 JPA를 기반으로 한 ORM 기술을 단순화하여 제공하는 라이브러리입니다. 기본적인 CRUD 메서드를 제공하고 테이블을 빠르게 생성 및 설계할 수 있어 제한된 시간 내에 프로젝트를 시작하기에 적합하다고 생각해 해당 라이브러리를 사용하였습니다.

MapStruct

MapStruct는 Java 애플리케이션에서 객체 간 변환 코드를 컴파일 시점에 자동 생성해주는 라이브러리입니다. 여러 팀 프로젝트를 진행하면서 DTO와 엔티티 간 변환 로직이 반복적이고 코드가 지저분해진다는 문제를 자주 경험했습니다. 과거에는 Mapper 클래스를 직접 만들어 수동으로 변환 로직을 작성했지만 이번 과제를 계기로 MapStruct를 학습하고 적용하여 단순한 변환 과정을 자동화할 수 있었습니다. 다만 파라미터가 객체로 포장되어 있거나 복잡한 변환 과정이 필요한 경우에는 여전히 수동으로 변환 로직을 작성했지만 단순한 변환에서는 매우 효율적으로 활용할 수 있었습니다.

QueryDLS

QueryDSL은 JPQL을 타입 안전하게 작성할 수 있도록 지원하는 라이브러리 입니다. 이번 과제에서는 사용자가 생성한 할 일(Task)을 여러 조건(카테고리, 상태, 기간 등)으로 필터링해야 하는 문제가 있었고 단순 쿼리 메서드만으로는 복잡한 조건을 처리하기 어려웠기 때문에 QueryDSL을 도입하였습니다.

Spring Security

Spring Security는 스프링 애플리케이션에서 인증과 인가를 담당하는 보안 프레임워크입니다. 이번 과제에서는 직접적인 인증/인가 기능을 구현하지는 않았지만 비밀번호 암호화를 위해 PasswordEncoder를 활용하였습니다.


DB 스키마 & ERD

create table user
(
    id       bigint auto_increment primary key,
    email    varchar(255) not null,
    password varchar(255) not null,
    constraint uq_user_email unique (email) 
);
create table category
(
    id      bigint auto_increment primary key,
    user_id bigint       not null,
    name    varchar(255) not null,
    constraint fk_category_user_id foreign key (user_id) 
        references user (id)
        on delete cascade
);
create table task
(
    id              bigint auto_increment primary key,
    user_id         bigint                            not null,
    category_id     bigint                            not null,
    title           varchar(255)                      not null,
    content         varchar(2550)                     null,
    status          enum ('DONE', 'NONE', 'PROGRESS') not null,
    permission      enum ('EDIT', 'VIEW')             null,
    shared          bit                               null,
    shared_link     varchar(255)                      null,
    start_date      date                              not null,
    end_date        date                              not null,
    expiration_date date                              null,

    constraint fk_task_user_id 
        foreign key (user_id) references user (id)
        on delete cascade,

    constraint fk_task_category_id 
        foreign key (category_id) references category (id)
        on delete cascade
);
image

API 명세서

  • 자세한 명세는 Swagger UI에서 확인 가능합니다.
영역 메서드 경로 설명
Auth POST /api/auth/logout 로그아웃
Auth POST /api/auth/login/{provider} 로그인 ({provider}: 예. google, github 등)
User POST /api/users 회원가입
Task Share POST /api/share/tasks Task 공유 링크 생성
Task Share GET /api/share/tasks/{token} 공유 토큰으로 Task 조회
Task Share PATCH /api/share/tasks/{token} 공유 토큰으로 Task 수정
Category GET /api/categories 카테고리 목록 조회
Category POST /api/categories 카테고리 생성
Category DELETE /api/categories/{id} 카테고리 삭제
Category PATCH /api/categories/{id} 카테고리 수정
Task GET /api/tasks 할 일 검색
Task POST /api/tasks 할 일 생성
Task GET /api/tasks/{id} 할 일 단건 조회
Task DELETE /api/tasks/{id} 할 일 삭제
Task PATCH /api/tasks/{id} 할 일 수정

About

Todo 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages