API-Gateway 서비스 상세 내용
1. UserService
UserService는 사용자 인증과 관련된 로직을 담당하는 서비스다. Github OAuth를 통해 사용자 로그인을 처리하고, 인증된 사용자 정보를 관리한다.
- authenticateUser
Github OAuth를 통해 로그인한 사용자의 정보를 데이터베이스에 저장하거나 조회하고, 세션에 저장한다.
OAuthUserService에서 Github에서 받은 사용자 정보를 GithubOAuthAttributeDto로 매핑하여 필요한 정보를 추출하고, UserRepository로 사용자 정보가 이미 존재하는지 확인한다. 새 사용자일 경우 데이터를 저장하고, 기존 사용자는 세션 정보만 갱신한다. - getUserInfo
사용자 ID를 기준으로 데이터베이스에서 사용자 정보를 조회한다.
UserRepository로 사용자 ID에 맞는 데이터를 찾고, 없으면 null을 반환한다. 조회된 정보는 세션에 저장해서 이후 요청 시 빠르게 접근한다. - updateUserAssistCount
사용자의 특정 작업 수행 횟수를 증가시킨다.
UserAssistCountRepository로 데이터베이스에 있는 사용자 작업 횟수를 조회하고, 특정 작업의 최대 허용 횟수를 초과하지 않도록 관리한다.
이렇게 UserService는 Github OAuth를 통해 로그인한 사용자의 정보와 세션 관리를 전담한다. 로그인 후 세션에 사용자 정보를 유지하고, 사용자의 작업 횟수 같은 필요한 데이터도 쉽게 접근할 수 있다.
2. AI, Code, Problem, Step Service
Open Feign을 활용해 AI, Code, Problem, Step Service에서 외부 API와의 통신을 관리한다. 각 서비스가 필요한 요청을 보내고 응답을 받아와서 클라이언트에 전달한다.
- AiService
- optimizeCode
클라이언트가 요청한 코드를 최적화하는 요청을 외부 AI API로 보낸다.
AiApiClient를 통해 외부 AI 모델 서버에 요청을 보내고, 최적화된 코드를 받아 클라이언트에 반환한다.
- optimizeCode
- CodeService
- runCode
클라이언트가 작성한 코드를 실행하고, 결과를 반환한다.
코드와 입력 데이터를 받아 비동기적으로 실행하고, 무한 실행을 막기 위해 타임아웃을 설정한다. 실행 중 발생하는 예외는 에러 메시지로 반환한다.
- runCode
- ProblemService
- getProblem
특정 문제의 정보를 외부 API에서 가져온다.
문제 ID를 통해 외부 문제 API에 요청을 보내고, 문제 정보를 받아서 클라이언트에 전달한다.
- getProblem
- StepService
- getStepDetail
단계별 문제 목록을 가져온다.
단계 ID를 기준으로 외부 API에 요청해 단계 정보를 받아와서 문제 목록을 반환한다.
- getStepDetail
Feign을 사용해서 외부 API와의 통신을 단순화하고, 필요한 데이터를 손쉽게 연동할 수 있다.
3. Spring Security
Spring Security는 이 애플리케이션의 인증과 인가를 담당한다. Redis Session을 통해 세션을 관리하고, AOP를 사용해서 세션 유효 기간을 자동으로 연장한다.
- Redis Session 관리
Redis를 이용해 세션을 저장하고 관리한다.
로그인 시 생성된 세션을 Redis에 저장해서 서버 간 세션을 공유할 수 있도록 한다. 이후 인증이나 인가가 필요할 때 Redis에서 세션을 확인하고 사용자 정보를 가져온다. - AOP 기반 세션 연장
AOP를 사용해 사용자 요청이 있을 때마다 세션 유효 기간을 갱신한다.
SessionTimeoutAspect에서 사용자의 요청을 가로채 세션 시간을 연장해, 세션이 만료되지 않도록 한다. - OAuthSuccessHandler & OAuthFailureHandler
OAuth 인증 성공 및 실패 시 처리를 담당한다.
OAuthSuccessHandler는 인증 성공 후 세션을 설정하고 로그에 성공 기록을 남긴다. 반대로 OAuthFailureHandler는 인증 실패 시 오류 메시지를 반환해 클라이언트가 문제를 확인할 수 있게 한다.
Spring Security와 Redis, AOP를 통해 인증/인가 및 세션 관리가 원활하게 이루어지며, 이렇게 구성된 인증 구조는 애플리케이션의 확장성과 유지 보수성을 높인다.
'Web > 코테 준비용 서비스 만들기' 카테고리의 다른 글
08. 마무리! (1) | 2024.11.16 |
---|---|
06. API Gateway 서버 제작 (1) (0) | 2024.11.10 |
05. AI API 서버 제작 (0) | 2024.11.09 |
04. 코드 API 서버 제작 (1) | 2024.11.08 |
03. 스크래핑 API 서버 제작 (0) | 2024.11.07 |