묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
에러가 해결이 안돼요ㅜ
에러 : Parameter 0 of constructor in com.group.libraryapp.service.user.UserServiceV1 required a bean of type 'com.group.repository.user.UserJdbcRepository' that could not be found. 구글링해보니까 service, repository 등의 annotation이 빠져서 그렇다고 하는데 다 들어가있습니다ㅜ계속 문제가 해결안돼서 참고하라고 주신 코드로도 변경해봤는데 계속 동일한 문제가 뜨네요.. package com.group.libraryapp.service.user; import com.group.libraryapp.dto.user.request.UserCreateRequest; import com.group.libraryapp.dto.user.response.UserResponse; import com.group.libraryapp.dto.user.request.UserUpdatRequest; import com.group.repository.user.UserJdbcRepository; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceV1 { private final UserJdbcRepository userJdbcRepository; public UserServiceV1(UserJdbcRepository userJdbcRepository) { this.userJdbcRepository = userJdbcRepository; } public void saveUser(UserCreateRequest request) { userJdbcRepository.saveUser(request.getName(), request.getAge()); } public List<UserResponse> getUsers() { return userJdbcRepository.getUsers(); } public void updateUser(UserUpdatRequest request) { if (userJdbcRepository.isUserNotExist(request.getId())) { throw new IllegalArgumentException(); } userJdbcRepository.updateUserName(request.getName(), request.getId()); } public void deleteUser(String name) { if (userJdbcRepository.isUserNotExist(name)) { throw new IllegalArgumentException(); } userJdbcRepository.deleteUser(name); } } package com.group.repository.user; import com.group.libraryapp.dto.user.response.UserResponse; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.util.List; @Repository public class UserJdbcRepository { private final JdbcTemplate jdbcTemplate; public UserJdbcRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public boolean isUserNotExist(long id) { String readSql = "SELECT * FROM user WHERE id = ?"; return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty(); } public void updateUserName(String name, long id) { String sql = "UPDATE user SET name = ? WHERE id = ?"; jdbcTemplate.update(sql, name, id); } public boolean isUserNotExist(String name) { String readSql = "SELECT * FROM user WHERE name = ?"; return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty(); } public void deleteUser(String name) { String sql = "DELETE FROM user WHERE name = ?"; jdbcTemplate.update(sql, name); } public void saveUser(String name, Integer age) { String sql = "INSERT INTO user (name, age) VALUES (?, ?)"; jdbcTemplate.update(sql, name, age); } public List<UserResponse> getUsers() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, (rs, rowNum) -> { long id = rs.getLong("id"); String name = rs.getString("name"); int age = rs.getInt("age"); return new UserResponse(id, name, age); }); } }package com.group.libraryapp.controller.user; import com.group.libraryapp.dto.user.request.UserCreateRequest; import com.group.libraryapp.dto.user.request.UserUpdatRequest; import com.group.libraryapp.dto.user.response.UserResponse; import com.group.libraryapp.service.user.UserServiceV2; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController //스프링 빈이 됨. 즉 jdbc에 의존하게됨 public class UserController { private final UserServiceV2 userService ; //@Quailifier("main")가 primary보다 더 앞선다. public UserController(UserServiceV2 userService){ this.userService = userService; } @PostMapping("/user") public void saveUser(@RequestBody UserCreateRequest request){ userService.saveUser(request); } @GetMapping("/user") public List<UserResponse> getUsers(){ return userService.getUsers(); } @PutMapping("/user") public void updateUser(@RequestBody UserUpdatRequest request){ userService.updateUser(request); } @DeleteMapping("/user") public void deleteUser(@RequestParam String name) { //query를 직접 사용해서 포스트맨으로 찾음 그래서 requestbody가 아니라 param을 씀userService.deleteUser(name); userService.deleteUser(name ); } }
-
해결됨Practical Testing: 실용적인 테스트 가이드
반환 타입이 void인 메서드에 대한 질문이 있습니다.
안녕하세요 강의 잘 듣고 있습니다! 위 사진처럼 Service 레이어에서 반환 타입이 void인 메서드의 경우, assertJ로 검증하는 방법이 있나요? 해당 메서드에서 create 작업을 수행하지만 굳이 생성된 객체를 응답할 이유가 없어서요!예전에 임시로 반환 타입을 바꿔서 생성된 객체를 검증하는 식으로 테스트를 작성하면 된다는 얘기를 들었는데, 결국 void로 되돌리게 되면 테스트가 실패하니까 테스트를 주석 처리할 수 밖에 없었거든요...이렇게 하게 되면 테스트 코드를 작성하는 의미도 좀 퇴색되는 것 같아서 고민이 됩니다!일단은 급한대로 then은 비워두었습니다만 이렇게 하는 게 좋은 방법일까요?
-
해결됨실전! Querydsl
테스트에서 QHello 클래스를 임포트 하여 사용할 수 없습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 자료에 있는 대로 build.gradle을 작성하고 q 파일까지 생성이 되었습니다 그런데 main 폴더 아래 클래스에서는 QHello를 잘 사용할 수 있지만 테스트 클래스인 QuerydslApplicationTests에서는 사용할 수가 없습니다. 구글 드라이브에 파일을 압축해서 올렸습니다. 혹시 한번 봐주실 수 있나요? 아래는 구글 드라이브 링크입니다https://drive.google.com/file/d/1e5goKq_r3g5SeaWa2xHAmBJ_7tmmIxt_/view?usp=sharing
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
ProjectSkill은 데이터가 안들어가고 있습니다.
안녕하세요. 데이터베이스 초기화에서 질문 남깁니다.현재 Project 엔티티에서 ProjectSkill 간의 참조가 아래와 같습니다.@OneToMany(mappedBy = "project") var skills: MutableList<ProjectSkill> = mutableListOf()위 관계는 project_skill 테이블이 연관관계의 주인이 되고, Project 엔티티는 그저 거울(mappedBy 속성에 의해)이 되는 걸로 알고 있습니다.위 상태에서는 project.skills.addAll() 로 값을 넣어줘도 project_skill 테이블에 데이터가 들어가지 않고 projectSkill을 직접 save해줘야 insert 쿼리가 날아가는 것으로 알고 있습니다.그러나 DataInitializer에서는 project.skills.addAll()로 넣어주고 있습니다. 그래서 실제로 데이터베이스를 확인해보면 project_skill 테이블에는 값이 들어가지 않고 있는 걸 확인할 수 있습니다. 다른 테이블에는 의도한대로 데이터베이스 들어가는 반면에 말입니다.혹시 제가 잘못 알고 있는 거라면 바로잡아주시길 바랍니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Order에서 orderProducts 테스트하는 방법이 궁금합니다.
package sample.cafekiosk.domain.order; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.ActiveProfiles; import sample.cafekiosk.domain.product.Product; import sample.cafekiosk.domain.product.ProductRepository; import sample.cafekiosk.domain.product.ProductSellingStatus; import sample.cafekiosk.domain.product.ProductType; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import static org.assertj.core.groups.Tuple.tuple; import static sample.cafekiosk.domain.product.ProductSellingStatus.*; import static sample.cafekiosk.domain.product.ProductType.HANDMADE; @ActiveProfiles("test") @DataJpaTest class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @Autowired private ProductRepository productRepository; @DisplayName("원하는 날짜와 주문 상태로 주문들을 가져온다.") @Test void findOrdersBy() { //given LocalDateTime registeredDateTime1 = LocalDateTime.of(2024, 3, 2, 12, 0); LocalDateTime registeredDateTime2 = LocalDateTime.of(2024, 3, 9, 12, 0); Product product1 = createProduct(SELLING, HANDMADE, "아메리카노", 4000, "001"); Product product2 = createProduct(HOLD, HANDMADE, "카페라떼", 4500, "002"); Product product3 = createProduct(STOP_SELLING, HANDMADE, "팥빙수", 7000, "003"); List<Product> products = List.of(product1, product2, product3); productRepository.saveAll(products); Order order1 = createOrder(registeredDateTime1, products); Order order2 = createOrder(registeredDateTime2, products); List<Order> orders = List.of(order1, order2); orderRepository.saveAll(orders); //when LocalDate findDate = LocalDate.of(2024, 3, 2); List<Order> findOrders = orderRepository.findOrdersBy(findDate.atStartOfDay(), findDate.atStartOfDay().plusDays(1), OrderStatus.PAYMENT_COMPLETED); //then Assertions.assertThat(findOrders).hasSize(1) .extracting("registeredDateTime", "orderProducts", "orderStatus") .containsExactlyInAnyOrder( tuple(registeredDateTime1, products, OrderStatus.PAYMENT_COMPLETED) ); } private Order createOrder(LocalDateTime registeredDateTime1, List<Product> products) { return Order.builder() .orderStatus(OrderStatus.PAYMENT_COMPLETED) .registeredDateTime(registeredDateTime1) .products(products) .build(); } private Product createProduct(ProductSellingStatus sellingStatus, ProductType type, String name, int price, String productNumber) { return Product.builder() .productNumber(productNumber) .type(type) .sellingStatus(sellingStatus) .name(name) .price(price) .build(); } }안녕하세요. 우빈님OrderRepository의 findOrdersBy() 테스트는 직접 작성하라고 하셔서 테스트를 작성하다가 궁금한 점이 생겨 질문 남깁니다. 첫 번째는 Order의 orderProducts를 테스트할 때, products가 프록시 객체로 넘어와서 테스트하지 못하는 거 같습니다.현재 코드는 테스트가 실패하는 코드고, extracting에서 "orderProducts"를 제외하면 성공하는 테스트가 됩니다.이럴 때는 어떻게 해결해야 할지 궁금합니다. 두 번째 질문은 제가 작성한 테스트 코드 구조에서 개선할 사항이 있는지 궁금합니다. 강의 잘 보고 있습니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
EntityManager의 쿼리 순서 보장
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. JPA의 영속성 컨텍스트의 쿼리 순서 보장에 대해 궁금한 점이 있어 연락드렸습니다.@Transactional public void deleteUser(Long userId) { seniorRepository.findByUserId(userId).stream() .forEach(seniorService::deleteSenior); User user = findUserById(userId); userRepository.delete(user); } senior 객체가 user객체를 외래키로 가지는 상태입니다.user 객체를 삭제하고, senior 객체는 삭제하지 않기 위해서 위와 같은 코드를 작성하였습니다. deleteSenior 메서드에서는 senior의 User 참조 값을 null로 바꾸어 주는 역할을 수행합니다.그리고 같은 트랜잭션 내에서 user까지 삭제하는 코드입니다. 위 코드에서 senior의 User 참조 값을 null로 변경하는 update 로직과, user를 삭제하는 delete 로직이 트랜잭션이 종료된 시점에 한번에 쿼리로 생성되어 데이터베이스로 날아가는것이 맞는지 궁금합니다. 만약 그렇다면, 두 쿼리의 순서를 보장할 수 있는지 궁금합니다.엔티티 매니저는 key-value 형태로 정보를 저장한다고 하여 순서가 보장되지 않을 것 같은데, 순서가 보장된다면 어떤 것에 의해서 순서가 보장되는지도 알려주시면 감사하겠습니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
부트스트랩, css
프로젝트를 받아서 실행시켜보니 이런 메시지가 뜨면서 css가 적용되지 않은것을 확인 했습니다. 해결해 보기 위해서 링크도 추가해보고 했지만 여전히 바뀌지가 않네요 이럴경우는 어떻게 해야할까요..?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품주문() 테스트에서 주문가격이 에러가 뜨는데, 어딜 봐야할 지 모르겠어요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]OrderServiceTest의 상품주문() 테스트에서 아래의 테스트가 에러가 뜨는데요.assertEquals(10000 * orderCount, getOrder.getTotalPrice(), "주문 가격은 가격 * 수량이다.");Expected :20000Actual :0 실제 20000이 아닌 0으로 반환되는데, 어디를 봐야할까요?Order클래스의 getTotalPrice()메소드에서orderItem.getOrderPrice()는 10000을 잘 반환하는데요totalPrice는 0으로 자꾸 반환하네요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 readonly 거는 이유
@Slf4j static class BasicService { @Transactional public void tx1() { } @Transactional(readOnly = true) public void tx2() { } }만약에 이렇게 코드를 만드는데 tx2에서 트랜잭션을 readonly를 언제 보통 거는걸까요?tx2에 메소드에서 어차피 @Transactional(readOnly) 를 거나 안거나 성능은 별차이가 없는걸까요?두번째는 어차피 수정 삭제도아니고 조회인데 굳이 트랜잭션을@Transactional(readOnly = true) 거는 이유는 어떤경우가 있나요? 조회를 할때도 트랜잭션이 필요할때가 있어요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 질문있습니다.
앨범 클래스 파일에는 아래와 같은 에러가 나옵니다.(3번째 사진)Persistent entity 'Album' should have primary key코드입니다.package jpabook.jpashop.domains.Item; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; //import javax.persistence.*; @Entity @DiscriminatorValue("A") @Getter @Setter public class Album { private String artist; private String etc; }OrderItem 클래스 파일에는 아래와 같은 에러가 나옵니다.(2번째 사진)'Many To One' attribute type should not be 'Item'코드입니다.package jpabook.jpashop.domains; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.Entity; import jpabook.jpashop.domains.Item.Item; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import jakarta.persistence.*; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class OrderItem { @Id @GeneratedValue @Column(name = "order_item_id") private Long id; // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "item_id") private Item item; @JsonIgnore // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "order_id") private Order order; // private int orderPrice; //주문 가격 // private int count; //주문 수량 }카테고리 클래스 파일에는 아래와 같은 에러가 나옵니다.(1번째 사진)'Many To Many' attribute value type should not be 'Item'코드입니다.package jpabook.jpashop.domains; import jakarta.persistence.*; import jpabook.jpashop.domains.Item.Item; import lombok.Getter; import lombok.Setter; //import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "category_id") private Long id; private String name; @ManyToMany @JoinTable(name = "category_item", joinColumns = @JoinColumn(name = "category_id"), inverseJoinColumns = @JoinColumn(name = "item_id")) private List<Item> items = new ArrayList<>(); // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); // //==연관관계 메서드==// // public void addChildCategory(Category child) { // this.child.add(child); // child.setParent(this); // } } 강의를 여러번 들어도 틀린부분은 없는데 에러가 나오는게 이해가 되지 않아 코드 올립니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 프록시 컨테이너 호출 관계
이 그림에서요 basicService 프록시가 컨테이너에 빈으로 등록되어서 테스트 코드 클래스로 주입된다고하셨는데, 그러면 뒤에 실제 객체는 컨테이너에 빈으로 등록이 실제로 안되어있는건가요?아니면 되어있는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카를 통해 다른 서비스의 데이터를 수정하는 과정에서 예외가 발생했을 경우처리하는 방법이 궁금합니다.
두개의 Service가 통신할 때 예외처리 시나리오A, B 서비스가 있을 때 A 서비스에서 B 서비스로 데이터를 수정 또는 생성하는 요청을 했는데 이 때 개발자가 의도해서 예외를 발생시켰던 예상치못한 예외가 발생했던 간에 예외가 발생해서 B서비스의 데이터를 수정하지 못하는 경우라면 A서비스는 어떻게 롤백시켜주나요? 1번 시나리오에서 하나의 서비스가 추가되어 3개의 Service가 통신할 때 예외처리 시나리오A서비스에서 B 서비스를 수정 or 생성 하고 C서비스를 수정 or 생성하는 시나리오일 경우 만약에 B서비스에 요청을 했을 때는 성공을하고 C서비스에 요청을 했을 때 실패를 했다면 A서비스로 롤백시켜줘야하고 B서비스도 롤백을 시켜주어야할텐데 이 경우에는 어떻게 롤백처리를 해주나요??구글해보니 그냥 추상적으로 오케스트레이션 Saga패턴? 그런걸로 처리한다는데 막연하게 글로만 설명있고 어떤 소프트웨어를 설치해서 코드를 짜면된다 이런건 없어서 어떻게 처리되어야하는건지 감을 못잡겠네요ㅠㅠ. Axon 서버 뭐 이런것도 본거 같기도 하고요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest실행중 에러가 났습니다
프로젝트 입니다https://drive.google.com/file/d/1v6JLNNmmTBQuH3zuJU1CXzh18yvC3xwG/view?usp=drive_link에러는 다음과 같습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2데이터 베이스에 데이터가 사라져요
===[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Member를 생성할 때까진 잘 되다가 조회하는 단계에서System.out.println 출력문은 안뜨는 이유가 무엇일까요? h2 데이터베이스에 가보면 저장했던 member가 사라져있습니다. 영속성이 사라진 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드타입과 @MappedSuperclass의 차이
둘 다 상속관계 매핑과 관련 없고 속성만 상속받기 위해 사용되는 것 같은데 어떤 차이가 있는지 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
isEmpty(), NPE
private void validateDuplicateMember(Member member) { //중복 회원 검증 List<Member> findMembers = memberRepository.findByName(member.getName()); if(!findMembers.isEmpty()){ throw new IllegalStateException("이미 존재하는 회원입니다."); } }중복 회원 검증 메서드에서 위의 코드는 test 돌릴 때 제대로 작동하는데 아래 코드처럼 if문의 조건을 바꾸면 test가 fail합니다..!리스트가 null일 경우 isEmpty() 호출 시 NPE가 발생하기 때문에 가급적 null인지 여부도 함께 확인하라는 글을 본적이 있어서 아래처럼 작성한 것인데, 왜 에러가 나는 건지 궁금합니다!private void validateDuplicateMember(Member member) { //중복 회원 검증 List<Member> findMembers = memberRepository.findByName(member.getName()); if(!findMembers.isEmpty() || findMembers!=null){ throw new IllegalStateException("이미 존재하는 회원입니다."); } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 숫자 연산 함수 관련해서 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. COUNT(*) 함수를 사용해서 Member의 수를 카운트 하는 테스트를 했는데, 반환 타입을 Integer로 넣어서 Integer가 나올 것으로 기대했으나 IillegalArugumentException이 발생했습니다. 문제는 아래 쿼리에서 컴파일 오류가 발생하지 않았다는 점인데, 실제로 실무에서는 SELECT절 함수를 통한 값을 얻어 올 때 어떻게 사용하는지 궁금합니다.예를 들어 타입드 쿼리 대신 Query를 사용해 Object를 받아 인티저 타입으로 캐스팅한다던지, 함수가 반환하는 명확한 타입을 모두 알고 사용해야 하는 것인지, 또는 위 문제를 해결 할 수 있는 다른 방법이 있는지 알려주실 수 있나요 ? TypedQuery<Integer> query1 = em.createQuery("SELECT count(m) from Member m", Integer.class);
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
질문있습니다.
강사님 안녕하세요.혹시 개인적인 질문이 있는데 메일 주소 하나 알 수 있을까요 ? 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
매핑 어노테이션에 대한 궁금증
복습 중 매핑 어노테이션들에 대한 궁금증이 생겼습니다. 1. 해당 매핑 어노테이션들이 강의의 예제처럼 ddl-auto에서 create 옵션을 주는 상황처럼, JPA에서 자체적으로 테이블을 생성하는 경우에 적용되는것인가.2. 혹은 해당 어노테이션들이 사용자가 따로 DB에서 테이블을 미리 생성해둔 경우에 객체와 관계형 데이터페이스를 매핑하기 위한 용도로 사용되는 것인가.혹은 매핑 어노테이션 1, 2번 모두에 해당되는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
45강 dev 연결 에러
java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev 2024-03-06 06:57:53.124 ERROR 3375 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar!/:8.0.31]2024-03-06 06:34:35.506 WARN 24251 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadatacom.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.2024-03-06 06:57:53.140 ERROR 3375 --- [ main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]2024-03-06 06:57:53.140 WARN 3375 --- [ main] 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]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]2024-03-06 06:57:53.152 INFO 3375 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-03-06 06:57:53.185 INFO 3375 --- [ main] ConditionEvaluationReportLoggingListener :Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2024-03-06 06:57:53.233 ERROR 3375 --- [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 제 컴퓨터 mysql로 연결되어서 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 이런 에러가 나온 것 같은데 AWS에서 빌린 컴퓨터에서 mysql연결하려면 어떻게 해야하나요? 아니면 제 컴퓨터 mysql로 연결하고 진행하나요?