새소식

반응형
250x250
📁 프로젝트 일지/👩‍🏫 공공 교육 서비스

4.기능 구현(1) - 로그인(세션, 스프링 시큐리티)

  • -
728x90
반응형

🦮 스스로를 위한 프로젝트 일지 가이드

1️⃣ 프로젝트를 진행하며 '왜' 그렇게 했는가

2️⃣ 어떤 문제가 생겼고, 어떻게 해결하였는가

3️⃣ 프로젝트를 되짚어보며 개선할 점이 있는가

 

초기 로그인은 유저가 입력한 데이터를 담은 객체와, DB에서 아이디를 파라미터로 넣어 select *한 결과값을 담은 객체의 비번을 getter로 불러와 컨트롤러에서 비교하는 방식이었다.

 

로그인 후 사용자 아이디와 이름을 세션에 등록하도록 컨트롤러에 구현하였다.

 

1️⃣ 프로젝트를 진행하며 '왜' 그렇게 했는가

 

👉 다음과 같은 기능이 필요하였다.

1)로그인 후 회원 이름이 뜨게 하기

2)수강후기 작성, 마이페이지 접속에서 비회원 접근 제한

3)해당 후기 작성자에게만 수정, 삭제 버튼 노출

 

위 기능을 구현하려면 로그인한 회원 정보(아이디와 이름)를 어딘가에 저장할 필요가 있었다.

저장하지 않으면 해당 정보를 변수나 객체에 저장해 컨트롤러에서 계속 getter로 불러와야 하는데, 코드도 중복되고, 불편하고, 보안상 좋지 않은 방법이었다.

그렇다고 쿠키에 저장하자니 회원 정보는 민감한 정보라 보안에 상대적으로 취약한 쿠키보다는,

서버에서 다루는 세션에 저장하는 것이 낫다고 판단했다.

세션을 사용한 이유는 다음과 같다.

 

1)쿠키보다 나은 보안

2)정보를 코드 전역에서 사용할 수 있어 편리

 

 

1️⃣ 프로젝트를 진행하며 '왜' 그렇게 했는가

 

컨트롤러에서 회원의 비밀번호를 직접 비교하는 것은 데이터베이스 해킹 위험이 높아지기 때문에 보안상 좋지 않다는 생각이 들어 보안을 강화할 방법을 찾아보던 중 스프링 시큐리티를 알게 됐다.

 

2️⃣ 어떤 문제가 생겼고, 어떻게 해결하였는가

 

◾ 높은 난이도

블로그 위주로 스프링 시큐리티에 대한 자료를 엄~청 찾아봤는데, 문제가 생겼다.

바로 뭔 소린지 모르겠다는 문제..

대부분의 블로그에 나와있는 스프링 시큐리티 코드는 Filter나 token 등을 자바 클래스에서 커스텀한 내용이라 스프링 시큐리티에 막 입문한 나는 도무지 이게 뭔 소린지... 알 수가 없었다.

그래서 다시 처음부터 개념을 살펴보았다. 스프링 시큐리티가 어떤 흐름으로 흘러가는지 이해하고자 했다.

구조를 이해하고 나니 전보다는 코드가 더 잘 이해가 갔지만 여전히 커스텀한 내용을 다 이해하기는 무리였다.

일단 스프링에서 적용한 뒤에 전자정부로 넘어가자고 판단했다.

스프링에서 스프링 시큐리티에서 제공하는 샘플 로그인 페이지까지 띄우는 데는 성공했다.

하지만 로그인 커스터마이징에서 계속 오류가 나기 시작했다.

자료도 엄청 찾아보고 팀원이랑 같이 파일들을 샅샅이 훑어보며 원인을 찾아냈다.

설정 파일에서 잘못한 설정이 있었고, 내가 스프링 시큐리티에서 자체적으로 제공하는 로그인 검증 url login에 대한 개념을 잘못 이해해서 오류가 난 거였다.

 

◾ 로그인 실패 : bad credentials 오류

결국 스프링에서 로그인 커스터마이징을 성공하고 이제 전자정부 프레임워크에서 시큐리티 연동을 시도했다.

연동을 성공하고 이번엔 로그인 테스트 과정에서 로그인 실패 오류가 날 괴롭혔다.

분명히 아이디, 비밀번호를 맞게 입력했는데 계속 로그인이 실패하는 것이다.

로그인이 실패하는 원인을 찾기 위해 filter를 커스텀으로 만들어 디버깅을 해보았다.

로그인이 실패한 원인을 찾아냈다. bad credentials 오류였다.

스프링에서 로그인 테스트할 당시 썼던 암호화된 비밀번호를 DB 튜플에 그대로 insert했는데, 자바에서 인코딩 로직을 거치지 않으면 인코더가 다르게 인식한다고 한다.

 

요약하자면 다음과 같이 해결하였다.

스프링 시큐리티 구조 이해 👉 자료 많은 스프링에서 시큐리티 적용 연습 👉 전자정부 프레임워크 연동 👉 로그인 실패 오류 👉 디버깅과 많은 삽질로 해결

 

3️⃣ 프로젝트를 되짚어보며 개선할 점이 있는가

 

프로젝트 데드라인으로 인해 시간이 부족하여 스프링 시큐리티에서 인증 기능만 사용하고 인가 기능을 활용해보지 못했다. 비회원 접속 제한 기능을 세션 대신 스프링 시큐리티 인가로 구현하면 좋을 것 같다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.