묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스크린 샷 문의
안녕하세요 인프런에서 업데이트를 한 것인지 어제까지만 해도 잘 되던 스크린샷 기능이 오늘부터 갑자기 안되네요..ㅜㅜ예전에는 이런 식으로 강의 노트에 스크린샷 기능을 통해서 전체화면 말고 필요한 부분만 캡쳐하고 정리했었는데..혹시 인프런 자체의 일시적인 문제일까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
a 서비스에서 b 서비스를 의존하는 코드에 대한 테스트는 어떻게 해야 되나요??
안녕하세요 강사님, 궁금한게있습니다.인스타그램, 페이스북을 사용할 때 제가 쓴 게시글에 다른 사람이 댓글을 달면 알림이 생성되는데, 제가 작성한 로직에서는 CommentService에서 댓글을 작성하고 alarmService를 호출하여 알림까지 생성하는 로직입니다.이렇게 로직을 짰을 때 제가 생각한 문제점에 대한 해답을 찾고 싶습니다.1. CommentService에서 다른 Service를 의존하게 되는 것2. 댓글 작성이라는 테스트를 짤 때 댓글 작성에 초첨을 맞출 수 없고 알림까지 테스트를 작성해야 되기 떄문에 핵심 기능 외에 다른 부가적인 기능 때문에 테스트의 집중도가 떨어집니다.3. 한 트랙잭션에 묶여서 알림을 생성하는데 문제가 발생하면 댓글도 생성되지 않습니다.이러한 경우 어떤 학습을 통해 개선할 수 있는지 가르쳐주실 수 있나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
EntityManager 주입 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]JpaConfig 안에 있는 EntityManager는 어떻게 주입이 되는 건가요? 제가 대략적으로 생각한 바는 ItemServiceApplication 이 @SpringBootApplication 어노테이션이 붙어있어서 스프링 부트로 작동하게 되고, @Import(JpaConfig.class) 애노테이션을 붙여줌으로써 스프링부트와 JpaConfig가 연동되게 되어서 스프링부트가 JpaConfig에서 쓰이는 EntityManager를 자동으로 주입해주는 것입니다. 제가 생각한 내용이 맞는지 궁금하고요 선생님들의 정확한 설명을 듣고 싶습니다. 감사합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
SpringDataJpaConfig 파일 없이 실행 방법 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]SpringDataJpaConfig 파일 없이 @ComponentScan을 사용해서 프로그램을 실행 해보고 싶습니다. 그래서@SprinBootApplication(scanBasePackages="hello.itemservice") 로 스캔 범위 변경 @Import(SpringDataJpaConfig.class) 주석 처리 @Component이 붙은 파일은 자동 빈 등록이 된다고 알고 있습니다. 추가로 처리 해야 할 부분이 있을까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
동시성 이슈 - 3회 이상 재시도를 자동으로 하게 하는 방법
안녕하세요,동시성 이슈에 대한 이야기를 해주시면서 "등록 시도를 했는데 유니크에서 튕겼다면 누군가 먼저 신규 번호를 선점했다는 뜻이니 3회 이상 재시도를 자동으로 하게 하는 방법으로 풀 수 있다"란 말씀을 해주셨습니다.그래서 아래 예시 코드처럼 DataIntegrityViolationException 을 try-catch로 잡아서 재시도를 하라는 뜻으로 이해했습니다. (하지만 로컬에서 동시성 문제를 발생시키는 방법을 찾지 못해 맞는 코드인지 모르겠습니다.. @Transactional이 있다면 DataIntegrityViolationException 를 잡기 위해서 try-catch 블럭 내부에서 flush()를 호출하기 위해 saveAndFlush() 를 사용한다는 말도 있더라구요?)public ExampleEntity save(ExampleEntity entity) { for (int i = 0; i < 3; i++) { try { // 저장 시도 return repository.save(entity); } catch (DataIntegrityViolationException e) { // 유니크 제약 조건 위배 예외 처리 log.info("저장 실패"); } } throw new RuntimeException("저장에 실패했습니다."); }이러한 방법이 맞다면 더 좋은 방법이 있는지, 혹시 만약 이 방법이 아니라면 어떤 방법으로 해결할 수 있는지 알려주시면 감사하겠습니다. 좋은 강의 항상 감사드립니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
ResultMap은 굳이 사용 안해도 되는것 아닌가요?
마이바티스 강의 섹션 초반에 application.properties에Mybatis.configuration.map-underscore-to-camel-case=true를 해주었기 때문에 컬럼명 변환을 위한 맵은 해주지 않아도 되는것 아닌가요?추가적인 질문으로 영한님 강의의 로드맵중에 jpa를 집중적으로 강의해주시는 로드맵이 있는데 해당 스프링 로드맵만 수강한 상태에서 개인 프로젝트를 진행할 때 jpa의 지식이 부족할 수 있으니(jpa는 내용이 방대하여 많은 공부가 필요하다고 하셔서) 마이 바티스로 프로젝트를 진행후 jpa로드맵 까지 수강 후 jpa로 프로젝트를 하는게 더 좋은가요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
빈을 찾을수 없다는 오류가 뜨는데 둘러봐도 빈이 잘 등록된거 같은데 실행이 안됩니다.
이전 질문을 혼자 해결해보다 jdk를 다시 설치하고 적용하니 버전이 다르다는 오류는 해결이 되었는데 이제Description:Parameter 0 of constructor in hello.itemservice.config.MyBatisConfig required a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' that could not be found.Action:Consider defining a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' in your configuration.오류가 발생합니다 둘러보아도 빈 등록은 정상적인거 같은데 이유를 모르겠습니다. H2데이타베이스도 켜주었습니다.https://drive.google.com/file/d/1vIo1htfB2qY7yLUz-JfRT_LDdzO8bAeU/view?usp=drive_link질문글 파일의 드라이브 링크입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToMany 지연 로딩 관련하여 질문 드립니다.
[질문 내용]안녕하세요! @OneToMany지연로딩 관련해서 질문 드립니다.아래는 Team, Member 엔티티로, 연관관계를 갖습니다. (1:N) team 엔티티// Team.java package hellojpa; import jakarta.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany(mappedBy = "team", fetch = FetchType.LAZY) private List<Member> members = new ArrayList<>(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Member> getMembers() { return members; } public void setMembers(List<Member> members) { this.members = members; } } member.class , 엔티티// Member.java package hellojpa; import jakarta.persistence.*; import javax.xml.namespace.QName; import java.util.Date; @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Team getTeam() { return team; } public void setTeam(Team team) { this.team = team; } } 위의 team ,member에서는 @OneToMany인데, 아래 코드 작동 시, 프록시 객체들이 조회안되고 진짜 엔티티가 조회되어 지연로딩이 발생 안합니다. package hellojpa; import jakarta.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); //code EntityTransaction tx = em.getTransaction(); tx.begin(); try{ //저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member1 = new Member(); Member member2 = new Member(); member1.setUsername("member1"); member1.setTeam(team); member2.setUsername("member2"); member2.setTeam(team); em.persist(member1); em.persist(member2); em.flush(); em.clear(); Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); // 이 부분에서 프록시 객체로 조회가 되지 않습니다.! for (Member m : members) { System.out.println(m.getClass()); // member.class로 콘솔 출력 됩니다.. System.out.println(m.getUsername()); } tx.commit(); } catch (Exception e){ tx.rollback(); } finally { em.close(); } emf.close(); } } 아래는 위의 코드 실행 시 콘솔 창입니다. Hibernate: create sequence Member_SEQ start with 1 increment by 50 Hibernate: create sequence Team_SEQ start with 1 increment by 50 Hibernate: create table Member ( MEMBER_ID bigint not null, TEAM_ID bigint, USERNAME varchar(255), primary key (MEMBER_ID) ) 5월 15, 2024 12:26:48 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1fbf088b] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: create table Team ( TEAM_ID bigint not null, name varchar(255), primary key (TEAM_ID) ) Hibernate: alter table if exists Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team Hibernate: select next value for Team_SEQ Hibernate: select next value for Member_SEQ Hibernate: select next value for Member_SEQ Hibernate: /* insert for hellojpa.Team */insert into Team (name, TEAM_ID) values (?, ?) Hibernate: /* insert for hellojpa.Member */insert into Member (TEAM_ID, USERNAME, MEMBER_ID) values (?, ?, ?) Hibernate: /* insert for hellojpa.Member */insert into Member (TEAM_ID, USERNAME, MEMBER_ID) values (?, ?, ?) ///////////////// ///////////////// ///////////////// Hibernate: select t1_0.TEAM_ID, t1_0.name from Team t1_0 where t1_0.TEAM_ID=? Hibernate: select m1_0.TEAM_ID, m1_0.MEMBER_ID, m1_0.USERNAME from Member m1_0 where m1_0.TEAM_ID=? // 실제 객체 class hellojpa.Member member1 class hellojpa.Member member2 for-each로 member 클래스를 출력했을 때, 프록시 객체로 조회가 되지 않으며, team.getMembers()를 실행할 때 in절로 여러개의 members엔티티를 조회해 오는 것 같습니다.. 제가 강의를 통해 이해한 바로는, @OneToMany는 기본적으로 지연로딩이 걸려 있어, 컬렉션을 조회할 때 각 엔티티들은 '프록시'로 조회되고(지연로딩) , 각 컬렉션의 객체들에 접근할 때 추가적인 (select 문) 조회 쿼리가 발생하여 N+1문제를 낳는다고 알고 있습니다.. -아래는 후반부의 강의 코드 - 강의상 지연이 발생 하는 코드 => OrderItemDto에서 N+1쿼리 발생package jpabook.jpashop.api; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderItem; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.repository.OrderRepository; import jpabook.jpashop.repository.OrderSearch; import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); //Lazy 강제 초기화 order.getDelivery().getAddress(); //Lazy 강제 초기환 List<OrderItem> orderItems = order.getOrderItems(); orderItems.stream().forEach(o -> o.getItem().getName()); //Lazy 강제 } return all; } @GetMapping("/api/v2/orders") public List<OrderDto> ordersV2(){ List<Order> orders = orderRepository.findAllByString(new OrderSearch()); List<OrderDto> collect = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return collect; } @Data static class OrderDto{ private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrdereItemDto> orderItems; public OrderDto(Order o) { orderId = o.getId(); name=o.getMember().getName(); orderDate=o.getOrderDate(); orderStatus=o.getStatus(); address=o.getDelivery().getAddress(); orderItems = o.getOrderItems().stream() .map(orderItem -> new OrdereItemDto(orderItem)) .collect(Collectors.toList()); } } @Getter static class OrdereItemDto{ private String itemName; //상품명 private int orderPrice; //주문 가격 private int count; //주문 수량 public OrdereItemDto(OrderItem orderItem) { itemName=orderItem.getItem().getName(); //문제 상황, 지연로딩 발생 orderPrice=orderItem.getItem().getPrice(); count = orderItem.getCount(); } } } - Order, OrderItems에서도 @OneToMany인데, 지연로딩이 발생하여, orderItems 각각의 필드값을 조회시 N+1쿼리가 나가는 것이 확인되어, 차이점이 무엇인지 알고 싶습니다.@GetMapping("/api/v1/orders") public List<Order> ordersV1() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); // 지연로딩 데이터 가져오기 for (Order order : orders) { order.getMember().getName(); // 지연로딩 초기화 order.getDelivery().getAddress(); // 지연로딩 초기화 // 2. orderItem -> getClass() for(OrderItem o : orderItems) { System.out.println(o.getClass()) //프록시객체 } //3. 여기서는 select 나가서 진짜 엔티티 갖고 오는거 orderItems.stream().forEach(orderItem -> orderItem.getItem().getName()); // 상품명을 가져오기 위해서 지연로딩 강제 초기화 } return orders; }} 추가질문.. @OneToMany를 걸 경우, 기본 전략이 lazyLoading으로 알고 있습니다..이런 상황에서 getEntityList를 할 때, 프록시 객체가 아니라, 왜 한꺼번에 엔티티를 들고오는지 궁굼합니다..!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메소드 질문입니다.
1.빨간색 화살표 옆에 질문올려놨습니다.2. 생성메소드createOrder를 10번 호출하면 order 변수가 담긴 order 1.....10까지 만들어질텐데요. 미리 정의된 setMember,setDelivery로 의해 order테이블, orderitem과 들어가게 되는건가요?//==생성 메서드==//public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) {Order order = new Order();order.setMember(member);order.setDelivery(delivery);for (OrderItem orderItem : orderItems) {order.addOrderItem(orderItem);}order.setStatus(OrderStatus.ORDER);order.setOrderDate(LocalDateTime.now());return order;} 3.setStatus는 기본 메소드이고 setMember가 오버라이딩 메소드인가요?테스트 코드를 보면 연관관계메소드는 호출이 안되고 생성자 메소드가 호출되는데 연관관계메소드가 엔티티 관계를 재정의 해주는걸로 이해해도 되나요?카테고리 클래스 일부 중 //==연관관계 메서드==// public void addChildCategory(Category child) { this.child.add(child); child.setParent(this); } 프로젝트를 보면 연관관계메소드가 호출이 안되어있습니다. 그렇다는건 카테고리가와 item의 필드가 비어져있는데 왜 프로젝트는 오류가 안나는 건가요?
-
미해결PZM기반 실무중심 백엔드 부트캠프(프리트레이닝)
강의 교안은 아직 안올려셨나요.
강의 교안이 아직 안올려셨나요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 타입과 값 타입은 JPA 에 한정해서 구분해놓은 데이터 타입인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]값 타입 비교를 언급하시면서, 클래스를 사용한 임베디드 타입의 경우 참조값이 아닌 값 자체 비교를 위해 재정의된 equals 메서드를 사용한다고 말씀해주셨습니다. 제가 헷갈리는 부분은, 자바 언어에서 타입을 비교할 때 "기본형(통상 값) 타입", "참조형 타입" 이라는 워딩을 사용하기 때문입니다. 그래서 참조형 타입인 임베디드 클래스가 JPA 에서 값 타입으로 설명되는게.. 어떤 이유인지 생각해보니 JPA 에 한정해서 데이터 타입을 엔티티 타입, 값 타입으로 나누기 때문이지 않을까 라고 생각했습니다. 따라서 임베디드 타입의 경우 자바 언어 관점에서 보았을때는 참조형 타입이고, JPA 의 관점에서 보았을 때는 엔티티 타입이 아니므로 값 타입으로 보면 된다고 이해했는데 맞는지 궁금합니다! 시원하게 정리가 안되네요..
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버 실행 실패
:: Spring Boot :: (v2.7.6)2024-05-14 22:36:58.248 INFO 26124 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 17.0.10 on chaenisnotebook with PID 26124 (C:\Users\chaye\Desktop\library-app\library-app\build\classes\java\main started by chaye in C:\Users\chaye\Desktop\library-app)2024-05-14 22:36:58.248 INFO 26124 --- [ main] c.g.libraryapp.LibraryAppApplication : No active profile set, falling back to 1 default profile: "default"2024-05-14 22:36:58.844 INFO 26124 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.2024-05-14 22:36:58.928 INFO 26124 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 72 ms. Found 1 JPA repository interfaces.2024-05-14 22:36:59.414 INFO 26124 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2024-05-14 22:36:59.422 INFO 26124 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2024-05-14 22:36:59.422 INFO 26124 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.69]2024-05-14 22:36:59.509 INFO 26124 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2024-05-14 22:36:59.509 INFO 26124 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1231 ms2024-05-14 22:36:59.627 INFO 26124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...2024-05-14 22:36:59.864 INFO 26124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.2024-05-14 22:36:59.907 INFO 26124 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]2024-05-14 22:36:59.978 INFO 26124 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.14.Final2024-05-14 22:37:00.160 INFO 26124 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}2024-05-14 22:37:00.248 INFO 26124 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect2024-05-14 22:37:00.694 INFO 26124 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]2024-05-14 22:37:00.701 INFO 26124 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'2024-05-14 22:37:00.967 WARN 26124 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceV1' defined in file [C:\Users\chaye\Desktop\library-app\library-app\build\classes\java\main\com\group\libraryapp\service\user\UserServiceV1.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.group.libraryapp.repository.user.UserJdbcRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}2024-05-14 22:37:00.967 INFO 26124 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2024-05-14 22:37:00.970 INFO 26124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2024-05-14 22:37:00.976 INFO 26124 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.2024-05-14 22:37:00.977 INFO 26124 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-05-14 22:37:00.988 INFO 26124 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2024-05-14 22:37:01.006 ERROR 26124 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START***************************Description:Parameter 0 of constructor in com.group.libraryapp.service.user.UserServiceV1 required a bean of type 'com.group.libraryapp.repository.user.UserJdbcRepository' that could not be found.Action:Consider defining a bean of type 'com.group.libraryapp.repository.user.UserJdbcRepository' in your configuration.Process finished with exit code 1 계속 서버 실행 실패가 떠서 userConfiguration 클래스를 삭제 했는데도 해결이 안 됩니다 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의교안과 영상 코드 차이 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]아무래도 영상 촬영 시점도 차이가 있겠지만,강의영상에서 쓴 코드와pdf 코드 중 어떤 코드로 최종 작성해야하는지 문의드려요!예를 들어 ItemService.java에서findItem으로 썼는데,pdf에서는 Item으로 했더라구요. 둘 다 같이 보면서 공부해나가고 있는데두개가 다른 특별한 이유가 있는지,그러면 pdf와 강의 코드 중 어떤 걸로공부하고 작성하는 게 좋을지 문의드립니다!감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[긴급] 프로그램 진행이 중단된 상황입니다ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]JPA 1편 완강한 상황입니다.다음 2가지 문제가 있어서 프로젝트 진행이 안 되는 상황입니다.어떻게 해결하면 좋을지 문의드립니다!!!!!'구글 드라이브 링크' 삭제합니다!(답변 감사합니다!!)1. '회원 목록'을 눌렀을 때 다음 에러가 나옵니다.This application has no explicit mapping for /error, so you are seeing this as a fallback.There was an unexpected error (type=Internal Server Error, status=500).org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member'org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member' Caused by: java.lang.IllegalArgumentException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member' Caused by: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member' '상품 주문'을 눌렀을 때 다음 에러가 나옵니다.This application has no explicit mapping for /error, so you are seeing this as a fallback.There was an unexpected error (type=Internal Server Error, status=500).org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member'org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member' Caused by: java.lang.IllegalArgumentException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member' Caused by: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'member'
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
sql 단축키
안녕하세요. sql에서 위와 같이 깔끔하게 정렬할 수 있게 도와주는 단축키가 뭐였나요?답변 미리 감사합니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
프론트엔드와 백엔드의 과정
안녕하세요!! 제가 아직 개발에 대한 개념이 부족한지라..계속 프론트엔드와 백엔드가 어떻게 연동되는 지와 동작과정이 너무 궁금해서 이렇게 질문드립니다. 만약 프론트엔드 개발자와 백엔드 개발자가 따로 있다고 생각해보겠습니다!!저희의 library-app을 예시로 들면 프론트엔드 개발자가 React를 이용해 JS파일을 만들고 그거를 build해서 JS앱으로 만든 것을백엔드 개발자에게 전달해서 스프링부트 안에 집어 넣은거라고 이해하고 있습니다.그리고 당연히 CSR 방식이니까 처음 클라이언트가 페이지를 요청했을 때 서버는 빈 뼈대인 HTML에 JS에 접근할 수 있는 링크만을 포함해서 브라우저에 전달하고 브라우저는 다시 서버에 JS링크를 이용해 JS파일을 가져와서 그때부터 동적으로 UI를 만들어 클라이언트에 보여주는 것으로 알고있습니다. 여기서 1) JS링크라는 것이 아까 프론트엔드 개발자가 백엔드 개발자에게 전달한 JS파일에 접근하는 링크인 것 같은데 맞을까요?2) 제가 위에 설명한 과정이 전반적으로 맞을까요? 아 그리고 HTML이나 CSS같은 파일들도 React를 이용해 만드는 건가요?? 그리고 제가 조금 찾다보니 nginx같은 웹 서버가 따로 있더라고요.. 웹 서버가 정적인 파일 (HTML, CSS, JS)을 클라이언트에 전달하는 역할이라고 알고있습니다. 물론 WAS에서도 정적인 파일도 전달할 수 있지만 웹서버와 WAS로 나누는 게 더 낫다고 하더라고요.3) 그럼 저희의 library-app은 nginx나 apache같은 웹 서버를 이용하지 않고 WAS에서 바로 화면을 클라이언트에 전달하는 건가요??뭔가 강의랑 동 떨어진 질문같긴한데..ㅜ그래도 답변 부탁드리겠습니다...!!
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
컴퓨터 재시작 하니까 실행이 안됩니다..
https://drive.google.com/file/d/1BB9SitCiSG3ZyZ9G-U15W5IyIKKtjBeH/view?usp=drive_linkjava.lang.IllegalArgumentException: Unable to instantiate org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitializationDetector [org.mybatis.spring.boot.autoconfigure.MybatisDependsOnDatabaseInitializationDetector]Caused by: java.lang.UnsupportedClassVersionError: org/mybatis/spring/boot/autoconfigure/MybatisDependsOnDatabaseInitializationDetector has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 59.0버전을 변경한적이 없는데 버전 업그레이드 하라는거 같습니다. 어떻게 해야 하나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Mybatis forEach로 쓰는것과 Service에서 for문으로 Mapper 호출 중에 고민입니다
최근 회사에서 Mybatis로 개발중 고민이 생겨서 문의 드립니다. Mybatis로 forEach 사용하여 List를 Insert, Update 할때는에러나면 몇번째 index에서 에러 났는지 알수없음으로Service 단에서 List 길이 만큼 for문 돌려서 Mapper를 쓰잔 의견을 받았습니다Service 단에서 for문으로 돌리면 log도 찍을수 있고, 어떤 index에서 에러났는지도확인 할 수 있단 장점이 있다고 들었습니다Mybatis에서 forEach 쓰는것과, Service에서 for문 돌려서 Mapper 호출 계속 하는것중에 뭐가 맞는건지 알 수 있을까요? 주니어 개발자인데 회사에 Spring 사용하는 시니어 개발자분이 없어서 문의드립니다..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 지금 개발하시는 jpa는 스프링 jpa가 아닌 순수 jpa로 개발하시는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
contoller단 질문입니다.
첫번째코드는 jpa1탄 이고, 두번째코드는 jpa2탄 입니다. 2개 다 contoller단인데 1탄은 html에서만 동작하고 2탄은 postman에 같은곳에서 동작하는건가요? 근데jpa2탄 api만 놔두어도 정상작동은 되는데 원래 이런건가요? @PostMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); Long id = memberService.join(member); return new CreateMemberResponse(id); }@PostMapping("/members/new") public String create(@Valid MemberForm form, BindingResult result) { if (result.hasErrors()) { return "members/createMemberForm"; } Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode()); Member member = new Member(); member.setName(form.getName()); member.setAddress(address); memberService.join(member); return "redirect:/"; }