개요
이 튜토리얼에서는 Spring Boot 애플리케이션 에서 Spring Session MongoDB 사용하는 방법을 학습 수 있습니다. Spring Session MongoDB 는 애플리케이션이 Spring Session 데이터를 MongoDB 에 저장 수 있도록 MongoDB 에서 유지 관리하는 오픈 소스 통합입니다.
이 튜토리얼에 따라 샘플 Spring Boot 애플리케이션 세션 저장 위해 MongoDB Atlas 배포서버 서버에 연결합니다.
팁
이 튜토리얼에서는 Spring Data Framework Integration 튜토리얼에서 만든 Spring Boot 애플리케이션 수정합니다. 이 페이지의 단계에서는 Spring Session MongoDB 사용하도록 해당 애플리케이션 업데이트 방법을 보여줍니다.
프로젝트 설정
다음 단계를 완료하여 Spring Boot 애플리케이션 설정하다 하고 개발 환경에 Spring Session MongoDB 설치합니다.
전제 조건을 확인합니다.
이 튜토리얼을 시작하기 전에 다음 필수 구성 요소를 설치하고 설정하다 했는지 확인하세요.
JDK 버전 17 이상
IntelliJ IDEA 또는 Eclipse와 같은 통합 개발 환경(IDE)
참고
이 튜토리얼에서는 IDE에서 Maven을 사용하여 Spring Session MongoDB 설치하는 방법을 보여줍니다. IDE를 사용하지 않는 경우 Maven 빌드를 방문하여 프로젝트 설정하다 방법을 학습 .
새 Spring Boot 프로젝트 만듭니다.
Spring Data Framework Integration 튜토리얼을 완료하여 새 Spring Boot 애플리케이션 생성합니다. GitHub의 SpringDataMongoBulkInsert 리포지토리 방문하여 애플리케이션 코드를 보고 복제할 수도 있습니다.
이 필수 튜토리얼을 완료하면 Spring Data MongoDB 사용하여 MongoDB 컬렉션 에서 대량 삽입 작업을 수행하는 새 애플리케이션 갖게 됩니다.
프로젝트 종속성을 업데이트합니다.
pom.xml 파일 에서 spring-boot-starter-parent 종속성을 다음 코드로 바꿉니다.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>4.0.0</version> <relativePath/> <!-- Lookup parent from repository --> </parent>
이렇게 하면 애플리케이션 이 Spring Session 4.0과 호환되는 Spring Boot 4.0을(를) 사용할 수 있습니다.
그런 다음 파일의 종속성 목록에 다음 종속성을 추가하여 Spring Session MongoDB 사용하세요.
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-spring-session</artifactId> <version>4.0.0-rc0</version> </dependency>
종속성을 구성한 후에는 종속성 관리자를 실행 하고 IDE에서 프로젝트 를 새로 고쳐 프로젝트 에서 사용할 수 있는지 확인합니다.
MongoDB 배포에 연결하기
다음 단계를 완료하여 연결 문자열 이라고도 하는 연결 URI를 검색하여 MongoDB deployment 에 연결합니다. 연결 URI는 운전자 에 MongoDB deployment 에 연결하는 방법과 연결된 동안 동작하는 방법을 지시합니다.
MongoDB Atlas 연결 문자열 찾습니다.
MongoDB deployment 대한 연결 문자열 조회 하려면 Atlas 계정에 로그 Database 섹션 아래의 Clusters 페이지로 이동합니다. 새 배포서버 의 Connect 버튼을 클릭합니다.

