InfoGrab DocsInfoGrab Docs

세션 데이터 접근

요약

GitLab의 세션 데이터는 Redis에 저장되며 다양한 방법으로 접근할 수 있습니다. 웹 요청 중에는 다음과 같이 접근할 수 있습니다: Rails는 ActionDispatch::Session을 통해 컨트롤러 내에서 세션에 접근할 수 있도록 제공합니다.

GitLab의 세션 데이터는 Redis에 저장되며 다양한 방법으로 접근할 수 있습니다.

웹 요청 중에는 다음과 같이 접근할 수 있습니다:

  • Rails는 ActionDispatch::Session을 통해 컨트롤러 내에서 세션에 접근할 수 있도록 제공합니다.

  • 컨트롤러 외부에서는 Gitlab::Session을 통해 세션에 접근할 수 있습니다.

웹 요청 외부에서도 Redis에 저장된 세션에 접근할 수 있습니다. 예를 들어:

  • 세션 ID와 내용을 Redis에서 직접 조회할 수 있습니다.

  • 세션에 연결된 UserAgent 관련 데이터는 ActiveSession을 통해 접근할 수 있습니다.

세션에 값을 저장할 때는 다음을 권장합니다:

  • 마샬링 복잡성을 피하기 위해 간단한 기본 타입을 사용하고 객체 저장을 피합니다.

  • Redis의 메모리 사용량을 낮게 유지하기 위해 불필요한 변수는 정리합니다.

GitLab::Session#

데이터베이스 같은 다른 저장소 대신 세션에 데이터를 유지하고 싶을 때가 있습니다. Gitlab::Session을 사용하면 세션을 여러 곳에 전달하지 않고도 접근할 수 있습니다. 예를 들어, 권한 확인이 이루어지는 각 위치에 세션을 전달하지 않고도 정책 내에서 접근할 수 있습니다.

세션은 컨트롤러에서 사용할 때와 마찬가지로 해시와 유사한 인터페이스를 제공합니다. 또한 키 아래에 키-값 데이터를 저장하기 위한 NamespacedSessionStore도 있습니다.

# 현재 세션에 저장된 값 조회
Gitlab::Session.current[:my_feature]

# Redis에 저장된 현재 세션 수정
Gitlab::Session.current[:my_feature] = value

# 키 아래에 네임스페이스가 지정된 키-값 데이터 저장
Gitlab::NamespacedSessionStore.new(:my_feature)[some_key] = value

# 테스트 등의 코드 블록에 대해 세션 설정
Gitlab::Session.with_session(my_feature: value) do
  # Session.current[:my_feature]를 사용하는 코드
end

Redis#

세션 데이터는 Redis를 통해 직접 접근할 수 있습니다. 이를 통해 디버깅 시 브라우저 세션을 확인할 수 있습니다.

# 세션 목록 가져오기
session_ids = Gitlab::Redis::Sessions.with do |redis|
  redis.smembers("#{Gitlab::Redis::Sessions::USER_SESSIONS_LOOKUP_NAMESPACE}:#{user.id}")
end

# 특정 세션 조회
session_data = Gitlab::Redis::Sessions.with { |redis| redis.get("#{Gitlab::Redis::Sessions::SESSION_NAMESPACE}:#{session_id}") }
Marshal.load(session_data)

ActiveSession으로 디바이스 정보 가져오기#

사용자 프로필의 활성 세션 페이지에는 각 세션에 접근하는 데 사용된 디바이스 정보가 표시됩니다. 세션을 나열하는 데 사용되는 메서드는 개발 시에도 유용할 수 있습니다.

# 특정 사용자의 세션 목록 가져오기
# session_id와 UserAgent 데이터가 포함됨
ActiveSession.list(user)

세션 데이터 접근

GitLab v19.1
원문 보기
요약

GitLab의 세션 데이터는 Redis에 저장되며 다양한 방법으로 접근할 수 있습니다. 웹 요청 중에는 다음과 같이 접근할 수 있습니다: Rails는 ActionDispatch::Session을 통해 컨트롤러 내에서 세션에 접근할 수 있도록 제공합니다.

GitLab의 세션 데이터는 Redis에 저장되며 다양한 방법으로 접근할 수 있습니다.

웹 요청 중에는 다음과 같이 접근할 수 있습니다:

  • Rails는 ActionDispatch::Session을 통해 컨트롤러 내에서 세션에 접근할 수 있도록 제공합니다.

  • 컨트롤러 외부에서는 Gitlab::Session을 통해 세션에 접근할 수 있습니다.

웹 요청 외부에서도 Redis에 저장된 세션에 접근할 수 있습니다. 예를 들어:

  • 세션 ID와 내용을 Redis에서 직접 조회할 수 있습니다.

  • 세션에 연결된 UserAgent 관련 데이터는 ActiveSession을 통해 접근할 수 있습니다.

세션에 값을 저장할 때는 다음을 권장합니다:

  • 마샬링 복잡성을 피하기 위해 간단한 기본 타입을 사용하고 객체 저장을 피합니다.

  • Redis의 메모리 사용량을 낮게 유지하기 위해 불필요한 변수는 정리합니다.

GitLab::Session#

데이터베이스 같은 다른 저장소 대신 세션에 데이터를 유지하고 싶을 때가 있습니다. Gitlab::Session을 사용하면 세션을 여러 곳에 전달하지 않고도 접근할 수 있습니다. 예를 들어, 권한 확인이 이루어지는 각 위치에 세션을 전달하지 않고도 정책 내에서 접근할 수 있습니다.

세션은 컨트롤러에서 사용할 때와 마찬가지로 해시와 유사한 인터페이스를 제공합니다. 또한 키 아래에 키-값 데이터를 저장하기 위한 NamespacedSessionStore도 있습니다.

# 현재 세션에 저장된 값 조회
Gitlab::Session.current[:my_feature]

# Redis에 저장된 현재 세션 수정
Gitlab::Session.current[:my_feature] = value

# 키 아래에 네임스페이스가 지정된 키-값 데이터 저장
Gitlab::NamespacedSessionStore.new(:my_feature)[some_key] = value

# 테스트 등의 코드 블록에 대해 세션 설정
Gitlab::Session.with_session(my_feature: value) do
  # Session.current[:my_feature]를 사용하는 코드
end

Redis#

세션 데이터는 Redis를 통해 직접 접근할 수 있습니다. 이를 통해 디버깅 시 브라우저 세션을 확인할 수 있습니다.

# 세션 목록 가져오기
session_ids = Gitlab::Redis::Sessions.with do |redis|
  redis.smembers("#{Gitlab::Redis::Sessions::USER_SESSIONS_LOOKUP_NAMESPACE}:#{user.id}")
end

# 특정 세션 조회
session_data = Gitlab::Redis::Sessions.with { |redis| redis.get("#{Gitlab::Redis::Sessions::SESSION_NAMESPACE}:#{session_id}") }
Marshal.load(session_data)

ActiveSession으로 디바이스 정보 가져오기#

사용자 프로필의 활성 세션 페이지에는 각 세션에 접근하는 데 사용된 디바이스 정보가 표시됩니다. 세션을 나열하는 데 사용되는 메서드는 개발 시에도 유용할 수 있습니다.

# 특정 사용자의 세션 목록 가져오기
# session_id와 UserAgent 데이터가 포함됨
ActiveSession.list(user)