상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용하여 사용자 인증을 관리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/switchMap/ko'>switchMap</a>은 RxJS에서 자주 사용하는 연산자로, 특히 사용자 인증과 같이 비동기 작업을 순차적으로 처리하거나 이전 작업을 취소해야 할 때 매우 유용합니다. 사용자 인증 관리에 switchMap을 활용하는 방법을 차근차근 설명하겠습니다. --- 1. switchMap 기본 개념 이해 switchMap은 Observable에서 발생한 값들을 받아서 내부에서 또 다른 Observable을 반환합니다. 이때 중요한 점은 새로운 Observable이 생성되면 이전 Observable의 구독을 자동으로 취소(switch)한다는 점입니다. 쉽게 말해, 이전 요청이 완료되지 않았더라도 새로운 요청으로 변경되면 이전 요청을 무시하고 최신 요청 결과만 처리할 수 있습니다. --- 2. 사용자 인증에서 switchMap이 필요한 이유 - 중복 로그인 요청 방지 : 사용자가 로그인 버튼을 여러 번 클릭하거나 빠르게 정보를 변경할 때, 이전 로그인 시도는 무의미해집니다. - 최신 상태 유지 : 가장 최근의 사용자 인증 상태만 반영되어야 하며, 이전 인증 프로세스는 버려져야 합니다. - 성능 최적화 : 불필요한 서버 요청 취소 및 네트워크 자원 절약 --- 3. 구체적인 사용 시나리오 예를 들어 사용자가 로그인 폼에 아이디/비밀번호를 입력하고 제출한다고 가정해봅시다. ```typescript import { Component } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { AuthService } from './auth.service'; // 로그인 API 호출 서비스 import { switchMap } from 'rxjs/operators'; @Component({ selector: 'app-login', <a href='https://sangseek.com/sangseeks/template/ko'>template</a>: ` <form [formGroup]="loginForm" (ngSubmit)="submit()"> <input formControlName="username" placeholder="아이디" /> <input formControlName="password" type="password" placeholder="비밀번호" /> <button type="submit">로그인</button> </form> ` }) export class LoginComponent { loginForm: FormGroup; constructor(private fb: FormBuilder, private authService: AuthService) { this.loginForm = this.fb.group({ username: [''], password: [''] }); } submit() { this.authService.logout(); // 이전 인증상태 초기화 (선택사항) this.authService.login(this.loginForm.value).pipe( // switchMap 적용 예시 (아래에서 설명) ).subscribe(user => { // 로그인 성공 처리 (예: 토큰 저장, 화면 이동) }, error => { // 에러 처리 }); } } ``` --- 4. switchMap을 이용한 인증 흐름 관리 보통 아래와 같이 사용합니다. ```typescript import { Subject } from 'rxjs'; import { switchMap } from 'rxjs/operators'; class AuthManager { private loginRequests$ = new Subject<{username: string, password: string}>(); constructor(private authService: AuthService) { this.loginRequests$.pipe( switchMap(credentials => this.authService.login(credentials.username, credentials.password) ) ).subscribe(user => { // 로그인 성공 처리 }, error => { // 로그인 실패 처리 }); } login(username: string, password: string) { this.loginRequests$.next({username, password}); } } ``` - 사용자가 로그인 버튼을 누를 때마다 `login` 메서드가 호출되고, 내부 Subject가 새로운 값을 발행합니다. - switchMap은 내부적으로 이전 로그인 API 호출이 완료되기 전에 새 요청이 들어오면 이전 요청을 취소하고, 최신 요청만 서버에 전송하여 인증 처리합니다. --- 5. 실제 api 호출 예시 ```typescript login(username: string, password: string): Observable<User> { // API 호출, HttpClient로 반환되는 Observable 가정 return this.httpClient.post<User>('/api/login', {username, password}); } ``` --- 6. 요약 - switchMap은 사용자 인증에서 이전 로그인 요청이 완료되지 않았을 때 발생하는 중복 요청을 방지하는 데 유리합니다. - 사용자가 로그인 요청을 여러 번 보낸 경우에도 가장 마지막 요청에 대한 응답만 반영됩니다. - 이전 요청은 자동으로 취소되므로, 불필요한 서버 리소스 낭비를 막을 수 있습니다. - 사용자 인증 상태 변화(예: 로그인 → 로그아웃 → 다시 로그인)시에도 자연스러운 흐름 제어가 가능합니다. --- 이처럼 RxJS의 switchMap을 적절히 활용하면 사용자 인증 로직을 훨씬 안정적이고 직관적으로 관리할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기