Git Product home page Git Product logo

project-board's Introduction

게시판 서비스

개발 환경

  • Intellij IDEA Ultimate 2021.3
  • Java 17
  • Gradle 7.5
  • Spring Boot 2.7.2

기술 세부 스택

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

데모 페이지

헤로쿠에서 무료 배포를 중단(무료로 서버를 제공하다보니 해킹과 같은 곳에 사용되어 중단하겠다고함)에 따라 서비스를 닫아놓았습니다.

Reference

project-board's People

Contributors

dpwns523 avatar

Watchers

 avatar

project-board's Issues

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

해시태그 기능을 고도화한다.

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

게시글 뷰 기능 구현

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

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

게시판 검색 구현

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

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

[리팩토링] AuditingFields 의 잘못 표현된 부분 개선

AuditingFields 클래스는 추상 클래스이고, 각 필드는 상속 받는 자식 엔티티에서 접근 및 수정이 가능해야 한다.
따라서 접근 제어자를 protected로 했어야 했는데, 이 접근 제어를 초기 설계에서 지나치게 폐쇄적으로 작성했다.

위 내용이 당장은 비즈니스 요구사항이 없어 문제가 되지 않았으나,
이제 #73 를 작업하면서, 회원 도메인에서 인증이 없는 상태의 회원 정보를 저장하기 위해서
작성자(createdBy), 수정자(modifiedBy)를 엔티티가 직접 작성해야 하는 요구사항이 생길 것이므로
이것이 가능하게끔 접근 제어자를 제대로 수정해주도록 한다.

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

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

이에 기능을 롤백하도록 한다.

CORS 테스트하기

다른 프로젝트에서 Front와 협업을 하는 도중 cors에 대한 문제가 발생하였는데
배포 환경인 프로젝트에서 테스트를 해보려고 한다.

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

게시판 서비스 뷰가 실제로 동작하게 만들기 위해 해야 할 일

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

게시판 정렬 구현

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

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

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

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

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

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

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

  • Article
  • ArticleComment
  • UserAccount

인증 기능 구현

인증 기능을 구현한다.

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

계정 도메인 추가 작업

회원 계정 도메인을 추가하는 작업을 한다.
인증 기능 구현을 위해 필요

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

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

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

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

게시판 페이징 구현

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

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

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

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

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

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

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

게시글 댓글 구현

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

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

게시판 서비스 뷰 만들기

게시판 서비스 뷰 만들기

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

깃헙 릴리즈하기

게시판 서비스의 첫번째 버전이 완성되었다.
깃헙에 릴리즈한다.

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

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

도메인 설계하기

게시판 서비스를 만들기 위한 기본 도메인 설계

  • 도메인 ERD 그리기
  • 자바 클래스로 도메인 표현

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.