# 로그인

## 소셜 로그인 처리

> \## 기능설명\
> \* 기연동되어있지 않은 회원이 신규로 소셜계정을 연동하고 토큰을 발행합니다.\
> \---\
> \## 상세설명\
> \* \*\*소셜타입(type)\*\*, \*\*회원번호(mbrNo)\*\*, \*\*소셜계정 고유ID(smpctId)\*\*, \*\*소셜ID(emailAddr)\*\*, \*\*로그인매체코드(loginMediaCd)\*\*는 필수입니다.\
> \* 넘어온 소셜타입에 대해 기존 연동된 데이터가 있는지 체크합니다.\
> \* 기존 회원에 소셜계정 연동정보를 저장합니다. 연동종료일자는 2999-12-31 23:59:59로 지정됩니다.\
> \* 정상적으로 소셜연동이 되면 기존 토큰 발행과 같은 방식으로 토큰이 발행됩니다.\
> \* 정상적으로 토큰이 발행되면 정상로그인 이력을, 실패하면 실패 로그인 이력을 생성합니다.\
> \---\
> \## 수정번호\
> \* \`\`\`Release v2.00\_240401\`\`\`: 소셜 로그인 처리 response refreshToken 추가<br>

````json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/social/connect":{"post":{"tags":["로그인"],"summary":"소셜 로그인 처리","description":"## 기능설명\n* 기연동되어있지 않은 회원이 신규로 소셜계정을 연동하고 토큰을 발행합니다.\n---\n## 상세설명\n* **소셜타입(type)**, **회원번호(mbrNo)**, **소셜계정 고유ID(smpctId)**, **소셜ID(emailAddr)**, **로그인매체코드(loginMediaCd)**는 필수입니다.\n* 넘어온 소셜타입에 대해 기존 연동된 데이터가 있는지 체크합니다.\n* 기존 회원에 소셜계정 연동정보를 저장합니다. 연동종료일자는 2999-12-31 23:59:59로 지정됩니다.\n* 정상적으로 소셜연동이 되면 기존 토큰 발행과 같은 방식으로 토큰이 발행됩니다.\n* 정상적으로 토큰이 발행되면 정상로그인 이력을, 실패하면 실패 로그인 이력을 생성합니다.\n---\n## 수정번호\n* ```Release v2.00_240401```: 소셜 로그인 처리 response refreshToken 추가\n","operationId":"connect","parameters":[{"name":"socialConnectRequest","in":"query","description":"소셜로그인 연동을 위한 회원 정보","required":true,"schema":{"type":"string","description":"SocialConnectRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialConnectRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"SocialConnectRequest":{"type":"object","description":"소셜로그인 연동, 연동해제 Request","properties":{"type":{"type":"string","description":"소셜 타입(ME052)","enum":["KAKAOTALK","NAVER","GOOGLE","APPLE"]},"mbrNo":{"type":"string","description":"회원번호"},"smpctId":{"type":"string","description":"소셜고유ID"},"emailAddr":{"type":"string","description":"소셜ID"},"loginMediaCd":{"type":"string","description":"로그인매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"siteNo":{"type":"string","description":"사이트번호"}},"required":["loginMediaCd","mbrNo","smpctId","type"]},"SocialAuthResponse":{"type":"object","description":"소셜로그인 인증 성공 후 사용자 조회 응답값","properties":{"brth":{"type":"string","description":"생년월일"},"mbrNm":{"type":"string","description":"회원명"},"emailAddr":{"type":"string","description":"이메일"},"sexGbCd":{"type":"string","description":"성별구분코드","enum":["MALE","FEMALE"]},"mbrMgrCd":{"type":"string","description":"회원관리코드","enum":["UNION_MEMBER","GENERAL_MEMBER","SOCIAL_MEMBER","ENTERPRISE_MEMBER","NO_MEMBER"]},"ciCtacVal":{"type":"string","description":"CI연계값"},"smpctGbCd":{"type":"string","description":"소셜구분코드","enum":["KAKAOTALK","NAVER","GOOGLE","APPLE"]},"nafrGbCd":{"type":"string","description":"내외국인구분코드"},"phoneNumber":{"type":"string","description":"휴대폰번호"},"mbrNo":{"type":"string","description":"회원번호"},"connectYn":{"type":"string","description":"기연동여부","enum":["Y","N"]},"smpctId":{"type":"string","description":"소셜고유ID"},"loginId":{"type":"string","description":"로그인ID"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
````

## 소셜 계정 인증

> \## 기능설명\
> \* 로그인할 소셜계정 정보를 찾아 인증한 후, 후처리 방식을 결정합니다.\
> \---\
> \## 상세설명\
> \* 동의화면에서 넘어온 \*\*인가코드(code)\*\*와 로그인할 \*\*소셜 타입(type)\*\*은 필수로 넘어와야합니다.\
> \* 소셜사이트의 동의화면에서 넘겨준 인가코드(code)를 통해 사용자를 조회하는 액세스토큰을 발급받고, 소셜 계정을 찾습니다.\
> \* 해당 소셜 계정정보로 기연동여부, 휴면회원여부, 소셜계정의 CI 인증여부를 통해 본인인증필요여부를 함께 Response에 담아줍니다.\
> \* 카카오 로그인 관련 API \[카카오 개발자 링크]\(<https://developers.kakao.com)\\>
> &#x20;  \* 사용자조회 토큰 발급 URL: <https://kauth.kakao.com/oauth/token\\>
> &#x20;  \* 사용자조회 URL: <https://kapi.kakao.com/v2/user/me\\>
> &#x20;  \* 연결 끊기 URL: <https://kapi.kakao.com/v1/user/unlink\\>
> \* 네이버 로그인 관련 API \[네이버 개발자 링크]\(<https://developers.naver.com/main)\\>
> &#x20;  \* 사용자조회 토큰 발급 URL: <https://nid.naver.com/oauth2.0/token\\>
> &#x20;  \* 사용자조회 URL: <https://openapi.naver.com/v1/nid/me\\>
> \* 구글 로그인 관련 API \[구글 개발자 링크]\(<https://console.cloud.google.com)\\>
> &#x20;  \* 사용자조회 토큰 발급 URL: <https://oauth2.googleapis.com/token\\>
> &#x20;  \* 사용자조회 URL: <https://www.googleapis.com/oauth2/v2/userinfo\\>
> \* 애플 로그인 관련 API \[애플 개발자 링크]\(<https://developer.apple.com)\\>
> &#x20;  \* 사용자조회 토큰 발급 URL: <https://appleid.apple.com/auth/token\\>
> \---\
> \## 수정번호\
> \* \`\`\`Release v1.07\_231228\`\`\`: 휴면회원여부 조회 로직 제거\
> \* \`\`\`Release v2.00\_240530\`\`\`: 소셜 추가(구글, 애플)<br>

````json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/social/check":{"post":{"tags":["로그인"],"summary":"소셜 계정 인증","description":"## 기능설명\n* 로그인할 소셜계정 정보를 찾아 인증한 후, 후처리 방식을 결정합니다.\n---\n## 상세설명\n* 동의화면에서 넘어온 **인가코드(code)**와 로그인할 **소셜 타입(type)**은 필수로 넘어와야합니다.\n* 소셜사이트의 동의화면에서 넘겨준 인가코드(code)를 통해 사용자를 조회하는 액세스토큰을 발급받고, 소셜 계정을 찾습니다.\n* 해당 소셜 계정정보로 기연동여부, 휴면회원여부, 소셜계정의 CI 인증여부를 통해 본인인증필요여부를 함께 Response에 담아줍니다.\n* 카카오 로그인 관련 API [카카오 개발자 링크](https://developers.kakao.com)\n   * 사용자조회 토큰 발급 URL: https://kauth.kakao.com/oauth/token\n   * 사용자조회 URL: https://kapi.kakao.com/v2/user/me\n   * 연결 끊기 URL: https://kapi.kakao.com/v1/user/unlink\n* 네이버 로그인 관련 API [네이버 개발자 링크](https://developers.naver.com/main)\n   * 사용자조회 토큰 발급 URL: https://nid.naver.com/oauth2.0/token\n   * 사용자조회 URL: https://openapi.naver.com/v1/nid/me\n* 구글 로그인 관련 API [구글 개발자 링크](https://console.cloud.google.com)\n   * 사용자조회 토큰 발급 URL: https://oauth2.googleapis.com/token\n   * 사용자조회 URL: https://www.googleapis.com/oauth2/v2/userinfo\n* 애플 로그인 관련 API [애플 개발자 링크](https://developer.apple.com)\n   * 사용자조회 토큰 발급 URL: https://appleid.apple.com/auth/token\n---\n## 수정번호\n* ```Release v1.07_231228```: 휴면회원여부 조회 로직 제거\n* ```Release v2.00_240530```: 소셜 추가(구글, 애플)\n","operationId":"check","parameters":[{"name":"socialLoginRequest","in":"query","description":"소셜로그인 인증 정보","required":true,"schema":{"type":"string","description":"SocialAuthRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"SocialAuthRequest":{"type":"object","description":"소셜로그인 인증, 소셜로그인 연동 Request","properties":{"code":{"type":"string","description":"소셜 사이트 인증 성공 시 넘겨주는 인증코드"},"state":{"type":"string","description":"소셜 사이트 인증 시 애플리케이션 상태"},"type":{"type":"string","description":"소셜 타입(ME052)","enum":["KAKAOTALK","NAVER","GOOGLE","APPLE"]}},"required":["code","type"]},"SocialAuthResponse":{"type":"object","description":"소셜로그인 인증 성공 후 사용자 조회 응답값","properties":{"brth":{"type":"string","description":"생년월일"},"mbrNm":{"type":"string","description":"회원명"},"emailAddr":{"type":"string","description":"이메일"},"sexGbCd":{"type":"string","description":"성별구분코드","enum":["MALE","FEMALE"]},"mbrMgrCd":{"type":"string","description":"회원관리코드","enum":["UNION_MEMBER","GENERAL_MEMBER","SOCIAL_MEMBER","ENTERPRISE_MEMBER","NO_MEMBER"]},"ciCtacVal":{"type":"string","description":"CI연계값"},"smpctGbCd":{"type":"string","description":"소셜구분코드","enum":["KAKAOTALK","NAVER","GOOGLE","APPLE"]},"nafrGbCd":{"type":"string","description":"내외국인구분코드"},"phoneNumber":{"type":"string","description":"휴대폰번호"},"mbrNo":{"type":"string","description":"회원번호"},"connectYn":{"type":"string","description":"기연동여부","enum":["Y","N"]},"smpctId":{"type":"string","description":"소셜고유ID"},"loginId":{"type":"string","description":"로그인ID"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
````

## 토큰 로그인

> \## 기능설명\
> \* 발급된 토큰로그인의 토큰으로 로그인합니다.\
> \---\
> \## 상세설명\
> \* 토큰로그인을 통해 사이트 내 정상적인 서비스 이용을 지원합니다.\
> \* 로그인을 통하여 서비스 이용을 위한 accessToken을 발급합니다.\
> \* 토큰 종류\
> &#x20;  \* accessToken : 액세스 토큰은 사이트 이용을 위하여 발급되는 토큰으로 회원의 권한을 갖는 토큰입니다.\
> &#x20;  \* refreshToken : 리프레시 토큰은 토큰의 유효기간이 상실된 액세스토큰을 사용자가 재로그인의 과정을 거치지 않고, 액세스 토큰의 유효시간을 갱신하는 토큰을 의미합니다.\
> \* accessToken에 포함된 정보\
> &#x20;  \* mbrNo : 회원번호\
> &#x20;  \* langCd : 회원의 가입 사이트 국가 및 로그인위치\
> \* 로그인 시 각 모듈에서 권한 확인 및 UserDetail(회원기본정보)을 사용하기 위하여 Redis 저장소에 등록합니다.\
> \---\
> \## 특이사항\
> \* 로그인 제한 사항\
> &#x20;  \* 국내 사이트에서 회원가입을 한 경우 글로벌 사이트에서 로그인이 제한됩니다.\
> &#x20;  \* 글로벌 사이트에서 회원가입을 한 경우 국내 사이트에서 로그인이 제한됩니다.\
> \* 토큰의 유효기간\
> &#x20;  \* accessToken : 액세스 토큰의 유효시간은 5분이며, 5분 이후에는 토큰의 권한을 상실하여 사이트 이용이 불가능합니다.\
> &#x20;  \* refreshToken : 리프레시 토큰의 유효시간은 30분이며, 30분 이후에는 토큰의 권한을 상실하여 액세스 토큰 재갱신이 불가능합니다.\
> \## 수정번호\
> \* Release v2.00\_251121: 토근 만료기간 추가<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/tokenlogin":{"post":{"tags":["로그인"],"summary":"토큰 로그인","description":"## 기능설명\n* 발급된 토큰로그인의 토큰으로 로그인합니다.\n---\n## 상세설명\n* 토큰로그인을 통해 사이트 내 정상적인 서비스 이용을 지원합니다.\n* 로그인을 통하여 서비스 이용을 위한 accessToken을 발급합니다.\n* 토큰 종류\n   * accessToken : 액세스 토큰은 사이트 이용을 위하여 발급되는 토큰으로 회원의 권한을 갖는 토큰입니다.\n   * refreshToken : 리프레시 토큰은 토큰의 유효기간이 상실된 액세스토큰을 사용자가 재로그인의 과정을 거치지 않고, 액세스 토큰의 유효시간을 갱신하는 토큰을 의미합니다.\n* accessToken에 포함된 정보\n   * mbrNo : 회원번호\n   * langCd : 회원의 가입 사이트 국가 및 로그인위치\n* 로그인 시 각 모듈에서 권한 확인 및 UserDetail(회원기본정보)을 사용하기 위하여 Redis 저장소에 등록합니다.\n---\n## 특이사항\n* 로그인 제한 사항\n   * 국내 사이트에서 회원가입을 한 경우 글로벌 사이트에서 로그인이 제한됩니다.\n   * 글로벌 사이트에서 회원가입을 한 경우 국내 사이트에서 로그인이 제한됩니다.\n* 토큰의 유효기간\n   * accessToken : 액세스 토큰의 유효시간은 5분이며, 5분 이후에는 토큰의 권한을 상실하여 사이트 이용이 불가능합니다.\n   * refreshToken : 리프레시 토큰의 유효시간은 30분이며, 30분 이후에는 토큰의 권한을 상실하여 액세스 토큰 재갱신이 불가능합니다.\n## 수정번호\n* Release v2.00_251121: 토근 만료기간 추가\n","operationId":"tokenlogin","parameters":[{"name":"autoBioLoginRequest","in":"query","description":"인증토큰 로그인 요청 정보","required":true,"schema":{"type":"string","description":"AutoBioLoginRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoBioLoginRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"AutoBioLoginRequest":{"type":"object","description":"인증토큰생성(등록) - 자동로그인, 생체인증로그인","properties":{"loginMediaCd":{"type":"string","description":"로그인 매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"mbrCertiTknGbCd":{"type":"string","description":"회원인증토큰 구분코드(ME053)","enum":["REFRESH","AUTO_LOGIN","BIO_LOGIN","CHATBOT_LOGIN","CHG_PASSWORD"]},"mbrNo":{"type":"string","description":"회원번호"},"token":{"type":"string","description":"토큰(토큰 삭제, 재발급 시 사용)"}},"required":["loginMediaCd","mbrCertiTknGbCd","token"]},"LoginResponse":{"type":"object","description":"로그인 Response","properties":{"accessToken":{"type":"string","description":"액세스 토큰"},"refreshToken":{"type":"string","description":"리프레시 토큰"},"accessTokenExpiresAt":{"type":"integer","format":"int64","description":"Access Token 만료 시간 (Unix Timestamp, 초 단위)"},"refreshTokenExpiresAt":{"type":"integer","format":"int64","description":"Refresh Token 만료 시간 (Unix Timestamp, 초 단위)"},"mbrNo":{"type":"string","description":"회원번호"},"ciCtacValYn":{"type":"string","description":"ci인증 여부"},"certiYn":{"type":"string","description":"성인인증 여부 (1일)"},"mbrMgrCd":{"type":"string","description":"회원관리코드"},"pwdChgYn":{"type":"string","description":"비밀번호 변경 대상 여부"},"tmpPwdIssuYn":{"type":"string","description":"임시비밀번호 발급 회원 여부"},"loginId":{"type":"string","description":"로그인 ID"},"joinSgtStatCd":{"type":"string","description":"가입 승인 상태 코드(ME058)"},"aprvRtrnCaus":{"type":"string","description":"승인 반려 사유"},"mbrStatCd":{"type":"string","description":"회원 상태(ME003)"},"resultMessage":{"type":"string","description":"Sub 결과 메세지"},"resultCode":{"type":"string","description":"Sub 결과 코드"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 토큰정보 발급

> \## 기능설명\
> \* 토큰로그인을 진행하기 위하여 토큰을 발급합니다.\
> \---\
> \## 상세설명\
> \* 자동로그인 및 생체인증로그인을 위한 토큰을 발행하는 서비스입니다.\
> \* 자동로그인 토큰 활성화\
> &#x20;  \* 로그인 화면에서 자동로그인 체크박스를 체크 후 로그인을 진행합니다.\
> \* 생체인증 로그인 토큰 활성화\
> &#x20;  \* 모바일 전용 앱 에서만 활성화가 가능하며, 설정 -> 로그인 설정에서 설정 가능합니다.\
> \* 토큰 종류\
> &#x20;  \* 자동로그인 토큰\
> &#x20;  \* 생체인증 로그인 토큰\
> \---\
> \## 특이사항\
> \* 자동로그인 및 생체인증 로그인 토큰의 유효기간은 10년으로 설정되며, 유효기간이 지난 토큰의 경우 로그인이 불가능합니다.<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/tokenIssu":{"post":{"tags":["로그인"],"summary":"토큰정보 발급","description":"## 기능설명\n* 토큰로그인을 진행하기 위하여 토큰을 발급합니다.\n---\n## 상세설명\n* 자동로그인 및 생체인증로그인을 위한 토큰을 발행하는 서비스입니다.\n* 자동로그인 토큰 활성화\n   * 로그인 화면에서 자동로그인 체크박스를 체크 후 로그인을 진행합니다.\n* 생체인증 로그인 토큰 활성화\n   * 모바일 전용 앱 에서만 활성화가 가능하며, 설정 -> 로그인 설정에서 설정 가능합니다.\n* 토큰 종류\n   * 자동로그인 토큰\n   * 생체인증 로그인 토큰\n---\n## 특이사항\n* 자동로그인 및 생체인증 로그인 토큰의 유효기간은 10년으로 설정되며, 유효기간이 지난 토큰의 경우 로그인이 불가능합니다.\n","operationId":"saveAutoToken","parameters":[{"name":"autoBioLoginRequest","in":"query","description":"인증토큰 발급 요청 정보","required":true,"schema":{"type":"string","description":"AutoBioLoginRequest"}},{"name":"userDetail","in":"query","description":"회원 정보","required":true,"schema":{"type":"string","description":"UserDetail"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoBioLoginRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AutoBioLoginResponse"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"AutoBioLoginRequest":{"type":"object","description":"인증토큰생성(등록) - 자동로그인, 생체인증로그인","properties":{"loginMediaCd":{"type":"string","description":"로그인 매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"mbrCertiTknGbCd":{"type":"string","description":"회원인증토큰 구분코드(ME053)","enum":["REFRESH","AUTO_LOGIN","BIO_LOGIN","CHATBOT_LOGIN","CHG_PASSWORD"]},"mbrNo":{"type":"string","description":"회원번호"},"token":{"type":"string","description":"토큰(토큰 삭제, 재발급 시 사용)"}},"required":["loginMediaCd","mbrCertiTknGbCd","token"]},"AutoBioLoginResponse":{"type":"object","description":"인증토큰생성(등록) - 자동로그인, 생체인증로그인 Response","properties":{"token":{"type":"string","description":"자동 및 생체인증 로그인 토큰"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 토큰정보 삭제

> \## 기능설명\
> \* 토큰로그인을 위해 발급된 토큰 정보를 삭제합니다.\
> \---\
> \## 상세설명\
> \* 발급된 자동로그인 및 생체인증로그인 토큰을 삭제합니다.<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/tokenIssu":{"delete":{"tags":["로그인"],"summary":"토큰정보 삭제","description":"## 기능설명\n* 토큰로그인을 위해 발급된 토큰 정보를 삭제합니다.\n---\n## 상세설명\n* 발급된 자동로그인 및 생체인증로그인 토큰을 삭제합니다.\n","operationId":"deleteAutoToken","parameters":[{"name":"autoBioLoginRequest","in":"query","description":"인증토큰 삭제 정보","required":true,"schema":{"type":"string","description":"AutoBioLoginRequest"}},{"name":"userDetail","in":"query","description":"회원 정보","required":true,"schema":{"type":"string","description":"UserDetail"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoBioLoginRequest"}}},"required":true},"responses":{"200":{"description":"성공"},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"AutoBioLoginRequest":{"type":"object","description":"인증토큰생성(등록) - 자동로그인, 생체인증로그인","properties":{"loginMediaCd":{"type":"string","description":"로그인 매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"mbrCertiTknGbCd":{"type":"string","description":"회원인증토큰 구분코드(ME053)","enum":["REFRESH","AUTO_LOGIN","BIO_LOGIN","CHATBOT_LOGIN","CHG_PASSWORD"]},"mbrNo":{"type":"string","description":"회원번호"},"token":{"type":"string","description":"토큰(토큰 삭제, 재발급 시 사용)"}},"required":["loginMediaCd","mbrCertiTknGbCd","token"]},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 토큰정보 갱신

> \## 기능설명\
> \* 로그인 처리 시 발급받은 refreshToken으로 유효시간이 지난 accessToken을 재생성합니다.\
> \---\
> \## 상세설명\
> \* X2BEE 서비스 이용을 위한 accessToken의 유효시간이 만료된 경우, refreshToken을 통해 accessToken을 재생성합니다.\
> \* accessToken의 재생성 후에는 기존에 발급 되었던 refreshToken은 삭제되고, 새로운 refreshToken이 발급되어 저장됩니다.\
> \## 수정번호\
> \* Release v2.00\_240401: token Redis 이관작업 및 token 암호화\
> \* Release v2.00\_240425: 로그인 토큰 만료 시, API 중복 호출로 인한 오류 수정\
> \* Release v2.00\_251121: 토근 만료기간 추가<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/refresh":{"post":{"tags":["로그인"],"summary":"토큰정보 갱신","description":"## 기능설명\n* 로그인 처리 시 발급받은 refreshToken으로 유효시간이 지난 accessToken을 재생성합니다.\n---\n## 상세설명\n* X2BEE 서비스 이용을 위한 accessToken의 유효시간이 만료된 경우, refreshToken을 통해 accessToken을 재생성합니다.\n* accessToken의 재생성 후에는 기존에 발급 되었던 refreshToken은 삭제되고, 새로운 refreshToken이 발급되어 저장됩니다.\n## 수정번호\n* Release v2.00_240401: token Redis 이관작업 및 token 암호화\n* Release v2.00_240425: 로그인 토큰 만료 시, API 중복 호출로 인한 오류 수정\n* Release v2.00_251121: 토근 만료기간 추가\n","operationId":"refreshToken","parameters":[{"name":"tokenRefreshRequest","in":"query","description":"리프레시 토큰 정보","required":true,"schema":{"type":"string","description":"TokenRefreshRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRefreshRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/MemberTokenDto"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"TokenRefreshRequest":{"type":"object","description":"accessToken 재생성을 위한 Request","properties":{"accessToken":{"type":"string","description":"액세스 토큰"},"refreshToken":{"type":"string","description":"refreshToken"},"mbrCertiTknIssuSeq":{"type":"string","description":"회원인증토큰발급순번"},"mbrNo":{"type":"string","description":"회원번호"},"mbrCertiTknGbCd":{"type":"string","description":"회원인증토큰구분코드(ME053)","enum":["REFRESH","AUTO_LOGIN","BIO_LOGIN","CHATBOT_LOGIN","CHG_PASSWORD"]},"loginId":{"type":"string","description":"로그인 ID"}},"required":["mbrCertiTknGbCd","refreshToken"]},"MemberTokenDto":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"mbrNo":{"type":"string"},"accessTokenExpiresAt":{"type":"integer","format":"int64"},"refreshTokenExpiresAt":{"type":"integer","format":"int64"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 로그아웃

> \## 기능설명\
> \* 로그인 시 발급된 refreshToken 정보를 삭제합니다.\
> \---\
> \## 상세설명\
> \* 리프레시 토큰은 사이트 이용에 필요한 accessToken의 유효시간이 만료되었을 때 액세스 토큰의 유효시간을 재 갱신하기 위한 토큰입니다.\
> \* 로그아웃 이후 로그인 시 발급되었던 리프레시 토큰의 정보를 삭제하여, 액세스 토큰의 재갱신을 하지 못하도록 방지합니다.\
> \## 수정번호\
> \* Release v2.00\_240401: token Redis 이관작업에 따른 로직 변경<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/logout":{"post":{"tags":["로그인"],"summary":"로그아웃","description":"## 기능설명\n* 로그인 시 발급된 refreshToken 정보를 삭제합니다.\n---\n## 상세설명\n* 리프레시 토큰은 사이트 이용에 필요한 accessToken의 유효시간이 만료되었을 때 액세스 토큰의 유효시간을 재 갱신하기 위한 토큰입니다.\n* 로그아웃 이후 로그인 시 발급되었던 리프레시 토큰의 정보를 삭제하여, 액세스 토큰의 재갱신을 하지 못하도록 방지합니다.\n## 수정번호\n* Release v2.00_240401: token Redis 이관작업에 따른 로직 변경\n","operationId":"logout","parameters":[{"name":"request","in":"query","description":"토큰 정보","required":true,"schema":{"type":"string","description":"LogoutRequest"}},{"name":"userDetail","in":"query","description":"회원 정보","required":true,"schema":{"type":"string","description":"UserDetail"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutRequest"}}},"required":true},"responses":{"200":{"description":"성공"},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"LogoutRequest":{"type":"object","description":"로그아웃 Request","properties":{"accessToken":{"type":"string","description":"액세스토큰"},"biometricToken":{"type":"string","description":"생체인증 토큰"},"loginMediaCd":{"type":"string","description":"로그인매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"mbrNo":{"type":"string","description":"회원번호"}},"required":["accessToken","mbrNo"]},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 로그인

> \## 기능설명\
> \* X2BEE 쇼핑몰 이용을 위한 계정 로그인을 진행합니다.\
> \---\
> \## 상세설명\
> \* 회원 로그인을 통해 사이트 내 정상적인 서비스 이용을 지원합니다.\
> \* 로그인을 통하여 서비스 이용을 위한 accessToken을 발급합니다.\
> \* 토큰 종류\
> &#x20;  \* accessToken : 액세스 토큰은 사이트 이용을 위하여 발급되는 토큰으로 회원의 권한을 갖는 토큰입니다.\
> &#x20;  \* refreshToken : 리프레시 토큰은 토큰의 유효기간이 상실된 액세스토큰을 사용자가 재로그인의 과정을 거치지 않고, 액세스 토큰의 유효시간을 갱신하는 토큰을 의미합니다.\
> \* accessToken에 포함된 정보\
> &#x20;  \* mbrNo : 회원번호\
> &#x20;  \* langCd : 회원의 가입 사이트 국가 및 로그인위치\
> \* 로그인 시 각 모듈에서 권한 확인 및 UserDetail(회원기본정보)을 사용하기 위하여 Redis 저장소에 등록합니다.\
> \* UserDetail 정보는 Redis에 기록되고 있으며, Redis 정보를 보유하고 있는 타임아웃은 RefreshToken의 Expire time과 동일합니다.(x2bee 솔루션 기준 30분)\
> \* 로그인오류 3회 초과 시 무차별대입 공격을 방지하기 위해 캡차코드 검증을 진행합니다.\
> \---\
> \## 특이사항\
> \* 로그인 제한 사항\
> &#x20;  \* 국내 사이트에서 회원가입을 한 경우 글로벌 사이트에서 로그인이 제한됩니다.\
> &#x20;  \* 글로벌 사이트에서 회원가입을 한 경우 국내 사이트에서 로그인이 제한됩니다.\
> \* 토큰의 유효기간\
> &#x20;  \* accessToken : 액세스 토큰의 유효시간은 5분이며, 5분 이후에는 토큰의 권한을 상실하여 사이트 이용이 불가능합니다.\
> &#x20;  \* refreshToken : 리프레시 토큰의 유효시간은 30분이며, 30분 이후에는 토큰의 권한을 상실하여 액세스 토큰 재갱신이 불가능합니다.\
> \* 각 토큰은 X2BEE 암호화 시스템에 의해 암호화되어 관리됩니다.\
> \---\
> \## 수정번호\
> \* Release v1.07\_231228: 로그인 시 휴면회원여부 체크 로직 제거\
> \* Release v1.08\_240118: 캡챠코드 Redis 이관작업\
> \* Release v2.00\_240401: token Redis 이관작업 및 token 암호화\
> \* Release v2.00\_240401: 소셜 로그인 시 캡차코드 체크 제외, 일반 로그인 시 소셜 회원인 경우 에러 로직 제거\
> \* Release v2.00\_251121: 토근 만료기간 추가<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/front/login":{"post":{"tags":["로그인"],"summary":"로그인","description":"## 기능설명\n* X2BEE 쇼핑몰 이용을 위한 계정 로그인을 진행합니다.\n---\n## 상세설명\n* 회원 로그인을 통해 사이트 내 정상적인 서비스 이용을 지원합니다.\n* 로그인을 통하여 서비스 이용을 위한 accessToken을 발급합니다.\n* 토큰 종류\n   * accessToken : 액세스 토큰은 사이트 이용을 위하여 발급되는 토큰으로 회원의 권한을 갖는 토큰입니다.\n   * refreshToken : 리프레시 토큰은 토큰의 유효기간이 상실된 액세스토큰을 사용자가 재로그인의 과정을 거치지 않고, 액세스 토큰의 유효시간을 갱신하는 토큰을 의미합니다.\n* accessToken에 포함된 정보\n   * mbrNo : 회원번호\n   * langCd : 회원의 가입 사이트 국가 및 로그인위치\n* 로그인 시 각 모듈에서 권한 확인 및 UserDetail(회원기본정보)을 사용하기 위하여 Redis 저장소에 등록합니다.\n* UserDetail 정보는 Redis에 기록되고 있으며, Redis 정보를 보유하고 있는 타임아웃은 RefreshToken의 Expire time과 동일합니다.(x2bee 솔루션 기준 30분)\n* 로그인오류 3회 초과 시 무차별대입 공격을 방지하기 위해 캡차코드 검증을 진행합니다.\n---\n## 특이사항\n* 로그인 제한 사항\n   * 국내 사이트에서 회원가입을 한 경우 글로벌 사이트에서 로그인이 제한됩니다.\n   * 글로벌 사이트에서 회원가입을 한 경우 국내 사이트에서 로그인이 제한됩니다.\n* 토큰의 유효기간\n   * accessToken : 액세스 토큰의 유효시간은 5분이며, 5분 이후에는 토큰의 권한을 상실하여 사이트 이용이 불가능합니다.\n   * refreshToken : 리프레시 토큰의 유효시간은 30분이며, 30분 이후에는 토큰의 권한을 상실하여 액세스 토큰 재갱신이 불가능합니다.\n* 각 토큰은 X2BEE 암호화 시스템에 의해 암호화되어 관리됩니다.\n---\n## 수정번호\n* Release v1.07_231228: 로그인 시 휴면회원여부 체크 로직 제거\n* Release v1.08_240118: 캡챠코드 Redis 이관작업\n* Release v2.00_240401: token Redis 이관작업 및 token 암호화\n* Release v2.00_240401: 소셜 로그인 시 캡차코드 체크 제외, 일반 로그인 시 소셜 회원인 경우 에러 로직 제거\n* Release v2.00_251121: 토근 만료기간 추가\n","operationId":"login","parameters":[{"name":"loginRequest","in":"query","description":"회원 로그인 정보","required":true,"schema":{"type":"string","description":"LoginRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"LoginRequest":{"type":"object","description":"로그인 Request","properties":{"loginFromCd":{"type":"string","description":"로그인매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"loginType":{"type":"string","description":"로그인구분(ME056)","enum":["NORMAL","AUTO_LOGIN","SOCIAL_LOGIN"]},"lgnId":{"type":"string","description":"회원 아이디"},"passwd":{"type":"string","description":"비밀번호"},"captchaCd":{"type":"string","description":"캡챠코드"}},"required":["lgnId"]},"LoginResponse":{"type":"object","description":"로그인 Response","properties":{"accessToken":{"type":"string","description":"액세스 토큰"},"refreshToken":{"type":"string","description":"리프레시 토큰"},"accessTokenExpiresAt":{"type":"integer","format":"int64","description":"Access Token 만료 시간 (Unix Timestamp, 초 단위)"},"refreshTokenExpiresAt":{"type":"integer","format":"int64","description":"Refresh Token 만료 시간 (Unix Timestamp, 초 단위)"},"mbrNo":{"type":"string","description":"회원번호"},"ciCtacValYn":{"type":"string","description":"ci인증 여부"},"certiYn":{"type":"string","description":"성인인증 여부 (1일)"},"mbrMgrCd":{"type":"string","description":"회원관리코드"},"pwdChgYn":{"type":"string","description":"비밀번호 변경 대상 여부"},"tmpPwdIssuYn":{"type":"string","description":"임시비밀번호 발급 회원 여부"},"loginId":{"type":"string","description":"로그인 ID"},"joinSgtStatCd":{"type":"string","description":"가입 승인 상태 코드(ME058)"},"aprvRtrnCaus":{"type":"string","description":"승인 반려 사유"},"mbrStatCd":{"type":"string","description":"회원 상태(ME003)"},"resultMessage":{"type":"string","description":"Sub 결과 메세지"},"resultCode":{"type":"string","description":"Sub 결과 코드"}}},"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```

