본문 바로가기
Project

[Todolist] ToDoList 과제 1차 TIL - 필수 구현까지

by 어떻게말이름이히힝 2024. 12. 5.

1차 API 설계

 

 

최종 API 설계(Notion 으로 작성)

 

 

ERD 설계 : 하나만 나오는게 맞나? 라고 계속 생각했는데 필수과제에선 하나만 나오는게 맞다.

도전 과제를 염두해두고 만든 것

러프

 

버전 내용

Spring 

jdk : corretto 17.0.13

Spring Boot : 3.3.6

Dependencies : Spring Web, Lombok, MySQLDriver, Spring Data JDBC, Thymeleaf

Database : MySQL 

 

 

사용한 테이블 생성 및 Postman raw

 

 -- User 테이블 생성
CREATE TABLE USER (
    USER_ID VARCHAR(255) PRIMARY KEY,  -- 사용자 ID, 기본 키 
    USER_NAME VARCHAR(100),                 -- 사용자 이름
    EMAIL VARCHAR(100),                -- 이메일
    REGIST_DATE DATE,                  -- 등록 날짜 (YY-MM-DD 형태)
    LAST_MODIFY_DATE DATE,             -- 마지막 수정 날짜 (YY-MM-DD 형태)
    PASSWORD VARCHAR(255)              -- 비밀번호
);

-- ToDoList 테이블 생성
CREATE TABLE ToDoList (
    LIST_ID BIGINT PRIMARY KEY,        -- 리스트 ID, 기본 키 (long 타입)
    USER_ID VARCHAR(255),              -- 사용자 ID, 외래 키 (String 타입)
    TITLE VARCHAR(255),                -- 제목
    CONTENTS TEXT,                     -- 내용
    CREATE_DATE DATE,                  -- 생성 날짜 (YY-MM-DD 형태)
    MODIFY_DATE DATE,                  -- 수정 날짜 (YY-MM-DD 형태)
    USER_NAME VARCHAR(100),                 -- 작성할 때 사용자 이름(user테이블의 이름과 같지 않음)
    FOREIGN KEY (USER_ID) REFERENCES USER(USER_ID)  -- USER 테이블의 USER_ID를 참조하는 외래 키 설정
);

 

+ PASSWORD 속성 추가 

 

+ FK 삭제 

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'ToDoList' AND COLUMN_NAME = 'USER_ID'; //외래키 이름 확인

ALTER TABLE ToDoList DROP FOREIGN KEY todolist_ibfk_1; //외래키 삭제

 

POSTMAN에서 테스트용으로 사용한 raw

{
    "userId" : "hh111",
    "name" : "hh",
    "title" : "데일리 루틴 풀기",
    "contents" : "링크1 링크2",
    "password" : "111"
}

 

{
    "userId" : "hh222",
    "name" : "hh2",
    "title" : "멤버카드 확인하기",
    "contents" : "링크3",
    "password" : "222"
}
 
 
{
    "userId" : "hh111",
    "name" : "hh3",
    "title" : "커피사오기",
    "contents" : "메가커피 아이스아메리카노 2000원",
    "password" : "111"
}

 

 

1번 오류

과제의 내용에 따라 처음에는 Database를 쓰지 않고 정보들을 컬렉션에 저장했다.

처음 프로젝트를 생성할 때 이것 저것 필요한 것 먼저 넣으니 아래와 같이 오류가 발생했다.

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

 

database 를 사용하려면 apllication.properties에 데이터베이스 연결 설정을 해주어야하는데, 데이터베이스를 사용하기 전 단계고 설정을 하나도 넣지 않아 오류가 발생했다.

 

application 파일에 아래와 같이 Annotation에 exclude 부분을 추가했고 성공적으로 돌아갔다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 

 

2번 오류

데이터베이스를 연결하는 코드로 교체하고 나서, datasource를 사용하는 부분에 빨간 줄이 그어졌다.

1번 오류에서 datasource자동설정 부분 클래스를 무시하라고 선언해주었기 때문에 발생했다.

해당 exclude  부분을 지우니 정상적으로 연결이 성공했다.

 

3번 오류

강의 보면서 따라했는데, 놓친 부분이 있었는지 list_id(java 파일내에선 id) 값이 증가하지 않았다.

SQL 부에서 설정하는 거였고
alter table todolist modify list_id bigint auto_increment primary key;

으로 list_id의 속성을 추가해주었다.

 

4번 오류

3번을 진행하다가 Mutilple primary key defined 라는 오류가 발생했는데, primary key를 삭제했다가 다시 시도해보니 잘 되었다.

alter table todolist drop primary key

alter table todolist modify column list_id bigint auto_increment primary key

 

 

자잘한 오류들은 디버깅을 사용해서 천천히 해결했다.

프로그램의 흐름이 대략

클라이언트 > Controller > Service > Repository > DB > Repository > Service > Controller > 클라이언트

라는 느낌이 들었다.