Skip to content

롤크루트 - 리그오브레전드 라이너 채용공고 게시판 🎲

Notifications You must be signed in to change notification settings

HunSeongPark/lolcruit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lolcruit

롤크루트 - 리그오브레전드 라이너 채용공고 게시판 🎲
logo
Logo designed by 이량(@2ryangg)

Details

게시글 목록
image

게시글 상세
image

글 작성
image

Features

  • 사용자

    • ID, PW 회원가입
    • 일반 로그인, SNS 로그인 및 기존 계정과 연동 (구글, 페이스북, 네이버)
    • 회원정보 수정
  • 게시판

    • 게시글 및 댓글 기본 CRUD
    • 포지션 별 글 목록
    • 키워드 검색 / 포지션 별 키워드 검색
    • 페이징

Tech Stack

  • Java 17 / Spring Boot v2.6.7
  • Gradle
  • MySQL (DB)

Dependencies

  • Spring Boot
  • Spring Web
  • Spring Data JPA
  • Validation
  • Spring Boot DevTools
  • Spring Security
  • OAuth2 Client
  • Thymeleaf
  • Lombok
  • MySQL Driver
  • H2 Database (In-memory DB for test)

EER Diagram

image

API Specification

image

image

image

Validation

  • 회원가입

    • 아이디 : 6~15자, 영문 소문자, 숫자, 중복 X
    • 비밀번호 : 8~15자, 영문 대소문자, 숫자, 특수문자 포함
    • 닉네임 : 2~15자, 영문 대소문자, 숫자, 한글(가-힣), 중복 X
    • 이메일 : 이메일 패턴에 맞게, 중복X
  • 회원정보 수정

    • 비밀번호 : 8~15자, 영문 대소문자, 숫자, 특수문자 포함 (일반 사용자만 변경 가능)
    • 닉네임 : 2~15자, 영문 대소문자, 숫자, 한글(가-힣), 중복X
  • 로그인

    • 로그인 실패 시 하단에 로그인 실패 원인 출력
      • 아이디 또는 비밀번호가 일치하지 않습니다.
      • 존재하지 않는 아이디입니다.
      • 서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.
      • 알 수 없는 이유로 오류가 발생했습니다.
    • 로그인 성공 시 로그인 이전 페이지로 redirect
    • 회원가입 → 로그인 경로로 로그인 시 index page로 redirect
  • 게시글 작성 / 수정

    • 제목 : 공백X, 최대 30자
    • 내용 : 공백X
  • 댓글 작성 / 수정

    • 내용 : 공백X

Business Logic

  • 회원가입 - 일반

    • Validation 확인은 Backend 단에서
    • error 여부에 따라 Form 테두리 빨간색, 하단에 error message 출력
    • ID, 닉네임, 이메일 중복 시 하단에 “중복된 OO입니다.” 메시지 출력
    • SNS 계정과 이메일 중복 시 “이미 SNS 계정으로 가입된 이메일입니다.” 출력
    • 가입 성공 시 로그인 페이지로 redirect
  • 회원가입 - OAuth(SNS)

    • 일반 회원과 email 중복 시
      • 기존 계정과 SNS 통합
      • 닉네임, Entity Id, email 동기화
      • 엔티티 아이디, 비밀번호 서버 내부 secret으로 변경
      • “해당 이메일로 가입된 일반 계정이 존재하여 SNS 계정이 연동되었습니다. 이후 해당 SNS 계정으로 로그인 해주세요.” 안내 페이지 redirect
    • 다른 SNS와 email 중복 시
      • “다른 SNS 계정으로 이미 가입된 이메일입니다. 해당 SNS 계정으로 로그인 해주세요.” 안내 페이지 redirect
    • 중복 안될 시
      • 아이디 : provider_code(5자리)
      • 비밀번호 : 서버 내부 자체 secret
      • email : 해당 SNS email
      • 닉네임 : provider_code(5자리) (회원정보 수정 페이지에서 수정 가능)
      • redirect : index (” / ”)
  • 게시글

    • 작성 날짜 오늘일 경우 “HH:mm” format 적용
    • 작성 날짜 오늘이 아닐 경우 “yy.MM.dd” format 적용
    • 본인이 작성한 게시글만 수정 / 삭제 가능
    • (페이징) Controller → Model & View 넘겨줄 땐 무조건 페이지 값(0부터 시작) 기준으로 넘겨줌.
      • View에서 page+1 처리
  • 댓글

    • 작성 날짜 오늘일 경우 “HH:mm” format 적용
    • 작성 날짜 오늘이 아닐 경우 “yy.MM.dd” format 적용
    • 본인이 작성한 댓글만 수정 / 삭제 가능

새롭게 알게된 점

@Transactional
    public void edit(EditRequestDto editRequestDto, SessionUser sessionUser) {
        User user = userRepository.findByUsername(sessionUser.getUsername())
                .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

        String encodePw = passwordEncoder.encode(editRequestDto.getPassword());
        // !!! User Entity에는 Encoding 된 비밀번호를 넣지만 !!!
        user.update(editRequestDto.getNickname(), encodePw);

        // Security 세션 변경 처리
        Authentication authentication = authenticationManager.authenticate(
        // !!! UsernamePasswordAuthenticationToken의 파라미터로는 원본 비밀번호를 넣는다 !!!
                new UsernamePasswordAuthenticationToken(
                        user.getUsername(), editRequestDto.getPassword())
        );
        SecurityContextHolder.getContext().setAuthentication(authentication);
    }

About

롤크루트 - 리그오브레전드 라이너 채용공고 게시판 🎲

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published