Skip to content

TAEWOOKK/aladin_project

Repository files navigation

1. 환경변수

2.사용 기술 및 구조

  • Java 17
  • SpringBoot 3.3.2
  • application
    • 모듈 설명 : 애플리케이션 구현 로직들이 위치합니다. application 모듈에는 컨트롤러 클래스와 애플리케이션 서비스가 위치합니다. 애플리케이션 서비스는 도메인 서비스를 주입 받아서 도메인 로직을 호출하거나 도메인을 select하여 도메인 로직을 호출하는 역할을 합니다. 애플리케이션 서비스에는 도메인 로직이 위치하면 안됩니다.
  • configuration
    • 모듈 설명 : 애플리케이션의 동작을 제어하거나 여러 모듈에서 재사용할 수 있는 설정과 기능들을 모듈로 만듭니다.
    • feign : 외부호출을 위한 feign 클라이언트의 설정을 담당 모듈
    • persistence : jpa 설정 및 db 관련 설정 클래스, yml에는 db연결정보가 존재합니다.
    • security : 소셜 로그인 기능과 JWT 토큰 관련 기능을 담당 모듈
    • springdoc : API 문서화를 위한 설정 담당 모듈
    • web-common : 스프링 웹 애플리케이션 개발을 위한 공통 로직이 들어가있습니다. CORS 설정과 전역 예외 처리를 위한 GlobalExceptionHandler 클래스가 존재합니다.
  • domain
    • 모듈 설명 : 핵심 도메인 로직을 갖는 모듈로 jpa를 활용하여 구현합니다.
    • 도메인 모듈별 분리 : 도메인 별로 모듈을 관리합니다. (ex) 강의 플랫폼과 관련된 도메인의 경우 lecture 모듈을 신규로 생성하여 구현
    • 도메인 모듈간 의존성 : 도메인 모듈간에는 common 모듈을 제외하고는 서로 참조하지 않도록합니다.
  • infrastructure
    • 모듈 설명 : 메시징 및 외부 시스템 통합과 같은 하위 계층과 직접적으로 관련된 로직들을 모듈로 관리합니다. (ex) kafka, cache, sms, email 등
  • module-java
    • 모듈 설명 : 순수 자바 클래스로 이루어져 있으며 프로젝트 전반에서 사용합니다.

3. 전역 에러 처리

  • GlobalExceptionHandler (RestControllerAdvice)
    • 전역적으로 발생하는 예외를 GlobalExceptionHandler에서 처리합니다. 오류 메세지는 동일한 형태로 반환할 수 있도록 “ErrorResponse” 클래스로 관리합니다.
    • type오류의 경우 HttpMessageNotReadableException 예외를 처리하여 messages.properties에 작성해둔 code 기반으로 예외 메세지를 반환합니다.
      • (ex) {0}에 잘못된 타입을 입력하셨습니다. {1} 형으로 입력해주세요.
    • Bean Validation, MessageSource 기능을 이용하여 요청 값을 검증 후 예외 메세지를 반환합니다.
      • message.properties에 다음과 같이 에러 메세지를 관리합니다.
      • (ex) NotNull={0}은(는) 필수 입력 값 입니다.
  • 비즈니스 수행 중 던지는 예외는 ErrorType Enum에 에러메세지와 에러코드를 관리합니다.

4. API 문서

swagger 접속 경로

프론트와 통신을 위한 API 문서는 Swagger를 통해 작성합니다.
로컬 Swagger 문서 접속 URI : http://localhost:8080/swagger-ui/index.html

5. OAUTH 인증

로그인 관련

소셜 로그인 기능을 제공하며 구글 로그인을 제공합니다.
로그인 요청 예시 url (redirec_uri에는 서버로부터 토큰을 전달받을 프론트 주소를 기입합니다.)
(ex) http://localhost:8080/oauth2/authorization/google?redirect_uri=http://localhost:3000/token
(ex) 서버도메인주소/oauth2/authorization/google?redirect_uri=http://localhost:3000/token (서버 요청 시)

6. JWT 인증 흐름

[클라이언트] -- 로그인 요청 --> [서버]
                (이메일, 비밀번호)
        [서버] -- 사용자 인증 (DB 조회) --> [데이터베이스]
        [서버] -- JWT 생성 --> [서버]
[서버] -- JWT 반환 (액세스 토큰 + 리프레시 토큰) --> [클라이언트]

[클라이언트] -- JWT로 API 요청 (액세스 토큰) --> [서버]
        [서버] -- JWT 검증 (서명 확인) --> [서버]
        [서버] -- API 요청 처리 --> [클라이언트]

7. OAuth2 인증 흐름

[클라이언트] -- OAuth2 로그인 요청 --> [OAuth2 제공자]
        [OAuth2 제공자] -- 사용자 인증 --> [사용자]
        [OAuth2 제공자] -- 액세스 토큰 발급 --> [서버]
[서버] -- JWT 생성 (OAuth2 사용자 정보 기반) --> [서버]
[서버] -- JWT 반환 --> [클라이언트]

About

알라딘 과제 전형 프로젝트 제출용

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages