HTTP Method
1. 프로젝트 구조
src
ㄴmain
ㄴcommon
ㄴexception
ㄴresponse
ㄴstatus
ㄴerror
ㄴsuccess
ㄴbase
ㄴconfig
ㄴjwt
ㄴproperties
ㄴdomain
ㄴuser
ㄴentity
ㄴcontroller
ㄴservice
ㄴrepository
ㄴenums
ㄴdto
ㄴrequest
ㄴresponse
// Service는 인터페이스 없이 구현체 없이
// CQRS 패턴으로
public interface BaseStatus {
HttpStatus getHttpStatus();
String getCode();
String getMessage();
}
public enum SuccessStatus implements BaseStatus {
SUCCESS_200("ROOME_200", HttpStatus.OK, "성공입니다."),
SUCCESS_201("ROOME_201", HttpStatus.CREATED, "성공입니다."),
SUCCESS_204("ROOME_204", HttpStatus.NO_CONTENT, "성공입니다."),
/**
* Auth
*/
AUTH_URL_SUCCESS("AUTH_200", HttpStatus.OK, "로그인 URL 조회 성공"),
LOGIN_SUCCESS("AUTH_200", HttpStatus.OK, "로그인 성공"),
LOGOUT_SUCCESS("AUTH_200", HttpStatus.OK, "로그아웃 성공"),
CREATE_USER_SUCCESS("AUTH_201", HttpStatus.CREATED, "회원가입 성공"),
DELETE_USER_SUCCESS("AUTH_200", HttpStatus.OK, "회원탈퇴 성공"),
CHECK_ID_SUCCESS("AUTH_200", HttpStatus.OK, "아이디 중복 확인 성공"),
CHECK_NICKNAME_SUCCESS("AUTH_200", HttpStatus.OK, "닉네임 중복 확인 성공"),
UPDATE_PASSWORD_SUCCESS("AUTH_200", HttpStatus.OK, "비밀번호 변경 성공"),
FIND_EMAIL_SUCCESS("AUTH_200", HttpStatus.OK, "이메일 찾기 성공"),
CHECK_EMAIL_SUCCESS("AUTH_200", HttpStatus.OK, "이메일 중복 확인 성공"),
SEND_EMAIL_VERIFICATION_SUCCESS("AUTH_200", HttpStatus.OK, "이메일 인증 코드 발송 성공"),
CONFIRM_EMAIL_VERIFICATION_SUCCESS("AUTH_200", HttpStatus.OK, "이메일 인증 성공"),
CREATE_TOKEN_SUCCESS("AUTH_200", HttpStatus.OK, "토큰 재발급 성공"),
CONFIRM_PASSWORD_SUCCESS("AUTH_200", HttpStatus.OK, "비밀번호 검증 성공"),
;
}
@Getter
@AllArgsConstructor
public enum ErrorStatus implements BaseStatus {
// 예시
ERROR_STATUS("ROOME_400", HttpStatus.BAD_REQUEST, "Bad Request"),
/**
* Common
*/
BAD_REQUEST("COMM_400", HttpStatus.BAD_REQUEST, "잘못된 요청입니다."),
UNAUTHORIZED("COMM_401", HttpStatus.UNAUTHORIZED, "인증이 필요합니다."),
FORBIDDEN("COMM_403", HttpStatus.FORBIDDEN, "접근 권한이 없습니다."),
NOT_FOUND("COMM_404", HttpStatus.NOT_FOUND, "요청한 자원을 찾을 수 없습니다."),
METHOD_NOT_ALLOWED("COMM_405", HttpStatus.METHOD_NOT_ALLOWED, "허용되지 않은 메소드입니다."),
INTERNAL_SERVER_ERROR("COMM_500", HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 오류입니다."),
2. 네이밍 컨벤션
- 클래스명:
PascalCase (예: UserCommandService, UserQueryService, OrderController)
- 메서드명:
camelCase (예: getUserById(), processOrder())
- controller → 동사(Method) + 명사(주체)
- service → 동사(Method) + 명사(목적대상)
- 생성
- 조회
- 수정
- 삭제
- 변수명:
camelCase (예: userList, orderId)
- 명확한 표시 → orderId, user~~Id
- is~~ 사용 X → ~~Status
- 복수형태 → 변수명s
- 상수:
UPPER_SNAKE_CASE (예: MAX_USER_LIMIT)
- 패키지명:
소문자, 점(.)으로 구분 (예: com.example.project.service)
- 엔티티 클래스:
단수형 (예: User, Order)
- 테이블명:
복수형 (예: users, orders)