본문으로 바로가기

[Spring] 스프링 부트 개념과 활용 - 3

category Spring 2021. 7. 19. 09:37

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., 스프링 부트 개념과 활용 스프링부트 (https://spring.io/projects/spring-boot) 프로

www.inflearn.com

 

ㅇ 스프링 데이터

ㅁ 스프링 데이터 : 인메모리 데이터베이스

- 인메모리 데이터베이스로 h2 사용 (추천)

- spring-boot-starter-jdbc 가 좋음

- jdbc api 사용 보다는 jdbc templete 사용 하는게 더 좋음

 > try catch 처리나, 리소스 반납이 훨씬 잘됨

- testdb 로 만들고 싶으면, spring.datasource.generate-unique-name=false 를 application.properties에 설정

 

ㅁ MySQL & PostgreSQL

- dbcp (DataBase Connection Pool)

 > DB 커넥션을 미리 만들어놓아서 사용에 편리하게 함

 > 몇개를 풀에 유지하고 있을것이냐, 얼마나 유지할 것이냐 등등 

 > db connection이 어플리케이션의 성능에 핵심적인 역할을 함

 > 디버깅 하기도 힘듬

 > 신중히 고려 후 선택해야함 ( 설정, 성능 등 )

- SpringBoot는 HikariCP 를 Default DBCP 로 선정

- 기본 : 커넥션 개체 10개, 타임아웃 30초 

 > application.properties에 설정

   > spring.datasource.hikari.maximum-pool-size=4

  - mysql 연결 구현체 추가 ( pom.xml) 

  <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

- spring.datasource.url=jdbc:mysql://localhost:3306/springboot 추가 및 username, password 추가하여 접속

- PostgreSQL 연결도 위와 비슷

 > docker 실행 문제 해결 : https://jinseongsoft.tistory.com/309

- intelliJ 에서 DBMS 를 제공해준다. (엔터프라이즈 버전)

 

ㅁ JPA

- 메이븐 자동빌드 관련

 > https://developia.tistory.com/6

- SpringData JPA -> JPA -> Hibernate -> DataSource

- @DataJpaTest 란?

  > 슬라이싱 테스트 annotation 임

   : 지금 repository와 관련된 bean (repository 포함) 만 포함해서 테스트 진행

 > @SpringBootTest annotation을 붙이면 모든 빈을 등록함 ( 통합 테스트 )

   - 테스트용 디비를 구축하여 테스트하기에는 좋지않음 ( 권장하지 않음 )

 

 - 비어있는 테스트 실행시, 빈이 잘 등록되는지 확인 할 수 있음

- jpa 테스트 시, db가 없으니 오류가 남 (test scope으로 임베디드 h2 추가함)

 - jpa에서 쿼리 쓰기

 > @Query에서 nativeQuery = true

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface AccountRepository extends JpaRepository<Account, Long> {
    @Query(nativeQuery = true, value="select * from account where username='{0}'")
    Account findByUsername(String username);
}

- 자동으로 스키마 생성하기 (application.properties)

 > spring.jpa.hibernate.ddl-auto=update
     spring.jpa.generate-ddl=true

 > spring.jpa.hibernate.ddl-auto=validate

    는 검증만 함 ( 운영용 상황 )

 > 엔티티속성 명칭 변경은 hibernate가 자동으로 못함

- resource 밑에 schema.sql 생성하면 실행시 자동으로 실행됨 ( 스키마 자동 생성 )

- flaywaydb 를 통해 sql 스키마 구조를 버전 관리 할 수 있다.

- redis

 > CrudRepository 상속 - 스프링 데이터에 아주 기본적인 최상위 Repository 인터페이스

 > @RedisHash 사용

  > 해쉬값 저장된건 hgetall or hget 통해 확인 가능

- mongodb

 > @Document(collection = "accounts")

 > 내장형 몽고디비가 있어서 테스트 쉽게 가능

    >> <dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>

   >>  @DataMongoTest 로 슬라이싱테스트 가능

- Neo4j

 > 실습 x

 > 관계형 데이터를 표현하기 좋음 (graph)