Spring
-
[SPRING]스프링 어노테이션 정리Spring/Annotation 2021. 8. 24. 23:46
@Configuration @Configuration: 이 어노테이션을 단 클래스는 빈 설정을 담당하는 클래스가 된다. 이 클래스 안에서 @Bean 어노테이션이 동봉된 메소드를 선언하면, 그 메소드를 통해 스프링 빈을 정의하고 생명주기를 설정하게 된다. 자바 기반의 config가 싫다면 XML 쓰면 된다. @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있다. @ComponentScan: @Configuration 어노테이션과 함께 쓰면, 이 클래스는 자바 빈 설정 클래스이며, 이 @ComponentScan 어노테이션에서 제공하는 package 속성을 통해 스프링 빈 범위를 정의할 수 있다. 복수개를 지정하고 싶..
-
[spring] Mybatis batch upsert 하는 방법(mysql)Spring/spring boot 및 기타 2021. 8. 11. 18:13
spring 에서 mybatis 로 bulk upsert 를 해줘야 할때 아래와 같이 작업을 했다. jpa 를 사용하면 saveall 메소드로 bulk upsert 가 가능했는데, mybatis 에서는 메소드를 직접 만들다 보니 그런게 없어서, 직접 만들어줘야 한다. 일반적으로는 pk 로 데이터 조회 후 없으면 insert 있으면 Update 를 해줘야 하나 매번 select 를 하기 db 커넥션도 아깝고 코드가 번거롭다. 하지만 mysql 에는 ON DUPLICATE KEY UPDATE 기능 이 있어 이미 데이터가 있다면 update 를 할 수 있다. 해당 방식은 INSERT를 하다가 PK값이 존재하면 UPDATE를 한다는 조건이 있는데 이 조건을 만족하기 위해 테이블에 무조건 PK값이 지정이 되어있어..
-
[Spring] multi datasource 동적으로 사용 - AbstractRoutingDataSourceSpring/spring boot 및 기타 2021. 8. 3. 01:19
사용이유 datasource 커넥션을 로직이나 상황별로 나눠야 하는 상황이 올 수 도 있고, 어플리케이션단에서 샤딩을 구현해야 할 수 도 있고, read 커넥션 및 write 커넥션의 datasource 를 나눠야 하는 경우가 있다. 애초에 다른 datasoure 파일을 만들어도 되지만, 동적으로 쿼리 요청시마다 datasource 를 변경해야 할 때 AbstractRoutingDataSource 를 사용하면 된다. AbstractRoutingDataSource란? spring-jdbc 모듈에 포함되어 있는 클래스로, 여러 DataSource를 등록하고 특정 상황에 맞게 원하는 DataSource를 사용할 수 있도록 추상화한 클래스이다. 구현방식 AbstractRoutingDataSource는 이름 기반..
-
[spring boot] mybatis 연동 및 설정Spring/spring boot 및 기타 2021. 6. 23. 17:52
spring boot 에서 mybatis 를 연동하는 법을 해보자 pom.xml org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 일단 pom.xml 에 mybatis 라이브러리부터 추가하자. dbms 에 맞는 driver 는 추가됐다고 가정하고 진행한다. 사용버젼 표 아래 표에 맞게 version 명시하면 된다. MyBatis-Spring-Boot-Starter MyBatis-Spring Spring Boot Java 2.2 2.0 (need 2.0.6+ for enable all features) 2.5 or higher 8 or higher 2.1 2.0 (need 2.0.6+ for enable all features) 2.1 - 2.4 8 o..
-
[spring boot] 스프링 firebase database 사용하기Spring/spring boot 및 기타 2021. 5. 4. 18:31
firebase 가 클라이언트 사이드에서 구현하기 위한 severless db 로 많이 쓰이는데, 나 같은 경우는 db 를 구축하기 일단 비용 및 인프라가 없어서 간단히 만들려고 firebase 를 서버에서 사용하기 위한 db 로 일단은 선택했다. 일정량 이하는 free 로 사용할 수 있다. firebase 프로젝트 생성 대쉬보드에서 프로젝트 추가를 통해 프로젝트를 생성 console.firebase.google.com/ firestore Database 를 생성하자. 주의 할 것은 realtime database 와 firestore database 는 다르다. 다른 점으로는 과금 정책도 다르고, realtime 이 더 비싸다고 한다. 둘의 차이점은 아래 링크 문서에 있다. firebase.google..
-
[spring JPA] column annotation 컬럼 매칭 레퍼런스Spring/JPA 2021. 5. 3. 18:07
jpa 관련 어노테이션 @Column : 컬럼을 매핑한다. @Enumerated : enum 타입을 매핑한다. @Temporal : 날짜 타입 매핑한다. @Lob : BLOB, CLOB 타입을 매핑한다. @Transient : 해당 필드를 데이터 베이스에 매핑 시키지 않는다. @Access : JPA가 엔티티 접근하는 방식을 지정한다. @Column name : 필드와 매핑할 테이블의 컬럼 이름 insertable : 엔티티 저장시 이 필드도 같이 저장한다. false로 설정하면 데이터베이스에 저장하지 않는다. 읽기 전용일때 사용한다. updatable : 위와 동일한 하지만 수정일때 해당 된다. @Column(insertable=false, updatable=false) private String de..
-
[spring boot] 스프링 부트 h2 인메모리 db 시작하기Spring/spring boot 및 기타 2021. 4. 27. 18:29
외부에 물리db 를 생성하기 어려울떄가 있다. 나 같은 경우 사이드 프로젝트를 하고 싶은데 물리 db 를 생성하기 부담스러울때 간단히 내부 db 를 사용하고 싶어 인메모리 h2 를 사용한다. h2 는 보통 프로덕션보다는 보통 test 용으로 사용한다. 왜냐면 휘발성이기 때문이다. 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스입니다. 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다. 스프링 부트에서 H2, HSQL 같은 인메모리, 디스크 기반 DB를 지원합니다. 라이브러리 추가 현재 spring boot 버젼 2.4.5 org.springframework.boot spring-bo..
-
[Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법Spring/JPA 2021. 4. 2. 15:49
@Id는 해당 프로퍼티가 테이블의 주키(primary key) 역할을 한다는 것을 나타낸다. @GeneratedValue는 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. Primary 키 생성 전략으로 JPA가 지원하는 것은 아래의 네 가지이다. 1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택 데이터베이스 벤더에 의존하지 않고, 데이터베이스는 기본키를 할당하는 벙법 - 데이터베이스에 따라서 IDENTITY, SEQUENCE, TABLE 방법 중 하나를 자동으로 선택해주는 방법이다. - 예를들어, Oracle일 경우 SEQUENCE를 자동으로 선택해서 사용합니다. 따라서, 데이터베이스를 변경해도 코드를 수정할 필요가 없다. 2. IDENTITY : DB의..