inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리

해결됨

실전 jOOQ! Type Safe SQL with Java

전제 및 요구사항 DB 하나에 종류가 다른 서버가 4개가 붙어있습니다. flyway를 통해서 DB version control을 하고 싶습니다. node의 nestjs와 typeorm을 사용할 때는 CICD 단계에서 typeorm-migration을 통해서 기존에 만들어둔 DDL 쿼리를 적용한 후 앱 빌드 후 배포해서 dev & prod 환경에서 문제가 없게끔 돌아갔습니다. 질문 스프링에서 CICD(ex github action) 단계 때 flyway가 실행되어서 테이블을 데브나 프로덕션 단계 때 마이그레이션 적용이 가능할까요? (실습) Testcontainers + Flyway를 통해 DDL로 jOOQ DSL 만들기 에서 본 대로 이해한다면 각각 레포지토리마다 DB 폴더를 만들고 V1__init_tables.sql 를 다 만들어야 dsl을 생성할 수 있어 보이는데, 그러면 프로젝트(레포지토리)가 4개나 되다 보니, table 버전 관리가 안 될 것 같고 이미 테이블을 생성 되었는데 또 테이블을 생성하는 .sql 을 실행해야 할 것 같아서 문제가 생길 것 같은데, 방법이 있을까요?

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
버터플라잉교육용 댓글 5 좋아요 1 조회수 952

dslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?

해결됨

실전 jOOQ! Type Safe SQL with Java

