회원가입 구현 - 유효성 검사를 위해 기본적으로 제공해주는 :rules를 통해 구현 - 아이디 중복검사, 닉네임 중복 검사 추가 1. 백엔드 MemberController @RestController @RequiredArgsConstructor public class MemberController { final MemberService memberService; final PasswordEncoder passwordEncoder; @PostMapping("/api/member") public String saveMember(@RequestBody @Valid MemberDto memberDto) throws Exception{ memberService.saveMember(memberDto); return..
지난번에 공공데이터 승인이 떨어지지 않아 사용하지 못한 api를 호출해보자 1. 먼저 미리보기를 눌러서 api가 인증키로 잘 실행되는지 확인해봤다 > 미리보기시 한글이 아닌 러시아어로 api가 호출됨(관광데이터를 노어로 신청하는 실수 국문으로 다시 신청) > 일단 호출이 되기 때문에 승인처리가 된것으로 확인됨 2. 스프링부트에서 코드를 작성해서 api를 호출해보았다 import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.io.BufferedReader; import java.io.InputStreamReader; impor..
JPA를 활용해 CRUD 기능을 만들어보자 8. 답글 기능 추가로 인해 => - 원글 입력 시 maxID 값 조회 후 직접 지정 (ReplyRootId 적용하기 위해서) - 페이징 수정 (최근 작성된 원글, 답글 구조화 하여 sorting 되도록) 8.1 원글 입력 시 maxID 값 조회 후 직접 지정 BoardJpaService public Board postBoard(BoardDTO boardDTO) { int newBoardIdValue = this.getNewBoardIdValue(boardRepository); log.debug("newBoardIdValue="+newBoardIdValue); Board postData = Board.builder() .id(newBoardIdValue) .au..
JPA를 활용해 CRUD 기능을 만들어보자 7. 답글 기능 BoardJpaController @PostMapping(value = "/reply") public ApiResponse postBoardReplyContent(@RequestBody BoardDTO boardDTO){ return boardJpaService.postReply(boardDTO); } BoardRepository // JPQL != SQL @Query("Select b FROM Board b where b.id = ?1") // JPA를 이용하여 쿼리를 날린다. Board selectBoard(int id); @Query("SELECT MIN(b.orderNum) FROM Board b" + " WHERE b.replyRootI..
JPA를 활용해 CRUD 기능을 만들어보자 6. 다중 트랜잭션(복수 트랜잭션) 처리 추가 - 하나의 API를 요청할 때 DB에 Insert,Update,Delete하는 로직을 여러 개 실행해야할 때 댓글을 입력하는 Insert문 댓글이 입력되면 Board 테이블의 commentCount+1하는 Update문 => 복수의 트랜잭션 처리를 할 때는 데이터의 무결성을 위해 하나의 쿼리라도 실패한다면 전체가 실패하도록 처리해야함 6.1 아래에 해당하는 파일들 추가 CommentJpaController import kr.ac.daegu.springbootapi.comment.model.CommentDTO; import kr.ac.daegu.springbootapi.commentJpa.model.Comment; i..
JPA를 활용해 CRUD 기능을 만들어보자 이전의 jsp 프로젝트에서는 페이징 처리를 하려면 복잡한 구조를 거쳐야한다. SpringBoot에서는 페이징 처리가 어떻게 이루어지는지 알아보자 페이징 처리 개념 참고 사이트 https://velog.io/@conatuseus/JPA-Paging-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%82%98%EB%88%84%EA%B8%B0-o7jze1wqhj JPA Paging (페이지 나누기) 현재 2개의 프로젝트 진행하고 있다. > 두 프로젝트 모두 글 또는 영상을 페이징해서 프론트에 뿌려주는 API가 필요했다. > 그래서 이번에 PageRequest를 사용해 페이징 하는 것을 공부했고 공유하고 velog.io 5. 글 페이징기능(기존의 글 목록보기 수..
JPA를 활용해 CRUD 기능을 만들어보자 5. 글 목록보기(isDel="N"인 데이터들만) BoardRepository List findBoardByIsDel(String isDel); BoardJpaService public List getBoardList() { // jpa queryMethod를 수정하여 isDel이 "N"인 데이터row들만 나오도록 수정 return boardRepository.findBoardByIsDel("N"); }
JPA를 활용해 CRUD 기능을 만들어보자 5. 글 삭제 BoardJpaController @DeleteMapping(value = "/{id}") public ApiResponse updateIsDelBoardById(@PathVariable int id, @RequestBody BoardDTO boardDTO){ String boardPassword = boardDTO.getPassword(); // 패스워드가 없을 경우 if (boardPassword == null){ return new ApiResponse(false, "boardPassword is null, please check key name 'password'", null); } return boardJpaService.updateIsD..
JPA를 활용해 CRUD 기능을 만들어보자 4. 글 수정 BoardJpaController @PutMapping(value = "/{id}") public ApiResponse putBoard(@PathVariable int id, @RequestBody BoardDTO boardDTO){ Board data = boardJpaService.putBoard(id, boardDTO); return new ApiResponse(true, data); } Board package kr.ac.daegu.springbootapi.boardjpa.model; import lombok.*; import javax.persistence.*; import java.sql.Date; import java.sql.Time;..
JPA를 활용해 CRUD 기능을 만들어보자 3. 글 쓰기 BoardJpaController @PostMapping(value = "/") public ApiResponse postBoard(@RequestBody BoardDTO boardDTO){ Board data = boardJpaService.postBoard(boardDTO); return new ApiResponse(true, data); } Board import lombok.*; import javax.persistence.*; import java.sql.Date; import java.sql.Time; import java.time.LocalDate; import java.time.LocalTime; @Entity @Getter @Tab..