토이 프로젝트/게시판 프로젝트

    13. 게시판 프로젝트 - 검색 기능, 내가 쓴 글 보기, 기본키 생성 전략

    검색 기능 제목+내용으로 게시글을 검색할 수 있게 구현하였다. Spring Data Jpa의 기능으로 LIKE 쿼리 메서드를 만들어주는 findByXXXContaining을 알게됐다. BoardController @GetMapping("/boardList") public String boardList(Model model, @PageableDefault(page=0, size=10) Pageable pageable, @RequestParam(required = false, defaultValue = "")String searchText) { Page boards = boardService.findAll(searchText, searchText, pageable); int nowPage = boards.g..

    12. 게시판 프로젝트 - 페이징, 조회수 기능 수정

    페이징 게시판 리스트를 보여주는 뷰에 페이징을 사용하였다. 페이징을 잘 몰라서 매우 간단하게 구현하였다. BoardController @Controller @RequiredArgsConstructor @RequestMapping("/board") @Slf4j public class BoardController { private final BoardService boardService; private final MemberService memberService; private final BoardCommentService boardCommentService; @GetMapping("/boardList") public String boardList(Model model, @PageableDefault(pag..

    11. 게시판 프로젝트 - 댓글 작성

    게시글에 댓글을 작성할 수 있도록 구현하였다. 따로 댓글을 관리하기 위해 BoardComment를 만들었다. BoardComment와 Member는 N:1관계이고 BoardComment와 Board도 N:1관계이다. BoardComment 생성 @Entity @Getter public class BoardComment { @Id @GeneratedValue private Long id; private String comment; private LocalDateTime createdDate; private String createdBy; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="member_id") private Member member; @ManyToOn..

    10. 게시판 프로젝트 - 글 조회, 조회수, 글 수정, welcomePage

    게시판 리스트에서 게시글의 번호를 누르면 해당 게시글을 조회 가능하도록 구현하였다. 추가적으로 조회수 기능도 구현하였다. boardController @Controller @RequiredArgsConstructor @RequestMapping("/board") public class BoardController { private final BoardService boardService; private final MemberService memberService; @GetMapping("/boardContent/{boardId}") public String content(@PathVariable Long boardId, Model model) { Board board = boardService.count..

    9. 게시판 프로젝트 - 게시판 뼈대, 글 등록 구현

    현재까지 Member에 관련된 기능만 구현하였다. 이제 board에 관련된 기능도 구현하겠다. 일단 게시판의 기본 틀을 만들기 위해 Repository, Service, Controller부터 구현한 뒤에 View를 만들었다. Model은 이전에 만들어두었다. 기본 틀만 만든 것이므로 많이 부족하다. BoardRepository @Repository public interface BoardRepository extends JpaRepository {} BoardService @Service @RequiredArgsConstructor @Transactional public class BoardService { private final BoardRepository boardRepository; public..

    8. 게시판 프로젝트 - 로그아웃, 회원 정보 수정

    로그아웃 기능을 구현하였다. MemberController @Controller @RequestMapping("/member") @RequiredArgsConstructor public class MemberController { private final MemberService memberService; private final LoginService loginService; @GetMapping("/logout") public String logout(HttpServletRequest request) { HttpSession session = request.getSession(false); if(session != null) { session.invalidate(); //해당 세션 무효화 } retu..

    7. 게시판 프로젝트 - BaseTimeEntity, MemberDto

    Member와 Board 엔티티가 공통적으로 갖고있는 생성일자와 수정일자가 중복되니 JPA Auditing 기능을 사용하여 관리하는 것이 편합니다. 공통적으로 도메인들이 가지고 있는 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있습니다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다. 데이터베이스에서 누가, 언제하였는지 기록을 잘 남겨놓아야 합니다. 그렇기 때문에 생성일, 수정일 컬럼은 대단히 중요한 데이터 입니다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있습니다. Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 upda..

    6. 게시판 프로젝트 - 인터셉터 등록, 회원가입 폼 중복 ID 검증

    로그인 한 사용자만 게시판에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인 하지 않은 사용자도 다음과 같은 http://localhost:8080/board를 직접 호출하면 게시판에 들어갈 수 있다는 점이다. 이를 해결하기 위해 인터셉터를 등록한다. LoginCheckInterceptor @Slf4j public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler..