앞에서 로컬환경에서 Docker를 띄우고 MariaDB를 이미 구동하였다. 만일 아직 DB를 구축하지 않았다면 여기를 참고하자.
JPA ORM과 Mybatis ORM 중에서 여기서는 Mybatis 로 연동하겠다.
스프링과 DB 연동
이제 스프링 boot에서 데이터베이스로 연동한다. 스프링에서 사용하는 ORM 솔루션은 JPA와 MyBatis 두가지가 가장 많이 사용되는데, 둘 다 장단점이 있다. 간단한 CRUD를 한다면 JPA로 하는게 편하고 복잡한 join문으로 쿼리가 복잡해지면 JPA 보다 MyBatis로 하는게 기존 쿼리를 그대로 활용할 수 있기 때문에 더 좋을수 있다. 여기서는 MyBatis를 사용하겠다. 먼저 MyBatis 관련 패키지와 MariaDB 패키지를 build.gradle에 추가한다.
작성후 gradle reload 아이콘을 눌러서 의존성 라이브러리를 다운로드 한다.
1 2 3 4 5 6 7 8 9 10 11 |
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1' implementation 'mysql:mysql-connector-java' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } |
spring-boot-starter-jdbc는 DataSource, ConnectionFactory 등 복잡한 설정을 아주 간단하게 해준다.
이제 MariaDB와 연결하기 위한 DB 접속 정보를 src -> main ->resources 아래에 application.yml 파일을 추가하고 아래와 같이 작성한다. application.properties와 application.yml은 동일한데, yaml 파일은 tree 구조로 작성이 가능하다. 만일 dirver에서 에러가 발생한다면 위에 패키지가 아직 설치가 안된것이므로 gradle sync를 한번 해주면 된다.
1 2 3 4 5 6 |
spring: datasource: driver-class-name: "com.mysql.cj.jdbc.Driver" url: "jdbc:mysql://localhost:3306/eastdb?useUnicode=true&charaterEncoding=utf-8" username: "eastflag" password: "12345678" |
앞에서 DataGrip 툴을 사용해서 이미 DB를 생성하였는데, IDEA 내부에 DataGrip과 동일한 툴이 내장되어있다.
shift 키를 두번 누르고 database를 입력하고 선택하면 오른쪽에 database 탭이 보일것이다. DataGrip에서 한것과 동일하게 DB를 접속해본다.
CORS 설정
REST API를 postman 같은 툴로 테스트할 때는 CORS 문제가 생기지 않는다. 하지만 리액트, 뷰와 같은 프레임웍을 사용해서 브라우저에서 API를 호출시 만일 프런트서버와 백엔드 서버가 각각 존재한다면 cross domain 이슈가 발생한다.
물론 운영환경에서는 rever proxy를 적용하여 프런트를 거쳐서 백엔드로 가도록 설정하기 때문에 해당 사항이 없다. 또한 개발환경에서도 요즘은 package.json에서 proxy 를 설정하면 CORS 문제는 생기지 않는다.
개발환경에 대비해서 main 클래스가 있는곳에 CORS 필터를 등록한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//CORS 필터 @Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new CorsFilter(source)); registrationBean.setOrder(0); return registrationBean; } |