- Published on
Stateless 방식으로 사용자 데이터를 보호를 통한 개인적인 정리
- Authors
- Name
- 김민석
Introduction
상황
- 이력서 피드백 서비스에서는 사용자가 자신의 이력서를 업로드하여 OpenAI API를 통해
실시간
으로피드백을 받는 기능
을 제공하고 있다. - 여러 사용자가
동시에 접속
할 수 있는 서비스 환경에서, 업로드된 이력서가다른 사용자에게 노출
될 가능성을 완전히 차단하는 것이 중요했다.
문제

- 초기 구현은 상태를 유지하는
방식(stateful)
으로 되어 있어, 서버에서 사용자 데이터를 일시적으로저장
하고 이를 통해 요청 간상태를 유지
하는 방식으로 동작했다. - 때문에, 여러 사용자가
동시에 접속
할 경우 사용자의 이력서 데이터가 서버에 남아있는 동안다른 요청에서 접근할 가능성
이 생겼다.
원인
stateful
방식에서는 서버가 클라이언트의 상태 정보를 세션에 저장하여 요청 간에 상태를 유지한다.- 서버가 상태를 유지하는 구조에서는 상태 정보가
세션 또는 서버의 메모리에 저장
되며, 이 정보가 명시적으로 분리되지 않으면여러 사용자가 같은 정보를 동시에 접근
할 가능성이 높아진다. - 예를 들어, 이력서를 서버에서 임시로 저장할 경우, 다른 사용자가 동일한 서버에 접근할 때 우발적으로 이 데이터에 접근할 수 있다.
해결

문제를 해결하기 위해 서버가 사용자의 상태를 유지하지 않는 stateless
방식을 도입했다.
HTTP의 Stateless 특성 (일반적인 개념 x 이상황에서의 적합한 개념 설명)
- 서버가 각 요청을 독립적으로 처리하도록 한다. 즉, 요청 간에 상태 정보를 저장하지 않고, 각 요청이 새로운 연결로 처리되는 방식이다.
- 서버는 클라이언트의 이전 요청에 대한 정보를 기억하지 않으므로, 사용자는 매번 필요한 정보를 함께 보내야 한다. 이렇게 함으로써 서버는 특정 사용자의 상태를 유지하지 않고, 모든 요청을 독립적으로 처리할 수 있게 되는 것이다.
- 이와 같은
Stateless
방식 덕분에, 서버는 다수의 사용자로부터 동시에 들어오는 요청을 효율적으로 처리할 수 있다. 각 요청은 독립적이므로 서버는 한 사용자의 요청이 끝난 후 해당 정보를 저장할 필요가 없다. - 이러한 방식은 클라이언트와 서버 사이의 연결이 매우 많더라도 서버의 메모리나 자원을 절약할 수 있도록 도와주는 것이다.
예시 설명
만약 사용자 A와 사용자 B가 각각 서버에 이력서를 업로드하여 피드백을 요청할 때, 서버는 이들의 요청을 전혀 연관 짓지 않고 처리
한다.
- 사용자 A가 파일을 업로드하면 서버는 그 파일을
임시로 생성
하고 피드백을 처리한 후즉시 삭제
한다. - 이어서 사용자 B의 요청이 들어오면, 서버는 A의 정보를
전혀 알지 못한 채
B의 파일을 새로 처리하고 삭제한다.
Stateless
방식에서는 서버가 사용자 A나 B에 대한 상태를 유지하지 않기 때문에, 독립적인 요청 처리
가 가능해지고, 동시에 다수의 사용자 요청도 문제 없이 관리할 수 있다.
이러한 특성 덕분에 이력서와 같은 민감한 정보가 보호되고, 사용자 간의 데이터 노출 위험도 줄일 수 있다.
임시 파일 생성 및 즉시 삭제:
파일을 서버에서영구적으로 저장
하지 않고, 업로드된 파일을일시적으로 생성
하고 필요할 때만 처리한 후,즉시 삭제
하도록 구현했다.독립적인 요청 처리:
모든 요청은 이전 요청의 데이터를 참조하지 않고독립적으로 처리
된다.
// 파일을 임시로 생성하고 작업 종료 시 즉시 삭제하는 방식
String resumeContent = extractResumeContent(file);
if (resumeContent == null) {
return ResponseEntity.badRequest().body(Map.of("error", "지원하지 않는 파일 형식입니다"));
}
String initialFeedback = openAiService.getDetailedFeedback(resumeContent);
결과
Stateless
방식을 도입한 결과, 서버가 사용자의상태 정보를 전혀 유지하지 않게
되어 각 요청이독립적
으로 처리된다.- 이를 통해, 이력서와 같은 민감한 정보가
다른 사용자에게 노출
될 가능성을차단
했다. 독립적
으로 처리되는 각 요청이 서버에상태를 남기지 않으므로
보안성이 크게 향상되었다.