자바 스프링 공부 방향과 로드맵
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
삭제된 글입니다
- java
- spring
- mvc
- spring-boot
- jpa
- 로드맵
173만명의 커뮤니티!! 함께 토론해봐요.
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
삭제된 글입니다
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
삭제된 글입니다
나도코딩의 자바 기본편 - 풀코스 (20시간)
삭제된 글입니다
실전! Querydsl
QueryDSL 내부 메소드 중 fetchResult() 나 fetchCount()는 만료된 메소드에 대해서는 QueryDSL에서 Blaze-persistence Integration 라이브러리 사용을 권장 하는데요, Blaze-persistence도 QueryDSL 처럼 쿼리 빌더 API 로서 개발자에게 유지보수하기 좋은 객체를 제공해주고 있습니다. 게다가 최신 업데이트 날짜가 글 작성일 기준(2023.06.21) 일주일 이전이라 여전히 유지보수되고 있어서 최신 스프링버전과 호환성도 어느정도 보장되었다고 볼 수 있습니다. 개인적으로 SpringBoot 3.1.0 기준으로 다음과 같이 세팅하니 정상적으로 동작하는 걸 확인했는데요, 혹시 저처럼 deprecated 메소드를 쓰는 것이 신경쓰이시는 분들을 위해 공유드립니다. build.gradle dependencies { //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 활용할 때는 유의해야할 것 같습니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하십니까. 김영한 강사님의 '실전! 스프링부트 JPA 활용1' 강의를 듣고 있는 수강생 입니다. 섹션1 - 프로젝트 환경설정 -> JPA와 DB 설정, 동작확인 강의를 듣고 있는데 JUnit 4를 사용하여 MemberRepositoryTest를 테스트했을 때 오류가 났었는데, 그것을 해결한 방법을 정리하였습니다. 제목에서처럼 스프링부트 2.7.X 버전인 경우에 유효한 방법일 것 같고요. 사진처럼, gradle.build를 통해 라이브러리가 자동으로 설치되었을텐데, 본인의 스프링부트에 따라서 h2 버전이 맞춰서 설치됩니다. (사진에서는 2.1.214) 그럼 h2를 2.1.214를 설치하시면 됩니다. (강의는 1.4.199를 설치했지만, 스프링부트의 버전이 강사님과 저와 달랐기에... 오류가 터진 거였죠..) 이 오류를 해결한 경위는 다음과 같습니다. 처음의 오류입니다. Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 오류가 나길래, database를 지정하라는 소리가 있어서 application.yml을 다음과 같이 수정했죠.. jpa의 database: h2를 추가해줬습니다. 그랬더니 다른 오류를 뱉습니다. 스크린샷은 못 찍었는데, 오류 밑부분에 Version mismatch, driver version is "0" but server version is "16" 이런 오류가 터졌습니다. 그래서 dialect가 문제인가? 해서 dialect를 지정해봐도 이 오류가 절대로 고쳐지지 않기에 검색해봤는데... 다른 글들은 스프링부트 버전을 낮춰라, h2 버전을 낮춰라 하시는데 스프링 부트에서 사용하는 H2 데이터베이스 클라이언트 버전이 현재 2.1.212로 확인되어 제보드립니다. 라는 제목의 인프런 글을 보면서 스프링부트에 설치된 라이브러리 버전대로 올려버리자!!! 라고 해서 버전 올려버렸습니다. (1) 기존에 설치된 h2 삭제 기존 h2를 삭제하고 + ' h2 다른버전으로 재설치시 파일 삭제' 글 참고하셔서 삭제하라는 것 삭제하고(C:\users\사용자명에 있습니다. .h2로 시작하는 파일과 .db 확장자로 끝나는 걸 삭제하시면 됩니다.) (2) 본인 스프링부트에 맞는 h2를 설치 하고, 강의대로 JDBC URL에 jdbc:h2:~/jpashop 을 입력하고 '연결 시험' 말고 '연결'을 누르시면 됩니다. 그리고 세션 끊고 다시 나와서 이번에는 jdbc:h2:tcp:// localhost/~/jpashop을 '연결 시험' 말고 '연결'을 누르시면 됩니다. 연결 시험 누르면 잘 안 되서 연결 누르시면 되는데, 그래도 안 되면 오타 확인해주시고 localhost 대신 ip 넣으시면 됩니다. (3) 오류나면 yml에서 MVCC=true 부분은 삭제 application.yml에서 강의로 보셨으면 url: jdbc:h2:tcp:// localhost/~/jpashop ;MVCC=true 이 부분에서 MVCC=true 이 있을텐데, MVCC=true 이 부분을 삭제해주시면 저의 경우엔 정상적으로 돌아갔습니다!!! (현재 강의 자료 소스로 첨부된 application.yml 그대로 하시면 잘 돌아갑니다.)
프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
안녕하세요! 조금 뜬금 없는 질문이기는 한데 궁금해서요 왜 for 문을 반복문이라고 하나요? 그러니까 어떤 의미에서의 반복인가요? apple 를 a p p l e 이렇게 5줄로 따로따로 가져오는 게 반복인가요?
자바 ORM 표준 JPA 프로그래밍 - 기본편
https://xively.tistory.com/43
[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
selenium 실력 업그레이드 ② - 네이버 지도 크롤링/검색어 입력구현 이곳 수업은 아마 혼자했다면 포기했었을 것 같습니다. 아무리해도 search = browser.find_element(By.CSS_SELECTOR, 'input.input_search') 이것부터 인식을 안해서 왜 안되나 찾고 찾아도 알 수가 없었습니다. time어쩌고 언급이 된 것 같았지만 그것을 읽을 때는 심각하게 생각하지 않고 지나쳐 버려서... 포기하고 수업을 들으니 특별한 것이 있을 줄 알았는데... # 검색창 찾아서 입력 search = browser.find_element(By.CSS_SELECTOR, 'input.input_search') search.click() time.sleep(1) # 이것을 안해줘서 인식을 못했음, 사람처럼 인식하도록 함 search.send_keys("강남역 맛집") time.sleep(1) search.send_keys(Keys.ENTER) time.sleep(2) # 3개의 명령어가 순식간에 일어나면 네이버지도는 사람이 아니다라고 인식 별것 아닌 것 같은 time.sleep(1) 이것이 해결책이었네요. 이 수업하나로 수업료낸 값어치가 있는 것 같습니다. .
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
삭제된 글입니다
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
현재 국비 학원을 수료하며 프로젝트를 마친 뒤에 김영한님 강의를 듣고 있으며 spring에 대해 이제서야 이해하려 하는 취준생입니다. 문득 제가 어떤 개발을 하고 싶은지 방향성에 대해 생각해보게 되었습니다. ->어떤 개발을 하고 싶은지 방향성에 대해 되짚어 보고 있었다 ->SQL문을 짜면서 효율적인 방법은 무엇이 있을까 고민하는 과정이 스스로 가치 있는 고민을 하고 있다는 생각이 들었다. ->데이터 처리 속도 개선에 관하여 고민하는 개발자가 되고 싶다. ->대용량 트래픽을 다루는 서비스 회사에서 성장하고 싶다. 질문 ==> 위의 4문장을 설득력 있게 말하기 위해서 취준에 뛰어드는 예비 백엔드 개발자 수준에서 할 수 있는 "공부 방향"은 무엇이 있을지 조언 해주실 수 있을까요? (특정 개념이나 강의를 추천해주셔도 감사할 것 같습니다. )
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
선생님 안녕하세요. 강의 듣고있는 수강생 입니다. 다름이 아니라 파이썬 프로젝트하면 포트폴리오로 활용하기에도 실용적으로 쓰기에도 불필요한 너무 작은 단위의 게임, 메모앱을 만든다든지 기껏해야 블로그만들기만 잔뜩 있는것 같습니다. 어쩌다가 인스타그램 만들기가 있구요. 혹시 파이썬 장고를 활용한 쇼핑몰 만들기 강의 개설에 대해서 계획이 있으신가요?
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
기술 면접이나 면접 과제 중 인증, 인가 또는 사용자 정보 암호화(jwt) 관련된 과제들도 많이 출제가 되더라구요 프로젝트 진행하면서 회원가입, 로그인 구현 시 코드를 끌어다 사용해 구현은 했었지만 사실 너무 복잡하고 어려워서 사실 그 부분에 대한 질문이 들어오면 입도 못 뗄 것 같아요... 보안 관련 시리즈도 기대 해봅니다!! 영한 튜터님 강의 보면서 정말 즐겁게 공부하고 있어요:)
실전! Querydsl
plugins { id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // queryDSL 설정 implementation "com.querydsl:querydsl-jpa" implementation "com.querydsl:querydsl-core" implementation "com.querydsl:querydsl-collections" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정 annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 } tasks.named('test') { useJUnitPlatform() } // Querydsl 설정부 def generated = 'src/main/generated' // querydsl QClass 파일 생성 위치를 지정 tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } // java source set 에 querydsl QClass 위치 추가 sourceSets { main.java.srcDirs += [ generated ] } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file(generated) } 해당 소스는 타사 강의 보다가 본 설정에서 가져왔습니다. 기존 영한님 강의와 다른 점이 3가지 있으니 주의하시기 바랍니다. Querydsl Q파일 생성 위치가 다릅니다. 기존 영한님 강의대로 $build 로 시작하는 설정을 사용하면 테스트 실행 시 Q파일의 위치를 찾지 못해서 테스트가 실패합니다. Gradle -> Tasks -> build -> clean Gradle -> Tasks -> build -> build 혹은 classes 기존 영한님 교안에는 빌드 시 Gradle -> Tasks -> other -> compileQuerydsl 로 Q파일을 생성하지만, 이 방법의 경우 other에 해당 메뉴가 없습니다. 그래서 빌드 시에는 그냥 build 메뉴의 build 혹은 classes 로 빌드하시면 Q파일이 생깁니다. 영한님 강의에서는 gradle build 폴더가 대부분 git 버전관리에 포함되지 않으므로 따로 설정할 필요가 없지만, 이 경우 Q파일이 소스폴더에 들어가므로 .gitignore 에 아래와 같이 별도로 경로를 설정해 주어야 합니다. ### Querydsl /src/main/generated 혹시 저같이 청개구리마냥 강의에 나온 버전 사용 안 하고 최신 버전 사용하시는 분들께 도움이 되었으면 좋겠습니다. 저도 타사 강의에서 가져온 것이고 기초 테스트만 통과한 것이라서 혹시 강의에 맞지 않는 경우 영한님이나 다른 분들이 추가 정보를 주시면 좋을 것 같습니다. 여담인데 QueryDSL은 쿼리 짜긴 확실히 편한데 설정이 버전마다 중구난방이라 불편합니다. 똑똑한 개발자분들이 이런 설정도 그냥 @Configuration 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.
스프링 핵심 원리 - 기본편
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아직 강의를 완강한 것도 아니고 로드맵을 전부 구매하지는 않았지만 지금까지의 설명을 들었을 때 사람들이 그렇게 호평한 이유를 알 것 같습니다! 주워들었던 용어들에 불과했던 IoC, DI, SOLID 원칙 등등.. 특히 역할과 구현 분리 부분에서 자동차와 연극 비유는 레전드였습니다 👏👏 사실 저는 그동안 node.js 기반으로만 개발 공부를 하고 있었어서 처음에 스프링 무료 버전을 들었을 때 까지만 하더라도 유료 강의들로 넘어간다고 해서 내가 이해할 수 있을까..? 라는 불안감이 있었는데, 지금처럼 계속 공부한다면 충분히 스프링도 익숙해질 것이라 생각하게 되었습니다! 영한 님이 이 글을 보실지는 모르겠지만.. 진짜 감사드립니다 👍👍👍 모르는 게 생기면 바로 바로 여쭤보겠습니다!
저는 일단 정보통신공학 2학년인데 소프트 커리를 타려고 생각중이에요 2학기에 C++ 자료구조론을 배우는데 여론으로는 C++은 게임 개발이나 인공지능? 쪽에서 많이 쓰인다고 하고 제가 생각하는 프론트/백엔드의 웹 개발자는 java나 python이 주 프로그래밍 언어이고 IT기업 쪽에서도 java를 활용한 툴(Spring 등)을 선호하고 있다고 들어서 C++은 학점 챙기는 용으로 공부하고 진로를 위해서는 java를 중점적으로 공부하려고 하는데 1. 지금 java와 C++ 자료구조를 병행해서 공부를 하는 것이 나은지(공부 비중은 C++을 더 높게) 2. 일단은 C++ 자료구조를 중점적으로 공부할지 고민되어 질문글 올립니다 ㅠㅠ - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
서울시에서 뉴딜일자리사업 일환으로 2차 서비스플랫폼개발자 양성과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! 자세한 내용은 https://blog.naver.com/kjc_sh/222775806456 참고해주세요
블록체인 분야 기술을 배우고싶은 분들 or 블록체인 분야 취업을 원하시는 분들 주목! 서울시에서 뉴딜일자리사업 일환으로 IT 블록체인과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! https://blog.naver.com/kjc_sh/222745988610 자세한 내용은참고해주세요 오픈카카오톡 문의 [ https://open.kakao.com/o/stkiOIhe ]
자바 ORM 표준 JPA 프로그래밍 - 기본편
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. DB 관련강의가 3월 말에 나온다고 들었는데 대충 언제나오는지 알수있나요..? 그리고 DB 강의가 실습을 JPA로 진행하는지 궁금합니다 JDBCTemplate나 Mybatis만 알아도 충분할까요 DB기초는 알고있습니다
더 자바, Java 8
안녕하세요. 강의를 막 수강하게 된 수강생입니다. 이제 막 자바를 배우고 있는데 듣다보니 어느정도 지식을 요하는 것 같아 질문드립니다. 혹 이 강의를 수강하기 전에 선수로 수강해야 하는 강의가 있나요?
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
좋은 강의 감사드려요. 유료 강의로 넘어갑니다!