스프링부트 안드로이드 로그인 구현 방법 질문입니다.

조회수 3633회

스프링부트와 안드로이드를 공부하고 있습니다. 안드로이드로 프론트엔드는 두 번정도 해봤는데 백엔드는 처음입니다. 현재 스프링부트로 로그인 없이 게시판 작성/수정/삭제 기능만 구현한 상태고 유저 회원가입만 해놓은 상태입니다. 그런데 스프링부트과 안드로이드 로그인 구현을 하기 위해서 어떻게 해야 하는지 감도 안오고 막막합니다..ㅜ

시큐리티를 이용한 방법, 세션 인터셉터, jwt 토큰 등 여러가지가 있는 것 같은데 백엔드를 처음하는 입장에 이해하기 쉽게 할 수 있는 방법이 무엇일까요??

어떤식으로 해야 하는지 로직도 같이 알려주시면 감사하겠습니다. ㅜㅜ

ex) 세션을 저장하고 안드로이드에서 매핑된 url 로 요청을 할 때 무엇을 저장해야하고 등등...

1 답변

  • 일반적으로 모바일 애플리케이션과 백엔드 간 인증은 JWT 토큰을 이용하여 수행합니다.

    게시글 작성, 수정, 삭제를 구현하신 것 보니 Rest Controller 는 작성하실 줄 아는 것으로 보이구요.

    별도의 로그인 end point 를 만드셔야 하는데 로그인을 수행해야 하니 기본적으로 아이디와 비밀번호를 앱에서 서버로 보내야 겠지요.

    전달받은 아이디와 비밀번호를 이용하여 로그인 성공 또는 실패를 구현하시고, 로그인 성공시 JWT 토큰을 생성하여 보내면 되겠습니다.

    게시판 쪽 DB 모델링이 어떻게 되어있는지 언급하시지 않아 자세히 답변드리기 어렵겠으나, 일반적으로 JWT 토큰 생성시 사용자 식별 정보와 토큰의 만료시간이 포함됩니다.

    이렇게 로그인 성공 후에 서버로부터 전달받은 JWT 를 앱에서 보관하고, 이후 권한이 필요한 백엔드 API 호출시 JWT 토큰을 첨부하여 서버에 전달합니다.

    아래는 JWT 인증을 이용한 게시글 작성 API 호출 시나리오입니다.

    1. 앱 실행
    2. 로그인 수행
    3. 로그인 성공시 서버로부터 전달받은 JWT 토큰을 보관
    4. 게시글 작성화면 진입
    5. 게시글 작성에 필요한 데이터와 로그인 성공시 전달받은 JWT 토큰을 서버에 함께 전송
    6. 서버에서는 JWT 토큰을 검증 (유효한 토큰인지 -> 유효시간 및 사용자 유효성 체크) 하여 성공시 게시글 작성 및 응답

    JWT 토큰을 전달하는 방법은 여러가지가 있지만 크게 2가지가 존재합니다.

    1. RequestHeader 에 토큰을 담아 서버로 전달한다.
    2. End point url 파라미터에 토큰을 담아 서버로 전달한다.

    저는 일반적으로 요청 헤더에 토큰을 넣어 서버로 전달하는 식으로 구현하구요. 인증이 필요한 API 호출시에도 크게 2가지 스타일로 구현합니다.

    1. Retrofit 의 Interceptor 를 구현하여 인증이 필요한 API 요청마다 JWT 토큰을 요청 헤더에 포함하여 전달
    2. Retrofit Rest Api 를 수행하는 별도의 Executor 클래스를 작성하여 인증이 필요한 API 호출시에 토큰을 포함하여 전달 (URL 파라미터 이용)

    여기까지는 앱단에서 JWT 토큰을 서버에 전달하는 과정에 대해서 설명드린 것이구요.

    서버측에서도 여러가지 방법이 있으나, 스프링을 이용하여 JWT 토큰 관련 처리를 수행할 때는 Filter 를 등록하여 처리했습니다.

    1. 인증이 필요한 API 분류
    2. 해당 API 호출시 요청 헤더에 JWT 토큰이 존재하는지 확인
    3. 인증 후 처리
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)