Spring-Project

Arduino와 SpringBoot를 사용한 온습도 측정 사이트(5) - SpringBoot편

youngbee 2024. 6. 17. 14:42

이전글 : https://codepracticeroom.tistory.com/201

 

 

이번에는 MongoDB와 연결하고 현재 값을 웹에 나오게 해 볼 것이다.

 

 

먼저 MongoDB Atlas를 사용할 것이다.

MongoDB Atlas는 512MB까지의 스토리지를 무료로 제공해 주며 DB서버가 MongoDB회사에서 관리하기 때문에 내가 직접 실행하지 않아도 내 MongoDB에 저장된다.

 

 

먼저 MongoDB에 가입이 필요하다.

 

https://www.mongodb.com/cloud/atlas/register

 

MongoDB Atlas

Get started free. No credit card required.

www.mongodb.com

 

필자는 구글로그인을 사용하였다.

 

 

 

 

개인정보 및 서비스 약관이다. 동의해야지만 넘어가진다.

 

 

 

 

대충 해주고 넘어간다.

 

 

 

마지막 M0이 512메가까지 무료로 제공해 주는 DB이다. 

이렇게 설정을 다 했으면 오른쪽 아래 Create Deployment를 눌러 생성한다.

 

 

 

이렇게 나오면 왼쪽 SECURITY 아래에 Quickstart를 눌러 계정을 생성한다.

 

 

 

계정을 만들었다면 다시 왼쪽 Database를 눌러 돌아온다.

이제 MongoDB와 Spring를 연결시켜야 한다.

 

 

 

 

Connect를 누르고 Drivers 클릭한다.

 

 

 

Driver에 자바 선택, 우리가 필요한 것은 빨간 박스이다.

 

 

 

Spring에 돌아와서 application.properties에 들어간다.

 

spring.data.mongodb.uri=

 

를 입력 후 뒤에  복사한 코드를 붙여 넣는다.

 

그다음 설정했던 아이디와 비밀번호를 입력하면 된다.

 

spring.data.mongodb.uri=mongodb+srv://아이디:비밀번호@inospring...mongodb.net/데이터베이스 이름?re...

//예시
spring.data.mongodb.uri=mongodb+srv://admin:admin123@inospring...mongodb.net/inospring?re...

 

복사한 코드에서 위 한글 부분만 채워 넣으면 된다.

 

 

이렇게 했으면 DB에 데이터가 정상적으로 들어가는지 테스트해야 한다.

 

스프링에서 inospring 패키지에 repository 패키지를 생성하고

WeatherRepository인터페이스를 만든다.

Reposiroty이므로 역시 @Repository를 넣는다.

MongoDB는 JAP처럼 작성이 가능하다.

 

 

@Repository
public interface WeatherRepository extends MongoRepository<WeatherData, String> {
}

 

이러면 Repository는 끝난 것이다.

 

그다음  inospring 패키지에 service 패키지를 하나 만든다.

여기에는 서비스가 들어갈 것이다.

이름은 WeatherService로 하고 @Service와 @RequiredArgsConstructor를 넣어준다.

 

의존성 주입을 통해 WeatherReposiroty를 넣고 테스트를 위해

간단하게 save만 구현하였다.

 

 

@Service
@RequiredArgsConstructor
public class WeatherService {

    private final WeatherRepository weatherRepository;

    @Transactional
    public void save(WeatherData weatherData){
        weatherRepository.save(weatherData);
    }
}

 

 

 

이제 DataController로 들어와서 Controller에 Service 의존성을 추가해 주고 데이터를 저장하는 메서드를 추가해 준다.

 

@Slf4j
@Controller
@RequiredArgsConstructor
public class DataController {

    private final WeatherService weatherService;


    @ResponseBody
    @PostMapping("/home")
    public String postData(@RequestBody WeatherData weatherData){
        weatherService.save(weatherData);
        log.info("temp={} hum={}", weatherData.getTemperature(), weatherData.getHumidity());
        return "";
    }
}

 

 

 

이제 아두이노에 전원을 연결하고 스프링을 실행한다.

 

그럼 DB에 정상적으로 값이 저장되는 것을 볼 수 있다.