묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 ! Fetch = LAZY 에 관해서 질문남깁니다.
안녕하세요~ LAZY 관련 질문이 있어서 글을 남깁니다! LAZY 로드를 디폴트로 설정하기 위해서 propertis or yml 파일에 "spring.datasource.jpa.hibernate.enable_lazy_load_no_trans"=true 구문을 추가 하였습니다. 적용한 자바 config 파일 입니다. properties.setProperty("hibernate.enable_lazy_load_no_trans", env.getProperty("spring.datasource.jpa.hibernate.enable_lazy_load_no_trans")); 혹시 해당 프로펄티즈 구문으로 Lazy를 디폴트로 설정해본 적이 있으신가요? 매우 간편 해보여서 프로젝트에 적용해서 쓰고 있는데 안티 패턴이여서 쓰지 말라는 글도 있더라구요. 해당 설정에 대해서 김영한 개발자님의 의견이 궁금합니다! https://vladmihalcea.com/the-hibernate-enable_lazy_load_no_trans-anti-pattern/
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
질문있습니다.
안녕하세요. 기본적인 내용이라 질문 드리긴 부끄럽지만 헷갈리는 부분이 있어서 질문드립니다.. em.find(Member.class, member.getId()) 를 할 때입니다. Identity 전략을 사용하면, member.setUsername(" ")만 해주고 em.persist(member)를 하게 되면, DB로 쿼리가 날라가서 id를 얻어온 후 1차 캐시에 member를 구분할 식별자인 id와 member 정보들이 저장되어 있는 것을 이해했습니다. 그러면 persist를 하면서 1차 캐시에 id와 member가 저장이 된 상태일 텐데, 영속 컨텍스트를 초기화하는 작업 후에 프록시 객체를 불러오는 작업을 합니다. 이 때 member의 id를 알려면 DB로 find 쿼리가 날아가야 하지 않나요? 제가 아리송했던 부분은 10분 40초쯤에, flush로 인해 쓰기지연 저장소에 담겨있던 insert 쿼리가 날아가고, em.clear로 1차캐시를 비워준 상태입니다. 이 상황에서 1차 캐시가 비어있는데 어떻게 find query 없이 database를 타지않고 Id를 바로 받을 수 있는 것인지 의문이 생겼습니다. 레퍼런스를 찾을 때는 이미 id값을 파라미터로 넣어서, 값이 있기 때문에 터치를 안하고 DB쿼리가 필요 없다고 하셨는데 현재 Identity 전략이기에 DB를 거쳐야 ID를 알 수 있는 것이 아닌가요..? 어떻게 바로 member.getId()를 알 수 있는 것인지 궁금합니다.
-
해결됨실전! Querydsl
EntityManager 관련 질문
안녕하세요 강사님~ 강의 재미있게 보고있습니다. 강의 마지막쯤 스프링에서 주입해주는 엔티티매니저는 동시성문제 없이 동작한다고 설명 해주셨는데 JPAQueryFactory를 Bean으로 등록하거나 상위 클래스 생성자에서 미리 할당하고 사용해도 문제가 없는지 궁금합니다. 또 현업에서도 예제처럼 querydsl을 사용 할 때마다 JPAQueryFactory를 할당해서 사용 하시는지도 궁금합니다.
-
해결됨실전! Querydsl
MappedBy 와 @Setter 관련 질문
안녕하세요! 강사님 강의를 듣다 궁금한게 있어서 질문 남깁니다. 1. 강의 초반 @Setter는 현업에서 가급적 사용하지 않는다고 하셨는데 그 이유에 대해서 좀 더 자세히 알 수 있을까요? 2. mappedBy = "team" 이렇게 설정 해주셨는데 연관관계 주인의 클래스명을 소문자로 적어주면 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요 강사님이 템플릿 엔진에 대해서 질문이 있습니다.
성능 문제로 템플릿 엔진보다는 웹 프레임워크 vue.js react.js angular.js를 쓴다고 들었습니다. 여기 강의에서 thymeleaf 템플릿 엔진을 사용했는데, spring에서 템플릿 엔진을 꼭 써야하는지 아니면 간단하게 예제로써만 사용하고 나중에는 react.js vue.js angular.js같은 웹 프레임워크를 사용하는 지 궁금합니다.
-
미해결예제로 배우는 스프링 입문 (개정판)
sh터미널 ./mvnw package 에러발생..도와주세요...
[INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15:20 min [INFO] Finished at: 2020-10-03T22:38:25+09:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project spring-petclinic: There are test failures. [ERROR] [ERROR] Please refer to C:\Users\ESE\IdeaProjects\spring-petclinic\target\surefire-reports for the individual test results. [ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. [ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was cmd.exe /X /C ""C:\Program Files\Java\jdk-15\bin\java" -javaagent:C:\\Users\\ESE\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.5\\org.jacoco.agent-0.8.5-runt ime.jar=destfile=C:\\Users\\ESE\\IdeaProjects\\spring-petclinic\\target\\jacoco.exec -jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689\surefirebooter10487122512194559164 .jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689 2020-10-03T22-38-15_705-jvmRun1 surefire8445944312646886691tmp surefire_01288502121873472979tmp" [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was cmd.exe /X /C ""C:\Program Files\Java\jdk-15\bin\java" -javaagent:C:\\Users\\ESE\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.5\\org.jacoco.agent-0.8.5-runt ime.jar=destfile=C:\\Users\\ESE\\IdeaProjects\\spring-petclinic\\target\\jacoco.exec -jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689\surefirebooter10487122512194559164 .jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689 2020-10-03T22-38-15_705-jvmRun1 surefire8445944312646886691tmp surefire_01288502121873472979tmp" [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) [ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) [ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957) [ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289) [ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:193) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:564) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:564) [ERROR] at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39) [ERROR] at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122) [ERROR] at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61) [ERROR] [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 상기 에러 발생하는데 구글링을 해봐도 번역을해봐도 스텍오버플로우 글을 뒤져봐도 도저히 해결할수가없습니다 도와주세요 ... 답보다 해결방법을 알고싶습니다 도와주세요 고수님들 윈도우 사용자입니다....
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티매니저팩토리 cloase 질문
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");EntityManager em = emf.createEntityManager();EntityTransaction tm = em.getTransaction();tm.begin();try { Member findMember = em.find(Member.class, 1L); findMember.setName("HelloJPA"); tm.commit();} catch (Exception e) { tm.rollback();} finally { em.close();}emf.close(); 여기서 emf도 finally에 들어가도 되는거 아닌가요? 꼭 밖에 선언한 이유가 있을까요?
-
해결됨실전! Querydsl
dto
활용편에서 dto로 리턴해야 하는 중요성을 배웠었는데요. dto클래스를 꼭 요청에 필요한 필드로만 구성해야 하나요? 어떤곳은 username만, 어떤곳은 age 또는 2개다 이렇게 하나의 엔티티에서 여러개의 dto를 만들면 이름짓기도 애매할텐데 엔티티랑 똑같이 dto를 만들고 필요한것만 생성자나 set하고 나머지는 null로 응답하면 문제가 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
컨트롤러에서 레파지토리 호출시 트랜잭션은?
안녕하세요~ 잘듣고 있습니다. 근데, 궁금한게 있어서요. 만약 컨트롤러에서 바로 (서비스 없이) 레파지토리를 호출하면 기존에 서비스에서 하던 트랜잭션 처리를 컨트롤러에서 해야 하는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
캐시란?
안녕하세요 선생님, 명강의 늘 감사드립니다.바로 본론으로 들어가겠습니다. 질문 내용은 다음과 같습니다. 16:47에서 말씀하시는 캐싱이라는 뜻에 대한 상세한 개념을 정리하고자 질문을 드립니다.캐시의 추상적인 개념은 나중에 요청을 결과를 미리 저장해두었다가 빠르게 서비스를 해준다는 의미로 인지하고 있습니다. 1. 컴퓨터 자체에서의 캐시 메모리에 캐싱한다는 것인지, DB 자체에서 내부적인 캐시에 데이터를 캐싱? (데이터를 가지고 있다) 한다는 의미인지 궁금합니다. 2. 만약 DB 자체에서의 캐쉬라면 DB의 캐시와 컴퓨터의 캐시 메모리의 차이점이 무엇인지 궁금합니다. 예를 들어 DB 자체의 캐시란 요청을 결괏값을 컴퓨터 캐시 메모리에 올려놓고 트랜잭션이 완료되기 전에 재사용하는 의미인지 궁금합니다. 3. 일반적으로 알고 있는 웹서비스의 구조는 다음과 같습니다. 일반적으로 마이바티스를 사용할 경우 다음과 같은 구조가 된다고 알고 있습니다. [Look aside cache] jpa를 사용하면 다음과 같은 구조가 되나요?감사합니다. 출처 : https://www.youtube.com/watch?v=mPB2CZiAkKM
-
미해결실전! Querydsl
Case 문
OrderBy에도 사용 못하는건가요? @Testvoid complexCase() { List<Member> result = queryFactory .selectFrom(member) .orderBy(new CaseBuilder() .when(member.age.eq(10)).then(1) .when(member.age.eq(20)).then(2) .otherwise(3)) .fetch();} 빨간줄이 막뜨더라구요..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
change 언급하실때
itemService 에서 change 메서드 호출해서 넣어주고, Book 엔티티 쪽에서 change 메서드를 만들어주었습니다. 기능은 정상 동작하나, 이게 최적된 방법인지는 잘 모르겠습니다. 강사님이 말씀하신 변경감지를 이용한 부분인데, 컨펌한번 받아보고자 이렇게 올렸습니다. 조언부탁드립니다 . 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
spring-boot-devtools 사용시 recompile하면 서버가 재시작되나요?
안녕하세요, html 파일 수정시 ctrl + shift + f9 단축키로 recompile하면 서버 재시작 없이 변경사항이 적용 되는줄 알았는데 리컴파일 할때마다 서버자체가 재시작 되면서 데이터베이스의 테이블도 다 드랍했다 생성합니다. ddl-auto: create으로 해놓긴 했지만 리컴파일 할때 서버 재시작이 안되고 반영되는줄 알았는데 무조건 서버 재시작이 되는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
book 객체가 왜 준영속인것인가
수정을 시도하는 Book객체는 새로 만들어진것이잖아요 강사님. 이 Book객체는 이미 DB에 한번 저장이 되었다고 했는데 persist를 한적도 없고 db를 통해 find 한 객체도 아닌데 어떻게 이게 준영속 객체가 되는것이지요?????? 단지 그냥 Book이란 객체를 만들고 set으로 평범한 값을 넣어줬을 뿐인데.. 만약 set을 하고 em.persist(book) 을 해주면 뭐 영속성컨텍스트에 올라갈것이지만요... 그냥 book은 단순 객체가 아닌 이유를 이해하기가 정말 어렵습니다.ㅠ 기존식별자를 가지면 준영속이라고 하셨는데 book에 set을하여 id를 박는순간 이것은 준영속인것인가요? id는 식별자니까요 @PostMapping("items/{itemId}/edit")public String updateItem(@ModelAttribute("form") BookForm form, @PathVariable String itemId) { Book book = new Book(); book.setIsbn(form.getIsbn()); book.setAuthor(form.getAuthor()); book.setStockQuantity(form.getStockQuantity()); book.setPrice(form.getPrice()); book.setName(form.getName()); book.setId(form.getId()); itemService.saveItem(book); return "redirect:/items";}
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
썜. updateItemForm에는 action이 왜 없나요
@GetMapping("items/{itemId}/edit")public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findOnd(itemId); model.addAttribute("form", item); return "items/updateItemForm";} 수정버튼 눌렀을경우 바로 이렇게 item을 때려 박아서 정보를 줘도 되지않나요. 왜 폼에 넣고 폼을 전달하나요 아참. 이게 본 질문입니다. action이 없어도 되는건가요? method는 있네요. <!DOCTYPE HTML><html xmlns:th="http://www.thymeleaf.org"><head th:replace="fragments/header :: header"/><body><div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form th:object="${form}" method="post"> <!-- id --> <input type="hidden" th:field="*{id}"/> <div class="form-group"> <label th:for="name">상품명</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요"/> </div> <div class="form-group"> <label th:for="price">가격</label> <input type="number" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요"/> </div> <div class="form-group"> <label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}" class="formcontrol" placeholder="수량을 입력하세요"/> </div> <div class="form-group"> <label th:for="author">저자</label> <input type="text" th:field="*{author}" class="form-control" placeholder="저자를 입력하세요"/> </div> <div class="form-group"> <label th:for="isbn">ISBN</label> <input type="text" th:field="*{isbn}" class="form-control" placeholder="ISBN을 입력하세요"/> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <div th:replace="fragments/footer :: footer"/></div> <!-- /container --></body></html>
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소시 영속성 컨텍스트
썜. //주문취소order.cancel(); 을 했을경우. 카운트만 바꾸었지 persist를 한적이 없잖아요? 그상태로 @Transactional때문에 commit이 날라가게 될텐데 어떻게 카운트 값이 db에 번복되어 저장되는것이죠? 고비 같군요 지금이..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
왜 Transactional을 service에 두나요
영한 쌤!!! @Transactional을 Service에 말고 Repository에 달면 안되나요? 그리고 @Transactional 은 Test 폴더 안에서만 rollback을 시키는건가요? 아니면 SpringBootTest 어노테이션 안에서만 rollback 이 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빌드하고 실행하기에서 jar로 생성이 안됩니다
윈도우인데 gradlew.bat 실행하면 build 폴더에 jar가 있는게 아니라 classes 폴더가생겨요.. 왜 그런걸까요?
-
미해결실전! 스프링 데이터 JPA
modelMapper에 대해 질문하고 싶습니다!
안녕하세요 영한님!!! 요즘 진행중인게 있어서 아직 새강의를 못들었어요 ㅜㅜ 요번 추석날때 외할머니집 가서 들으려고 하는데 기대가됩니다 ㅎㅎ! 이번 질문은 다름이 아니고 현재 modelMapper.map() 메서드를 이용해서 dto 에 있는 정보를 엔티티에 집어넣으려고 하는데, 해당 메서드가 엔티티에 setter 메서드 들이 존재할 때에만 작동을 하는 것 같더라구요 빌더패턴 또한 setter가 돌아가는데, setter사용을 지양해야하는데, 영한님의 경우에는 빌더패턴을 사용을 안하시나요? 그리고 modelMapper.map() 메서드도 지양하시는 편인가요?? 분명 해당 내용이 로드맵 강의 중 1개 강의에서 다뤘었고 현직자 분이 올린 질문글에도 빌더패턴과 관련해서 질문이 있었던걸로 기억해서 찾으려고하는데 안찾아지네요 ㅜ.ㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Intellij에서 갑자기 스프링 어노테이션 / 자바 인식이 안됩니다.
intellij 커뮤니티 버전을 사용하다가 학생 버전을 설치해 쓰려고 했는데.. 잘 인식하던 스프링부트 프로젝트가 자바 파일을 인식하지도 못하고, gradle의 라이브러리도 인식을 못하는것 같아 질문드립니다. 기존에 사용하던 커뮤니티 버전은 삭제했습니다. 이렇게 자바 파일을 아예 실행할 수 없는 상황입니다.. 1. intellij에서 바로 자바를 실행해보려 했으나 Gradle project 메뉴가 보이지 않습니다. 2. 프로젝트 다시 클론을 받거나 재빌드를 해도 그대로입니다. 3. src 폴더를 강제로 source root로 설정하면 자바 파일은 실행이 되나 어노테이션이 전부 인식되지 않고, 다음과 같은 에러메세지를 뱉어냅니다. 시도해본 방법은 이정도이고.. github에 올려놓고 mac과 window에서 같이 사용중인데 window에서만 이런 문제를 겪고 있습니다. https://github.com/eprj453/inflearn_spring 위의 repository에 2개의 springboot 프로젝트에서 모두 나타나는 문제입니다. 여러 방면으로 몇시간동안 찾아봤는데 해결되지 않아서 질문 올립니다. 새로 스프링부트 프로젝트를 생성하면 잘 작동하던데.. 다 밀고 다시 만드는 방법밖에는 없을지..ㅜㅜ