티스토리 뷰
NaverLoginApi.java
@Component
public class NaverLoginApi extends DefaultApi20 {
protected NaverLoginApi(){
}
private static class InstanceHolder{
private static final NaverLoginApi INSTANCE = new NaverLoginApi();
}
public static NaverLoginApi instance(){
return InstanceHolder.INSTANCE;
}
@Override
public String getAccessTokenEndpoint() {
return "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code";
}
@Override
protected String getAuthorizationBaseUrl() {
return "https://nid.naver.com/oauth2.0/authorize";
}
}
Bill Pugh Singleton패턴
Initialization-on-demand holder idiom패턴
동작원리
1. NaverLoginApi클래스가 로딩되면 INSTANCE가 정적 초기화블록(static initialization block)내에서 생성된다.
이 때 싱글톤 객체가 생성
2. 이후에 NaverLoginApi클래스의 instance()메서드가 호출될 때, INSTANCE에 저장된 객체가 반환 된다.
이로 인해 항상 동일한 인스턴스를 반환하는 싱글톤이 보장
3. 이 패턴은 클래스 로딩 시점에서 초기화되며, 스레드를 안전하게 동작한다.
다수의 스레드가 동시게 instance()메서드를 호출하더라도 한 번만 인스턴스를 생성하고 반환한다.
이렇게 구현된 싱글톤 패턴은 레이지 초기화(Laze Initialization)를 통해 자원을 절약, 멀티 스레딩 환경에서 안전하게 인스턴스를 생성하고 반환한다.
@Override
protected String getAuthorizationBaseUrl() {
// getAuthorizationBaseUrl()메서드는 OAuth2.0인증 프로세스에서 사용자를 네이버 로그인 페이지로 리디렉션하기 위한 인증 기반 URL을 반환하는 메서드.
// 이 메서드는 DefaultApi20클래스를 상속한 클래스에서 구현되는 메서드 중 하나로, 해당 API공급자(네이버)의 인증기반 URL을 정의.
// 이 메서드는 protected로 선언되어 있기 때문에 외부에서 직접 호출할 수 없으며, 하위 클래스에서 재정의하여 사용하도록 되어 있음.
return "https://nid.naver.com/oauth2.0/authorize";
// 반환하는 URL을 사용하여 사용자를 네이버 로그인페이지로 리디렉션하여 인증 및 권한 부여를 요청할 수 있음.
}
OAuth 2.0 인증 프로세스에서는 클라이언트 애플리케이션이 사용자를 공급자(네이버)의 인증 페이지로 리디렉션하고,
사용자가 로그인 및 권한 부여를 완료하면 공급자가 인증 코드를 발급한다.
이때, getAuthorizationBaseUrl()에서 반환된 URL을 사용하여 사용자를 인증 페이지로 리디렉션하게 됩니다.
'project > yegerina(개인 프로젝트)' 카테고리의 다른 글
NaverLoginBO (0) | 2023.09.28 |
---|