fun findActorFilmography(searchOption: ActorFilmographySearchOption): List<ActorFilmography> { val actorListMap = dslContext.select( ACTOR, FILM, ).from(ACTOR) .join(FILM_ACTOR).on(ACTOR.ACTOR_ID.eq(FILM_ACTOR.ACTOR_ID)) .join(FILM).on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .where( containsIfNotBlank(ACTOR.FIRST_NAME.concat(" ").concat(ACTOR.LAST_NAME), searchOption.actorName), containsIfNotBlank(FILM.TITLE, searchOption.filmTitle), ) // 이 부분!! .fetchGroups( { record -> record[ACTOR.name, Actor::class.java] }, { record -> record[FILM.name, Film::class.java] } ) return actorListMap.entries .map { entry -> ActorFilmography(entry.key, entry.value) } } private fun containsIfNotBlank(field: Field<String?>, inputValue: String?): Condition { if (inputValue.isNullOrBlank()) { return DSL.noCondition() } return field.likeRegex(inputValue) } alias을 사용하지 않고, name으로 추출해봤더니 데이터가 정상적으로 잘 나와서요!! 혹시나 예외 케이스도 있을 수 있을 것 같아 질문합니다!

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
chhong 댓글 6 좋아요 2 조회수 704

update with dto 질문

해결됨

실전 jOOQ! Type Safe SQL with Java

안녕하세요 강사님 update, delete를 통한 데이터 수정, 삭제 강의를 듣는 도중 이상한 점이 있는것 같아 질문드립니다. update with dao 설명 중 var firstname과 var lastname의 반환값이 Filed<String>이 된다는 설명(약 7분정도)을 해주셨고 값이 없을때는 무시가 된다고 하셨는데, 7분 33초쯤에 로그를 아래 제가 첨부한 사진과 같이 나옵니다. last_name이 TTTTT로 되어있습니다. 편집상의 오류인지 로그 출력이 왜 저런지 의문이 들어 질문드립니다.

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
sw 댓글 1 좋아요 1 조회수 289

R2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?

해결됨

실전 jOOQ! Type Safe SQL with Java

jOOQ generate을 통해서 생성된 Dao를 기반으로 R2DBC 환경에서 테스트를 진행할 때 findAll(), findById() 등 뒤에 fetch()가 붙어서 Blocking 방식으로 DB에 접근하게 되어 있었습니다. fetch() 코드를 들어가서 확인하였을 때 아래와 같았습니다. @Blocking <E> @NotNull List<E> fetch(RecordMapper<? super R, E> var1) throws DataAccessException; 그래서, jOOQ 공식 사이트에서 찾아보았을 때 아래와 같이 reactor fecth()가 가능하다는 것은 확인하였습니다. https://www.jooq.org/doc/latest/manual/sql-execution/fetching/reactive-fetching/ Dao을 적용해서 Reactor 방식으로 진행할 수 있는 방법은 없을까요?? 또한, Reactor Fetch 방식으로 실행하였을 때 디버깅 로그가 찍히지 않는 문제가 발생하고 있는데 이것에 대해서도 해결 방법이 있을까요??? Configuration이 적용되지 않는 것 같아서 아래와 같이 설정도 해보았지만 적용되지는 않았습니다. import io.r2dbc.spi.ConnectionFactory; ... @Configuration public class JooqConfig { public final ConnectionFactory connectionFactory; public JooqConfig(ConnectionFactory connectionFactory) { this.connectionFactory = connectionFactory; } ... @Bean public DSLContext jooQDSLContext() { DSLContext dsl = DSL.using(connectionFactory).dsl(); dsl.configuration().set(PerformanceListener::new); dsl.settings().withRenderSchema(false); return dsl; }

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
이찬형 댓글 3 좋아요 2 조회수 1279

IDE로 스프링부트 실행없이 jooq로 짠 쿼리 결과를 바로 확인하는 방법이 있을까요?

해결됨

실전 jOOQ! Type Safe SQL with Java

jOOQ를 공부하면서 너무 편하게 쿼리를 작성하고 있는데 한가지 불편한 점이 있어서 질문 드립니다. 단순 쿼리 결과를 확인하고 싶은 경우 마이바티스는 xml에 짠 쿼리를 DB 스키마와 바로 연결해 스프링부트를 띄울 필요 없이 intelliJ IDE에서 쿼리를 날리고 서비스 탭에서 쿼리 결과를 보여주도록 할 수있는데, jOOQ는 자바 코드로 되어 있어서 이렇게 IDE에서 바로 쿼리 결과를 확인해볼 수 없더라구요. 테스트코드로 실행한 후 나간 쿼리를 직접 sql 콘솔에 찍어 결과를 보거나, 강의 마지막에 알려주신 jooq SQL 변환 사이트로 자바 코드로 되어있는 jooq 구문을 sql로 변환해서 sql 콘솔에서 실행하는 방법 말고 더 편리한 방법이 있는지 궁금합니다.

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
Sol Park 댓글 1 좋아요 1 조회수 524

build.gradle.kts

해결됨

실전 jOOQ! Type Safe SQL with Java

plugins { id("org.springframework.boot") version "3.3.0" id("io.spring.dependency-management") version "1.1.5" kotlin("jvm") version "1.9.24" kotlin("plugin.spring") version "1.9.24" id("nu.studer.jooq") version "9.0" } group = "com.sight" version = "0.0.1-SNAPSHOT" java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-jooq") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly("com.mysql:mysql-connector-j") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") testRuntimeOnly("org.junit.platform:junit-platform-launcher") jooqGenerator("com.mysql:mysql-connector-j") jooqGenerator("org.jooq:jooq") jooqGenerator("org.jooq:jooq-meta") } kotlin { compilerOptions { freeCompilerArgs.addAll("-Xjsr305=strict") } } tasks.withType<Test> { useJUnitPlatform() } val dbUser: String = System.getProperty("db-user") ?: "root" val dbPassword: String = System.getProperty("db-passwd") ?: "passwd" jooq { configurations { create("sakilaDB") { generateSchemaSourceOnCompilation.set(false) // 기본적으로 스키마 소스 생성을 비활성화합니다. jooqConfiguration.apply { jdbc.apply { driver = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://localhost:3306/sakila" user = dbUser password = dbPassword } generator.apply { name = "org.jooq.codegen.KotlinGenerator" // 코틀린 제너레이터 명시 database.apply { name = "org.jooq.meta.mysql.MySQLDatabase" inputSchema = "sakila" } generate.apply { isDaos = true isRecords = true isFluentSetters = true isJavaTimeTypes = true isDeprecated = false } target.apply { directory = "src/generated" } } } } } } sourceSets { main { kotlin { srcDirs(listOf("src/main/kotlin", "src/generated")) } } } 3.3.0 버전은 jooq 최신버전을 사용하고 있는 것 같아서 group 재설정은 뺐습니다.

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
chhong 댓글 2 좋아요 3 조회수 777

영상 소리가 작아졌습니다.

해결됨

실전 jOOQ! Type Safe SQL with Java

Sakila DB를 기반으로 DB 구성하기 챕터 영상의 소리가 앞선 영상에 비해 매우 작네요!

  • java
  • sql
  • spring-boot
  • jooq
  • dsl
hayden.yoon 댓글 1 좋아요 0 조회수 379

인기 태그

인프런 TOP Writers

주간 인기글