djkeh / fastcampus-project-board Goto Github PK
View Code? Open in Web Editor NEW패스트캠퍼스 게시판 만들기 프로젝트. 자바 + 스프링부트와 관련 기술들을 공부한다.
Home Page: https://fastcampus.co.kr/dev_online_befinal
패스트캠퍼스 게시판 만들기 프로젝트. 자바 + 스프링부트와 관련 기술들을 공부한다.
Home Page: https://fastcampus.co.kr/dev_online_befinal
각 엔티티 클래스의 equals()
구현에 버그가 있는 것 같다.
DB에 접근하는 비밀 정보를 보다 안전하게 다룰 수 있는 방법으로 환경변수를 사용하는 방법을 익혀본다.
깃헙 프로젝트를 세팅하고, 카드를 만들어 정리하자.
도메인 설계 내용(#8)을 바탕으로 DB 와 연동하기 위한 방법을 구상하고, 세팅을 하고, 테스트를 먼저 작성해본다.
게시판 서비스 뷰가 실제로 동작하게 만들기 위해 해야 할 일을 정리하고, 실행한다.
#10 에서 DB 접근 방법을 세팅하고 테스트 만든 내용을 토대로, 남은 구현이 있는지 확인하고 마무리 한다.
회원 계정 정보가 담긴 엔티티를 저장할 때,
Spring Data JPA 의 getReferenceById()
를 부드럽게 사용하기 위해
회원 계정의 PK를 변경한다.
id
삭제userId
를 PK로 등록#31 기능을 하다가 도메인 코드 설계가 일부 잘못 되어있는 것을 발견.
UserAccount
회원 계정의 userId
는 회원 id 이므로 유니크해야 하는데,
해당 속성이 빠져있었다.
erd 문서에는 email 의 유니크 키가 표현되지 않음
바로잡기로 한다.
user_id
에 유니크 키 추가email
erd 업데이트나는 깃크라켄 한국 앰배서더이고, 이 강의 프로젝트는 작업 내내 깃크라켄을 git client로 사용 중이다.
깃크라켄의 요청에 따라 배지를 README.md
에 달아보자.
엔티티 코드를 이후에 좀 더 편하게 보고 수정할 수 있게 스타일을 리팩토링해보자.
api 를 만든다.
스프링 데이터 JPA로 엔티티를 다룰 때, 엔티티 데이터는 하이버네이트 구현체가 만든 프록시 객체를 이용하여 지연 로딩될 수 있다.
따라서 엔티티를 조회할 때 필드에 직접 접근하면 id == null
인 상황이 있을 수 있고, 이러면 올바른 비교를 하지 못 하게 된다.
getter를 사용하면 이러한 문제를 예방할 수 있다.
수정해보자.
Article
ArticleComment
UserAccount
게시판 서비스 고도화 프로젝트 요구사항을 구현하기 위해 필요한 기술들을 미리 조사해본다.
게시판 서비스에 필요한 페이징 기능을 구현한다.
게시판 서비스를 만들기 위한 기본 도메인을 설계해보자.
드디어 완성한 게시판 서비스 프로젝트!
클라우드에 배포하여 사용해보자.
Hashicorp의 Vault가 무엇인지 간단히 살펴본다.
n차 대댓글 기능은 댓글 단계가 깊어질 수록 디자인이 복잡해져서
유저의 편의를 위해 설계했으나, 오히려 유저의 경험을 해칠 우려가 있다고 판단했다.
또한 런칭 후 관찰해보니, 실제로도 유저 반응이 좋지 않아서 서비스에 내보내기 않기로 논의를 했다.
이에 기능을 롤백한다.
깃헙 프로젝트를 정리하고, 유즈케이스를 업데이트해서 개발 준비를 마친다.
인증 기능을 구현한다.
대댓글을 n단계 달 수 있도록 한다.
게시판에서 게시글을 검색하는 기능을 구현하고, 검색 기능을 보다 특별하게 이용자에게 제공할 수 있는 방법을 고민해 본다.
새로운 기능을 구현하기 위해 필요한 데이터를 모델링하고, 기존 도메인(엔티티 클래스)에서 변경할 부분이 있는지 살핀다.
고도화를 마친 프로젝트를 헤로쿠에 배포하여 서비스한다.
게시판 서비스의 첫번째 버전이 완성되었다.
깃헙에 릴리즈하자.
안녕하세요 강의 잘 보고 있습니다. ch02까지 보면서 개인적으로 불편했던 점 두가지가 있어 문의드립니다. 혹시 이곳에 문의드리는 게 아니라면 이슈 삭제해 주셔도 됩니다.
ch01 04 -> 05 넘어갈 때 생겨난 프로젝트들에 대한 설명 부재
ch01 04에서 예시로 프로젝트에 카드를 3개 정도 만들었는데, 05에서 "제가 미리 만들어 왔습니다" 하시면서 17개의 카드를 보여주십니다. 하지만 이 부분에 대해 어떤 목록이 추가되었는지에 대해 별도의 설명이나 강의자료가 없어 강의를 앞뒤로 돌려가며 무엇이 추가된 것인가 찾아봐야 하는 불편함이 있습니다.
ch02 09 -> 10 넘어갈 때 추가된 userAccount 관련 설명 부재
이 부분은 뭔가 강의가 통으로 빠진 느낌인데, erd에도, 도메인도, 테스트도 추가되었는데 이에 대한 강의가 보이지 않는 것 같습니다. 제가 놓친 걸수도 있는데 최소한 ch02에는 관련된 내용이 없는 것 같습니다.
읽어주셔서 감사합니다.
게시판 정렬 기능을 구현한다.
정렬 기능은 게시판 페이지에서 각 컬럼(제목
, 해시태그
, 작성자
, 작성일
)의 제목을 누르면
해당 값으로 오른차순, 내림차순 정렬이 되게끔 동작하게 만드는데 쓴다.
게시판 서비스 API 를 Swagger UI 로 문서화한다.
해시태그 기능을 고도화한다.
#
을 뺀 문자열을 저장할 수 있게 하기해시태그만을 위한 특별한 검색페이지를 만들어 본다.
Hashicorp Vault 와 스프링을 연동하는 방법을 익히고 프로젝트에 적용해본다.
DB를 마이그레이션 하는 작업
댓글의 수정 기능은 개발하지 않기로 정했었다.
이에 초기 개발단계에서 기능만 간단히 열어두었던 댓글 수정 기능을 코드 관리 차원에서 정리해 두기로 함
스프링 부트 프로젝트로 루트 디렉토리를 초기화하고, 개발 바탕을 만든다.
use case diagram 을 그린다.
수업 시간에 보여주지 않았던 게시판 뷰, 게시글 뷰의 게시글 등록, 수정, 삭제 기능을 구현한다.
#21 의 연장선
현재 본 프로젝트는 헤로쿠와 연동되어 있어, pr이 머지되면 자동으로 클라우드 배포가 일어난다.
다만 이 사이에 테스트 실행이 자동으로 일어나지 않고 있기 때문에,
깃헙 CI 를 활성화해서 pr 머지 -> 테스트 -> 배포
의 자동화 플로우를 완성해보면 더 좋을 것 같다.
깃 브랜치 전략을 잡아보자
게시글과 댓글은 모두 회원이 작성하는데, 그 연관관계가 ERD 와 같이 자바 코드에 표현되지 않은 것 같다.
createdBy
를 작성자로 생각하고 다룰 수도 있지만, 해당 필드는 작성자와 직접적인 연관이 맺어져있지 않기 때문에
보다 이상적인 방향으로 도메인 설계를 할 필요가 있다.
문제를 확인하고 수정하기.
강의 도중에 원인을 알 수 없는 코드 유실이 일어났다.
다행히 기능은 모두 정상 작동하는 것으로 보이지만
테스트가 실패한다.
직전 강의까지 모든 테스트가 통과했는데 굉장히 이상함...
원인을 파악해보고, 알 수 없다면 소스코드라도 되살려보자.
#38 에서 해시태그 기능을 구현했는데, 쉽게 접근할 수 있도록 배려를 하지 않았다.
이를 헤더에 추가하여 쉽게 해시태그 검색 페이지 존재를 알고, 들어갈 수 있게 한다.
게시글에 댓글을 다는 기능을 구현한다.
고도화를 마친 프로젝트를 깃헙에 릴리즈한다.
게시글 페이지에서는 이전 글
, 다음 글
버튼을 통해 게시글 이동이 가능하다.
이 기능은 단순히 게시글 id를 +-1
씩 증감하는 알고리즘으로 구현되어 있는데,
이 방법은 중간 게시글을 삭제할 경우 게시글 리소스를 탐색하지 못하는 문제점을 가지고 있다.
이를 개선할 방법이 있으나 다른 수강생분들의 생각할 기회를 빼앗지 않도록,
개선 방법은 pr로 작성하도록 한다.
위 내용은 강의 수강생분들 중 한 분께서 발견하여 제보해 주셨다.
이는 기초 페이지네이션 알고리즘을 코드로 소개하는 동시에 개선의 여지를 버그로 남겨두어서
프로젝트를 공부하는 수강생과 버그 이슈를 통해 소통하고, pr을 통해 수정도 함께 하고 코드 리뷰까지 해드리고자 하는 의도였으나
그보다는 버그 오동작으로 인한 수강생 분의 혼란이나 강의 수강 중 겪을 불편함이 좀 더 우려되므로
직접 수정하고, 과정을 공유하는 방법으로 진행하도록 한다.
그래도 수정 작업 시작 전에 다른 분의 참여가 있다면 코드 리뷰로 소통할 예정.
게시판 서비스 고도화 프로젝트를 진행하기 전,
프로젝트에서 아쉬웠던 부분을 리팩토링하고
프로젝트를 본격적으로 시작할 준비를 한다.
Void.class
사용을 개선하기public
접근자 제거하기import
, 띄어쓰기 수정하기지난 #8 에서 강의 흐름 상 작업하지 않았던 회원 계정 도메인을 추가로 작업한다.
이는 인증 기능 구현을 위해 필요함
인증 기능에 카카오 계정으로 로그인하는 방법을 추가한다.
게시판 서비스 뷰를 만들기 위해 해야 할 일을 정리하고, 실행한다.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.