[TIL] 백엔드 부트캠프 7주차 (2024/08/26 월) 스케쥴 앱 JPA로 설계하기

2024. 8. 27. 00:36·TIL 🔖/TIL

💻Today's Schedule

09:00 ~ 10:00 CODEKATA
10:00 ~ 11:00 개인 학습 
11:00 ~ 12:00 팀미팅/코드리뷰
12:00 ~ 13:00 점심 식사
13:00 ~ 16:00 개인학습
16:00 ~ 18:00 특강
18:00 ~ 19:00 저녁 식사
19:00 ~ 21:00 개인 학습

✍ Today I Learned

CODEKATA

  • 알고리즘 (92번 프로세스)
  • SQL (64번 헤비 유저가 소유한 장소)
 

[프로그래머스/JAVA] 프로세스

문제 설명 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로

fargoewave.tistory.com


JPA Schedule APP 

숙련주차에 개인과제 1개와 팀 프로젝트 1개를 진행한다. 이번 개인과제는 입문주차에 JDBC로 제작했던 Schedule App을 JPA로 제작하는 과제이다. 0~6단계의 기본요구항과 7~10단계의 추가요구항으로 나누어져 있는데, 이번 과제에서는 욕심을 내지 않고^^ 기본요구사항 마스터... 를 목표로 천천히 진행해보기로 했다. 과제의 요구사항은 아래와 같다.

  • 모든 테이블은 고유 식별자(ID)를 가짐
  • 3 Layer Architecture 에 따라 각 Layer의 목적에 맞게 개발
  • Entity를 그대로 반환하지 말고, DTO에 담아서 반환함
  • CRUD 필수 기능은 모두 데이터베이스 연결 및 JPA를 사용해서 개발함
  • JDBC와 Spring Security는 사용하지 않음.
  • 인증/인가 절차는 JWT를 활용하여 개발함.
  • JPA의 연관관계는 양방향으로 구현함.
0단계 과제의 첫걸음 작성
- API 명세서 작성 (프로젝트 root 경로 README.md)
- ERD 작성 (프로젝트 root 경로 README.md 첨부)
- SQL 작성 (프로젝트 root 경로에 .sql 파일 작성)
1단계 일정 CRU JPA 입문
- 일정 저장, 단건 조회, 수정 가능
- 일정 필드: 작성 유저명, 할일 제목, 할일 내용, 작성일, 수정일
2단계 댓글 CRUD 연관관계 기본
- 일정에 댓글 작성 가능
- 댓글과 일정은 연관관계 가짐
- 댓글 저장, 단건 조회, 전체 조회, 수정, 삭제 가능
- 댓글 필드: 댓글 내용, 작성일, 수정일, 작성 유저명
3단계 일정 페이징 조회 페이징/정렬
- Pageable과 Page 인터페이스 활용
- 쿼리 파라미터로 페이지 번호, 페이지 크기 전달
- 조회 필드: 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명
- 기본 페이지 크기: 10
- 수정일 기준 내림차순 정렬
4단계 일정 삭제 영속성 전이
- 일정 삭제 시 댓글도 함께 삭제
- JPA 영속성 전이 기능 활용
5단계 유저 CRUD 연관관계 심화
- 유저 저장, 단건 조회, 전체 조회, 수정, 삭제 가능
- 유저 필드: 유저명, 이메일, 작성일, 수정일
- 일정 필드: 작성 유저명 → 유저 고유 식별자로 변경
- 일정 작성 유저가 추가로 담당 유저 배치 가능
- 유저와 일정은 N
관계 (단, @ManyToMany 사용 금지)
6단계 일정 조회 개선 지연 로딩
- 일정 단건 조회 시 담당 유저의 고유 식별자, 유저명, 이메일 포함
- 일정 전체 조회 시 담당 유저 정보 포함하지 않음
- JPA 지연 로딩 기능 활용

 

  • 일단 늘 그랬던 것처럼 설계단계에서 막막함을 느꼈는데, 우선 요구사항을 보며 프로그램 흐름을 확인했다. 
  • 1~4단계에서는 일정과 댓글의 간단한 연관관계가 설정되고, 기본적인 일정 저장,조회,수정 및 댓글 작성,조회,수정,삭제 기능이 구현된다. 복잡한 관계(User)가 도입되지 않은 상태라 데이터 베이스 구조가 간단하게 그려졌다.
  • 하지만 5~6단계에서는 사용자 엔티티가 추가되어 일정과 댓글에 복잡한 연관관계를 가지게 되고 일정에 여려 명의 담당자를 추가할 수 있어 데이터베이스가 크게 변동된다. 
  • 이전 과제에서 단계별로 설계를 해야 한다는 튜터님의 조언이 있었기 때문에 우선 0단계에서는 1~4단계에 대한 설계를 토대로 ERD와 API, SQL을 작성했다. 
0 단계 : 과제의 첫걸음 

