Project/project-board11 [Project] 댓글 기능 컨트롤러와 서비스코드 작성 저번 글에서 해시태그 검색 기능까지 구현하였다. 일반적인 게시판이면 게시글들을 쓰면 거기에 댓글을 달 수가 있다. 구현해보도록 하겠습니다. ArticleCommentController RequiredArgsConstructor @RequestMapping("/comments") @Controller public class ArticleCommentController { private final ArticleCommentService articleCommentService; @PostMapping("/new") public String postNewArticleComment(ArticleCommentRequest articleCommentRequest) { articleCommentService.saveA.. Project/project-board 2022. 8. 3. [Project] 해시태그 검색 구현 게시글들을 보면 해시태그들을 넣을 수 있게 되어있다. 위의 검색창의 해시태그를 사용하여 검색할 수 있지만, 티스토리 블로그 같은 경우에도 해시태그 검색 페이지가 따로 있다. 이걸 토대로 해시태그를 검색할 수 있는 페이지를 만들어 보겠습니다. ArticleController @GetMapping("/search-hashtag") public String searchArticleHashtag( @RequestParam(required = false) String searchValue, @PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable, ModelMap modelMap) { Page .. Project/project-board 2022. 7. 20. [Project] 게시판 검색기능 우리는 만약 게시판에 검색기능이 없다면 찾고자 하는 글을 일일이 찾아야 할것이다. 검색 기능은 꼭 있어야 할 기능이라고 생각해 구현해보려 한다. 이미 전의 글 부터 순차적으로 하고 있기 때문에 추가해야할 코드는 적다. SearchType package com.jisu.projectboard.domain.type; import lombok.Getter; public enum SearchType { TITLE("제목"), CONTENT("본문"), ID("유저 ID"), NICKNAME("닉네임"), HASHTAG("해시태그"); @Getter private final String description; SearchType(String description) { this.description = descri.. Project/project-board 2022. 7. 15. [Project] 게시글 페이징 처리 구현, 정렬 및 테스트 게시글 리스트를 보여주는 과정에서, 개수가 많아지는 경우 모든 게시글 데이터를 한번에 뿌려주는 것보다 페이지별로 나눠서 보여주는 것이 깔끔하고 데이터 절약에 좋기 때문에 게시글 리스트 페이징 처리를 구현해보려 한다. 현재 프로젝트에서는 검색 부분과 함께 페이징 처리가 되야한다는점을 생각하며 만들어 보려고 한다. 이전 글에 비즈니스로직을 설계하면서 repository와 service까지 페이징 처리를 하기 위해 다 만들어놨습니다. 이제 이것을 뷰와 컨트롤러에 적용만하면 됩니다. 현재 게시판상태입니다. 밑의 페이지버튼은 눌러도 아무런 반응이 없습니다. 이 상태에서 이번 페이지가 예를들어서 3페이지이고, 전체 페이지바의 크기가 5개이다 가정하면 previous 12345 next 이런식으로 구현을 하려고 합니.. Project/project-board 2022. 7. 14. [Project] 게시글, 댓글 비즈니스 로직, 페이지 구현 지금까지 Entity, API, QueryDsl, DTO 까지 구현을 했습니다. 이제 이에 맞게 게시판, 댓글 컨트롤러, 뷰, 서비스클래스를 만들어 테스트까지 해보도록하겠습니다. ArticleController RequiredArgsConstructor @RequestMapping("/articles") @Controller public class ArticleController { private final ArticleService articleService; @GetMapping public String articles(@RequestParam(required = false) SearchType searchType, @RequestParam(required = false) String searchVa.. Project/project-board 2022. 7. 14. [Project] DTO 설계 이번글은 DTO설계를 해보겠습니다. DTO가 무엇인지 알아보고 설계를 해보도록하겠습니다. DTO란? Data Transfer Object의 약자로, 계층간 데이터 교환을 위한 자바빈즈를 뜻한다. 여기서 말하는 계층은 컨트롤러, 뷰, 비즈니스 계층, 퍼시스턴스 계층을 말하며 각 계층간 데이터 교환을 위한 객체를 DTO또는 VO라고 부릅니다. DTO는 VO(Value Object)와 용어를 혼용해서 많이 사용하는데, VO는 읽기만 가능한 read only 속성을 가져 DTO와의 차이점이 존재한다. - DTO는 로직을 가지지 않는 데이터 객체이고 getter/setter메소드만 가진 클래스를 의미한다. - DTO(Data Transfer Object)는 데이터 전송(이동) 객체라는 의미를 가지고 있다. - 계.. Project/project-board 2022. 7. 14. [Project] QueryDSL 적용 저번 글에 API 설계까지 하였습니다. 하지만 기본적인 API는 Srping Data Rest가 자동으로 생성해줬지만 검색 기능은 구현해주지 않습니다. 지금부터 이 검색 기능을 QueryDSL을 사용하여 구현해보도록 하겠습니다. QueryDSL @Query("select a from Article a where a.id = :id") Article findByID(@Param("id") Long id); Spring Data JPA가 기본적으로 제공해주는 CRUD 메서드 및 쿼리 메서드 기능을 사용하더라도, 원하는 조건의 데이터를 수집하기 위해서는 필연적으로 JPQL을 작성하게 됩니다. 간단한 로직을 작성하는데 큰 문제는 없으나, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 상당히 길어집니다. JPQ.. Project/project-board 2022. 7. 11. [Project] API 설계 이번에는 API 설계를 할 차례입니다. 프로젝트 명세서에서 API 엔드포인트를 미리 정해놨습니다. 아직 프로젝트 규모가 크지 않기 때문에 spring에서 제공하는 Srping Data Rest + Spring Data JPA를 이용하여 REST API를 손쉽게 만들어보겠습니다. 그리고 이것을 쉽게 확인할 수 있는 spring-data-rest-hal-explorer를 같이 사용하겠습니다. 먼저 보편적으로, REST API 생성 시 구조는 아래와 같을 것입니다. (Controller -> Service -> Repository) - Controller @RestController @RequiredArgsConstuctor public class ArticleController { private final .. Project/project-board 2022. 7. 11. [Project] 도메인 설계 및 DB 접근 로직 DB설계 시부터 테이블명을 단수로 할 것인지 복수로 할 것인지 고민하다가 통일성 있게 한다면 문제가 되지 않는다는 글을 보고 저는 단수로 만들기로 하였습니다. (관련 내용은 여기를 눌러주세요.) 의존성 주입과 DB 설계했던 것과 동일하게 엔티티 클래스를 만들어 줍니다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-jpa' application.yml spring: datasource: url: jdbc:mysql://localhost:3307/board username: jisu password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver mysql 기본 포트는 3.. Project/project-board 2022. 7. 9. [Project] 깃허브 이슈 정리 및 브랜치 전략 git : https://github.com/jisu3316/project-board 깃 허브 이슈 정리 이번 프로젝트 형상관리는 깃 허브에서 하고 있다. 깃 브렌치 전략 중에서도 github-flow 전략을 통해 개발을 하기로 정하였습니다. 그리고 처음부터 끝까지 혼자 생각하고 개발을 해야 되니 어떻게 개발을 해야 될까 생각하다가 정처기 시험을 공부할 때 소프트웨어 개발 방법론이 생각나서 그중에서도 애자일 개발 방법론의 칸반을 채택하게 되었다. 왜냐하면 github-flow와도 잘 어울리고 연습하는 것도 좋을 것 같았습니다. 이에 대해서는 이 글 마지막에 추가된 링크를 통해 알아보시면 좋을 것 같습니다. 그리고 이런 칸반을 쉽게 적용 할 수 있고 기록할 수 있는 게 무엇이 있을까?라는 생각으로 찾던 중.. Project/project-board 2022. 7. 7. [Project] 프로젝트 명세서 취업을 하기 위한 개인 포트폴리오를 만들어 보겠습니다. 첫 시작을 하기 위해서 프로젝트 명세서를 작성해 보는 것이므로 지금부터 고민해본 프로젝트 명세서를 작성해 보도록 하겠습니다. 1. 아이템 선정 2. 개요 3. 요구사항 분석 4. DB설계 5. 유즈케이스 6. API 설계 7. 개발 및 테스트 8. 배포 9. 회고 1. 아이템 선정 누구나 이해하기 쉬운 소재로 명확한 기능 요구 사항을 만든다. 요구사항을 구현하는데 도움이 되는 각종 문서 작업을 경험한다. 자바 + 스프링 부트로 프로젝트 요구사항을 싫제로 구현하는 기술적인 방법을 익힌다. 기획과 문서 작성부터 개발, 형상관리, 테스트, 배포까지 개발 프로세스 전반을 경험한다. 위를 바탕으로 전반적인 웹의 기본 소양이 되는 CRUD 게시판을 만들고, 앞.. Project/project-board 2022. 7. 6. 이전 1 다음