MDP
2023-11-06 본문
게시판 과제 진행 과정
1. 프로젝트 설계를 먼저 진행하였습니다.
- controller, dto entity로 구분하여 패키지를 구분하였습니다.
- controller
- Model과 View 사이의 상호작용을 조정하고 제어합니다.
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트 합니다.
=> 클라이언트에게 Request를 받아서 view에서 처리 후 Response를 통해 클라이언트에게 보여줍니다. - dto
- Data Transfer Object => 데이터 전송 및 이동을 위해 생성되는 객체를 의미합니다.
- 클라이언트에서 보내오는 데이터를 객체로 처리합니다.
- DB와의 소통을 위한 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환 및 반환할때 사용합니다. - entity
- 데이터베이스와 연결할때 사용한다.
- 관련자료: https://velog.io/@mincho920/Spring-NoArgsConstructor
2. entity를 구성하였다.
package com.mdpang_spring.notice_board.entity;
import com.mdpang_spring.notice_board.dto.RequestDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
// 데이터 조회
@Getter
// 데이터 입력
@Setter
// entity는 무조건 NoArgsConstructor를 가져야 한다
//
@NoArgsConstructor
public class NoticeBoard {
private long id;
private String title;
private String username;
private String password;
private String contents;
public NoticeBoard(RequestDto requestDto){
this.id = requestDto.getId();
this.username = requestDto.getUsername();
this.title = requestDto.getTitle();
this.contents = requestDto.getContents();
this.password = requestDto.getPassword();
}
public void update(RequestDto requestDto) {
this.title = requestDto.getTitle();
this.contents=requestDto.getContents();
}
}
3. dto 코드 작성
- RequestDto
package com.mdpang_spring.notice_board.dto;
import lombok.Getter;
@Getter
public class RequestDto {
private long id;
private String title;
private String username;
private String password;
private String contents;
}
- ResponseDto
package com.mdpang_spring.notice_board.dto;
import com.mdpang_spring.notice_board.entity.NoticeBoard;
import lombok.Getter;
@Getter
public class ResponseDto {
private long id;
private String title;
private String username;
private String contents;
public ResponseDto(NoticeBoard noticeBoard) {
this.id= noticeBoard.getId();
this.username = noticeBoard.getUsername();
this.title=noticeBoard.getTitle();
this.contents=noticeBoard.getContents();
}
}
4. Controller 작성
package com.mdpang_spring.notice_board.controller;
import com.mdpang_spring.notice_board.dto.RequestDto;
import com.mdpang_spring.notice_board.dto.ResponseDto;
import com.mdpang_spring.notice_board.entity.NoticeBoard;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
public class NoticeBoardController {
private final Map<Long, NoticeBoard> noticelist= new HashMap<>();
@PostMapping("/notice")
public RequestDto createNotices(@RequestBody RequestDto requestDto){
NoticeBoard noticeBoard = new NoticeBoard(requestDto);
Long maxId = noticelist.size() >0? Collections.max(noticelist.keySet())+1 :1;
noticeBoard.setId(maxId);
noticelist.put(noticeBoard.getId(),noticeBoard);
ResponseDto responseDto = new ResponseDto(noticeBoard);
return requestDto;
}
@GetMapping("/notice")
public List<ResponseDto> getNotice(){
List<ResponseDto> responseDtos = noticelist.values().stream().map(ResponseDto::new).toList();
return responseDtos;
}
@PutMapping("/notice")
public Long updateNotice(@PathVariable Long id,@PathVariable String password,@RequestBody RequestDto requestDto)
throws IllegalAccessException {
if (noticelist.containsKey(id)&¬icelist.get(id).getPassword().equals(password)){
NoticeBoard noticeBoard = noticelist.get(id);
noticeBoard.update(requestDto);
return noticeBoard.getId();
}
else {
throw new IllegalAccessException("선택한 메뉴는 존재하지않습니다");
}
}
@DeleteMapping("/notice")
public Long deletenotice(@PathVariable Long id,@PathVariable String password) throws IllegalAccessException {
if (noticelist.containsKey(id)&¬icelist.get(id).getPassword().equals(password)){
noticelist.remove(id);
return id;
}
else {
throw new IllegalAccessException("선택한 메뉴는 존재하지않습니다.");
}
}
}
이번 프로젝트를 하면서 느꼈던 장/단점
장점
- SpringBoot를 이용한 CRUD를 구현할 수 있어서 좋았습니다.
- SpringBoot를 직접 사용하고 프로젝트를 진행하면서 Jackson을 통한 데이터 전달 방법에 대해서도 쉽게 이해할수있었습니다.
단점
- 프로젝트 기한이 너무 짧아서 아쉬웠습니다.
- 프로젝트의 목적이 API 설계, UML 작성, ERD 작성 등 프로젝트 구성에 대한 툴을 사용하고 싶었지만 참고 자료로 추천해준 내용만으로 이해하기에는 부족한 점이 있어서 아쉬웠습니다.
보완할점
- 프로젝트 설계를 깃 허브와 연결을 통해 팀 프로젝트 진행을 할 때 문제 없이 사용하는 방법에 대하여 숙지
- DataBase를 이용하여 프로젝트 보완을 진행 필요
'TIL' 카테고리의 다른 글
2023- 12-08 CRUD 구현 (0) | 2023.12.08 |
---|---|
2023-11-10 (0) | 2023.11.13 |
2023-11-07 (0) | 2023.11.07 |
2023-11-03 (0) | 2023.11.03 |
2023-10-31 공부일지 (0) | 2023.10.31 |