이전에 다른 친구들과 함께 같이 슿프링부트 버킷리스트 공유 사이트를 만든 경험이 있다. 백엔드 여러명끼리 기능을 분담하여 나는 게시판, 댓글 CRUD, 공유 기능, AWS 배포 등을 맡아 담당하였다. 그 때는 스프링부트를 처음 시작하자마자 바로 프로젝트에 들어간거라 많이 미흡했고, 이해보다 기능 완성에 급급했던 것 같다. 이 후에 스프링부트를 좀 더 공부하고, 백엔드는 혼자로써 웹 사이트의 기능을 모두 구현해보고자 하는 마음이 들기 시작해 이 프로젝트를 시작하게 되었다.
주제는 학교 내 팀플의 팀원들을 모집할 수 있는 사이트이고, 전반적으로 웹의 기본적인 기능을 갖춘 사이트를 만들어 보고자 한다.
서버는 내가 스프링 부트로 구현하고, 프론트는 리액트를 사용해 프론트 담당 두분과 함께 작업했다.
1. 프로젝트 주제
학교 내 팀플 팀원 모집 사이트
2. 개요
프로젝트 이름: project-mate
기능:
게시판 - CRUD 기능, 페이징, 검색, 조회수, 북마크
댓글 - CRUD 기능, 대댓글/비밀댓글 구현
마이페이지 - 북마크한 글, 댓글 단 글 나열
사용자- Security + Jwt 회원가입 및 로그인, 유효성 검사
개발 언어: Java11
개발 환경: Spring Boot, Spring Data JPA, Spring Security
데이터베이스: MySQL
3. 요구사항 분석
1) 회원가입 페이지
유효성 검사, 중복 확인
2) 로그인 페이지
로그인 하지 않을 경우 메인 화면 게시글 전체 목록 페이지, 로그인 페이지, 회원가입 페이지만 이용 가능
로그인 검사
3) 게시글
내가 쓴 게시글일 경우에만 수정, 삭제 가능
로그인 한 사용자만 글 작성 가능
4) 댓글
내가 쓴 댓글일 경우에만 수정, 삭제 가능
로그인 한 사용자만 댓글 작성 가능
비밀 댓글일 경우 해당 글의 작성자와 해당 댓글의 작성자만 내용 확인 가능
댓글의 대댓글 가능, 대댓글의 대댓글은 불가능
게시글 삭제 시 해당 게시물의 댓글들도 삭제
댓글 삭제시 해당 댓글의 대댓글들도 삭제
3. DB 설계
이 프로젝트에서 사용하고 있는 기술에 대해 정리해보았다.
스프링부트
스프링 부트는 스프링으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해주는 별도의 프레임워크이다.
기존에는 배포를 할 때에 별도의 외장 웹 서버를 설치하고, 프로젝트를 War 파일로 빌드하여 배포를 진행했는데, 이러한 방식은 처리 속도가 느리며 번거롭다. 반면, 스프링 부트는 자체적인 웹 서버를 내장하고 있어, 빠르고 간편하게 배포를 진행할 수 있습니다. 또한, 독립적으로 실행 가능한 Jar 파일로 프로젝트를 빌드할 수 있어, 클라우드 서비스 및 도커와 같은 가상화 환경에 빠르게 배포할 수 있다.
MySQL
MySQL은 가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템(RDBMS: Relational DBMS)으로 오픈 소스이며, 다양한 운영체제에서 사용할 수 있다.
*관계형 데이터베이스
테이블로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계를 나타낸다.
이처럼 데이터의 종속성을 관계로 표현하는 것이 관계형 데이터베이스의 특징이다.
JPA
현대 웹 애플리케이션에서 관계형 데이터 베이스가 웹 서비스의 중심이 되면서 객체를 관계형 데이터 베이스에서 관리하는것이 중요해졌다. 그러다 보니 코드보다 SQL이 더 큰 비중을 차지 하게 되었다.
관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임이 서로 다른데, 객체를 데이터베이스에 저장하려고 하니 패러다임 불일치의 문제가 발생해버린다.
이런 문제점을 해결하기 위해 JPA가 나왔다. JPA는 인터페이스로서 자바 표준 명세서이다.
개발자가 객체 지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해 실행시켜줘 SQL에 종속적인 개발을 하지 않게 되는 것!
인터페이스인 JPA를 사용하기 위해서는 구현체가 필요한데 대표적으로 Hibernate가 있다.
구현체를 더 쉽게 사용하고자 추상화시킨 Spring Data JPA라는 모듈을 이용해 JPA 기술을 다룬다.
Spring Data JPA를 쓰면 Hibernate외에도 다른 구현체로 쉽게 교체할 수 있다.
관계형 데이터베이스 외에 다른 저장소로 쉽게 교체할 수도 잇다.
이는 Spring Data의 하위 프로젝트들이 기본적인 CRUD의 인터페이스가 같기 때문에 가능하다.
스프링부트와 AWS로 혼자 구현하는 웹 서비스, 스프링부트 핵심 가이드 책과 아래 블로그들을 참고하여 프로젝트를 진행하였다.
https://ttl-blog.tistory.com/267?category=910686
https://dev-coco.tistory.com/111
'BACK > SPRING' 카테고리의 다른 글
[Spring Boot] Cannot resolve symbol 'EnableWebSecurity' 에러 해결 방법 (0) | 2022.12.23 |
---|---|
[Spring Boot] Gradle 환경에 Swagger 적용하기 (0) | 2022.12.18 |
[Spring Boot] Logback 적용하기 (0) | 2022.10.11 |
[Spring Boot] Maven 환경에 Swagger 적용하기 (0) | 2022.10.11 |
[Spring Boot] Pageable로 페이징 구현하기 (0) | 2022.07.31 |