회사에서 진행 중인 프로젝트의 관리자 페이지 구현을 요청 받았다.
사수가 예전에 다른 프로젝트에서 구현한 프로젝트 코드를 보여주었고, 참고하라고 하셨다:)
하지만 로그인 구현에 있어서 Spring Security를 사용해 코드를 최적화하면 더 좋을 거라고 생각했고, 사수도 로그인 구현에 코드 변경을 허락하셨다.

이게 기존 로그인 구현에 순서도 chapter1이다.
나름대로 기존 코드를 보고 개인적인 분석으로 이루어져서 100프로 확실할지는 모르겠지만..(그래서 여러번 코드를 재차 확인 함ㅎㅎ)
먼저 chapter1은 기존 로그인 방식과 굉장히 유사하고 기본적이다.
ID/PW값을 입력받은 후 서비스에서 토큰을 생성하고, 세션에 사용자 정보 및 생성한 토큰을 저장한다.
HttpSession session = request.getSession();
loginUser.setSystemCode(systemCode);
loginUser.setDeviceID(deviceID);
session.setAttribute(SessionConst.LOGIN_MEMBER, loginUser);
이때 중요한건 비밀번호는 세션에 저장하면 보안에 취약하기 때문에 세션에 저장하지 않는다.
아래와 같이 임의로 객체의 비밀번호를 임의로 null값을 선언한다.
loginUser.setPassword(null); // 이런식으로 보안을 위해 비밀번호 제거

기존 로그인 구현 chapter2이다.
안전한 인증 시스템 구현을 위해서 필요한 부분입니다.
1. 보호된 리소스에 접근할 때 인증 상태를 검증
2. 중복 로그인 방지 : DB에 저장된 토큰과 세션의 토큰을 비교해 중복 로그인 방지
3. 세션 하이재킹 방지 : 토큰의 유효성 검사
전체적인 코드를 분석해보니까 명확한 단점이 존재했다.
1. 인증 로직이 여러 클래스에 분산(Controller, Service, Interceptor..)되어 있어서 코드가 복잡
2. 모든 보안 위협에 대한 대응을 직접 구현
3. 보안 표준이 변경될 때마다 수동으로 업데이트가 필요
4. URL 기반 접근 제어 : 메소드 수준의 세밀한 보안 제어가 어려움
이를 해결하기 위해 SpringSecurity를 도입하기로 하였습니다.

Spring Security 도입 시 장점
1. 통합 보안 프레임워크
- 인증, 인가, CSRF 방어, 세션 관리 등 포괄적 보안 기능을 제공한다.
- 개발자가 스스로 보안을 위한 수동 업데이트 하지 않아도 된다.
- 메소드 수준에 접근 제어가 가능하다.
'MyStory > Technology_Preview' 카테고리의 다른 글
| 2편: 핵심 기능 구현과 성과 - 사용자 중심의 현대적 인터페이스 완성 (2) | 2025.06.18 |
|---|---|
| 1편: 레거시 시스템 현대화 - Oracle Forms에서 모던 웹으로의 여정 (3) | 2025.06.18 |
| SFTP 사용해서 서버에 이미지 저장 (0) | 2025.03.26 |