728x90
스프링 부트 개념과 활용
4. 스프링 부트 활용
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/springboot-concept-uses/tree/chap04-10-10-data-mongodb
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
10. 스프링 데이터 10부: MongoDB
MongoDB는 JSON 기반의 도큐먼트 데이터베이스
SpringData MongoDB 의존성 추가
MongoDB Reactive라는 것도 있는데 Spring Webflux를 사용하는 경우
Reactive한 Stream과 Repository를 만들어 낼 수 있음
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
MongoDB 설치 및 실행 (도커)
docker run -p 27017:27017 --name mongo_boot -d mongo
docker exec -i -t mongo_boot bash
mongo
스프링 데이터 몽고DB
아래의 빈 들을 자동으로 설정해주고 지원해줘서 손쉽게 MongoDB를 사용할 수 있음
- MongoTemplate
- MongoRepository
MongoDB 실습1
Runner를 빈으로 추가하고 account를 insert 하는 테스트 로직 작성
@SpringBootApplication
public class Application {
@Autowired
MongoTemplate mongoTemplate;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationRunner applicationRunner() {
return args -> {
Account account = new Account();
account.setEmail("aaa@bbb");
account.setUsername("aaa");
mongoTemplate.insert(account);
System.out.println("finished");
};
}
}
Account 클래스 작성
@Document(collection = "accounts")
public class Account {
@Id
private String id;
private String username;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
MongoDB 실습2 - Repository
MongoRepository를 확장한 interface 추가
public interface AccountRepository extends MongoRepository<Account, String> {
}
Repository를 사용하는 테스트 코드 작성
@SpringBootApplication
public class Application {
@Autowired
AccountRepository accountRepository;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationRunner applicationRunner() {
return args -> {
Account account = new Account();
account.setEmail("aaa@bbb");
account.setUsername("aaa");
accountRepository.insert(account);
System.out.println("finished");
};
}
}
내장형 MongoDB (테스트용)을 사용한 슬라이싱 테스트
테스트용 embed MongoDB 의존성 추가
의존성만 추가해주면 내장용 MongoDB에 대한 자동설정을 지원해주므로 사용하기 매우 쉬움
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
@DataMongoTest
MongoRepository에 관련된 빈 들만 전부 등록이 됨
테스트 해보면 내장 MongoDB만 사용해서 테스트 하며 운영 MongoDB에는 아무런 영향을 주지 않음
AccountRepository에 findByEmail 추상 메서드 추가
public interface AccountRepository extends MongoRepository<Account, String> {
Optional<Account> findByEmail(String email);
}
테스트 코드 작성
@RunWith(SpringRunner.class)
@DataMongoTest
public class AccountRepositoryTest {
@Autowired
AccountRepository accountRepository;
@Test
public void findByEmail() {
Account account = new Account();
account.setUsername("freelife");
account.setEmail("freejava1191@gmail.com");
accountRepository.save(account);
Optional<Account> byId = accountRepository.findById(account.getId());
assertThat(byId).isNotEmpty();
Optional<Account> byEmail = accountRepository.findByEmail(account.getEmail());
assertThat(byEmail).isNotEmpty();
assertThat(byEmail.get().getUsername()).isEqualTo("freelife");
}
}
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 부트 개념과 활용] 4-10. 스프링 데이터 12부: 정리 (0) | 2019.11.27 |
---|---|
[스프링 부트 개념과 활용] 4-10. 스프링 데이터 11부: Neo4j (0) | 2019.11.26 |
[스프링 부트 개념과 활용] 4-10. 스프링 데이터 9부: Redis (0) | 2019.11.24 |
[스프링 데이터 JPA] 3-12. 스프링 데이터 Common: 마무리 (0) | 2019.11.23 |
[스프링 데이터 JPA] 3-11. 스프링 데이터 Common: Web 4부: HATEOAS (0) | 2019.11.23 |
댓글