본 캠프_25일차

졸용·2025년 3월 24일

TIL

목록 보기
26/144

(3월24일)

⭐ Scheduler 프로젝트

지금까지 배웠지만 머리에 제대로 남지 못 했던 것들을 프로젝트를 만들면서 머리 속에 조금 더 명확하게 자리 잡도록 연습도 할 예정이다.

✅ 배움 List

1️⃣ 메서드 기본 구조

  • 접근제어자 + return 타입 + 메서드명 + ()

    접근제어자 : public, private, protected

    return 타입 : 배열타입 중에서 int[], 객체타입 중에서 String, Integer, 데이터타입 중에서 int, boolean, char

  • 접근제어자 + void + 메서드명 + ()

    ❗반환 타입이 없을 경우는 void 사용❗

  • 접근제어자 + static + 메서드명 + ()

❗static 이 붙은 변수나 메서드는 클래스 레벨에서 공유되며, 객체 인스턴스를 생성하지 않고도 직접 접근할 수 있다❗

  • 클래스 수준에서 공유
  • 객체 생성 없이 사용 가능
  • 메모리 효율성

예)

@DeleteMapping("/{id}")
    public String deleteSchedule(@PathVariable Long id) {
        scheduleList.remove(id);  // remove 함수 사용

        return "일정 삭제 완료";

    }

예시 코드에서 구조를 설명했을 때,

  • 접근 제어자 + return 타입 + 메서드명 + () 안에 매개변수

    매개변수가 있다면 () 안에 넣어주고, 없다면 비워둔다

만약에 void를 넣어서 수정할 경우,

@DeleteMapping("/{id}")
    public void deleteSchedule(@PathVariable Long id) {
        scheduleList.remove(id);  // remove 함수 사용
    }
  • void 는 반환 값 없이 메서드를 종료하겠다는 뜻이기 때문에, return 문이 없어져야 한다

2️⃣ git commit 컨벤션

앞으로는 나중의 협업을 위해 git commit 컨벤션을 지키며 커밋하는 습관을 들일 계획이므로, 커밋 컨벤션 설정이라는 것을 해보았다

먼저, 인텔리제이 터미널에서 touch .gitmessage.txt 명령어로 파일을 만들어주고, 파일의 내용은 아래와 같이 양식을 입력해줬다 (기본적인 양식으로 footer는 생략)

# <타입> : <제목> 형식으로 작성. 제목은 최대 50글자가 넘지 않도록 하고
# 제목을 아랫줄에 작성. 마침표X, 특수기호X, 영문 첫 글자 대문자, 현재시제

#####################
# 본문(추가 설명)을 아랫줄에 작성 (관련된 이슈 번호 등 함께)

#####################
# feat : 새로운 기능 추가
# fix : 버그 수정
# docs : 문서 수정
# style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
# refactor : 코드 리펙토링
# test : 테스트 코드, 리펙토링 테스트 코드 추가
# chore : 빌드 업무 수정, 패키지 매니저 수정
#####################

출처: https://pgmjun.tistory.com/85

이 파일의 위치는 README.md 파일과 같은 프로젝트 내의 최상위 경로 안에 만들어주면 된다

.gitmessage.txt 파일을 만들어준 뒤에 git config --global commit.template .gitmessage.txt 명령어를 터미널에 입력해서 설정 완료!

git config --global commit.template <파일경로> : 커밋 메시지 설정하는 명령어

이렇게 설정해두면 인텔리제이에서 커밋을 하려고 할 때 자동으로 양식이 입력되어

커밋할 때마다의 번거로움도 적어지고, 누가 봐도 어떤 부분에서 수정이 있었는지 등의 세부사항을 한눈에 보기 쉽다



✅ API 명세서


