본문 바로가기
스프링 부트

[스프링부트] MongoDB로 CRUD 실습해보기

by illlilillil 2022. 3. 2.

[몽고디비 설치]

2022.03.02 - [맥북 M1] - 맥북으로 도커에 mongoDB 설치하기

 

[스프링부트 프로젝트 가져오기]

start.spring.io로 아래 Dependencies를 추가했습니다.

편의를 위해 Lombok 정도만 추가로 가져오겠습니다.

 

[application.properties]: yml로 하셔도 무방합니다. database 부분을 선언하신 데이터베이스 이름으로 할당해주세요.

아래 세 줄은 선언하신 계정 이름과 패스워드에 맞게 바꿔주세요.

spring.data.mongodb.database=test
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
#아래 세 줄을 꼭 추가해야 권한 오류가 나지 않습니다.
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=root
spring.data.mongodb.password=1234

 

[Entity 선언]

@Document를 통해 collection의 이름을 설정합니다. RDBMS의 @Entity 같은 역할을 합니다.

@Document(collection = "accounts")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Account {
    @Id
    private String account_id;
    private String username;
    private String email;
}

 

[Repository 선언]

RDBMS하듯 JPARepository와는 다르게 MongoRepository를 사용합니다.

@Repository
public interface AccountRepository extends MongoRepository<Account, String> {
}

 

[Controller 작성]

원래는 Service를 거쳐야 하지만 실습 목적이기 때문에 Controller만 작성하겠습니다.

@RequiredArgsConstructor
@RestController
public class AccountController {
    private final AccountRepository accountRepository;

    @GetMapping("/account/{id}")
    public Account findById(@PathVariable String id) {
        return accountRepository.findById(id).get();
    }

    @GetMapping("/account")
    public List<Account> findAll() {
        return accountRepository.findAll();
    }

    @PostMapping("/account")
    public Account save(@RequestBody Account account) {
        return accountRepository.save(account);
    }
    
    @PutMapping("/account/{id}")
    public Account update(@RequestBody Account account,@PathVariable String id) {
        Account updateAccount = accountRepository.findById(id).orElse(null);
        updateAccount.setUsername(account.getUsername());
        updateAccount.setEmail(account.getEmail());
        return accountRepository.save(updateAccount);
    }
    
    @DeleteMapping("/account/{id}")
    public boolean deleteById(@PathVariable String id) {
        accountRepository.deleteById(id);
        return true;
    }
}

 

[계정 등록 테스트]

디비에도 잘 등록이 되었습니다.Id 끝에 3자리가 순차증가함을 확인할 수 있습니다. _class라는 것도 추가됨을 확인할 수 있습니다.

 

[계정 조회 테스트]

 

[계정 전체 조회 테스트]

 

[계정 삭제 테스트]

[계정 수정 테스트]

 

간단하게 CRUD를 해보면서 궁금했던 점이 생겼습니다.

NoSQL에서 복잡한 쿼리문은 어떻게 작성하는가에 대한 의문입니다.

공부를 추가적으로 한 후에 포스팅해드릴게요.

댓글