Giter Site home page Giter Site logo

board's Introduction

board

게시판 서비스 - 패스트캠퍼스, 10개 프로젝트로 완성하는 백엔드 웹개발

  • 가장 기본적이고 보편적인 게시판 서비스 프로젝트
  • 2022년 6월 기준 가장 최신의 스프링 부트와 관련 기술들, 자바 17 기능들, 개발 도구 경험을 위해 실습

이 서비스는 패스트캠퍼스10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online 강의 프로젝트 입니다.

개발 환경

  • Intellij IDEA Ultimate 2022.1.1 ~ 2022.1.3
  • Java 17
  • Gradle 7.4.1
  • Spring Boot 2.7.0

기술 세부 스택

Spring Boot

  • Spring Boot Actuator
  • Spring Web
  • Spring Data JPA
  • Rest Repositories
  • Rest Repositories HAL Explorer
  • Thymeleaf
  • Spring Security
  • H2 Database
  • MySQL Driver
  • Lombok
  • Spring Boot DevTools
  • Spring Configuration Processor

그 외

  • QueryDSL 5.0.0
  • Bootstrap 5.2.0-Beta1
  • Heroku

데모 페이지

  • 링크 추가 예정

질문, 건의

프로젝트에 관해 궁금하신 점이나 건의 사항이 있으시다면 아래 항목을 이용해 주세요.

* Issues: 버그 리포트, 제안 사항

* Discussions: 프로젝트와 관련한 논의와 정보

board's People

Contributors

zeesouth avatar

Watchers

 avatar

board's Issues

[고도화] 추가 도메인 설계

새로운 기능을 구현하기 위해 필요한 데이터를 모델링하고, 기존 도메인(엔티티 클래스)에서 변경할 부분이 있는지 살핀다.

  • 기존 도메인 코드 분석
  • 대댓글 도메인 표현
  • 인증 도메인 검토
  • 해시태그 도메인 표현

인증 기능 구현

인증 기능을 구현한다.

  • 인증 설정하기
    • 인증이 필요 없는 영역
      • 루트 페이지 보기
      • 게시판 보기
    • 인증이 필요한 영역
      • 게시글 (+댓글) 보기
      • 본인 게시글 쓰기, 수정, 삭제
      • 본인 댓글 쓰기, 수정, 삭제
  • 인증 기능에 필요한 부분 구현
  • 회원 가입 페이지
  • 테스트

게시판 정렬 구현

게시판 정렬 기능을 구현한다.
정렬 기능은 게시판 페이지에서 각 컬럼 (제목, 해시태그, 작성자, 작성일)의 제목을 누르면
해당 값으로 오름차순, 내림차순 정렬이 되게끔 동작하게 만드는데 쓴다.

  • 정렬 기능 구현
  • 뷰에 적용
  • 테스트

도메인 설계

게시판 서비스를 만들기 위한 도메인을 설계해보자.

  • 도메인 ERD 다이어그램 그려보기
  • 자바 클래스로 도메인 표현해보기

게시글 뷰 기능 구현

수업 시간에 보여주지 않았던 게시판 뷰, 게시글 뷰의 게시글 등록, 수정, 삭제 기능을 구현한다.
#21 의 연장선

  • 게시판 뷰 - 글쓰기
  • 게시글 뷰 - 수정, 삭제

게시판 페이징 구현