|     기능     | Method |    URL     | Path Variable | Request Parameter |                               Request Body                                |                                      Response                                      |     상태코드     |
|:----------:|:------:|:----------:|:-------------:|:-----------------:|:-------------------------------------------------------------------------:|:----------------------------------------------------------------------------------:|:------------:|
|   스케줄 생성   |  POST  | /schedules |       X       |         X         | {<br/>"title": "제목",<br/>"contents": "할 일 내용",<br/>"writer": "작성자명"<br/>} | {<br/>"id": 1,<br/>"title": 제목1,<br/>"contents": 할 일 내용1,<br/>"writer": 작성자명<br/>} |  200: 정상등록   |
| 스케줄 단건 조회  |  GET   |   /{id}    |   id (Long)   |         X         |                                     X                                     |    {<br/>"id": 1,<br/>"title": 제목1,<br/>"contents": 할 일 내용1,<br/>"writer": 작성자명    |  200: 정상조회   |
| 스케줄 수정(전체) |  PUT   |   /{id}    |   id (Long)   |         X         |             {<br/>"title": "수정된 제목",<br/>"contents": "수정된 내용"             | {<br/>"id": 1,<br/>"title": "수정된 제목",<br/>"contents": "수정된 내용",<br/>"writer": 작성자명 |  200: 정상수정   |
|   스케줄 삭제   | DELETE |   /{id}    |   id (Long)   |         X         |                                     X                                     |                                  "msg": "일정 삭제 완료"                                  |  200: 정상삭제   |



✅ ERD

  • E (Entity. 개체)

    구현 할 서비스의 영역에서 필요로 하는 데이터를 담을 개체

  • A (Attribute. 속성)

    각 개체가 가지는 속성

  • R (Relationship. 관계)

    개체들 사이의 관계를 정의



✅ CRUD

package com.myproject.scheduler.controller;

import com.myproject.scheduler.dto.ScheduleRequestDto;
import com.myproject.scheduler.dto.ScheduleResponseDto;
import com.myproject.scheduler.entity.Scheduler;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/schedules")
public class ScheduleController {

    private final Map<Long, Scheduler> scheduleList = new HashMap<>();

    // 1. 일정 추가
    @PostMapping
    public ScheduleResponseDto createSchedule(@RequestBody ScheduleRequestDto dto) {

        /**
         * 식별자가 중복되지 않도록 1씩 증가
         * scheduleList가 비어있으면 treu 반환 -> scheduleID에 1 할당
         * 비어있지 않으면 false 반환 -> scheduleList의 키 중 가장 큰 값에 1을 더한 값을 scheduleID에 할당
         */
        Long id = scheduleList.isEmpty() ? 1 : Collections.max(scheduleList.keySet()) + 1;

        /**
         * 요청받은 데이터로 Schedule 객체 생성
         */
        Scheduler schedule = new Scheduler(id, dto.getTitle(), dto.getContents(), dto.getWriter());

        /**
         * Inmemory DB에 Schedule 저장
         */
        scheduleList.put(id, schedule);

        return new ScheduleResponseDto(schedule);
    }

    // 2. 일정 조회
    @GetMapping("/{id}")
    public ScheduleResponseDto findScheduleById(@PathVariable Long id) {

        Scheduler schedule = scheduleList.get(id);

        return new ScheduleResponseDto(schedule);
    }

// 3. 일정 수정
    @PutMapping("/{id}")
    public ScheduleResponseDto editScheduleById(@PathVariable Long id, @RequestBody ScheduleRequestDto dto) {
        Scheduler schedule = scheduleList.get(id);

        schedule.edit(dto);

        return new ScheduleResponseDto(schedule);
    }

// 4. 일정 삭제
    @DeleteMapping("/{id}")
    public String deleteSchedule(@PathVariable Long id) {
        scheduleList.remove(id);  // remove 함수 사용

        return "일정 삭제 완료";

    }
}
profile
꾸준한 공부만이 답이다

4개의 댓글

comment-user-thumbnail
2025년 3월 24일

유용한 내용 많이 배우고 갑니다!

답글 달기
comment-user-thumbnail
2025년 3월 24일

void와 return, git 컨벤션에 대해 잘 배우고 갑니다!

답글 달기
comment-user-thumbnail
2025년 3월 24일

git touch... 잊지 않겠습니다

1개의 답글