Skip to content

기본 게시판의 crud 및 로그인/회원 수정을 연습하기 위한 프로젝트입니다.

Notifications You must be signed in to change notification settings

park-yina/shurulab_crud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 

Repository files navigation

shurulab_crud

기본 게시판의 crud 및 로그인/회원 수정을 연습하기 위한 프로젝트입니다.

공통 요구사항

  • DB는 MYSQL을 사용

1차 기본 구현 요구사항

1차 과제 제출을 위한 기능 명세서의 기능만 요약하였습니다.

회원가입

  • 아이디는 이메일형식인지 확인해야합니다.
  • 비밀번호의 길이는 최소 8글자로 설정합니다.
  • 닉네임의 경우 3-9글자로 특수문자는 금지입니다.
  • 프로필 이미지 역시 적용 가능해야합니다

로그인

  • 이메일 형식인지 검사 이후 로그인이 이루어져야합니다.

1차 제출 구현사항

  • db는 sql을 사용하여 원하시는 url 도메인과 연결하니였습다.
  • 회원가입의 양식은 현재 프로필 이미지 이외 적용 완료 하였고, db뿌리기 및 예외사항 처리 완료하였습니다.
  • 로그인 시 검사 까진 완료 되었고, 현재 로그인 구현중입니다.
  • 기타 추가사항으로는 스프링 시큐리티 활용하여 비밀번호 암호화를 완료하엿습니다.

1차 제출 관련 db관계도

1차 관계도 수정사항으로는 db의 테이블이 많아지면, 성능이 떨어지니 이메일은 유저 테이블 내의 데이터로 집어넣고 양식을 검사하기로 하였습니다.

2차 미션 관련 구현 사항 체크

2차 과제 미션 제출을 위한 기능 명세서 기준을 요약하였습니다.

이미지 처리

  • DB에는 경로가 아닌 이미지 즉 blob등에 대해 찾아보고 작업을 진행해야 합니다.

게시판 관련 구현사항

  • 게시판 이름은 A/B/C/D로 해주세요
  • 자유롭게 이미지 한장과 글을 올릴 수 있어야합니다
  • 수정 및 삭제는 올린사람만 가능해야합니다
  • 게시판 제목 즉 A게시판을 클릭하면 글제목 글쓴이 조회수가 떠야합니다.
  • 글제목을 클릭시 글의 본문이 나와야합니다.

회원 정보 수정

  • 비밀번호와 프로필 사진은 변경 가능합니다.
  • 닉네임의 경우 변경 가능하나, 중복 검사를 진행해주셔야 합니다.

2차 미션 구현 진행사항 체크

  • 닉네임 변경시 중복체크하기
  • 비밀번호 변경
  • 프로필 사진 적용
  • 프로필 사진 변경
  • 게시판 클릭시 글제목 글쓴이가 나오게 합니다.
  • 조회수 기능을 구현합니다.

2차 미션 1회 제출(게시판 외 기능 구현 완) 피드백

  • 크기가 큰 이미지도 잘 들어가는지 확인해주세요
  • blob를 사용하신 경우 exe나 mp4등 사진이 아닌 파일에 대한 예외처리를 해주세요

2차 미션 관련 경험 트러블 슈팅 정리

  • 엔티티 관리
    초반에 게시물 엔티티를 분리하지 않은 결과, 코드가 복잡해지는 것을 보고 List로 따로 뺀 뒤 ManyToOne으로 대응시킴
  • EL1078E에러(이미지 큰 사진 한정)
    크기가 큰 이미지의 경우 blob를 처리하는 과정에서 글자가 길어져서인지 에러 발생. 작은 프로필은 업로드 잘됨
    타임리프의 문자열 에러로 인코딩 과정에서 발생하는 오류임을 확인하고, ImgUtil이라는 클래스를 통해 미리 사진을 줄여 업로드하도록 코드를 수정하였습니다.
  • 닉네임 변경 이후 게시물 수정 오류
    닉네임을 변경 시 본인에 대한 식별 오류가 발생하여, 자신이 닉네임 변경 이전에 작성한 글에 대한 삭제나 수정이 안되는 버그를 발견하여 수정완료했습니다.

Jar파일 생성 관련 이슈

  • NoManifest에러
    gradle에 직접 'Main-Class': 'com.example.demo.ShurulabCrudApplication'코드 추가하여 해결
  • 이후 dto클래스의 getter/setter를 읽지 못하는 에러 발생
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } duplicatesStrategy = 'exclude'코드 추가로 에러 해결

3차 미션 - 코드개선

현재 코드를 스프링부트의 디자인 패턴에 맞추어 개선합니다. 이때 필요에 따라 적절한 gpt사용은 지향합니다.

  • 채택 디자인 패턴은 MVC패턴입니다.
  • 2차 코드 리팩토링시 성능 개선을 위해 게시판 엔티티와 post엔티티의 매핑에 대해 고민해보기

MVC채택 사유

  • Model과 VIew가 종속되지 않아 코드의 재활용이나 확장이 쉽습니다. 4차 미션시 3차 미션 코드를 재활용 할 가능성도 있으므로 MVC패턴을 채택하였습니다.
  • 컨트롤러와 뷰가 나누어진 구조이므로, 코틀린으로 코드 작성을 할 때와 유사하기 떄문에 좀 더 친숙하여 이 디자인 패턴을 골랐습니다.

3차 개인 추가 요구사항 추가

  • 정보를 변경할 때에는 캡챠 사용에 도전합니다.
  • 소셜로그인을 구현합니다.
  • 댓글 기능의 경우 내가 작성한 글 이외에도 로그인된 회원이라면 누구나 접근 가능하여야 합니다.

About

기본 게시판의 crud 및 로그인/회원 수정을 연습하기 위한 프로젝트입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published