본문 바로가기

Spring Boot/유저 관리 기능

유저 기능의 이해, 인증 개념 : 유저 기능의 필요성과 활용

Security 복습하기 전에 유저기능 복습하기

 

- 유저 기능이 웹 서비스에서 어떤 역할을 하는가

- 유저 식별을 통해 맞춤형 서비스를 제공하는법

- 유저 기능이 필요한 서비스 사례

- 인증(Authentication) 개념의 기본원리

- 실무에서 자주 사용하는 인증법과 비교


유저 기능의 필요성과 활용

유저(User) 기능은 대부분 웹 서비스에서 가장 기본적이면서 필수적인 기능임

단순 서비스를 방문하는 익명 사용자가 아니라, 개인별로 식별 가능한 계정을 통해 서비스를 이용하게 함

 

1. 웹 서비스에서 유저 기능의 역할

웹 서비스는 크게 비회원(익명 사용자)과 회원(로그인 사용자)으로 구분됨

 - 비회원(Guest User) : 사이트를 자유롭게 둘러볼 수 있지만, 제한된 기능만 이용 가능

 - 회원(Registered User) : 계정을 만들고 로그인해야 하며, 개인화된 서비스(장바구니, 프로필, 주문 내역 등) 이용 가능

 

온라인 쇼핑몰이라고 했을 때

 - 비회원은 상품만 둘러볼 수 있음

 - 회원은 장바구니에 물건을 담거나, 배송지를 저장하고 결제까지 진행할 수 있음

회원 가입과 로그인 기능이 곧 서비스의 핵심 가치로 이어질 수 있다

 

 

2. 유저 식별을 통한 맞춤형 서비스 제공

유저 기능을 통해 서비스는 사용자별로 다른 경험을 제공한다. 이것을 개인화(Personalization)라고 함

 - 넷플릭스 : 로그인하면 본인의 시청 기록과 취향에 맞는 영화가 추천됨

 - 쿠팡 : 로그인하면 자주 구매한 상품, 배송 주소, 결제 수단이 자동으로 불러와짐

 - 유튜브 : 로그인하면 개인 구독 목록과 추천 영상이 표시됨

// 간단한 User 클래스 예시
public class User {
	private Long id; // 고유 ID
    private String name; // 이름
    private String email; // 이메일, 로그인시 ID 역할
    private String password; // 비밀번호
}

 

User 클래스는 사용자의 고유한 정보를 저장하는 기본적인 구조를 가짐

 

 

3. 유저 기능이 필요한 서비스 사례 분석

서비스 유형 유저 기능 필요 여부 이유
뉴스 사이트 선택적 단순 기사 열람은 가능하지만, 댓글 작성이나 구독 기능을 위해 필요함
온라인 쇼핑몰 필수 장바구니, 주문내역, 배송관리 등 유저별 기능이 핵심임
은행 서비스 필수 계좌 조회, 송금, 이체 등 민감한 개인정보 처리
커뮤니티 서비스 필수 글 작성, 댓글 작성, 팔로우등 참여형 기능 필요

 

 

 

4. 팁

 - 유저 기능은 서비스 확장의 출발점임. 초기에는 단순 로그인 / 로그아웃만 구현하더라도 나중에 프로필 수정, 알림, 친구관계, 결제 등으로 확장될 수 있음

 - 데이터베이스 설계 시 반드시 고려해야하는 부분임. user 테이블은 거의 모든 다른 테이블과 연결(관계)을 맺는다

 - user - order, user - post, user - comment

 

 

5. 정리

항목 설명
유저 기능 웹 서비스의 필수 기능, 회원과 비회원을 구분함
개인화 유저 정보를 활용해 맞춤형 서비스를 제공함
필요 서비스 사례 쇼핑몰, 은행, 커뮤니티, 스트리밍 등

 

 


인증(Authentication) 개념

유저 기능을 구현할 때 가장 중요한 과정이 인증(Authentication)임

"이 사용자가 정말 본인이 맞는가?"

 

1. 인증의 기본 원리

인증은 보통 ID(식별자)와 Password(비밀번호)로 이루어짐

 - ID : 사용자를 구분하기 위한 식별자(이메일, 아이디, 휴대전화)

 - Password : 사용자가 본인임을 증명하기 위한 비밀값

// 로그인 로직 예시
public boolean login(String email, String password) {
	User user = userRepository.findByEmail(email);
    if(user == null) {
    	return false; // 등록되지 않은 유저 필터링
    }
    return user.getPassword().equals(password); // 비밀번호 일치 필터링
}

 

실제 서비스에서는 비밀번호를 평문으로 저장하지 않고 암호화(Hashing)하는 기법을 사용한다

 

 

2. 다양한 인증 방식

인증 방식 설명 예시
ID + Password 가장 기본적인 방식 이메일 + 비밀번호 로그인
소셜 로그인 외부 서비스 계정 활용 구글, 네이버, 카카오 로그인
2단계 인증(2FA) 추가 보안 수단 문자 인증, OTP
생체인증 사용자의 신체 정보를 활용 지문, 얼굴 인식

 

 

 

3. 인증 vs 인가

 - 인증(Authentication) : 너는 누구야? (사용자가 본인임을 확인하는 과정)

 - 인가(Authorization) : 너에게 무엇을 허용해줄까? (특정 자원에 접근할 수 있는 권한을 확인하는 과정)

 

은행 앱에서 : 

 - 로그인시 인증함(본인 확인)

 - 송금 가능 여부 확인시 인가함(권한 확인)

 

 

4. 팁

 - 비밀번호는 반드시 암호화해서 저장해야함(SHA-256, bcrypt 등등)

 - 세션 기반 인증과 토큰 기반 인증(JWT)의 차이를 반드시 이해해야함

 - 모바일 서비스라면 소셜 로그인이나 2단계 인증을 제공하는게 일반적이다