묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 케이스 세분화하기 화면이 안나오는 문제
테스트 케이스 세분화하기에서부터 화면이 안나와요검정 화면으로 자막만 나옵니다.다른 질문을 확인했을 때 크롬 하드웨어 가속을 끄면 나온다고 하여 해당 부분을 수정해서 확인하니 강의는 나오지만, 이부분에 대해 저 또한 문제가 발생하고 있음을 말씀 드립니다! 참고로, 맥북 m1 pro 입니다!
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
HtmlEmailService 개발하다 생긴 의문입니다
HTML 인증 메일 전송하기 쪽 개발중에 궁금한게 생겼는데요회원 가입후 링크로 인증쪽 url의 토큰 뒤에 & 가 붙더라구요검색해서 확인해보니 & 의 경우 서버 스크립트에서 처리할 때 & 로 변환한다고 하더라구요 그래서 왜 자꾸 & 로 변환 될까 찾던 찰나에HtmlEmailService의 sendEmail 메서드에서 mimeMessageHelper.setText( String text, boolean html) 의 두번째 인자값이 false로 설정되어 있어 & 값이 생겼었던 것입니다.메일의 context 도 html 소스가 문자열 그대로 나오고 html 형태로 나왔었구요.true 로 설정하니 원만히 해결 되었는데이유가 궁금합니다... setText 메서드를 타고 들어가면 htmlText 를 MimePart로 변환해주는 메서드가 있는데정확히 알고 싶습니다..혹은 해당 메서드를 보고 이와 같은 문제를 맞딱드렸을때 알아내는 방법이나 노하우 같은게 있을까요 ?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
자동키?가 없는 오라클에서 useGeneratedkey 사용하는 방법??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]오라클의 경우는 시퀀스로 증가하는 방법을 사용하는데, useGeneratedkey를 사용할 방법이 있을까요
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
상품(product) 수정시 const 사용이 안되는 이유
안녕하세요멋진 강의 잘 듣고 있습니다. Todo에서 ReadComponent.js 안에서 read 할때 const makeDiv = () => () 와 같이 Arrow Function을 사용해서 간단하게 표현해주셨는데요, 수정할때도 간단하게 사용해보고 싶어서Product의 ModifyComponent.js 에서 아래와 같이 만들어 사용해봤습니다.{makeDiv("name", product.pname, "text", handleChangeProduct)} {makeDiv("description", product.pdesc, "text", handleChangeProduct)} {makeDiv("price", product.price, "number", handleChangeProduct)}const makeDiv = (title, value, type, handleChangeProduct) => ( <div className="flex justify-center"> <div className="relative mb-4 flex w-full flex-wrap items-stretch"> <div className="w-1/5 p-6 text-right font-bold">{title}</div> <input className="w-4/5 p-6 rounded-r border border-solid border-neutral-300 shadow-md" name={title} type={type} value={value} onChange={handleChangeProduct} ></input> </div> </div> );만들어보니까,price(넘버)는 수정이 되는데,pname과 pdesc는 수정이 안되더라구요, readOnly가 먹혀있었습니다.text와 number가 다른걸까요...수정이 안되는 이유가 뭔지 궁금합니다ㅠ 추가로, const makeDiv 는 return 아래에 추가를 해주셨는데,return 위에가 아니라 return 아래에 추가한 이유도 궁금합니다. 확인 부탁드립니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.getreference
Em,getReference 메소드도 find처럼 1차 캐시를 먼저 살펴보는건가요?그래서 있으면 있는 거 반환!, 없으면 프록시 객체 반환인건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
h2 데이터베이스 설정 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.0.jar:3.3.0] at jpabook.jpashop.JpashopApplication.main(JpashopApplication.java:16) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.0.jar:3.3.0]2024-06-12T10:54:03.045+09:00 ERROR 26788 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)2024-06-12T10:54:03.047+09:00 WARN 26788 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)2024-06-12T10:54:03.061+09:00 INFO 26788 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-06-12T10:54:03.086+09:00 INFO 26788 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-06-12T10:54:03.135+09:00 ERROR 26788 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed제가 컴퓨터 재부팅하고 JpashopApplicaton을 실행했을 때 다음과 같이 에러가 떠서 h2 데이터베이스 설정이 안됐나 싶어서 설정하려 했는데 h2에서 다음과 같은 에러가 발생했다고 하네요... 이거 Chat GPT한테 물어보면 application.yml을 다시 설정하라 하는데 뭔가 건드리면 안될 것 같아서 그런데 어떻게 해결하면 좋을지 질문 드리고자 합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql과 1차 캐시
Persist를 실행할 때는 영속성 컨텍스트 1차 캐시에 데이터를 넣지 않는 건가요? 아니면 persist도 1차 캐시에 데이터와 스냅샷 모두 저장하나요?Find를 실행해서 db에서 가져올 때만 가져올 때의 엔티키 상태를 스냅샷을 찍고 엔티티와 함께 1차 캐시에 저장하나요?jpql 실행시에는 1차 캐시를 조회하지 않는 건가요?이 질문의 이유:Find는 1차 캐시에 있는 엔티티를 먼저 조회하는 것으로 알고 있습니다.jpql을 실행할 때 Member 데이터가 없으면 안된다고 설명하고 있습니다그래서 jpql 실행은 1차 캐시를 먼저 찾지 않고 바로 쿼리를 전송하는 것인가? 라는 생각이 들었습니다.jpql이 1차 캐시를 조회하지 않으면 persist 호출 시 1차 캐시에 엔티티를 저장해도 db에서 찾으니까 결국 flush가 발생한다는 생각이 맞아 떨어지는 것 같습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향 연관관계의 필요성, 단방향 연관관계 시 fetch join
[질문 내용]우선 단방향 연관관계를 적용하고 꼭 필요한 경우에 양방향 연관관계를 사용하라는 내용을 적용해보다가 이해가 안되는 부분이 생겨서 질문남깁니다. Team과 Member로 양방향 연관관계를 적용한다고 생각해보면 다른 질문의 답변을 봤을 때 Team을 조회할 때 Member가 거의 같이 조회가 되는 경우와 fetch join으로 조회 시 양방향 연관관계를 사용하여 더 편리하게 조회할 때 사용한다는 답변을 봤습니다. (제대로 이해한 것인지는 모르겠습니다.) 그래서 테스트를 해봤습니다.@Test void 멤버목록과_함께_팀조회() { Team team = new Team("teamA"); entityManager.persist(team); Member member = new Member("m1", 0, team); Member member2 = new Member("m2", 0, team); entityManager.persist(member); entityManager.persist(member2); entityManager.flush(); entityManager.clear(); System.out.println("====테스트 1 양방향 연관관계==="); Team findTeam = teamJpaRepository.findById(team.getId()).get(); List<Member> members = findTeam.getMembers(); for (Member member1 : members) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 2 fetch join 양방향 연관관계 사용=="); Team findTeam2 = teamRepository.findTeamWithMembersById(team.getId()).get(); List<Member> members2 = findTeam2.getMembers(); for (Member member1 : members2) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 3 fetch join 그냥 엔티티 사용=="); Team findTeam3 = teamRepository.findTeamWithMemberById(team.getId()).get(); List<Member> members3 = findTeam3.getMembers(); for (Member member1 : members3) { System.out.println("member1 = " + member1.getUsername()); } } public interface TeamRepository extends JpaRepository<Team, Long> { @Query("select t from Team t join fetch t.members") Optional<Team> findTeamWithMembersById(Long id); @Query("select t from Team t join fetch Member m") Optional<Team> findTeamWithMemberById(Long id); }테스트 1의 경우 두개의 쿼리가 나가는 것을 확인했습니다. selectt1_0.team_id,t1_0.create_by,t1_0.created_date,t1_0.last_modified_by,t1_0.last_modified_date,t1_0.namefromteam t1_0wheret1_0.team_id=? selectm1_0.team_id,m1_0.member_id,m1_0.age,m1_0.create_by,m1_0.created_date,m1_0.last_modified_by,m1_0.last_modified_date,m1_0.usernamefrommember m1_0wherem1_0.team_id=? 테스트 2의 경우 한개의 쿼리만 나가는 것을 확인했습니다.selectt1_0.team_id,t1_0.create_by,t1_0.created_date,t1_0.last_modified_by,t1_0.last_modified_date,m1_0.team_id,m1_0.member_id,m1_0.age,m1_0.create_by,m1_0.created_date,m1_0.last_modified_by,m1_0.last_modified_date,m1_0.username,t1_0.namefromteam t1_0joinmember m1_0on t1_0.team_id=m1_0.team_id 테스트 3의 경우 오류가 났습니다. 위의 테스트 1(getMembers로 접근), 테스트2(fetch join)의 경우 쿼리의 개수로 봤을 때 테스트 2를 사용하는 게 더 좋은 것 같은데 맞을까요?테스트 3은 단방향인 경우 팀과 멤버를 같이 조회를 어떻게 해야되나요?양방향 연관관계가 필요한 경우가 뭔가요?원래 api 설계할 때 team, member를 각각 조회하는 경우만 만들었었는데, team과 member가 같이 조회되는 api를 만드는 경우도 있나요? (team/{id}, member/{id} 와 같은 경우만 만들어봤습니다.)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의를 신규버전에 맞춰 업데이트 한다고 되어있는거 같은데 언제 하실 예정인지 알 수 있을까요??
Spring Boot 3.2 + Spring Cloud 2023.0.0업데이트 예정 (2024-01)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
jpa 활용 1편 코드 이어서 하는거죠?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]jpa 활용 1편에서 라이브 코딩했던 것들을 이어서 하는거 맞죠? 따로 jpa 활용 1편까지 구현한 코드만 올려놓은 소스 파일이 없어서 jpa 활용 1편에서 듣고 코딩했던 것들 이어서 해도되는거 맞는 거죠?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
Service, Repository를 interface로 만들었을때 궁금한게 있습니다.
테스트 코드를 작성할 때 DIP를 이용해서 결합도를 낮추고, 빠르게 테스트를 하는 것을 확인하였습니다.궁금한 점은 interface로 서비스 레파지토리를 선언해서 사용하면,인터페이스 자체가 어떻게보면 다형성을 위해 도면을 구성한다고 생각되는데, FakeImpl을 만들기위해서 너무 많이 다형성을 사용하는게 아닌가 싶은 생각도 들어서요. 초기 프로젝트에는 오버엔지니어링이 되지는 않을까 고민이 됩니다.소스코드 관리하는 점에서 따라가기 쉽지 않은 것을 느꼈습니다. 물론 패키지 구조를 잘 알고 있는 사람이라면 쉽게 접근하겠지만, 그렇지 않은 사람이 코드를 분석했을 때 함수를 클릭해서 접근은 하는 경우가 많더라고요. 이럴 경우에는 패키지 구조를 도식화해서 공유해서 해결하는지, 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.yml, properties 설정 문서
application.yml이나 properties에 적는 설정 정보? 들을어디서 찾아볼 수 있을까요...공식 문서를 찾아보는데 확인이 잘 안 됩니다.logging.level.org.hibernate.SQL = debug 특히 이 부분같은 경우 어디있는지 모르겠어요
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
moveToList() 함수 코드 에러입니다.
button onClick () => moveToList()호출 시 파라미터가 없기 때문에if 절 타지 않고(undefined)else로 빠지는데, 동작이 잘 되는 이유는moveToList() 함수 밖에서 선언한const queryDefault = createSearchParams({ page, size }).toString();덕분에 동작이 잘 되는것입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
제네릭 DTO 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]static class Result<T> {private T data;}위와 같은 Result를 static으로 선언해서 inner class로 여기서는 사용을 하였는데요, 이를 패키지 바깥에 전역적으로 사용할 수 있도록 하나의 클래스로 선언하는 것과 inner class로 사용할 때 어떤 차이가 있을지 궁금합니다.가령, 어떤 Response에서는 count라는 필드가 필요하고, 어떤 Response에서는 message라는 필드가 필요하다고 하면, 전역적으로 Result라는 DTO를 하나의 public 클래스로 만들어둔다면 위 상황을 처리하기 힘들 것 같은데 어떠한 방식이 객체지향적인 방식일까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
TDD질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강의를 듣던중 의문이 생겨 질문드립니다.TDD 빨간불을 보고 (강의 6분 쯤) 초록불을 만드는 과정에서 return 8500을 하셨는데이렇게 초록불을 만드는 게 맞나요?? 오히려 무슨 테스트를 수정해야하는 지 헷갈릴 거 같은데제가 이해한 초록불을 만드는 과정은 변수명, JPA를 사용한다면 N+1 문제 등 아예 신경안쓰고 초록불을 만들고 위 문제들을 수정해 가는 과정으로 생각했는데..
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
jwt 토큰은 api서버에서만 사용하나요?
수업을 듣다가 궁금한 점이 생겨 문의 드립니다. 현재 React를 사용하여 API 서버와 작업할 때는 JWT 토큰을 자주 사용하는데, 타임리프(Thymeleaf)와 같은 서버 사이드 렌더링을 사용할 때도 JWT 토큰을 사용해도 되는지, 혹은 사용하면 안 되는지 궁금합니다!
-
미해결Practical Testing: 실용적인 테스트 가이드
createOrder 변경
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강의를 듣다가 의문점이 생겨 질문드립니다.createOrder의 test를 구현하기 위해 LocalTime을 인자로 받게 변경했는데 결국 test를 위해 비지니스 로직을 수정을 하는 과정이 너무 짜치는데 다른 방법은 없을까요? 강의 뒤쪽에 나오는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IN 쿼리 작동 시점에 바인딩 로직
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@BatchSize 사용시 IN 쿼리 발생 시점에 과정이 궁금해서 질문 남깁니다.Team teamA = new Team(); teamA.setName("teamA"); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamA); em.persist(teamB); User user1 = new User(); user1.setUsername("user1"); user1.setTeam(teamA); em.persist(user1); User user2 = new User(); user2.setUsername("user2"); user2.setTeam(teamA); em.persist(user2); User user3 = new User(); user3.setUsername("user3"); user3.setTeam(teamB); em.persist(user3); em.flush(); em.clear(); List<Team> result = em.createQuery("select t from Team t", Team.class) .getResultList(); System.out.println("=============================="); for (Team team : result) { System.out.println("team.getUsers().size() = " + team.getUsers().size()); }result에서 조회된 team들의 team_id가 IN 쿼리의 파라미터로 바인딩되고 그에 해당하는 user 인스턴스들이 영속성 컨텍스트에 저장되는 것 까지는 알겠습니다.그 이후에 이 user 인스턴스들이 어떻게 team의 users 컬렉션에 매핑되는 것인지가 궁금합니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
"테스트 케이스 세분화하기" 강의 화면이 안나옵니다
다른 강의는 잘 나오는데 테스트 케이스 세분화하기 강의만 화면이 까맣게 나옵니다. 저만 그럴까요?Arc 브라우저에서 수강하다가 크롬 브라우저에서도 확인해봤는데 똑같이 화면이 안나옵니다. UPDATE 1: "테스트 케이스 세분화하기" 부터 화면이 안나오는 것 같네요.UPDATE 2: 크롬에서 하드웨어 가속 기능을 끄니까 정상적으로 화면이 나옵니다. 왜 기능을 꺼야하는건지 이유를 알고 싶긴하네요.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
navigate 사용시 useCallback() 사용 여부가 궁금합니다.
지난 강의에서 LIST, ADD 클릭 할때와 const handleClickList = useCallback(() => { navigate({ pathname: 'list' }); }, []); const handleClickAdd = useCallback(() => { navigate({ pathname: 'add' }); }, []);지금 강의에서 moveToModify 클릭할 때 const moveToModify = () => { navigate({ pathname: `/todo/modify/${tno}`, search: queryStr }); };useCallback() 사용 여부 차이가동적으로 변할 여지가 있는 함수를 새로 호출하는게 맞아서 그런걸까요?(=${tno}의 변경 가능성?)props로 써야할 것과 router로 써야할 것을 구분하라고 하셨습니다. 혹시 이것과 관련된 말씀이셨나요?검색해도 명쾌히 이해가 가지 않습니다!!