Skip to content

[TSK-56-150] 간헐적 로그인 불가 문제#308

Merged
2Jin1031 merged 2 commits intomainfrom
2Jin1031/TSK-56-150
Apr 5, 2026
Merged

[TSK-56-150] 간헐적 로그인 불가 문제#308
2Jin1031 merged 2 commits intomainfrom
2Jin1031/TSK-56-150

Conversation

@2Jin1031
Copy link
Copy Markdown
Contributor

TOSC 로그인 실패 시 전체 로그인 차단 문제 해결

📌 Summary

TOSC 로그인 실패 시 전체 로그인 프로세스가 중단되는 문제를 해결했습니다. TOSC 로그인은 부가 기능이므로, 실패하더라도 메인 로그인은 정상적으로 진행되어야 합니다.

🔍 Problem

기존 코드에서는 TOSC 로그인이 실패할 경우 AllcllException을 던져서 전체 로그인 프로세스가 중단되었습니다.

기존 문제점:

  • TOSC API 타임아웃, DNS 오류 등 네트워크 문제 발생 시 로그인 자체가 실패
  • TOSC API는 로그인 실패 시에도 HTTP 200을 반환하면서 응답 body의 success: false로 실패를 알림
    • 기존 코드는 HTTP 상태 코드만 확인하여 이를 처리하지 못함
  • 에러 메시지가 충분히 상세하지 않아 디버깅 어려움
  • TOSC 정보 업데이트 실패를 사용자에게 알릴 방법이 없음

✅ Solution

1. TOSC 응답 구조화

  • ToscResponse DTO를 추가하여 TOSC API 응답을 파싱
  • HTTP 200 응답이어도 body의 success 필드로 실제 로그인 성공/실패 여부를 확인하도록 개선
  • errors 필드에서 상세 에러 메시지 추출 (예: "아이디를 찾을수 없습니다.")
public record ToscResponse(
    boolean success,
    Map<String, String> errors
) {
    public String getErrorMessage() {
        if (errors == null || errors.isEmpty()) {
            return "알 수 없는 오류";
        }
        return String.join(", ", errors.values());
    }
}

2. 예외 처리 개선

  • AllcllException throw를 제거하고 모든 예외를 catch하여 로깅
  • HTTP 상태 코드 확인 후 body 파싱
  • 네트워크 오류(타임아웃, DNS 오류 등)를 개별적으로 처리
  • 모든 로그에 학번 정보 포함

3. 로그인 결과에 TOSC 상태 포함

  • LoginResulttoscLoginFailed 필드 추가
  • TOSC에서 불러오는 정보(수강 내역 등) 업데이트 실패를 클라이언트에 알려서 사용자에게 안내할 수 있도록 개선
  • 메인 로그인은 성공하되, TOSC 정보만 업데이트되지 않았음을 구분 가능

📊 Expected Log Examples

TOSC 로그인 실패 시:

[TOSC] 로그인 실패 (학번: 12345678, 에러: 아이디를 찾을수 없습니다.)

타임아웃 발생 시:

[TOSC] 타임아웃 발생 (학번: 12345678)

HTTP 요청 실패 시:

[TOSC] HTTP 요청 실패 (상태 코드: 500, 학번: 12345678)

🔗 Related Issue

TSK-56-150

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 21, 2026

Test Results

187 tests   187 ✅  26s ⏱️
 43 suites    0 💤
 43 files      0 ❌

Results for commit 9451ce0.

♻️ This comment has been updated with latest results.

Copy link
Copy Markdown
Member

@haeyoon1 haeyoon1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!! 👍

궁금한 점이 있는데, 이미 한번 로그인 된 경우에는 TOSC에서 불러오는 정보를 업데이트 하지 못하고 로그를 찍은 채 넘어갈 것 같습니다.
다만 초기 로그인 시 오류가 발생한 경우라면 어떻게 되나요?

기존 코드에서는 loginTosc에서 에러가 발생 해 AuthFacade의 login 전체가 트랙잭션에 묶여 작동하지 않았습니다.
하지만 현재는 login 메서드에서 toscAuthService.loginTosc(client, loginRequest); 부분에서 로그만 찍고 아래로 넘어가게되어

            GraduationCertInfo certInfo = graduationCertResolver.resolve(user, client);

의 GraduationCodingCertFetcher.fetchCodingPass 부분에서 항상 false로 보여지게 될 텐데, 잘못된 정보를 보여주게되는 건 아닐까요??

또는

TOSC에서 불러오는 정보(수강 내역 등) 업데이트 실패를 클라이언트에 알려서 사용자에게 안내할 수 있도록 개선

이렇게 안내한다면 괜찮을까용

}
return String.join(", ", errors.values());
}
} No newline at end of file
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

엔터 please~

Comment on lines +32 to +38
try {
toscAuthService.loginTosc(client, loginRequest);
} catch (Exception exception) {
toscLoginFailed = true;
log.error("[TOSC] 로그인 실패, TOSC 정보 업데이트 불가 (학번: {}): {}",
loginRequest.studentId(), exception.getMessage());
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

toscAuthService.loginTosc 메서드 내에 에러를 던지는 로직이 없는 것 같은데, catch문이 어떻게 작동되는 지 궁금합니다!🤔

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그러네요 제가 다 잡아버리고 catch 문을 작동시켰군요 😇
덕분에 확인 후 수정했습니다!!

@boyekim
Copy link
Copy Markdown
Member

boyekim commented Mar 30, 2026

제가 로컬에서 돌리면서 로그인 안되었을때 html 응답을 그대로 봤었는데요, 로그인이 안되고 영어인증 요청을 보낼때 나오는 응답값이 나오더라구용. 이 로그인이 안된걸 타임아웃으로 보시는거죠!?
저희 TOSC 로그인 안되면 이후 다음으로 넘겼을 때 어떻게 화면에 보이는게 좋을까요? 어떤거 생각하고 계신지 궁금해용
저도 false를 반환하는 것 보다는 DB에 저장된 이전 값이 있다면 그걸 주는게 좋을 거 같아요

@2Jin1031
Copy link
Copy Markdown
Contributor Author

2Jin1031 commented Apr 4, 2026

@boyekim

TOSC 로그인 실패를 타임아웃으로 처리하고 계신 거죠?

네, 맞습니당

TOSC 로그인이 실패했을 때, 다음 단계로 넘어간 화면에서 사용자에게 어떻게 보여주는 게 좋을지 궁금합니다.

말씀하신 방향과 동일하게 구현되어 있습니다~! TOSC 로그인이 실패해도 이후 DB 접근 로직은 정상 진행되어, 이전에 저장된 졸업요건 데이터를 반환해요. 추가로 toscLoginFailed: true 플래그도 함께 반환하고 있어서, 클라이언트에서 "TOSC 서버 문제로 이전 데이터를 기반으로 표시합니다" 같은 안내를 보여줄 수 있습니다~~


용어 정리

  • toscLoginFailed: TOSC 서버 로그인 성공 여부를 나타내는 boolean 플래그. true일 경우 로그인 실패로 실시간 데이터를 가져오지 못했음을 의미

@2Jin1031 2Jin1031 merged commit 243c1bf into main Apr 5, 2026
3 checks passed
@2Jin1031 2Jin1031 deleted the 2Jin1031/TSK-56-150 branch April 5, 2026 07:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants