Web

[웹] 세션, 쿠키? 알아볼게요( with . python, javascript)

JJANG-JOON 2023. 8. 18. 10:19
반응형

웹 개발에서 세션과 쿠키는 사용자 데이터를 관리하고 유지하는 데 중요한 매우 역할을 한다.

세션은 서버 측에서 상태를 관리하는 방법이며, 쿠키는 클라이언트 측에 저장되는 작은 데이터 조각이며 이 두 기술은 사용자 경험을 향상시키는 데 핵심적인 역할을 한다.

 

세션

세션은 웹 서버에서 생성되고 관리되며, 각 클라이언트와 서버 간의 상태를 유지하고 사용자가 웹 페이지에 접속하면 서버는 사용자별로 고유한 세션을 생성하고 세션 ID를 부여한다. 이 세션 ID는 사용자를 구별하고 해당 사용자에 대한 데이터를 저장하는 데 사용된다.

 

쿠키

쿠키는 클라이언트 측에 작은 텍스트 파일로 저장되며 웹 페이지를 방문할 때 서버에서 클라이언트에게 쿠키를 전송하고, 클라이언트는 이를 저장하여 나중에 사용하하게 되는데 이를 통해 사용자 기본 설정, 로그인 정보 등을 유지할 수 있다.

 

세션과 쿠키를 같이 사용

세션을 사용하는 동안에도 쿠키를 브라우저에 저장하는 이유는 주로 두 가지 측면에서 나게 된다.

바로 세션 식별 및 추가 데이터 저장을 위한 용도이다.

 

세션 식별 및 관리:

세션은 서버 측에서 생성되고 관리되는데, 각 세션은 고유한 세션 ID를 가지고 있다. 이 세션 ID는 클라이언트와 서버 간에 상호작용할 때 사용되는데 이를 위해 클라이언트는 매번 세션 ID를 서버로 보내야 한다. 그런데 이 세션 ID를 매번 모든 요청에 포함시키는 것은 비효율적이기에 브라우저 쿠키를 사용하여 세션 ID를 저장하고 클라이언트와 서버 간의 요청과 응답에서 이 세션 ID를 교환한다. 이렇게 함으로써 클라이언트가 웹 페이지를 이동하거나 상호작용할 때마다 세션 ID를 번거롭게 전송하지 않고도, 쿠키에 저장된 세션 ID를 활용하여 세션을 유지할 수 있다.

 

추가 데이터 저장:

때로는 세션 데이터 외에도 클라이언트 측에서 유지해야 하는 정보가 있을 수 있을 수 있다.

예를 들어, 사용자의 언어 설정, 테마 선택, 로그인 상태 등이 있을 수 있는데  이러한 추가 정보를 서버에 전달하지 않고 클라이언트 측에서 관리하기 위해 쿠키를 사용할 수 있다.

 

대응 방법:

세션ID를 쿠키에 저장하는 경우에도 해당 세션ID는 클라이언트 측에 저장되므로 보안상의 취약점이 발생할 수 있기에 세션ID가 쿠키로 노출될 경우, 악의적인 공격자가 해당 세션ID를 획득하면 해당 세션의 모든 정보에 접근할 수 있을 가능성이 있다.

이를 통해 사용자의 계정이나 민감한 데이터에 접근하는 위험성이 있습니다.

 

따라서 세션ID를 쿠키에 저장할 때에도 보안 조치가 필요하다:

  1. 암호화: 세션ID를 쿠키에 저장하기 전에 암호화하여 저장하면 세션ID가 노출되더라도 암호화된 형태로 저장되기 때문에 공격자가 해당 세션을 쉽게 탈취할 수 없다.
  2. 세션ID 만료 시간: 세션ID를 쿠키에 저장할 때 만료 시간을 설정하여 일정 시간 후에 자동으로 세션ID가 무효화되도록 하고 이로써 사용자가 일시적으로 쿠키를 획득하더라도 일정 시간 이후에는 해당 쿠키를 사용할 수 없게 된다.
  3. HTTPS 사용: 세션ID를 쿠키로 저장할 때에는 반드시 HTTPS 프로토콜을 사용해야 하며 HTTPS를 통한 통신은 데이터를 암호화하여 전송하기 때문에 중간에 데이터가 유출되는 것을 방지할 수 있다.
  4. 보안 정책 강화: 보안 정책을 통해 다른 도메인에서 접근하는 것을 방지하거나, 쿠키의 SameSite 속성을 설정하여 CSRF (Cross-Site Request Forgery) 공격을 방지할 수 있다.

