게시판 프로젝트 회고

ybk·2024년 7월 9일

spring

목록 보기
52/55
post-thumbnail

📖 내용

이 프로젝트를 통해 사용자 인증, 데이터 보안, CRUD 기능 구현, 실시간 데이터 처리, 웹 크롤링 등 다양한 기술적 구현을 목표로 삼고 있습니다.

🙋‍♂️ 역할

회원가입 및 로그인


클라이언트는 사용자의 정보인 이메일, 패스워드, 닉네임, 프로필 사진을 입력하여 해당 회원 정보를 서버로 전송하여 데이터베이스에 저장합니다.

  1. 이메일 중복확인 : 클라이언트에서 email을 파라미터로 서버로 전달하여 서버에서는 저장되어 있는 이메일을 조회하여 해당 이메일이 있다면 notFound 응답코드를 반환하고 그렇지 않다면 ok 응답 코드를 반환합니다.
  2. 닉네임 중복확인 : 클라이언트에서 nickName을 파라미터로 서버로 전달하여 서버에서는 저장되어 있는 이메일을 조회하여 해당 이메일이 있다면 notFound 응답코드를 반환하고 그렇지 않다면 ok 응답 코드를 반환합니다.
  3. 패스워드 암호화 : BCryptPasswordEncoder 를 사용하여 클라이언트로부터 받은 패스워드를 서버에서 암호화하여 저장합니다.
  4. 회원 정보 및 프로필 사진 업로드 : 클라이언트로 부터 회원 정보와 프로필 사진을 서버로 보냅니다. 이때, 프로필 사진은 @RequestParam 으로 MultipartFile 타입으로 전달하며 데이터베이스에 저장합니다.

회원 정보 수정 및 탈퇴


수정 : 클라이언트로부터 회원 정보의 수정 요청을 받아 데이터베이스를 업데이트합니다.

  1. 닉네임 변경 시 중복확인을 하며 수정할 때 저장된 비밀번호를 입력 후 수정할 수 있습니다.

탈퇴 : 클라이언트로부터 해당 정보를 Delete 요청을 받아 데이터베이스에서 삭제합니다.

  1. 로그인한 회원이 토큰에 저장되어 있는 회원이 맞는지 확인합니다.
  2. 해당 회원이 쓴 게시글, 좋아요, 댓글, 파일을 삭제 후 회원 정보를 삭제합니다. ⇒ 회원의 아이디가 외래키로 묶여 있는 모든 데이터를 삭제한 후 회원을 삭제합니다.

회원 목록


서버는 클라이언트로부터 요청된 검색 타입, 검색 키워드, 페이징 처리를 기반으로, 회원 목록을 반환합니다. 이 때 사용자 권한이 admin 일 경우에만 목록을 볼 수 있습니다.

  • type : 전체, 이메일, 닉네임으로 타입을 나누며 해당 타입을 파라미터로 서버로 전달하여 해당하는 회원의 정보를 반환합니다.
  • keyword : type에 해당하는 검색어로 검색하여 파라미터로 전달하여 회원 정보를 반환합니다.
  • page : 페이지 번호를 파라미터로 나타내며, 한 페이지당 10개씩 보여주고 클라이언트는 페이지 번호를 이용하여 다음 페이지, 이전 페이지로 이동할 수 있습니다.

글쓰기


클라이언트는 글 제목, 내용, 파일을 서버로 전송하며, 서버는 로그인 여부를 확인한 후 해당 정보를 데이터베이스에 저장합니다. 저장이 성공하면 ok 응답 코드를, 실패하면 badRequest 응답 코드를 반환합니다.

  1. 선택된 파일의 목록(files[i].name)을 보여줍니다.

글 상세