1. ERD / SQL 

  • 일정과 댓글은 연관 관계를 가지고 있다. 
    • Schedule 테이블 : 일정 정보를 저장한다. 각 일정은 고유 ID를 가지며, 작성자, 제목, 내용, 생성일, 수정일 등의 정보를 포함한다.
    • Comment 테이블 : 각 일정에 대한 댓글 정보를 저장한다. 댓글은 특정 일정에 속하며, 작성자, 내용, 생성일, 수정일 등의 정보를 포함한다.
    • 하나의 일정에 여러 개의 댓글이 연결될 수 있기 때문에, Schedule 테이블의 id 필드를 Comment 테이블의 schedule_id 필드와 연결했다. 

  • Primary Key: 각 테이블은 고유 식별자를 가지도록 id 필드를 PK로 설정하였다.
  • Foreign Key: 댓글 테이블에서 schedule_id 필드를 외래 키(FK)로 설정하여 일정과의 관계를 명시하였다.
  • 자동 증가(AUTO_INCREMENT): id 필드는 각 레코드가 추가될 때마다 자동으로 증가하도록 설정하였다.
  • 필수 필드 설정: username, title, content 등의 필드는 NOT NULL 제약 조건을 추가하여 반드시 값이 입력되도록 하였다.
더보기


-- Schedule 테이블
CREATE TABLE Schedule (
    id BIGINT AUTO_INCREMENT PRIMARY KEY, 
    username VARCHAR(50) NOT NULL,                  
    title VARCHAR(200) NOT NULL,                         
    content TEXT,                        
    created_at DATETIME,                 
    updated_at DATETIME                
);


-- Comment 테이블
CREATE TABLE Comment (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    schedule_id BIGINT NOT NULL,           
    username VARCHAR(50) NOT NULL,     
    content TEXT NOT NULL,                 
    created_at DATETIME,                  
    updated_at DATETIME,                  
    FOREIGN KEY (schedule_id) REFERENCES Schedule(id) -- Schedule 테이블과의 관계 설정
);

 

2. API 명세 작성

더보기
  • Schedules
기능 Method URL request response 상태코드
일정 등록 POST /schedules Body 등록된 일정 정보 200: 정상등록
일정 목록 조회 GET /schedules?page={page}&size={size} Query 일정 목록 응답 정보 200: 정상조회
선택한 일정 조회 GET /schedules/{id} Param 단건 일정 응답 정보 200: 정상조회
일정 수정 PUT /schedules/{id} Body 수정된 일정 정보 200: 정상수정
일정 삭제 DELETE /schedules/{id} Param 없음 200: 정상삭제

 

  • Comments
기능 Method URL request response 상태코드
댓글 등록 POST /comments Body 등록된 댓글 정보 200: 정상등록
댓글 목록 조회 GET /schedules/{scheduleId}/comments Param 댓글 목록 응답 정보 200: 정상조회
선택한 댓글 조회 GET /comments/{id} Param 단건 댓글 응답 정보 200: 정상조회
댓글 수정 PUT /comments/{id} Body 수정된 댓글 정보 200: 정상수정
댓글 삭제 DELETE /comments/{id} Param 없음 200: 정상삭제

 

1 단계 : 일정 CRU (JPA) 입문

 

쓰는 중.....

 

 

[자바] for, while문에 라벨링 붙이기 

 

[자바] for, while문에 라벨링 붙이기

위와 같은 이중 for문이 있습니다. 위 코드에서 break문은 어떤 반복문을 탈출할까요? 가장 가까운 반목문인 안쪽 반복문 입니다. 하지만, j가 5가 될때 두 반복문 모두 탈출하고 싶다면 어떻게 해

uknowblog.tistory.com

리턴 쓰기 애매한 경우

 

 


📝 회고

중꺾마..

🔖 Tomorrow's Goal

  • 개인과제 기본요구사항 끝내기! 
  • 모의면접준비하기^^..
'TIL 🔖/TIL' 카테고리의 다른 글
  • [TIL] 백엔드 부트캠프 8주차 (2024/09/02 월) 뉴스피드 프로젝트 : 설계
  • [TIL] 백엔드 부트캠프 7주차 (2024/08/30 금) @NoArgsConstructor와 protected 생성자 사용법
  • [TIL] 백엔드 부트캠프 6주차 (2024/08/23 금) RestTemplate, Entity 연관 관계
  • [TIL] 백엔드 부트캠프 6주차 (2024/08/22 목) Spring JWT
fargoe
fargoe
    fargoe
    fargoewave
    fargoe
    GitHub
    전체
    오늘
    어제
    • 분류 전체보기 (166)
      • TIL 🔖 (140)
        • TIL (69)
        • 코딩테스트 (71)
      • DEV (14)
        • Java & Spring (7)
        • MySQL (3)
        • Git&Github (4)
      • 개발지식 (10)
        • 알고리즘 (2)
        • 자료구조 (8)
        • CS (0)
      • 3D (1)
        • Unity (1)
      • ETC (0)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
fargoe
[TIL] 백엔드 부트캠프 7주차 (2024/08/26 월) 스케쥴 앱 JPA로 설계하기
상단으로

티스토리툴바