묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IO Exception: "/Users/eulyoungjung/test.mv.db" [90028-224] 90028/90028 (Help)
test.mv.db 를 직접 생성 하여 했는데도 연결이 되지 않습니다 ... 빠른답변 부탁드려요 !!
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
GET API까지는 잘 하다가 인텔리제이 껐다가 다시 키고 POST API 수업따라 코드 작성 후 서버 실행하니 라는 오류가 발생합니다...
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
"%" + itemName + "%"가 @Param에서 읽히지가 않아요
@Override public List<Item> findAll(ItemSearchCond cond) { String itemName = cond.getItemName(); Integer maxPrice = cond.getMaxPrice(); if (StringUtils.hasText(itemName) && maxPrice != null) { //return repository.findByItemNameLikeAndPriceLessThanEqual("%" + itemName + "%", maxPrice); return repository.findItems(itemName , maxPrice); } else if (StringUtils.hasText(itemName)) { return repository.findByItemNameLike("%" + itemName+"%"); } else if (maxPrice != null) { return repository.findByPriceLessThanEqual(maxPrice); } else { return repository.findAll(); } }JpaItemRepositoryV2에서 이름이랑 가격이 모두 있을 때 return repository.findItems(itemName, maxPrice); 이 코드를return repository.findItems("%" + itemName + "%", maxPrice);로 변경하면@Query("select i from Item i where i.itemName like :itemName and i.price <= :price ") List<Item> findItems(@Param("itemName") String itemName, @Param("price")Integer price);여기 코드에서 @Param("itemName")이 itemName을 %itemName%으로 받아서 그런지 org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.; nested exception is java.lang.IllegalStateException: For queries with named 이런 오류가 뜹니다어떻게 해결할 수 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@MapsId 에서 cascade가 기본옵션인가요?
@Entity @Getter @Setter public class Board { @Id @GeneratedValue private Long id; private String title; @OneToOne(mappedBy = "board") private BoardDetail boardDetail; } @Entity @Getter @Setter public class BoardDetail { @Id private Long boardId; @MapsId // BoardDetail.boardId와 매핑 @OneToOne @JoinColumn(name = "board_id") public Board board; private String content; } public class OneToOne { private EntityManager em; private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("non"); @BeforeEach void setUp(){ em = emf.createEntityManager(); } @AfterAll static void finish(){ emf.close(); } @DisplayName("1:1 식별 매핑일 경우 ") @Test void t1(){ EntityTransaction tx = em.getTransaction(); tx.begin(); Board board = new Board(); board.setTitle("T1 4번째 월즈 우승"); BoardDetail boardDetail = new BoardDetail(); boardDetail.setContent("상혁아 축하해"); boardDetail.setBoard(board); em.persist(boardDetail); tx.commit(); } }여기서 제가 부모 테이블인 board를 저장하지 않고 바로 boardDetail만 저장했습니다.cascade옵션을 주지 않았는데도 부모 테이블에 갱신이 되더라구요Hibernate: call next value for hibernate_sequence Hibernate: /* insert non.Board */ insert into Board (title, id) values (?, ?) Hibernate: /* insert non.BoardDetail */ insert into BoardDetail (content, board_id) values (?, ?)공식 문서에서도 Person 저장하고 PersonDetail을 저장하던데이렇게 해도 동작하는 이유가 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@EmbeddedId 복합키 질문이 있습니다
강사님 안녕하세요 !!@Entity @Getter @Setter public class EmParent { @Id private String id; private String name; } @Entity @Getter @Setter public class EmChild { @EmbeddedId private EmChildId id; @MapsId("parentId") @ManyToOne @JoinColumn(name = "parent_id",foreignKey = @ForeignKey(name = "parent_fk")) public EmParent parent; private String name; @EqualsAndHashCode @Getter @Setter @Embeddable public static class EmChildId implements Serializable { private String parentId;//@MapsId("parentId")와 매핑 @Column(name = "child_id") private String id;//Child.childId 매핑 } }테스트코드 EmParent emParent = new EmParent(); emParent.setName("내장 할아버지"); emParent.setId("A001"); em.persist(emParent); //복합키 만들기 EmChild.EmChildId id = new EmChild.EmChildId(); id.setId("F001"); id.setId("fake data"); //자식 엔티티 생성 EmChild emChild = new EmChild(); //자식 엔티티에 복합키 주입하기 emChild.setId(id); //아래 정보를 넣지 않으면 예외가 발생 emChild.setParent(emParent); emChild.setName("내장 아버지"); em.persist(emChild);식별 관계에서 @EmbeddedId를 사용할 때자식 엔티티에 Id 객체인 EmChildId 를 넣어줄 때EmChildId 클래스의@Column(name = "child_id") private String id;//Child.childId 매핑만 참조를 하고 부모의 pk를 참조하는 private String parentId;에는 어떤 값이 들어가도의미가 없더라구요@MapsId("parentId") @ManyToOne @JoinColumn(name = "parent_id",foreignKey = @ForeignKey(name = "parent_fk")) public EmParent parent여기에 값을 넣어줘야 EmChild 엔티티가 정상 동작합니다. 제가 실수한 부분있는 걸까요 ?아니면 식별관계일 때 @EmbeddedId는 읽어올때만 상관이 있고 저장할 때에는 상관이 없는 객체인가요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
서비스단 Transactional에 대해 질문 드립니다
안녕하세요!서비스 클래스 상단에 @Transactional(readOnly = true) 옵션을 두는 경우에 대해 질문이 있습니다.만약 Transactional을 적용하고 싶지 않은 메서드가 있으면 어떻게 하는 것이 좋을까요? 저의 경우 외부 api 요청을 보내고 응답을 반환하는 메서드에 Transactional을 적용하지 않으려고 합니다(CQRS에 대해 말씀해주신 부분을 듣고 애초에 외부 API 호출하는 기능이 분리 되어야 하나 싶기도 드네요 ㅠㅠ) @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class SpotService { private final MapApiClient mapApiClient;
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
docker에 관하여 질문 드립니다.
안녕하세요 우선 끝까지 강의 잘들었습니다!!! docker 부분이 아직 익숙하지 않아 질문드립니다docker를 따라 설치하니 저장소 같은 곳에 이미지가 저장되는 것을 확인하였습니다.해당 이미지를 aws 인스턴스에서 받아서 바로 사용할 순 없는건가요? -> 굳이 git clone으로 프로젝트를 받아와야 하는지 궁금합니다 / docker 저장소에 이미지를 올리고 바로 받아서 실행하면 되는게 아닌가 싶어서 질문드립니다...2.가 만약 틀린거라면 build/libs에 있는 파일이 직접적으로 실행을 시키면서 애플리케이션이 실행되는 것 같은데 이 이미지를 굳이 docker 저장소에 올리는 이유가 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jar 파일 access 불가
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 항상 강의 잘 보고 있습니다.JPA와 DB설정, 동작확인 강의 중jar 빌드해서 동작확인 하는 단계에서 Unable to access jarfile jpashop-0.0.1-SNAPSHOT 라고 뜨네요..해당 경로에 파일은 있는 것으로 확인되는데 어떻게 해결하면 좋을까요?감사합니다
-
해결됨실전! Querydsl
[질문 X] 스프링 부트 3.2 QueryDSL gradle 설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]plugins { ...... // QueryDSL 관련 명령어 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies { ........ //QueryDSL 종속성. implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } //QueryDSL 설정 //def generated = 'src/main/generated' def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile querydsl { jpa = true querydslSourcesDir = generated } sourceSets { main.java.srcDir generated } compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl } configurations { compileOnly { extendsFrom annotationProcessor } querydsl.extendsFrom compileClasspath } //def generated = 'src/main/generated'def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile 이 둘의 차이는 src 폴더 안에 구현체인 Q 파일들을 넣느냐, 아니면 빌드 폴더에 넣느냐인데, 만약 이 gradle을 쓰면서 영상처럼 compileQuerydsl 하고 시작하면java: Attempt to recreate a file for type study.querydsl.entity.QTestEntity 이런 오류가 날 수 있음.그러니까, Test를 시작할 때 빌드 하면서 시작하는데, 아마도 build에 compileJava가, compileJava에 compileQuerydsl이 포함되어 있음. 그래서 이미 compileQuerydsl로 QueryDSL 파일들을 빌드 한 상태에서 시작을 하려니,저 파일을 다시 생성하려고 시도한다는 오류가 뜨는 걸로 추측됨. 근데 또 신기한게 뭔가 기록? 캐시가 남는지, QueryDSL 파일을 import 안한 상태로 뻘건줄 쭉쭉 있는 상태로 테스트 돌려서 자동으로 빌드가 따라오게끔 하면 저런 오류가 안뜸.근데 이런 아무리 알고 있는 에러이지만 저런 환경에서 코드를 짠다는 건 좀..저는 그래서 그냥 일단def generated = 'src/main/generated'여기에 Q파일을 일단 뒀다가, gitignore에 저거 등록 하고,build 할 때만 def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile이걸로 바꿔놓는 걸 추천.. 저는 그렇게 했고 더 좋은 방법도 있을거임..
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
DTO, Request, Response 차이점
질문이 너무 짧아서 죄송하지만... 제목 그대로 3가지 쓰임의 차이점을 알고 싶습니다. 언제 어떤것을 사용해야 하는지 잘모르겠네요...
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
item_id 네이밍 관련 질문드려요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Item 엔티티 설계할때 id 를 item_id로 하는것이 구체적으로 명명하는게 좋아서 그렇다고 다른 질문에서 답변을 남겨주셨는데요, 그렇다면 order 엔티티도 order_id로 하는게 좋지 않나요? 그렇게 하지 않으신 이유가 order에 이미 memberId 필드가 있어서 그런걸까요? 굳이 order_id라고 명명하지 않아도 memberId와 구분되서 그런건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 동시성...? 관련 질문입니다
em.flush를 명시적으로 적어주거나, 트랜잭션이 끝나서 커밋이 될 때 DB에 쿼리를 날리는 JPA에 관해서 궁금한게 있습니다. DB 제약은 복합키로 되어있고 insert 하는 상황에서 궁금증이 있는데요 동일한 복합키를 가진건 DB쿼리를 그대로 날려도 Exception을 뱉어서 실제 DB에는 들어가지 않는다는 것은 알고 있습니다. 다만 궁금한게 순수히 오로지 JPA로만 해결이 가능한 문제인지 궁금증이 있습니다. id와 name은 사용자로 부터 요청 받은 부분이고Member requetMember = new Member(id,name);Optional<Member> m = repository.findByIdAndName(id,name);if(m.isPresent()){repository.insert(requestMember);} 제가 궁금한 상황은 멀티서버 환경에서 실행 되는 쓰레드가 2개 있다고 했을때 동시에 2번의 요청을 보내고 2개 모두 예외는 발생하지 않아야 하는 상황입니다. A,B 쓰레드 모두 m.isPresent() 코드를 통과 하였고그 와중에 A 쓰레드가 실행될때, insert까지 마치고 트랜잭션 커밋까지 이루어진 상황에서 B쓰레드가 repository.insert(requestMember);이 부분을 실행 할 때 에러가 나는걸 방지 할 수 있는지 궁금합니다. JPA로 해보려다 딱히 방안이 생각나지 않아서insert 할 때 sql로 insert into memberselect id , namewhere not exist(select * from member where id='id', name='name') 이런식으로 insert 할 때 select를 1번의 쿼리로 하면서 하고있는데요, 이런 경우는 어떻게 해야할까요?
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
강사님 감사 인사 드리러 왔습니다.
강사님 덕분에 잘 취업해서 살고 있습니다.취업해보니 강사님의 원리 위주의 강의를 들은 것이 많은 도움이 되고 있습니다.어려운 기술들 보다 Base되는 원리 하나를 잘 습득하는 게 참 중요하다는 걸 많이 느낍니다.뭐가 잘 안되면 블로그나 검색엔진을 사용하기 보다는 강사님 강의하면서 배운 내용을 다시금 봅니다.왜냐면 그 안에 현업에서 쓰는 기본적인 것들이 많이 담겨져 있기 때문입니다.조금 실력이 몇개월 쌓인 뒤에 보니 어려웠던 내용들도 쉬운건데 어렵다고 생각을 해서 어려웠구나 라는 생각도 하게 되네요특히 요약 파일 띄워놓으시고 마우스로 그리면서 설명해주시는 것이 정말 도움 많이!!! 됐습니다.Spring이 아니라 사물인터넷 mosquitto 들으러 인프런에 잠시 왔는데요예정보다 조금은 시간이 많이 흘렀지만 어떤 종류의 강의든 다음 강의를 기대하고 있습니다.중간중간에 답변도 늦지 않게 잘 해주셨던 기억이 있어서 더더욱 감사드립니다.행복한 하루되시고 누군가에게는 긍정적인 큰 영향을 주셨다는 거 기억해주세요.선생님 아니였으면 취업 준비하다가 포기했을 거 같아요.(진심)좋은 하루 되세요^^-선생님 모든 강의를 다 구독한 1人 올림-
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
TestRepositoryImpl 질문이요
where(QTestEntity.testEntity.name.eq(name)과 같이조건을 넣어줘야되지 않나요..?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 매핑 질문이 있습니다.
강의 제목 : 상속관계 매핑시작 시간: 31:36 외래키 참조 무결성 제약 조건을 활용 가능하다.ITEM.ITEM_ID(PK)와 ALBUM.ITEM_ID(PK,FK)를 쓸수있고,장점이 주문 테이블에서 외래키 참조로 아이템을 봐야한다면ITEM_ID만 보면 된다. 다 봐야할 경우 모델링이 이상해진다. 이렇게 말씀을 해주셨는데 외래키 참조 무결성 제약조건을 활용 가능하다고 말씀해주시는게데이터베이스 CASCADE 옵션으로 DELETE같은걸 활용할 수 있다는 의미인가요 ? ITEM_ID만 보면 된다는게, 테이블로 보면 ITEM_ID만 알면 다른 테이블을 확인할 필요 없이ITEM_ID로 찝어서 조회가 가능하기 때문에 장점이라고 말씀해주신 걸까요 ? 시작 시간부터 약 30초간 말씀해주시는게 이해가 안되서 질문을 남겨봅니다.
-
미해결실전! 스프링 데이터 JPA
더미 데이터 추가 후 pk 겹침
실제 구현을 하는 도중 더미 데이터가 있으면 좋겠다 싶어서 data.sql을 만들어서 다음과 같이 sql을 추가했습니다. 5개의 레코드를 추가했습니다.insert into BASKET_FOOD_ENTITY(bakset_food_id, bakset_id, food_id, food_quantity)values ( 1,1,1,3 ),(2,1,2,2),(3,1,3,5),( 4,2,1,2 ),(5,2,2,4); 그 후, 테스트에서 new로 basketFoodEntity를 만들어 add메소드를 통해 DB에 객체를 persist하도록 만들었습니다. BasketFoodEntity basketFood = new BasketFoodEntity(foodEntity,basketRepository.findBasketId(2L),5);basketRepository.addFood(basketFood,userId); addFood 메소드는 다음과 같습니다.public void addFood(BasketFoodEntity basketFood , Long userId){ Long inBasketId = isAlreadyInBasket(basketFood.getFood().getId(), userId); if(inBasketId > 0) updateFoodQuantityToBasket(inBasketId,getFoodQuantity(inBasketId)); else em.persist(basketFood); }추가된 BasketFoodEntity의 Id는 GeneratedValue로 인해 6이 되어야 하는 것으로 알고 있는데, 왜 1이 될까요? 계속 1로 잡혀서 pk가 겹칩니다. GeneratedValue를 빼고 직접 ID를 6으로 설정하면 테스트는 통과됩니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
my-order-sink-connect 변경 정보 문의
my-order-sink-connect로 DB 접속정보를 생성하고 connect를 생성한 후 orders 테이블의 정보(PK, unique 등)가 변경되면 my-order-sink-connect에서 변경된 DB 정보를 인지하고 있나요?아니면 connect가 바라보고 있는 테이블의 정보(PK, 컬럼, unique 등)가 변경되면 connect를 삭제 하고 다시 생성해 줘야 하나요? 감사합니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink pk에러
안녕하세요 my-ordser-sink-connect를 만들고 연계 테스트도 잘 진행하였습니다.테스트 진행시 데이터 설정값오류로 pk Exception이 발생하였는데 이 이후 부터 데이터 입력도 되지 않고 재기동하여도 topic를 참조하여 pk 에러가 나타나고 신규 데이터를 받지 못하고 있습니다.my-order-sink_connect 장애 발생시 예외 처리나 장에 처리 가이드가 따로 있을까요감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
메모리에 올린다에서 메모리가 영속성 컨텍스트 인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]메모리에 올린다는 내용이 등장하는데, getter로 조회해서 영속성 컨텍스트에 올려놓는 다는 뜻인가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@EnableKafka 인식안됨
다른 분들은 저와 같은 경우 없으신가요?ㅠㅠ아래와 같이 gradle 파일에 디펜던시 추가해줬습니다.그런데implementation 'org.springframework.kafka:spring-kafka'@EnableKafka 어노테이션을 인식하지 못하네요ㅠㅠ구글링해도 kafka 어노테이션 관련 글은 없어서 질문드립니다.ㅠㅠ <코드내용><오류 정보 >