게시글
질문&답변
2024.07.03
하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리
해당질문 완료처리하도록 하겠습니다. 궁금한 부분있으면 추가적으로 댓글 부탁드려요
- 1
- 4
- 117
질문&답변
2024.06.27
하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리
안녕하세요 해당 질문 답변드립니다. 스프링에서 CICD 단계 때 flyway로 데브나 프로덕션 단계 때 마이그레이션 적용 가능여부 해당 방식 여러가지 방법으로 가능합니다. 다만 이 방식 자체를 추천하지 않습니다. maven 이나, gradle 에서 빌드 완료 시 실행 할 수도 있고, 배포 후 스프링에서 이렇게 실행을 할 수 도 있지만 이런 방식으로 DDL 자체를 dev나 prod에서 자동으로 실행하는건 너무나도 위험합니다. DDL은 트랜잭션이 지원되지 않습니다. 실수로 빌드가 완료 된 후 DDL을 실행했는데 중간에 오타가 있다면 그 부분은 결국 또 수기로 처리해야합니다. 개발 페이즈에 만들었던 DDL을 운영에 그대로 반영하면 안되는 경우도 꽤 있습니다. 배포와는 별개로 사용자가 적은 시간대에 인덱스를 추가하거나, online DDL을 위해서 쿼리가 변경되서 반영되어야하는 경우가 예시 중 하나입니다. 데이터가 유실되거나 장애를 발생시킬 경우도 존재하기 때문에 운영 DDL은 자동화하면 안됩니다. 프로젝트(레포지토리)가 4개 경우에 code로 DDL 관리 4개의 프로젝트가 같은 DB를 바라보고있는걸로 보이는데요. RDBMS의 role로 관리되고 있다면 해당 role 에 맞춰서 프로젝트별로 관리하면 되고, DDL을 코드로 관리하기 전에 4개 프로젝트 모두 모든 DB 테이블에 접근 할 수 있나요? 만약 그렇다면 이부분부터 문제가 있다고 생각합니다. 만약 논리적인 구분없이 4개의 프로젝트 모두 DB 테이블에 접근이 가능하다면 4개의 프로젝트를 하나의 모노레포로 만들고 하위에 공통 모듈을 두어 거기서 DSL을 만들어 관리하게 하는 방법이 제일 적절해보입니다.
- 1
- 4
- 117
질문&답변
2024.06.26
하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리
오늘안에 답변드리도록 하겠습니다.
- 1
- 4
- 117
질문&답변
2024.06.22
dslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?
답변은 이정도로 충분할것같은데요! 해당 질문은 완료처리하도록 하겠습니다 ㅎㅎ 추가로 궁금한 점이 있으시다면 댓글 달아주시면 답변해드리도록 하겠습니다
- 1
- 5
- 149
질문&답변
2024.06.22
R2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?
답변은 이정도로 충분할것같은데요! 해당 질문은 완료처리하도록 하겠습니다 ㅎㅎ 추후에 시도해보신 후기를 정리해서 다른분들에게 공유해보는것도 정말 좋을것같아요! 추가로 궁금한 점이 있으시다면 댓글 달아주시면 답변해드리도록 하겠습니다 감사합니다!
- 2
- 3
- 326
질문&답변
2024.06.22
dslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?
chhong 님 안녕하세요! 결론부터 말하면 가능합니다. 그리고 지금 생각해보니 chhong 님이 말씀해주신 방식이 훨씬 좋아보이네요 ㅎㅎ 이 질문은 강의노트에 추가해놓도록 하겠습니다 🙂 이 방식은 실제 문서에도 기재되어있는 방식입니다.. (링크) 강의를 촬영하면서 명시적으로 alias를 붙이는 부분도 넣으려다보니 이부분에 대한 설명이 빠졌었었네요. 이 방식을 사용하면 alias에 문자열을 추가하지 않아도 원하는 결과를 얻어 낼 수 있습니다. alias 설정없이 JActor.ACTOR 로 쿼리를 실행하면 내부 alias가 'actor'로 실행되는데요. 이 alias를 name으로 가져 올 수 있습니다. (자바의 경우 $name() 메서드) (사진) (이는 자동생성되는 JActor 클래스 내부 생성자에서 알 수 있습니다.) (사진) (사진)
- 1
- 5
- 149
질문&답변
2024.06.20
R2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?
이찬형님 안녕하세요. R2DBC 같은 경우는 제한적인 환경에서 사용되기 때문에 이번 강의에서는 다루지 않았는데요. 관련해서 답변드리자면 jOOQ는 공식적으로 R2DBC를 지원하지만, R2DBC 환경에서는 아직 jOOQ의 모든 기능을 사용 할 수는 없습니다. 아래의 R2DBC known limitation 이슈를 확인해주세요. https://github.com/jOOQ/jOOQ/issues/13590 질문을 두가지로 정리해보도록 하겠습니다. 1. R2DBC 환경에서 generated DAO를 통해 Reactor를 사용하기 -> 불가능합니다. 위의 known limitations 이슈에서 나와있듯이 아직 지원되지 않습니다. 추가로 jOOQ 창시자는 DAO 방식에 추가적인 메서드를 넣는것을 좋아하지 않습니다. 앞으로도 안될 가능성이 높고, 된다하더라도 우선순위는 매우 낮을것으로 보입니다. 참고 부탁드립니다. 길긴 하지만 Deprecate DAO: 이 이슈와 DAO에 부연설명 추가: 이 이슈를 번역해서 보시면 좋을듯합니다. 간략하게 요약하자면 창시자 (lukaseder)는 이 DAO가 새로운 유저들에게 혼란을 주고, 모든걸 generated DAO로만 처리해야한다는 강박관념을 심어주기 때문에 deprecate 하길 원했고, 유저들의 강력한 반대에 이를 철회했습니다. 2. Reactor Fetch 방식으로 실행하였을 때 디버깅 로그가 찍히지 않는 문제 -> 이부분도 위의 known limitations 방식에서 ExecuteListener가 R2DBC 환경에서 지원되지 않는다고 명시되기 때문에, 이에 대한 구현체인 LoggerListener 또한 동작하지 않습니다. 대안은 이 글을 참고해서 적용해보시면 좋을듯합니다. https://blog.jooq.org/jooqs-r2dbc-loggingconnection-to-log-all-sql-statements/ 그리고 이 이슈를 참고해주세요. https://github.com/jOOQ/jOOQ/issues/12220 왜 LoggerListener가 리엑티브 환경에서 적용 될 수 없는지 파악 할 수 있을겁니다. 🙂
- 2
- 3
- 326
질문&답변
2024.06.14
IDE로 스프링부트 실행없이 jooq로 짠 쿼리 결과를 바로 확인하는 방법이 있을까요?
Sol Park님 안녕하세요 🙂 우선 강의를 완강하셨군요! 축하드립니다! ㅎㅎ 말씀하신 것처럼 두 가지 방법이 최선입니다. 테스트 코드를 통해 jOOQ로 작성한 쿼리를 실행시키거나 jOOQ Translator 사이트를 이용하거나 (SQL Parser API 사용) 보통 jOOQ를 사용 할 때 제일 많이 받은 피드백 중 하나가 "MyBatis 처럼 SQL을 바로 실행하거나 이미 작성한 SQL을 붙여 넣을 수 없다." 인데요. 이 부분은 우리가 SQL을 프로그래매틱하게 제어함으로써 얻은 생산성, 안정성과 같은 이점에 대한 트레이드 오프라고 생각합니다. (슬프게도 은총알은 없습니다!) 실제로 비슷한 원리로 사용되는 QueryDSL, kotlin의 exposed와 kotlin-jdsl, 스칼라의 slick 과 같은 기술들 모두 같은 문제를 가지고 있습니다. 다행히도(?) 다른 기술들은 1번밖에 선택지가 없지만 jOOQ는 2번 선택지도 있다는 점을 인지하시면 좋을듯합니다. 감사합니다.
- 1
- 1
- 160
질문&답변
2024.06.08
build.gradle.kts
chhong님 안녕하세요. 맞습니다 ㅎㅎ 강의를 촬영 할 시점에는 3.3.0 버전이 나오지 않아 부득이하게 spring-boot-starter-jooq에서 강제로 의존성을 제거하고 jOOQ 3.19.5 버전을 추가했었는데요. (spring boot 3.2.3 버전에서는 기본 설정이 jOOQ 3.18.11 이였음) spring boot 3.3.0에서는 jOOQ 3.19.8이 기본으로 들어가서 group 재설정은 하실 필요가 없습니다. 해당 질문은 완료처리 하도록 하겠습니다. 공유해주셔서 감사합니다 🙂
- 3
- 1
- 224
질문&답변
2024.06.05
마리아 DB 쓰시는분들은 mysql 파일 쓰시면됩니다.
성환님 안녕하세요 🙂 해당 강의는 기본적으로 MySQL을 사용한다는 전제로 만들어져있습니다. MySQL이 아닌 PostgreSQL나 MariaDB로 진행해도 문제 없을 것으로 예상되나 일부 설정이 강의와는 다를 수 있어 이 부분에 대한 인지가 필요합니다. (예를 들어 MariaDB dialect 설정 등등 (문서 참고) ) 참고 부탁드립니다. ㅎㅎ
- 1
- 1
- 140