세션, 쿠키의 차이점

  • 위치: 세션은 서버 측에서 관리되며, 서버 메모리나 데이터베이스에 세션 데이터를 저장, 반면 쿠키는 클라이언트 측에 저장
  • 용량: 세션은 서버 측에서 처리되므로 보다 많은 데이터를 저장, 쿠키는 작은 용량의 데이터만 저장 가능
  • 보안: 세션은 데이터가 서버에 저장되므로 상대적으로 안전 ,쿠키는 클라이언트에 저장되므로 보안에 취약할 수 있음
  • 수명: 세션은 사용자가 브라우저를 닫거나 일정 시간 동안 활동이 없을 때 만료, 쿠키는 설정된 만료 날짜까지 유지

 

세션, 쿠키의 장단점

 

세션의 장점

  • 민감한 데이터 저장 가능
  • 보안 강화 가능
  • 서버 측에서 관리되므로 클라이언트 변경에 대응 가능

세션의 단점:

  • 서버 리소스 소비
  • 사용자 수가 많을 때 확장 어려움

쿠키의 장점:

  • 클라이언트 측에서 관리되므로 서버 부하 감소
  • 사용자 기본 설정 및 추적에 용이

쿠키의 단점:

  • 보안 취약성
  • 작은 용량 제한
  • 사용자가 브라우저 설정에서 쿠키 차단 가능

부가 개념:

  • 웹 스토리지: HTML5에서 제공되는 로컬 스토리지와 세션 스토리지는 클라이언트 측에 데이터를 저장하는 또 다른 방법입이다.
  • JWT (JSON Web Token): 인증 정보를 안전하게 전송하기 위해 사용되는 토큰 기반의 인증 방식이다.

세션 예시 (Python Flask):

from flask import Flask, session, redirect, url_for

app = Flask(__name__)
app.secret_key = 'your_secret_key'

@app.route('/login')
def login():
    session['username'] = 'user123'
    return redirect(url_for('dashboard'))

@app.route('/dashboard')
def dashboard():
    if 'username' in session:
        return f'Welcome, {session["username"]}!'
    else:
        return 'You are not logged in.'

if __name__ == '__main__':
    app.run()

위 코드에서는 Python Flask를 사용하여 세션을 구현했고 사용자가 로그인하면 세션에 사용자 이름을 저장하고, 대시보드 페이지에서 해당 세션 데이터를 사용하여 사용자를 맞이해준다.

 

쿠키 예시 (JavaScript):

// 쿠키 설정
document.cookie = 'username=user123; expires=Thu, 18 Aug 2023 12:00:00 UTC; path=/';

// 쿠키 읽기
function getCookie(name) {
    const value = "; " + document.cookie;
    const parts = value.split("; " + name + "=");
    if (parts.length === 2) return parts.pop().split(";").shift();
}

const username = getCookie('username');
console.log(`Welcome, ${username}!`);

쿠키 예시에서는 JavaScript를 사용하여 쿠키를 설정하고 읽어오는 방법을 보여주며 쿠키를 설정한 후 함수를 사용하여 해당 쿠키 값을 읽어와서 사용자를 환영한다.

 

 

 

 


 

세션과 쿠키는 웹 개발에서 사용자 경험을 향상시키기 위해 중요한 도구이고 로그인 정보, 사용자 설정, 장바구니 등을 유지하고 관리하기 위해 적절히 선택하여 사용할 수 있다.

세션은 민감한 정보의 보안이 중요한 경우에 유용하며, 쿠키는 클라이언트 기반 데이터 저장에 적합하지만 웹 스토리지나 JWT와 같은 다른 기술도 고려해 볼 수 있다.

개발자는 사용 사례에 맞게 최적의 방식을 선택하여 웹 애플리케이션을 개발하고 최상의 사용자 경험을 제공할 수 있어야한다.

 

반응형