본문 바로가기

반응형

스프링

(18)
[리액티브 코프링] R2DBC 사용법 (연관 관계 구현하기) 이전글 : [리액티브 코프링] R2DBC 사용법 (데이터 저장 & 수정) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 4. 연관 관계 구현하기 R2DBC는 JPA같은 ORM이 아니므로 연관 관계 매핑을 지원하지 않는다. R2DBC에서 연관 관계 매핑과 같은 기능을 사용하기 위해서는 개발자가 추가적으로 코드를 작성해줘야한다. 도메인 & 요구사항 본 예제에서는 스프링 부트 실전 활용 마스터 의 장바구니 예제를 차용하고 있다. Cart, CartItem, Item 엔티티를 사용하고 있으며 연관 관계는 아래와 같다. Cart와 CartItem은 1대 N 연관관계이고, CartItem과 Item은 일대일 연관관계이다. 엔티티 설정 (Transient) 데이터 조회편에서 엔티티를 선언했지..
[리액티브 코프링] R2DBC 사용법 (데이터 저장 & 수정) 이전글 : [리액티브 코프링] R2DBC 사용법 (데이터 조회) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 데이터 저장하기 이번 글에서 다루는 데이터를 저장하는 방법은 아래와 같다. 레포지토리의 save() 함수 사용 Fluent API 사용 Native Query 사용 Batch Insert 먼저, 1, 2, 3번에 해당하는 코드를 보도록 하자. 각각의 테스트 코드 위에 주석으로 데이터를 저장하는 방법을 명시했다. @SpringBootTest class ItemSaveTest { @Autowired private lateinit var itemRepository: ItemRepository @Autowired private lateinit var connectionFacto..
[리액티브 코프링] R2DBC 사용법 (데이터 조회) 이전글 : [리액티브 코프링] R2DBC 사용법 (들어가며) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 2. 엔티티 선언하기 이번 예제에서 사용할 엔티티들을 선언하자. Spring Data R2DBC에서는 연관관계를 지원하지 않는다. 객체간 연관관계를 구성하는 멤버에는 @Transient 어노테이션을 사용해줘야 스프링 실행 시 오류가 나지 않는다. data class Cart( @Id val id: Long? = null, @Transient var cartItems: List = listOf() ) data class CartItem( @Id val id: Long? = null, var quantity: Int = 1, @Column("cart_id") var cartId..
[리액티브 코프링] R2DBC 사용법 (들어가며) [리액티브 코프링] R2DBC 사용법 0. 들어가며 최근 스프링 부트 실전 활용 마스터 라는 책으로 스프링 리액티브 프로그래밍을 학습했다. 리액티브로 동작하는 코드에 블로킹으로 동작하는 코드가 존재한다면 병목이 발생해서 리액티브 프로그래밍의 이점이 없어지기 때문에 책에서는 데이터 스토어로 RDBMS(관계형 데이터베이스)가 아닌 리액티브 패러다임을 지원하는 MongoDB를 사용하고 있다. 여태까지 RDBMS(관계형 데이터베이스)를 비동기로 연결해주는 R2DBC 가 1.0 버전에 도달하지 못한 상태였기 때문이다. 하지만 최근 R2DBC가 1.0 버전을 릴리즈했고 R2DBC 사양을 따르는 개별 데이터베이스 드라이버들도 오래되지 않아 1.0 버전에 도달할 것으로 보인다. 그래서 R2DBC를 이용해 리액티브 코프..
Querydsl을 사용하는 자바(JAVA) Spring Framework 프로젝트에 코틀린(Kotlin) 설정 1. QueryDSL이란? Spring Framework에서 JPA, QueryDsl 조합을 애용하고 있다. 특히, QueryDsl을 사용하면 SQL, JPQL을 type safe하게 작성할 수 있다. type safe하게 작성할 수 있다는 것은 IDE의 지원을 받아서 쉽고 안전하게 Query를 작성할 수 있다는 의미이다. 그리고 Spring Data JPA를 사용하면 다이나믹 쿼리를 사용할 수 없어서 코드가 장황해지고 중복되는데. QueryDsl는 다이나믹 쿼리를 작성가능해서 반복되는 코드수를 줄일 수 있다. 2. 자바(Java)를 사용하는 Spring data jpa project에서 QueryDsl 설정 QueryDsl을 사용하려면 컴파일(Compile)시에 QClass를 생성하기 위한 설정을 해야..
코틀린(Kotlin)으로 스프링 시큐리티(Spring Security) 유저 정보 조회 코틀린(Kotlin)으로 스프링 시큐리티(Spring Security) 유저 정보 조회 들어가며 코틀린(Kotlin)을 회사 웹 서비스에 도입하기 위해 공부하고 있다. Kotlin으로 Spring Boot Security - Login 맛보기 라는 글을 참고해 로그인 부분을 구현했다. 훌륭한 글이지만 실무에서 사용할 만한 기능의 예시는 없어서 내가 테스트해보고 글을 적는다. 본 글에서 다루는 내용 UserDetails를 구현해서 필요한 유저 정보를 로그인 시 SecurityContext에 저장하기 저장한 유저 정보를 SecurityContextHolder로 조회 유저 정보를 불러오는 코틀린 함수 정의(JAVA의 유틸 클래스(Util Class)를 대체) JAVA에서 코틀린 함수를 호출 코틀린의 안전한 캐..
FirstSpringBoard#00] git와 github를 이용해서 실습 코드 조회하기 안녕하세요.실습을 따라하면서 막히는 부분이 많을 거라고 생각합니다.아무래도 블로그의 코드를 보면서 하면 내가 맞게하고 있는지도 의심스러울거고 오타가 날 수도 있는거니깐요.저는 실습을 하면서 git를 이용해서 버전관리를 합니다.주요 기능들이 추가되면 커밋해서 변경이력을 남겨요.제 github에 올린 소스를 이용하는 것도 학습에 큰 도움이 될겁니다.git을 이용해서 프로젝트의 변경 이력을 조회하는 방법을 알아봅시다. git는 DVN으로 분산 버전 관리 시스템의 약자입니다.git에서 파일을 저장하는 repository는 두개입니다. 내 컴퓨터에 저장하는 local repository와 원격저장소에 저장하는 remote repository에요.github는 원격저장소라고 할 수 있습니다.우선 제 github로 ..
FirstSpringBoard#6-4] mysql limit 기능을 이용한 페이징 우리는 지난시간 Controller에서 페이징 처리를 했었습니다.편의상 Controller에서 페이징을 했었는데. 이로 인해 생기는 문제점은 무엇일까요?우선 모든 게시글의 목록을 불러오는 문제가 있습니다.지금이야 게시글이 별로 안되지만 점점 게시물이 많아 진다면 DBMS에 부하가 엄청 생기겠죠.모든 사용자가 게시판에서 페이지를 이동할 때 마다 DB에서 모든 게시물 목록을 가져오기 때문이죠.그리고 마지막 페이지에 대한 분기처리와 같이 코드가 길어진다는 단점이 있습니다.이런 문제점을 해결하기 위해서 mysql에서 제공하는 limit 기능을 이용해서 페이징 처리를 해볼게요. 우선 Mapper.xml을 수정해야합니다.getSearchWriterAndContent를 아래와 같이 수정해주세요.order by 뒤에 ..

반응형