on my way

게시판 만들기 프로젝트 시작하기 (ERD 생성, 게시판 구조, 스프링 프로젝트) 본문

Computer Science/Spring

게시판 만들기 프로젝트 시작하기 (ERD 생성, 게시판 구조, 스프링 프로젝트)

wingbeat 2024. 6. 11. 19:57
반응형

기술 스택

  • Spring Framework: 5.2.25
  • JDK: 11
  • Tomcat: 9.0
  • MySQL: 8.x
  • MyBatis: ORM Framework
  • Lombok: 코드 축약 라이브러리
  • JUnit: 단위 테스트 프레임워크
  • jQuery (Ajax): 비동기 요청 처리
  • REST API: 댓글 시스템 구현

 

 


회원

no 가 PK

CREATE TABLE Members (
    memberId INT NOT NULL AUTO_INCREMENT,
    memberEmail VARCHAR(100) NOT NULL, 
    memberPwd VARCHAR(100) NOT NULL, 
    memberName VARCHAR(20) NOT NULL, 
    memberGender CHAR(1) NOT NULL,
    memberBirthDate DATE NOT NULL,
    memberPhone VARCHAR(15) NOT NULL,
    memberZipCode VARCHAR(10) NOT NULL,
    memberAddress1 VARCHAR(255) NOT NULL,
    memberAddress2 VARCHAR(255) NULL,
    memberRegisterDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    memberAuth BOOLEAN NOT NULL DEFAULT FALSE,
    PRIMARY KEY (memberId)
);
    • 회원 기능
      • 가입
        • 회원 정보 입력 및 저장: 회원가입 폼을 통해 이메일, 비밀번호, 이름, 성별, 생년월일, 휴대폰 번호, 주소 등의 정보를 입력 받아 저장합니다.
        • 이메일 중복 체크: 회원가입 시 입력한 이메일이 이미 존재하는지 확인합니다.
        • 비밀번호 암호화 저장: 비밀번호를 안전하게 암호화하여 데이터베이스에 저장합니다.
      • 아이디 중복 체크
        • 이메일을 통해 중복 체크: 이메일 입력 시 중복 여부를 실시간으로 확인합니다.
      • 로그인
        • 이메일과 비밀번호로 로그인: 입력한 이메일과 비밀번호가 데이터베이스의 정보와 일치하는지 확인합니다.
        • 세션 또는 JWT 토큰을 통해 인증: 로그인 성공 시 세션을 생성하거나 JWT 토큰을 발행하여 인증을 관리합니다.
      • 로그아웃
        • 세션 종료 또는 토큰 무효화: 사용자가 로그아웃을 요청하면 세션을 종료하거나 JWT 토큰을 무효화합니다.
      • 수정
        • 회원 정보 수정: 회원 정보 수정 페이지를 통해 이름, 비밀번호, 주소 등의 정보를 수정할 수 있습니다.
      • 아이디 찾기, 비밀번호 찾기
        • 이메일을 통한 아이디 찾기: 회원가입 시 등록한 이메일을 통해 아이디를 찾을 수 있습니다.
        • 비밀번호 재설정 메일 발송: 비밀번호 찾기 기능을 통해 비밀번호 재설정 링크를 이메일로 발송합니다.
      • 아이디 저장
        • 브라우저 쿠키를 통해 아이디 저장: 로그인 시 "아이디 저장" 기능을 통해 브라우저에 아이디를 저장합니다.
      • 탈퇴
        • 회원 정보 삭제 또는 비활성화: 회원 탈퇴 요청 시 회원 정보를 삭제하거나 비활성화합니다.

 

게시판 기능

ERD 설계

  • 게시판
    • 게시글, 댓글, 답글 관계 설정
  • 게시글
    • 작성자, 제목, 내용, 작성일, 조회수, 댓글 수
  • 댓글
    • 댓글 ID, 게시글 ID, 작성자, 내용, 작성일
  • 답글
    • 답글 ID, 댓글 ID, 작성자, 내용, 작성일, 그룹핑, 순서, 중첩 정도