아직 데이터베이스 사용자를 구성하지 않은 경우 MongoDB 새 사용자를 생성하고 구성하라는 메시지를 표시합니다.
Connect to your application 아래의 Drivers 버튼을 클릭하고 Driver 선택 메뉴에서 "Java"를 선택하고 Version 선택 메뉴에서 설치한 버전과 가장 일치하는 버전을 선택합니다.
연결 문자열 만 보려면 View full code sample 옵션의 선택을 취소합니다.
Spring 세션 MongoDB 구성
Spring Data 튜토리얼을 완료하고 연결 URI에 액세스한 후 애플리케이션 에 Spring Session MongoDB 추가하여 세션 관리 활성화 할 수 있습니다.
MongoDB 연결을 확인합니다.
디렉토리 에서 파일 로 이동합니다. Spring application.properties src/main/resources 데이터 튜토리얼의 MongoClient 구성 섹션에 설명된 대로 이 파일 MongoDB database, 연결 URI 및 삽입할 문서 수를 지정하는지 확인합니다. 올바르게 구성된 경우 파일 다음 코드가 포함됩니다.
mongodb.database=bulk mongodb.uri=<connection URI> documentCount=25000
자리 표시자를 이전 섹션에서 저장한 <connection URI> 연결 URI로 바꿉니다.
Spring 세션 구성 클래스를 생성합니다.
프로젝트의 기본 패키지 디렉토리 에 SessionConfig.java 라는 새 파일 만들고 다음 코드를 붙여넣습니다.
package com.mongodb.examples.springdatabulkinsert; import org.mongodb.spring.session.config.annotation.web.http.EnableMongoHttpSession; import org.springframework.context.annotation.Configuration; public class SessionConfig { }
이 구성 클래스를 사용하면 Spring Boot 애플리케이션 에 대한 MongoDB 지원 HTTP 세션 관리 사용할 수 있습니다.
세션 인식 웹 엔드포인트 추가
다음으로, Spring Data MongoDB 애플리케이션 의 제품 데이터로 작업할 때 세션 관리 시연하는 웹 엔드포인트를 추가합니다.
웹 컨트롤러를 만듭니다.
프로젝트의 기본 패키지 디렉토리 에 ProductWebController.java 라는 파일 만들고 다음 코드를 붙여넣습니다.
package com.mongodb.examples.springdatabulkinsert; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ProductWebController { private MongoTemplate mongoTemplate; public Map<String, Object> searchProducts( String name, HttpSession session) { List<String> searchHistory = (List<String>) session.getAttribute("searchHistory"); if (searchHistory == null) { searchHistory = new ArrayList<>(); } // Defines the default search if no name is provided if (name == null || name.trim().isEmpty()) { name = "product"; } // Adds the current search to history searchHistory.add(name); session.setAttribute("searchHistory", searchHistory); // Queries the "name" field in the "products" collection Query query = new Query(Criteria.where("name").regex(name, "i")); List<Product> products = mongoTemplate.find(query, Product.class, "products"); return Map.of( "products", products, "sessionId", session.getId() ); } public Map<String, Object> getSearchHistory(HttpSession session) { // Retrieves the search history from the session List<String> searchHistory = (List<String>) session.getAttribute("searchHistory"); if (searchHistory == null) { searchHistory = new ArrayList<>(); } return Map.of( "searchHistory", searchHistory, "sessionId", session.getId(), "searchCount", searchHistory.size() ); } }
ProductWebController.java 기존 제품 데이터와 상호 작용하여 세션 기능을 시연하는 REST 컨트롤러입니다. 이 파일 다음과 같은 웹 엔드포인트를 정의합니다.
/products/search:bulk.products컬렉션 에서 제품을 검색하고 각 검색 텀 사용자 세션에 저장합니다./products/history: MongoDB 에 저장된 사용자 세션에서 검색 기록 데이터를 조회합니다.
기본 애플리케이션 클래스를 업데이트합니다.
새 웹 엔드포인트를 테스트하기 전에 애플리케이션 실행 엔드포인트에 대한 정보를 출력하도록 메인 애플리케이션 클래스를 업데이트 . SpringDataBulkInsertApplication.java 의 내용을 다음 코드로 바꿉니다.
package com.mongodb.examples.springdatabulkinsert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; public class SpringDataBulkInsertApplication implements CommandLineRunner { private int count; private static final Logger LOG = LoggerFactory .getLogger(SpringDataBulkInsertApplication.class); private ProductRepository repository; public static void main(String[] args) { SpringApplication.run(SpringDataBulkInsertApplication.class, args); } public void run(String... args) throws Exception { repository.bulkInsertProducts(count); LOG.info("Bulk insert completed. Web endpoints are now available."); LOG.info("You can visit these URLs:"); LOG.info(" http://localhost:8080/products/search?name=goose"); LOG.info(" http://localhost:8080/products/history"); } }
애플리케이션 실행하기
마지막으로 이 섹션의 단계에 따라 애플리케이션 실행 하고 세션 저장 기능을 탐색합니다.
세션 기능을 테스트합니다.
웹 브라우저를 열거나 curl과 같은 도구를 사용하여 다음 세션 지원 엔드포인트를 테스트합니다.
제품 검색: 컬렉션 에 삽입된 문서를 쿼리 하려면 을
bulk.productshttp://localhost:8080/products/search?name=방문하여 URL 에 제품 이름을 추가합니다. 예시 들어,name"goose"http://localhost:8080/products/ 검색 ?name=goose를 방문하여 값이인 문서를 검색 할 수 있습니다.출력에는 다음 샘플 출력과 같이 세션 ID 및
name필드 쿼리 와 일치하는 문서 목록이 포함됩니다.{ "sessionId": "...", "products": [ { "name": "goose", "qty": 788, "price": 9680, "available": "...", "unavailable": "...", "skuId": "276-68-7836" }, { "name": "goose", "qty": 984, "price": 2307, "available": "...", "unavailable": "...", "skuId": "068-88-9345" }, ... ] } 검색 기록 보기: 검색 기록을 보려면 http://localhost:8080/products/history를 방문합니다.
출력에는 다음 샘플 출력과 같이 세션 ID , 검색한 제품 이름 목록, 총 검색 수가 포함됩니다.
{ "sessionId": "...", "searchHistory": [ "goose", "bear" ], "searchCount": 2 }
애플리케이션을 다시 시작합니다.
애플리케이션 중지했다가 다시 실행 MongoDB 세션 데이터를 유지합니다.
- IDE 또는 터미널에서 애플리케이션 중지합니다. 그런 다음 다시 시작합니다.
- IDE에서 실행하거나 터미널에서 다음 명령을 실행 .
./mvnw spring-boot:run
http://localhost:8080/products/history URL 방문하면 애플리케이션 재부팅하더라도 이전 검색 기록을 볼 수 있습니다. 이 데이터는 메모리가 아닌 MongoDB 에 저장되었기 때문에 계속 사용할 수 있습니다.
참고
세션 시간 초과
Spring Session MongoDB의 기본값 세션 시간 제한은 30 분입니다. 30 분 동안 사용하지 않은 후 애플리케이션 다시 시작하면 세션이 만료되고 MongoDB 더 이상 이전 세션 데이터를 저장하지 않습니다.
다음 단계
튜토리얼을 완료한 것을 축하합니다!
참고
이 튜토리얼에서 문제가 실행 하면 이 페이지의 오른쪽 또는 오른쪽 하단에 있는 Rate this page 탭 사용하여 피드백 제출 .
일반적인 질문에 대한 지원은 MongoDB Stack Overflow 태그 또는 MongoDB Reddit Community를 사용하여 찾을 수 있습니다.
이 튜토리얼에서는 Spring Session MongoDB 사용하고 제품 데이터가 포함된 동일한 MongoDB deployment 에 사용자 세션을 저장 하도록 Spring Data MongoDB 애플리케이션 업데이트했습니다. 이 애플리케이션 대량 작업 및 데이터 쿼리와 함께 작동하는 세션 관리 보여 줍니다.
애플리케이션 계속 개발하려면 다음 리소스를 참조하세요.
