초코딩(chocoding)

[Project - 게시판 / spring boot] board Insert / board Update / board Detail / 게시글 수정한 시간 테이블에 담기 / 논리적 삭제란? 본문

Project

[Project - 게시판 / spring boot] board Insert / board Update / board Detail / 게시글 수정한 시간 테이블에 담기 / 논리적 삭제란?

sweetychocoding 2024. 2. 19. 22:39
728x90

오늘은 insert와 update, detail까지 구현했다.

사실 주말 전에 insert를 마쳤고

주말동안 회고쓰는 것을 깜빡해서

오늘 구현한 update, detail과 같이 적는다

(저번주 금요일에 점심을 3시간동안 먹어버려서 insert 하나 구현함...... )

 

어쨌든 crud는 별로 설명할게 없기 때문에

게시글을 수정한 시간을 테이블에 담는 것만

알려주도록 하겠다.

 

근데 insert 문에서 오류가 있었는데

db에서 board_delyn (논리적 delete를 위한 컬럼)의 속성을

default와 not null을 주었음에도 불구하고

default value가 db에 저장이 되지 않았다.

 

하지만 이상하게도 int 타입은 아무 문제 없이 저장이 되었다.

 

 

이것을 해결하기 위해 1시간정도..... 삽질을 했고

직접 필드 주입을 해주었다.

 

하지만 spring boot에서 가장 적합한 의존성 주입 방식은

"생성자 주입" 이다.

 

그래서 다시 생성자 주입으로 바꿔주었다.

 

 

이게 gpt의 의견인데

솔직히 내가 원하는 100% 답은 아닌 것 같다.

 

다른 이유가 분명 있었는데......

까먹어버렸다.

(하핫?)

 

내일 스터디 그룹에 가서

물어봐야지

(중요도 100%%%%%%%%)

 

 

 

 

 

따라서 코드는 다음과 같다.

 

 

Insert

// Insert =====================================================
	@GetMapping("/boardInsert")
	public void getBoardInsert() {
		
	} // getBoardInsert()
	
	@PostMapping("/boardInsert")
	public String postBoardInsert(RedirectAttributes rttr, Board entity) {
		
		String uri = "redirect:boardPage";
		
		entity.setBoard_delyn('N');
		entity.setBoard_regdate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		
		try {
			if (boardService.save(entity) > 0) {
				rttr.addFlashAttribute("message", "board insert success");
			} else {
				rttr.addFlashAttribute("message", "board insert fail");
				uri = "board/boardInsert";
			}
		} catch (Exception e) {
			uri = "board/boardInsert";
			rttr.addFlashAttribute("message", "board insert fail");
			System.out.println("BoardInsert Exception => " + e.toString());
		}

		return uri;
	} // postBoardInsert()

 

 

 

 

 

Update

// Update =====================================================
	@PostMapping("/boardUpdate")
	public String postBoardUpdate(Model model, Board entity, RedirectAttributes rttr) {
	    
	    String uri = "redirect:boardDetail?board_id=" + entity.getBoard_id();
	    try {
	        entity.setBoard_moddate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
	        
	        if (boardService.save(entity) > 0) {
	        	//rttr.addFlashAttribute("boardDetail", entity);
	            rttr.addFlashAttribute("message", "Board Update Success");
	        } else {
	            model.addAttribute("message", "Board Update Fail");
	            uri = "board/boardUpdate";
	        }
	    } catch (Exception e) {
	        System.out.println("Board Update Exception => " + e.toString());
	        uri = "board/boardUpdate";
	    }
	    
	    return uri;
	} // postBoardUpdate()

 

나는 게시글이 등록된 날짜/시간, 수정된 날짜/시간, 삭제된 날짜/시간을 DB를 설계할 때 컬럼으로 만들었기 때문에

수정 버튼이 눌리고 UPDATE가 되면 수정된 날짜가 DB에 저장되게 된다.

 

 

Detail

	// Detail =====================================================
	@GetMapping("/boardDetail")
	public String getBoardDetail(Model model, Board entity, HttpServletRequest request) {

		model.addAttribute("boardDetail", boardService.selectDetail(entity.getBoard_id()));

		if ("U".equals(request.getParameter("jCode"))) {
			return "board/boardUpdate";
		} else {
			return "board/boardDetail";
		}

	} // getBoardDetail()

 

 

 

 

 

 

 

 

.

.

.

 

지금은 DELETE 구현중인데

팀프로젝트 때 했던 방식과 다르게 논리적 삭제를 하려고 한다.

(팀플 때도 이렇게 했었어야 됐는데..... 할 일은 많고... 이미 테이블 다 만들어서 하려면 다 갈아 엎어야 하고.... 하핫)

 

여기서 !!

논리적 삭제란 ?

 

=> 클라이언트가 삭제 버튼을 눌렀을 때 실제로 DB의 값이 삭제되는 것이 아닌

     DB에는 삭제된 날짜나 시간 또는 삭제 여부만 저장이 되고

     클라이언트 측에서만 삭제된 것처럼 구현 하는 것을 말한다.

     (즉, DB값은 살아있음)

 

 

어쨌든.... 구현 중이긴한데요....

지금 ................... 뭐가 안돼서 오늘 회고를 쓰지는

못 할 것 같습니다............

 

내일 쓰도록 할게요

 

 

빠잉

728x90