이야기를 나눠요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
실전! Querydsl
만료된 메서드 fetchResult(), Blaze-persistence 세팅 관련 글 공유드립니다.
QueryDSL 내부 메소드 중fetchResult() 나 fetchCount()는 만료된 메소드에 대해서는 QueryDSL에서 Blaze-persistence Integration 라이브러리 사용을 권장하는데요,Blaze-persistence도 QueryDSL 처럼 쿼리 빌더 API 로서 개발자에게 유지보수하기 좋은 객체를 제공해주고 있습니다.게다가 최신 업데이트 날짜가 글 작성일 기준(2023.06.21) 일주일 이전이라 여전히 유지보수되고 있어서 최신 스프링버전과 호환성도 어느정도 보장되었다고 볼 수 있습니다.개인적으로 SpringBoot 3.1.0 기준으로 다음과 같이 세팅하니 정상적으로 동작하는 걸 확인했는데요, 혹시 저처럼 deprecated 메소드를 쓰는 것이 신경쓰이시는 분들을 위해 공유드립니다.build.gradledependencies { //Blaze-Persistence implementation 'com.blazebit:blaze-persistence-integration-querydsl-expressions-jakarta:1.6.9' implementation 'com.blazebit:blaze-persistence-integration-hibernate-6.2:1.6.9' implementation 'com.blazebit:blaze-persistence-core-impl-jakarta:1.6.9' } BlazePersistenceConfiguration.java@Configuration public class BlazePersistenceConfiguration { @PersistenceUnit private EntityManagerFactory entityManagerFactory; @Bean @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) @Lazy(false) public CriteriaBuilderFactory createCriteriaBuilderFactory() { CriteriaBuilderConfiguration config = Criteria.getDefault(); // do some configuration return config.createCriteriaBuilderFactory(entityManagerFactory); } }QuerydslBasicTest.java..... JPAQueryFactory queryFactory; @Autowired CriteriaBuilderFactory cbf; BlazeJPAQueryFactory blazeQueryFactory; @BeforeEach public void testEntity(){ queryFactory = new JPAQueryFactory(em); // 이건 동시성 문제를 고민하지 않아도 됨, 해결됨 blazeQueryFactory = new BlazeJPAQueryFactory(em, cbf); ..... 적용 결과기존 QueryDSL 세팅한 것에 추가로 세팅하시면, 만료된 메소드에 대해 Blaze-persistence 객체로 대체되는데요, 기존 querydsl 클래스를 상속 받는 형태여서 QueryDSL이 제공하는 메소드를 그대로 쓸 수도 있습니다.fetchResults는 fetchPage로 바꿔서 사용할 것을 권장하고 있다는 점 참고하시면 될 것 같습니다.추가로 내부로직이라든지 설명이 더 필요하시다면 Blaze-persistence 릴리즈 노트와 Blaze Persistence Document를 참고하시면 좋을 것 같습니다.이 글에 대해 지적 및 피드백 해주시면 정말 감사하겠습니다.감사합니다. 여담 및 고민 :개인적으로 이 라이브러리의 내부로직을 뜯어보면서 분석하고 검증할 수 있는 역량은 부족한지라 분석 및 검증하는 방법에 대해서 팁이라든지, 아니면 blaze-persistence 사용할 시 주의해야할 점이라든지 조언해주실 수 있으시면 정말 감사드립니다. 강의를 듣던 중에 서브쿼리가 발생하는 부분에서는 정상동작하지 않는 것을 발견했습니다.@Test public void findUserDto(){ QMember memberSub = new QMember("memberSub"); List<UserDto> memberDtoList = queryFactory //이건 blazeQueryFactory가 정상 동작하지 않음 .select(Projections.fields(UserDto.class, //생성자 필드 순서에 맞게 변수를 만들어야 한다. member.username.as("name"), // member.age 대신 서브쿼리로 다 최대 나이로 찍고 싶어 ExpressionUtils.as( JPAExpressions .select(memberSub.age.max()) .from(memberSub), "age") )) .from(member) .fetch(); for (UserDto userDto : memberDtoList) { System.out.println("userDto = " + userDto); } } QueryDSL 쿼리 /* select member1.username as name, (select max(memberSub.age) from Member memberSub) as age from Member member1 */ select m1_0.username, (select max(m2_0.age) from member m2_0) from member m1_0 blaze-persistence 쿼리 /* SELECT member1.username AS name, member1.age AS generatedSubquery_1 FROM Member member1 */ select m1_0.username, m1_0.age from member m1_0 blaze-persistence generatedSubquery라 하여, 서브쿼리를 하나의 alias로 처리를 해버렸는데, 후행으로 이 generatedSubquery 에 대한 정의가 따라오질 않습니다...왜 이런 차이가 나오는지는 모르겠지만 blaze-persistence 활용할 때는 유의해야할 것 같습니다.
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
4강에서 처음 프로젝트 열 때, Gradle 2.7.1로 다운그레이드 하였습니다.
안녕하세요. 4강에서 처음 프로젝트 열 때, Gradle 2.7.1로 다운그레이드 하였습니다.원래는 Gradle 3 이상의 버전으로 설정되어 있어서 에러가 났었는데,자바 17이상일 때, Gradle 3 이 사용가능한 모양이더군요.해서 Gradle 2.7.1로 다운그레이드해서 급한 문제는 해결했는데..이대로 진행해도 문제가 되지 않을까요??
-
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요 코틀린 파일만 실행하면 오류가 납니다
코틀린 파일만 실행하면 이렇게 오류가 납니다자바 버전도 맞구요어떻게 해결하나요?
-
나도코딩의 자바 기본편 - 풀코스 (20시간)
혹시 Jframe 과 관련된 강의가 있을까요??
제가 지금 강의의 초중반부를 학습중인데 과제로 Jframe을 사용해야 해서 그런데 혹시 Jframe 과 관련된 내용의 강의가 있을까요???
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요
삭제된 글입니다
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
제가 아직 빌드와 실행, 그리고접속 파트를 보고있는데
만약 소스를 업데이트하고 커밋하면 리눅스 EC2서버에서는 빌드를 다시해야하는건지 아니면 다시 깃클론을 해야하는건지 궁금합니다!
-
실전! Querydsl
Spring Boot 3 Querydsl 설정 공유 드립니다 + MongoDB
최근에 새로운 프로젝트 진행하면서 Spring Boot 3 버전을 사용하게 됐는데해당 프로젝트의 Gradle 설정을 구성하면서 다른 분들의 예제를 보면서 작성한 내용을 공유 드립니다. 아래의 내용은 VSCode에서 진행했습니다. 다른 IDE에서는 테스트해보지 않아 다르게 동작할 수도 있는 점 양해 부탁드립니다. 먼저 Gradle 설정은 다음과 같습니다.plugins { id "java" id "org.springframework.boot" version "3.0.6" id "io.spring.dependency-management" version "1.1.0" //querydsl 플러그인 추가하지 않음 } ... configurations { ... querydsl.extendsFrom compileClasspath //해당 부분은 그대로 유지 ... } repositories { mavenCentral() } dependencies { ... implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta" annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" implementation "com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0" ... } ...현재 예제에서는 Querydsl의 Gradle 플러그인인 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"를 사용하지 않습니다. 이전 버전에도 있었는지는 정확하게 모르겠지만 Spring Boot 3로 업데이트 되면서 jakarta 패키지를 사용하기 때문에 해당 패키지에 맞는 annotationProcessor를 추가하여 Gradle의 Querydsl 태스크를 대체합니다.(대표적으로 compileQuerydsl) 그리고 configurations 부분의 querydsl.extendsFrom compileClasspath 구문은 그대로 유지합니다. dependencies 부분에서는 Querydsl 관련 패키지 뒤에 :jakarta를 추가로 입력하고 2 개의 annotationProcessor을 추가해줬습니다. Spring Boot 3 초기에 지원되지 않았던 P6Spy의 경우 2월 10일에 1.9.0 버전으로 업데이트 되어 정상적으로 지원합니다. 그리고 기존에 김영한 님이 가이드 하셨던 코드인//querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } //querydsl 추가 끝위 코드는 따로 작성하지 않습니다. Querydsl Gradle 플러그인을 통해 Qclass를 생성하는 compileQuerydsl 태스크를 별도로 실행할 필요 없이 프로젝트 빌드 진행 시 annotationProcessor에 의해 Qclass가 자동으로 생성됩니다.(여기서 프로젝트 빌드란 Gradle build 태스크가 아닌 Java workspace 빌드를 뜻함.)아래의 이미지와 같이 @Entity 파일이 수정될 때 수정한 내용이 즉시 Qclass에 반영되는 것을 확인할 수 있습니다.(좌측 Entity class, 우측 Qclass) 위 설정을 통해 생성되는 Qclass의 위치는 /bin/generated-sources/annotations/{프로젝트 패키지}/{Entity 클래스 패키지}입니다.(예제 프로젝트에서 Qclass의 위치, gitignore 처리되어 있어 회색으로 표시 됨) 만약 annotationProcessor를 추가하고 Querydsl 설정을 같이 추가했다면 Qclass가 중복된다는 오류가 발생하여 프로젝트 빌드가 진행되지 않으니 주의 바랍니다. 해당 소스는 다음 링크에서 확인해보실 수 있습니다.404-nut-pound/spring-jpa-querydsl-template (github.com) 그리고 별도로 MongoDB+Querydsl 설정도 공유해 드립니다.404-nut-pound/spring-mongodb-querydsl-template (github.com)MongoDB는 Gradle 패키지 설정 시 약간 달라지고 @Entity 어노테이션은 동일하게 사용합니다.그리고 Querydsl MongoDB 패키지는 JPAQueryFactory를 지원하지 않고 Morphia 패키지를 사용해서 MorphiaQuery라는 객체를 사용하는데공식 가이드를 봐도 해당 객체를 초기화하는 방법을 알 수 없어서 Repository 인터페이스에 QuerydslPredicateExecutor를 상속하여 사용하는 식으로 구성했습니다.
-
자바 ORM 표준 JPA 프로그래밍 - 기본편
김영한 선생님! 질문 있습니당!
지금 현재 동아리 내부에서 스프링은 김영한 강사님 꼭 들어야 한다는 말과 함께 열심히 수강하고 있는 학생입니다.지금 JPA 활용 2편까지 거의 수강하고 있습니다.활용편까지 들으면서 이것저것 해보고 싶은게 많더라고요?로그인도 해보고 싶고, 결제기능도 해보고 싶고, 쿠키, 세션 등 다양한 것을 해보고 싶습니다.그렇기 때문에 스프링 MVC 강의도 꼭 듣고 싶고요!근데요!!!!!!요즘에는 다 API 방식으로 개발을 한다고 하잖아요?1번)혹시 스프링 MVC 강의에서 API 방식으로 로그인이나 쿠키나 세션 같은 부분을 다룰까요???이 부분이 1번으로 일단 궁금하고요!(물론 그거와는 별개로 제가 MVC강의도 사서 들을 거긴 합니다!)2번) 결재기능이라던지 이런 추가적인 기능, 소셜 로그인 기능을 사용한다던지 이런 것은 그냥 구글링으로 공부하시는 걸 추천하시나요? 당초 잘 정리되어 있는 책이나 그런 것을 먼저 학습하고 거기에다가 조금씩 살붙이는 걸 좋아하는 편이라서 보고 공부하신 책이라도 있을까요?
-
나도코딩의 자바 기본편 - 풀코스 (20시간)
질문있습니다!
안녕하세요혹시 강의에 대한 내용을 노션에 코드와 기록해도 될까요 ?
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
그의 설계는 대체...
8분 56초 모든것은 설계였다는 말에 감격해서 다시 한번 2회독해보려고 합니다...
-
나도코딩의 자바 기본편 - 풀코스 (20시간)
선생님 혹시 타자연습은 어떻게 하셨나요 ?
선생님 타자 엄청 빠르시고 정확 하신대 연습을 따로 하셨나요 ?저는 타자가 느려서 조금 고민이네요 ㅠ
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터 베이스 설계
데이터 베이스 설계를 처음 접해봐서 설계 부분이 너무 어렵네요 ㅠㅠ db 설계 같은건 어떻게 공부할 수 있을까요??
-
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
p6spy 버전에 따른 p6spy 로그 문제
현 시점 (2023.04.23) 기준 spring boot 2.x 의 최신버전인 spring boot 2.7.10 에서 강의 자료의 https://github.com/gavlyukovskiy/spring-boot-data-source-decorator의 p6spy 최신 버전인 1.9.0 사용 했을떄 p6spy로그가 찍히지 않네요 추가 설정을 통해서 해결할 방법이 있을것으로 추측되지만.. 귀찮으신 분들은 그냥 강의에서 사용했던 p6spy 1.5.6 버전을 그냥 사용하시면 문제없이 출력이 되니 참고하실분들은 참고하세요 ㅎㅎ
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
프로젝트를 시작할 때
안녕하십니까 강사님 강의 너무 잘 듣고 있습니다. 서버 개발에 필요한 일련의 과정을 정리하는데 많은 도움이 되고 있습니다.강의 내용에 대한 질문은 아닙니다. 이제 취업을 하기위한 포트폴리오를 만들 단계라고 생각하는데 개인 프로젝트를 할 때 가이드 라인을 여쭙고자 질문드립니다.실무에선 상황마다 물론 다르겠지만 강사님께선 보통 프로젝트 주제를 선정하고,요구사항을 정리한 다음테이블 설계를 하시고 그다음API 스펙을 정한 다음 개발에 착수하시나요?그리고 API 스펙을 정할 때 controller에 진입하기 위한 경로들을 모두 정하신 다음 본격적인 코드 작성을 하시는지도 궁금합니다.항상 개인 프로젝트를 하다 보면 프로젝트 시작 단계에서 고려하지 못한 부분들을 놓쳐 결국 프로세스가 뒤죽박죽 되고 헷갈리게 되는것 같더라구요..그래서 강사님의 개인적인 개발 프로세스를 슬쩍? 알려주시면 감사하겠습니다.좋은 강의 만들어주셔서 감사합니다:)그리고 프로젝트를 할 때 완성된 결과물을 보여주기 위해선 어느 정도의 ui도 필요할 것 같은데 이런 경우 rest api를 만들기 보단 ssr 애플리케이션을 만드는 것이 나을까요..?두서 없는 질문이라서 죄송합니다ㅎㅎ..
-
자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
수업 교재
안녕하세요.수업에서 사용하시는 교재는 따로 볼 수 있는 방법이 있을까요??감사합니다.
-
자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
수업자료
안녕하세요.수업하실 때 사용하시는 교재?는 제공이 안 되는 건가요? 그냥 동영상으로 봐야 할까요?
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의를 듣기전에 알아야 할 지식이 어떤게 있을까 해서 질문드립니다.
강의를 듣기전에 알아야 할 지식이 어떤게 있을까 해서 질문드립니다.백엔드 개발자가 되고싶은데 자바는 어느정도 아는 상태이고 다음으로는 스프링에 대해서 공부하라고 하더라고여 그래서 찾아보던중 영한님 강의를 찾게 되었습니다. 정말 자바만 알아도 강의를 듣는데 문제가 없을까요? 또 백엔드 관련해서 database같은 것도 배워야 한다고 하는데 영한님 강의를 다 듣고 따로 database를 배워야 하는건가요?
-
나도코딩의 자바 기본편 - 풀코스 (20시간)
우선순위 공부에 대해 문의드립니다.
안녕하세요 강사님 강사님 덕분에 자바 기본편 강의 정말 재밌게 잘 듣고 있습니다. 제가 다음주 화요일부터 부트캠프 과정이 시작되기에 자바 공부 우선순위를 여쭤보고자 합니다.자바스크립트가 익숙해져 있어서 자바 코드를 작성하는데 있어서 어색함 및 낯설음 때문에 친숙해지려면 시간이 더 필요한 느낌입니다..현재 11장 함수형 인터페이스에서 어려움을 겪고 있는 상황이네요 ㅜㅜ 이번주까지 12,13,14장은 다 끝날 수 있을 것 같으며 동시에 우선순위 대로 복습하고자 합니다. 강사님께서 어느 단원을 우선순위로 공부할지 조언해주실 수 있을까요 ? 아무래도 메소드 이전은 자바스크립트와 내용면에서 중복되기에 친숙했는데 클래스 이후부터 제네릭스, 인터페이스, 익명클래스... 어렵네요 ㅜㅜ 어떤 순서대로 공부해야할지 궁금합니다. p.s) 자바의 람다식은 자바스크립트의 화살표 함수와 동일하다고 생각되는데 맞는지요 ?
-
나도코딩의 자바 기본편 - 풀코스 (20시간)
비전공자인데 프로그래밍 언어를 처음 배워봅니다.
https://haaneeul.tistory.com/manage/newpost/3?type=post&returnURL=https%3A%2F%2Fhaaneeul.tistory.com%2Fmanage%2Fposts차근차근 배워보겠습니다!블로그도 처음 해보는데 꾸준히 기록하면서 복습하겠습니다.
-
자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 코드 자료 요청 관련해 문의드립니다.
영한님, 서포터즈 분들 안녕하세요. 덕분에 좋은 강의로 잘 학습하고 있습니다. 특히 강의에 있는 내용을 거의 빠짐없이 꼼꼼하게 강의자료를 만들어주신 덕분에 개발환경 설정부터 코드까지 잘 활용하고 있습니다. JPA 기본편의 경우는 아마 강의 자료의 포멧이 정해지기 이전에촬영되어 PPT 자료밖에 없지 않나 싶은데요. 혹시 해당 코드 자료를 따로 받을 수 있을까요? 저같은 경우에는 강의 자료를 가지고 우선 코드를 작성해보고, 이해 안되는 부분만 강의를 보는 식으로 활용하고 있는데요. 기본편 제외한 다른 강의처럼 코드와 설명이 같이 있는 자료가 있다면 큰 도움이 될 것 같아 여쭤봅니다.