## 캡차코드 검증 처리

> \## 기능설명\
> \* 캡차코드의 일치 여부를 검증합니다.\
> \---\
> \## 상세설명\
> \* 생성된 캡차코드와 사용자가 입력한 캡차코드가 일치하는지 검증합니다.\
> \* Redis에 등록 및 관리되고 있는 캡차코드는 일치여부와 관계 없이 1회성으로 사용되며, 검증 로직 이후 Redis에서 삭제처리됩니다.\
> \---\
> \## 특이사항\
> \* 해당 API는 테스트용으로 개발된 것으로 외부에서 사용되지 않습니다.\
> \## 수정번호\
> \* Release v1.08\_240118: 캡챠코드 Redis 이관작업<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/captcha/validAnswer":{"post":{"tags":["로그인"],"summary":"캡차코드 검증 처리","description":"## 기능설명\n* 캡차코드의 일치 여부를 검증합니다.\n---\n## 상세설명\n* 생성된 캡차코드와 사용자가 입력한 캡차코드가 일치하는지 검증합니다.\n* Redis에 등록 및 관리되고 있는 캡차코드는 일치여부와 관계 없이 1회성으로 사용되며, 검증 로직 이후 Redis에서 삭제처리됩니다.\n---\n## 특이사항\n* 해당 API는 테스트용으로 개발된 것으로 외부에서 사용되지 않습니다.\n## 수정번호\n* Release v1.08_240118: 캡챠코드 Redis 이관작업\n","operationId":"validAnswer","parameters":[{"name":"loginRequest","in":"query","description":"회원 로그인 정보","required":true,"schema":{"type":"string","description":"LoginRequest"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"성공"}}}}},"components":{"schemas":{"LoginRequest":{"type":"object","description":"로그인 Request","properties":{"loginFromCd":{"type":"string","description":"로그인매체코드(ME026)","enum":["PC_WEB","MOBILE_WEB","MOBILE_APP"]},"loginType":{"type":"string","description":"로그인구분(ME056)","enum":["NORMAL","AUTO_LOGIN","SOCIAL_LOGIN"]},"lgnId":{"type":"string","description":"회원 아이디"},"passwd":{"type":"string","description":"비밀번호"},"captchaCd":{"type":"string","description":"캡챠코드"}},"required":["lgnId"]}}}}
```

## 캡차 코드 음성 변환

> \## 기능설명\
> \* 캡차코드를 음성으로 변환합니다.\
> \---\
> \## 상세설명\
> \* 생성된 캡차코드의 문자를 음성으로 변환합니다.\
> \---\
> \## 수정번호\
> \* \`\`\`Release v2.00\_240401\`\`\`: 캡챠코드 Redis 이관작업<br>

````json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/captcha/getCaptchaTextToAudio":{"get":{"tags":["로그인"],"summary":"캡차 코드 음성 변환","description":"## 기능설명\n* 캡차코드를 음성으로 변환합니다.\n---\n## 상세설명\n* 생성된 캡차코드의 문자를 음성으로 변환합니다.\n---\n## 수정번호\n* ```Release v2.00_240401```: 캡챠코드 Redis 이관작업\n","operationId":"createCaptchaTextToAudio","parameters":[{"name":"loginId","in":"query","required":true,"schema":{"type":"string"}},{"name":"req","in":"query","description":"고객 요청 데이터","required":true,"schema":{"type":"string","description":"HttpServletRequest"}},{"name":"res","in":"query","description":"고객 전달 데이터","required":true,"schema":{"type":"string","description":"HttpServletResponse"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"responses":{"200":{"description":"성공"}}}}}}
````

## 캡차 코드 생성

> \## 기능설명\
> \* 캡차코드를 생성합니다.\
> \---\
> \## 상세설명\
> \* 무차별 대입 공격을 방지하기 위한 캡차코드를 생성합니다.\
> \* 생성된 캡차코드의 자릿수는 6자리이며, 0-9 까지의 랜덤한 숫자를 조합하여 이미지로 생성합니다.\
> \* 비밀번호 3회 초과 오류 시 생성됩니다.\
> \* 생성된 캡차코드는 Redis에서 등록되어 관리되고 있으며, 유효시간은 2분입니다.\
> \* Redis에서 등록 및 관리되고 있는 Key는 ID + CaptchaCd로 관리되고 있습니다.\
> \## 수정번호\
> \* Release v1.08\_240118: 캡챠코드 Redis 이관작업<br>

```json
{"openapi":"3.1.0","info":{"title":"X2BEE Member API","version":"v1"},"servers":[{"url":"https://api-member.x2bee.com/api/member/","description":"prd"}],"paths":{"/v1/captcha/getCaptchaImg":{"get":{"tags":["로그인"],"summary":"캡차 코드 생성","description":"## 기능설명\n* 캡차코드를 생성합니다.\n---\n## 상세설명\n* 무차별 대입 공격을 방지하기 위한 캡차코드를 생성합니다.\n* 생성된 캡차코드의 자릿수는 6자리이며, 0-9 까지의 랜덤한 숫자를 조합하여 이미지로 생성합니다.\n* 비밀번호 3회 초과 오류 시 생성됩니다.\n* 생성된 캡차코드는 Redis에서 등록되어 관리되고 있으며, 유효시간은 2분입니다.\n* Redis에서 등록 및 관리되고 있는 Key는 ID + CaptchaCd로 관리되고 있습니다.\n## 수정번호\n* Release v1.08_240118: 캡챠코드 Redis 이관작업\n","operationId":"createCaptchaImg","parameters":[{"name":"loginId","in":"query","required":true,"schema":{"type":"string"}},{"name":"req","in":"query","description":"고객 요청 데이터","required":true,"schema":{"type":"string","description":"HttpServletRequest"}},{"name":"res","in":"query","description":"고객 전달 데이터","required":true,"schema":{"type":"string","description":"HttpServletResponse"}},{"name":"Authorization","in":"header","description":"Access Token","required":false}],"responses":{"200":{"description":"성공"},"900":{"description":"업무처리 오류 내용","content":{"*/*":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"Response":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"result time"},"code":{"type":"string","description":"result code"},"message":{"type":"string","description":"result message"},"isProcess":{"type":"boolean","description":"process check"},"payload":{"description":"payload"},"error":{"type":"boolean","description":"is error"},"errors":{"type":"array","description":"validation error list","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"type":"object","properties":{"field":{"type":"string","description":"field"},"message":{"type":"string","description":"field message"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tech.x2bee.com/api/store-front-api/member-api/undefined-7.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