해당 게시물 번호를 받아와 해당 글의 정보를 조회하고 파일, 좋아요 여부, 댓글의 정보도 같이 반환합니다.

  • 좋아요 : 클라이언트에서는 사용자가 해당 글에 좋아요 여부를 확인합니다. 사용자가 로그인을 하지 않은 경우, 좋아요 여부를 false 로 설정하고 로그인한 경우 좋아요 여부를 조회하여 결과를 반한합니다.

  • 댓글

    • 댓글 작성 : 클라이언트에서는 해당 게시글 아이디, 댓글 내용을 가지고 서버로 보냅니다. 로그인이 되어 있는 경우에만 작성이 가능하며 만약 작성에 성공하면 ok 응답을 반환하고 그렇지 않은 경우 badRequest 응답을 반환합니다.
    • 댓글 조회 : 해당 게시글에 작성된 댓글을 모두 조회합니다.
    • 댓글 수정 : 클라이언트에서 수정된 댓글 아이디(commentId)와 댓글 내용을 서버로 보내서 해당 댓글을 쓴 사용자에 한에서 댓글 정보를 업데이트합니다. 댓글 수정을 성공할 경우 ok 응답을 반환하고 실패한다면 *FORBIDDEN* 응답을 반환합니다.
    • 댓글 삭제 : 클라이언트에서 삭제할 댓글 아이디를 서버로 보내 해당 댓글을 작성한 사람만 삭제하게 합니다. 댓글 삭제를 성공한 경우 ok 응답을 반환하고 실패한다면 *FORBIDDEN 응답을 반환합니다.*

글 수정 및 삭제


클라이언트는 서버로부터 게시글 아이디를 요청하여 해당 게시글의 정보를 받고 클라이언트로부터 게시글의 수정 요청을 받아 데이터베이스를 업데이트하고 필요한 경우 파일을 삭제하고 새로운 파일을 업로드합니다.

  • 파일 : 제거할 파일과 추가할 파일을 나누어서 구현합니다. 만약 파일명이 중복될 경우 false 로 반환합니다.

글 목록 조회


서버는 클라이언트로부터 요청된 검색 타입, 검색 키워드, 페이징 처리를 기반으로, 게시글 목록을 반환합니다. 이 때 사용자 권한이 admin 일 경우에만 목록을 볼 수 있습니다.

  • type : 전체, 글(제목+내용), 작성자로 타입이 나누어져 있으며 해당 타입을 파라미터로 서버로 전달하여 해당하는 게시글 정보를 반환합니다.
  • keyword : type에 해당하는 검색어로 검색하여 파라미터로 전달하여 검색어에 해당하는 게시글을 반환합니다.
  • page : 페이지 번호를 파라미터로 나타내며, 한 페이지당 10개씩 보여주고 클라이언트는 페이지 번호를 이용하여 다음 페이지, 이전 페이지로 이동할 수 있습니다.

크롤링


클라이언트에서 크롤링할 목록을 요청하고 서버는 크롤링을 수행하고 크롤링된 데이터를 반환합니다.

  • 크롤링
    • Jsoup을 사용하여 해당 URL에서 HTML 문서를 로드하고 이를 Document 객체로 반환하여 HTML 문서에서 필요한 데이터를 포함하는 요소들을 선택합니다. CSS 선택자에 맞는 요소들을 가져옵니다.
    • 각 요소를 순회하면서 이미지 url, 제목, 링크를 추출하여 Product 객체를 생성합니다.

🎯 결과 및 성과

  1. 사용자 인증 및 보안 강화: 이메일과 닉네임 중복 확인, 패스워드 암호화를 통해 보안을 강화했습니다.
  2. 회원 관리 시스템 구축: 회원가입, 로그인, 정보 수정, 탈퇴 등의 기능을 통해 사용자 관리를 체계적으로 구현했습니다.
  3. 게시글 관리 시스템 구현: CRUD 기능을 통해 게시글 작성, 수정, 삭제, 목록 조회 등의 기능을 완벽하게 구현했습니다.
  4. 실시간 데이터 처리: 실시간으로 좋아요, 댓글 작성 및 수정 기능을 통해 사용자 간의 상호작용을 원활하게 했습니다.
  5. 웹 크롤링 기능: Jsoup을 활용한 웹 크롤링을 통해 외부 데이터를 수집하고 이를 가공하여 제공할 수 있는 시스템을 구축했습니다.

위와 같은 기능을 통해 사용자 경험을 향상시키고, 안정적이고 보안이 강화된 웹 서비스를 제공할 수 있었습니다.

profile
개발자 준비생~

0개의 댓글