CREATE TABLE Posts (
    postId INT NOT NULL AUTO_INCREMENT,
    memberId INT NOT NULL,
    postTitle VARCHAR(100) NOT NULL,
    postContent TEXT NOT NULL,
    postDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    postViewCount INT NOT NULL DEFAULT 0,
    PRIMARY KEY (postId),
    FOREIGN KEY (memberId) REFERENCES Members(memberId)
);

CREATE TABLE Comments (
    commentId INT NOT NULL AUTO_INCREMENT,
    postId INT NOT NULL,
    memberId INT NOT NULL,
    commentContent TEXT NOT NULL,
    commentDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (commentId),
    FOREIGN KEY (postId) REFERENCES Posts(postId),
    FOREIGN KEY (memberId) REFERENCES Members(memberId)
);

CREATE TABLE Replies (
    replyId INT NOT NULL AUTO_INCREMENT,
    commentId INT NOT NULL,
    memberId INT NOT NULL,
    replyContent TEXT NOT NULL,
    replyGno INT NOT NULL,
    replyOno INT NOT NULL,
    replyNested INT NOT NULL,
    replyDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (replyId),
    FOREIGN KEY (commentId) REFERENCES Comments(commentId),
    FOREIGN KEY (memberId) REFERENCES Members(memberId)
);


답변/댓글 게시판

작성자가 PK -> int

erd를 그려봐야 한다.

 

답변 게시판은 3개의 컬럼

* 그룹핑

* 순서

* 중첩 정도

 

    •  

로직 구현 방법

그룹 descending, 순서 ascending

 

답변2가 생긴다면 이전에 있던 답글의 순서를 +1 하고 추가해야 한다.

 

페이징 처리

  • 한 페이지 당 10개 씩
    • SQL 쿼리에서 LIMIT와 OFFSET을 사용하여 한 페이지에 10개의 게시글을 표시합니다.
  • 하단 페이지 번호 10개 씩
    • 페이지네이션 로직을 구현하여 하단에 10개의 페이지 번호를 표시합니다.
  • 총 개수, 총 페이지 수
    • 총 게시글 수를 계산하여 필요한 페이지 수를 결정합니다.

기능 구현

  • 등록
    • 새로운 게시글 작성 및 데이터베이스에 저장
  • 수정
    • 기존 게시글 내용을 수정하고 저장
  • 답변
    • 답글 등록 시 그룹핑, 순서, 중첩 정도를 처리하여 저장
  • 삭제
    • 게시글 및 관련 댓글, 답글 삭제

게시글 목록

  • 검색
    • 제목, 내용, 전체 검색 기능 구현
  • 페이징 처리
    • 페이지별 게시글 목록 출력
  • 댓글 수
    • 각 게시글의 댓글 수 표시

게시글 상세

  • 조회수 +1
    • 게시글 조회 시 조회수 증가
  • 댓글 목록
    • 해당 게시글의 댓글 목록 출력
  • 댓글 등록
    • 로그인 사용자만 댓글 등록 가능
  • 댓글 삭제
    • 작성자 본인만 댓글 삭제 가능

 

 

 

로직 구현

  • 그룹 descending, 순서 ascending
    • 답글 등록 시 기존 답글 순서 업데이트

업무 분담

  • 도메인 단위로 분담
    • 회원 관리, 게시판, 댓글, 답글 등 도메인별로 작업 분담

 

MySQL로 스키마 생성, 사용자 생성, 로그인하는 과정

 


Spring 설정

driver, url 하려면 필요함

log4jdbc 설정

  • log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDe

 

  • db.properties
db.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy 
db.url=jdbc:log4jdbc:mysql://localhost:3306/project 
db.username=project 
db.password=project1234


이를 설정해주면 아래에 내용을 담아준다.

  • DB 설정
	// db.properties에 있는 속성
	@Value("${db.driver}")
	private String driver;
	@Value("${db.url}")
	private String url;
	@Value("${db.username}")
	private String username;
	@Value("${db.password}")
	private String password;

 

 

web.xml 설정

dtd 버전마다 다름

나는 톰캣 9 이므로  <web-app 변경

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">

 

 

 

반응형