[Springboot+JPA]공공데이터 db저장과 API만들기-2

ttomy·2022년 1월 11일
0

Spring

목록 보기
2/4

앞선 포스팅에서 json형식의 공공데이터를 받아와 Dto로 변환하는 과정을 보았다. 이제 이 Dto를 db(Mariadb)에 저장할 것이다.

DB에 저장하기

+참고: https://www.youtube.com/watch?v=PrI15vZbJr4&list=PLPtc9qD1979DG675XufGs0-gBeb2mrona&index=5

1. mariadb 다운,설정

  • 다운을 완료했다면 HeidiSQL이라는 아래와 같은 프로그램이 설치되었을 것이다. 이 프로그램을 실행한다.

    이후 나의 경우는 myadmin이라는 사용자를 이 프로젝트를 위해 추가했다.

2. 의존성 주입

build.gradle에 아래와 같이 입력해 라이브러리를 추가한다.

	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.4'

3. application.properties 설정

mariadb와 springboot 프로젝트를 연동하기 위해서는 springboot의 입장에서 mariadb에 접속할 계정이나 관리자의 정보가 필요하다. 이를 application.properties에서 입력해 설정해주어야 한다.

  • application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/mydb
spring.datasource.username=사용자이름
spring.datasource.password=계정비밀번호

#update the schema with the given values.
spring.jpa.hibernate.ddl-auto=update
#To beautify or pretty print the SQL
spring.jpa.properties.hibernate.format_sql=true
#show sql
spring.jpa.properties.hibernate.show-sql=true
#show parameter binding
logging.level.org.hibernate.type.descriptor.sql=DEBUG
logging.level.org.hibernate.SQL=DEBUG
  • 여기에서 ddl-auto라는 속성이 있다. 이 속성으로 우리의 소중한 DB를 프로그램을 시작할 떄 초기화하는 방식을 설정한다. 자동으로 수정내용을 DB에 반영할 수도 있어 편리하다 생각할 수 있지만 매우 위험하기도 하다.

+참고: https://smpark1020.tistory.com/140?category=857916

실제 운영환경에서 활용하기엔 불안하기에 상용에 배포할 경우에는 쿼리를 직접 날리는 것이 맞다.

4. JpaRepository interface 정의

+참고: https://spring.io/guides/gs/accessing-data-jpa/
이제 객체를 저장할 repository를 구현해야 한다. 그런데 JpaRepository를 이용한다면 놀랍게도 interface만 작성해도 데이터를 DB에 저장하는 것이 가능하다.

  • SubstationInfoRepository
public interface SubstationInfoRepository extends JpaRepository<SubstationInfo,Long> {
}

위와 같이 메소드를 선언하지 않고 인터페이스를 정의만 해도 save,findById와 같은 기본적인 DB에의 접근이 가능하다.

5. DB에 저장, 확인

저번 포스팅에서 작성한 HomeController 의 try문에서 Jsonobject의 배열 infoArr을 받은 후 아래의 코드를 작성하면 DB에 데이터의 저장이 가능하다.

for(int i=0;i<infoArr.size();i++){
   JSONObject tmp = (JSONObject)infoArr.get(i);
   SubstationInfo infoObj=new SubstationInfo(i+(long)1,
    (String)tmp.get("USE_DT"),(String)tmp.get("LINE_NUM"),
    (String)tmp.get("SUB_STA_NM"),(double)tmp.get("RIDE_PASGR_NUM"), 
    (double)tmp.get("ALIGHT_PASGR_NUM"),
    (String)tmp.get("WORK_DT"));
    infoRepository.save(infoObj);
}

http://localhost:8080/api 에서 공공데이터api가 제공하는 기간안의 날짜를 입력후 Click를 선택하면 아래처럼 DB에 데이터가 들어간 것을 확인할 수 있다.

0개의 댓글