💻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
- 개인과제 기본요구사항 끝내기!
- 모의면접준비하기^^..