MDP

2023-11-06 본문

TIL

2023-11-06

모다팡 2023. 11. 6. 21:26

게시판 과제  진행 과정

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)&&noticelist.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)&&noticelist.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