게시판 서비스에 필요한 페이징 기능을 구현한다.

  • 게시판 페이지 (이전, 숫자, 이후
  • 게시글 페이지 (이전, 이후)

게시글 댓글 구현

게시글에 댓글을 다는 기능을 구현한다.

  • 게시글 페이지에서 댓글을 등록하기
  • 게시글 페이지에서 댓글을 골라 삭제하기
  • 게시글 페이지에서 댓글을 골라 편집하기
  • 테스트

데이터베이스 접근 로직 테스트 정의

도메인 설계 내용 (#8)을 바탕으로 DB와 연동하기 위한 방법을 구성하고, 테스트를 먼저 작성해보기.

  • DB기술 선택
  • DB에 접근할 수 있는 상태로 환경 세팅
  • 테스트

잘못된 도메인 정보 바로잡기

#31 기능을 하다가 도메인 코드 설계가 일부 잘못되어 있는 것을 발견.
UserAccount 회원 계정 userId는 회원 id이므로 유니크해야하는데,
erd문서에는 email 유니크 키가 표현되지 않음.
바로잡기로 한다.

  • user_id에 유니크 키 추가
  • email erd 업데이트

[고도화] 댓글 기능 고도화 - 댓글 기능의 결정과 롤백

n차 대댓글 기능은 댓글 단계가 깊어질 수록 디자인이 복잡해져서
유저의 편의를 위해 설계했으나, 오히려 유저의 경험을 해칠 우려가 있다고 판단했다.
또한 런칭 후 관찰해보니, 실제로도 유저 반응이 좋지 않아서 서비스에 내보내기 않기로 논의를 했다.

이에 기능을 롤백한다.

[고도화] 인증 기능 고도화 - 카카오톡으로 로그인

인증 기능에 카카오 계정으로 로그인하는 방법을 추가한다.

  • Kakao Developers에서 카카오 API 사용 준비하기
    • 애플리케이션 등록하기
    • Rest API 키 확인하기
    • 사이트 도메인 등록하기
    • Redirect URI 등록하기
    • 동의항목 설정하기
    • Client Secret 키 확인하기
  • 회원 도메인이 인증 없는 상태에서 회원 정보를 저장할 수 있게 수정하기
  • 카카오 인증 응답 정보 확인, 정의하기
  • OAuth 2.0 보안 설정 (+람다식 접근)
  • OAuth2UserService 구현
    • 기본 OAuth 2.0 인증 처리 구현체 사용
    • 카카오 인증 정보를 회원으로 등록하기
  • 기본 인증 서비스 로직 구현
  • 뷰 구현
    • 카카오 로그인 버튼 이미지 준비
    • 카카오 로그인 버튼 구현
    • 로그인 후 노출하는 유저 정보 변경: ID -> 닉네임

[고도화] 엔티티 코드 리팩토링 - equals(), hashcode()에서 필드 접근을 getter로 바꾸기

스프링 데이터 JPA로 엔티티를 다룰 때, 엔티티 데이터는 하이버네이트 구현체가 만든 프록시 객체를 이용하여 지연 로딩될 수 있다.
따라서 엔티티를 조회할 때 필드에 직접 접근하면 id == null 인 상황이 있을 수 있고, 이러면 올바른 비교를 하지 못 하게 된다.
getter를 사용하면 이러한 문제를 예방할 수 있다.
수정해보자.

  • Article
  • ArticleComment
  • UserAccount

게시판 서비스 뷰 만들기

게시판 서비스 뷰를 만들기 위해 해야 할 일을 정리하고, 실행한다.

  • 뷰 엔드포인트 테스트 정의
  • 뷰 구현
    • 게시판 페이지 만들기
    • 게시글 페이지 만들기
    • 로그인 페이지 만들기
    • 뷰에 디자인 붙이기
  • 테스트

[고도화] 프로젝트 시작 전 리팩토링

게시판 서비스 고도화 프로젝트를 진행하기 전,
프로젝트에서 아쉬웠던 부분을 리팩토링하고
프로젝트를 본격적으로 시작할 준비를 한다.

  • 테스트에서 잘못된 Void.class 사용을 개선하기
  • JUnit5 테스트에서 불필요한 public 접근자 제거하기
  • 테스트 메소드 네이밍 개선하기
  • 테스트에서 이상한 들여쓰기나 중복된 표현 수정하기
  • 불필요한 import, 띄어쓰기 수정하기
  • 유즈케이스를 현재 상황에 맞게 업데이트 하기

[고도화] 추가 요소 - 깃헙 CI 기능 활성화하기

현재 본 프로젝트는 헤로쿠와 연동되어 있어, pr이 머지되면 자동으로 클라우드 배포가 일어난다.
다만 이 사이에 테스트 실행이 자동으로 일어나지 않고 있기 때문에,
깃헙 CI 를 활성화해서 pr 머지 -> 테스트 -> 배포의 자동화 플로우를 완성해보면 더 좋을 것 같다.

깃헙 프로젝트와 이슈 정리하기

깃헙 프로젝트를 셋팅하고, 카드를 만들어 정리

  • 프로젝트 베타 만들기
  • 카드 목록 만들기 - 강의 커리귤럼 참고
  • 이슈로 적절히 바꾸기

헤더에 해시태그 메뉴 추가하기

#38 에서 해시태그 기능을 구현했는데, 쉽게 접근할 수 있도록 배려를 하지 않았다.
이를 헤더에 추가하여 쉽게 해시태그 검색 페이지 존재를 알고, 들어갈 수 있게 한다.

ERD변경 - 회원 계정의 userId를 PK로 바꾸기

회원 계정 정보가 담긴 엔티티를 저장할 때,
Spring Data JPA 의 getReferenceById()를 부드럽게 사용하기 위해
회원 계정의 PK를 변경한다.

  • id 삭제
  • userId를 PK로 등록
  • 테스트

게시판 서비스 뷰에 기능 구현하기

게시판 서비스 뷰가 실제로 동작하게 만들기 위해 할 일을 정리하고, 실행한다.

  • 뷰 기능 정의
    • 게시판 페이지 기능 테스트 정의
    • 게시글 페이지 기능 테스트 정의
    • 로그인 페이지 기능 테스트 정의
  • 뷰 기능 구현
    • 게시판 페이지 기능 구현
    • 게시글 페이지 기능 구현
    • 로그인 페이지 기능 구현
  • 테스트

게시판 검색 구현

게시판에서 게시글로 검색하는 기능을 구현하고, 검색 기능을 보다 특별하게 이용자에게 제공할 수 있는 방법을 고민해본다.

  • 구현
    • 검색 대상 필드로 기본 검색 기능 구현
    • 기본 게시판 페이지의 검색바 기능 구현
    • 제목, 본문, 이름 검색 페이지
    • 해시태그 검색 페이지
  • 테스트

[고도화] 해시태그 검색 기능 고도화

해시태그 기능 고도화

  • 하나의 글이 여러 개의 해시태그를 저장할 수 있도록 만들기
  • 별도 입력 공간을 주지 않고, 본문에서 해시태그를 파싱해서 기록하기
  • DB에는 #을 뺀 문자열을 저장할 수 있게 하기
  • 해시태그에 링크를 삽입하기

계정 도메인 추가 작업

지난 #8에서 강의 흐름 상 작업하지 않았던 회원 계정 도메인을 추가로 작업한다.
이는 인증 기능 구현을 위해 필요함

  • erd 업데이트
  • 도메인 추가
  • jpa 인터페이스 추가

도메인 수정 - 회원 계정과 게시글, 댓글 관계 연결

게시글과 댓글은 모두 회원이 작성하는데, 그 연관관계가 ERD 와 같이 자바 코드에 표현되지 않은 것 같다.
createdBy를 작성자로 생각하고 다룰 수도 있지만, 해당 필드는 작성자와 직접적인 연관이 맺어져있지 않기 때문에
보다 이상적인 방향으로 도메인 설계를 할 필요가 있다.
문제를 확인하고 수정하기.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.