묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
애플리케이션 아키텍처의 참조에 대한 궁금증
안녕하세요, 강의 잘 듣고 있습니다. 다름이 아니라 '애플리케이션 아키텍처' 강의를 듣다가 평소에 별 의식없이 해왔던 계층(컨트롤러, 서비스, 리포지토리)간 참조에 대해 궁금증이 생겨 질문드립니다. 일반적인 설계방식인 컨트롤러, 서비스, 리포지토리 계층으로 이어지는 아키텍처는 단방향으로 참조하는 것이 바람직한가요?컨트롤러 -> 서비스 -> 리포지토리 // 단방향으로만 참조하도록 해야하나요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderServiceTest에서 Rollback(false) annotation을 붙였을 때 에러가 나는 이유
[질문 내용]현재상황OrderServiceTest에서 상품주문()을 테스트 중입니다.테스트 중 에러가 나서 코드를 검토해보았는데,@Rollback(false) Annotation이 있었습니다.Rollback(false)자체가 테스트 결과에 직접적인 영향을 줄 수는 없다고 생각하여 무시했었습니다.그러나 Rollback(false) 어노테이션을 지웠더니 테스트가 정상적으로 작동하였습니다.궁금한 점구글링도 해보고, 강의도 다시 들어보았지만Rollback(false) 어노테이션이 상품주문 테스트 성공/실패에 어떠한 영향을 미치는지 궁금합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
컨트롤러에서 받는 request dto에 대해 궁금한점
강사님께서 짜주신 코드에서는 컨트롤러에서는 요청을 받는 DTO를 Domain까지 전파해서 활용하시던데, 보통 코드를 보면 컨트롤러에서 받은 Request Dto -> Domain으로 변환 후에 비즈니스 로직을 처리하는 코드도 많이 봤어서 어떻게 옳고 그른지 궁금합니다.또한 Request Dto를 도메인에서 파라미터로 받아서 활용해도 되는지도 궁금하구요.
-
미해결실전! 스프링 데이터 JPA
Merge 관련해서 질문드립니다.
안녕하세요 영한님, 정말 좋은강의 잘 듣고있습니다. Merge관련해서 질문이 하나있는데요..! 아래 두 method 모두 시작할때 persistence context가 비어있고 찾는 entity가 db에 있다고 가정할때 비슷한 (혹은 같은) flow로 진행될까요? 여기서 method parameter, Entity e,는 업데이트될 (id가 set되어있고 field가 업데이트 되어있는)객체입니다. @Transactional public void updateEntity(Entity e){ Entity foundEntity = em.find(Entity.class, e.getid()); foundEntity.setFieldOne("New Data"); }@Transactional public void updateEntity(Entity e){ em.merge(e); }Merge를 꼭 써야하는건 아니지만, 그냥 동작 메커니즘이 궁금해서 질문드립니다. Merge를 쓰는게 Update전에 항상 Select query로 db에서 객체를 조회하기때문에 쓰기를 지양하라고 하시는건가요, 아니면 merge를 쓸때 또 다른 downside가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
보통 쿼리가 같은게 2번 나가나요?
https://www.inflearn.com/questions/1206747/%EC%84%B9%EC%85%98-4-%ED%9A%8C%EC%9B%90-%EB%8F%84%EB%A9%94%EC%9D%B8-%EA%B0%9C%EB%B0%9C-%ED%9A%8C%EC%9B%90%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4이부분 답변으로 해결하고 실행하니까 create문이 2번 동일하게 나가는게 이게 맞나요? 평상시에는 한번 나간거 같은데 제가 기억이 왜곡된건지. 궁금해서 여쭤봅니다. 2.item레파지토리 클래스에서는 아래코드를 넣으면 em에서 빨간줄 나오는데 MemberServiceTest는 나오지 않습니다. 왜 그런건가요?// @Autowired // EntityManager em;
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계
사진속에서 List memebrs 가 있는 이유가 Team 과 Member 가 서로를 조회하기 위해서 있는게 맞는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 중복저장
강의에서 값 타입 컬렉션은 모든 컬럼이 기본키가 되기 때문에 중복저장이 되지 않는다고 하셨는데 중복 저장이 가능하여 문의 드립니다.public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Address address = new Address("city", "street", "1"); Member member = new Member(); member.setUsername("member1"); member.setWorkAddress(address); member.getFavoriteFoods().add("치킨"); member.getFavoriteFoods().add("피자"); member.getAddressHistory().add(address); member.getAddressHistory().add(address); em.persist(member); em.flush(); em.clear(); System.out.println("====================="); Member findMember = em.find(Member.class, member.getId()); List<Address> addressHistory = findMember.getAddressHistory(); addressHistory.forEach(Address::getCity); Set<String> favoriteFoods = findMember.getFavoriteFoods(); favoriteFoods.forEach(System.out::println); findMember.setHomeAddress(new Address("newCity", address.getStreet(), address.getZipcode())); // 치킨 -> 한식 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식"); // 주소 변경 findMember.getAddressHistory().remove(new Address("city", "street", "1")); findMember.getAddressHistory().add(new Address("newcity", "new", "100")); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { em.close(); } emf.close(); }
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
Security 단원에서 Dto와 인증 서비스 강의 관련입니다
loadUserByUsername 메서드에서 username 으로 조회잘되고 조회된 MemberDto는 log 출력도 잘되는데 다음 단계에서 "Encoded password does not look like BCrypt" 라는 warn 과 함꼐 "Failed to process authentication request" 로 자격증명에 실패했다고 합니다.DB의 패스워드는 암호화 되어 잘 저장된거 확인됩니다제가 무언가를 잘못 작성한건지파라미터로 보낸 password 는 어디서 encode해야 하는건지 아니면 다른 문제가 있는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
다대다 관계에서의 연관계의 주인
@JoinColumn한 쪽이 연관관계의 주인이 되듯 다대다인 상황에서는 @JoinTable이 붙은 엔티티의 속성이 연관관계의 주인이 되는 것으로 이해했습니다. 이해한 것이 맞을까요?강의에서는 Category를 연관관계의 주인으로 설정하셨는데, 다대다 관계에서도 일대일 관계처럼 연관관계의 주인이 어느쪽이든 상관 없나요? JPA 기본편을 수강하고 와서 다대다를 피해야한다는 것을 알고 있지만 궁금증이 생겨 질문드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
AuthenticationFilter 관련 질문
안녕하세요 강사님 좋은 강의 정말 감사드립니다.user service에서 어떤 요청이 들어오든 AuthenticationFilter 를 거치게 되는 것으로 알고 있는데 login 요청을 제외한 다른 요청들은(ex: health-check, welcome 등) AuthenticationFilter 에 존재하는 attemptAuthentication과 loadUserByUsername 메소드는 실행되지 않고 바로 필터가 통과되는 것인가요? 해당 질문은 msa 라기보다 시큐리티 관련 내용인 것 같아 여기에 질문하는 것이 좀 죄송한데 답변 주시면 정말 감사드리겠습니다. 감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실전 예제 1 인텔리제이 무료 버전 프로젝트 생성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 질문 1.현재 인텔리 제이 무료 버전을 사용하고 있는 수강생입니다.실전 예제 1 - 요구사항 분석과 기본 매핑을 시작하려는데강의에서 프로젝트를 새로 생성하는 부분에서[위 사진은 강의 영상][위 사진은 인텔리 제이 무료 버전 사진] 일단 강의와 프로젝트 생성 부분이 다르며,maven Archetype으로 선택하여 같은 부분에jpabook, jpashop을 작성하고 create하면[아래 사진처럼 빨간부분을 선택하라고 나옵니다.]여기 부분을 어떤걸 선택하여 프로젝트를 생성해야 할까요??? 질문 2.인텔리제이 무료 버전은 이것만 나오는지도 궁금합니다. 답변 주시면 감사하겠습니다.!
-
미해결Practical Testing: 실용적인 테스트 가이드
Spy 질문입니다.
안녕하세요 강사님.강사님 강의를 듣고 실무에 적용을 해보고 있습니다.예를 들어 A Service 테스트를 위한 테스트 코드에서Class AService { @Autowired private ARepository arepository; public void methodA() { arepository.procedure(); arepository.two(); } }위와 같이 구성이 되어 있는데 methodA에서 리포지토리의 procedure만 모킹처리를 하고싶습니다.테스트코드를 대략 아래와 같이 @Spy를 사용해서 의존성 주입을 하는데 작동이 안되어 문의드려요. 제가 한 방식이 잘못된걸까요?@ExtendWith(MockitoExtension.class) class Test { @InjectMocks; private AService aservice; @Spy private ARepository arepository; @Test void test() { doReturn("OK").when(arepository).procedure(); aservice.methodA(); } }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Query 사용 시 연관테이블은 order by 가 불가한가요?
@Query("SELECT t From Team t join Fetch t.member m ORDER BY m.name desc")예를 들어 이런 식으로 Fetch join을 이용해서 연관테이블 리스트를 가져올 때에 정렬해서 가져오고 싶습니다.검색 등을 통해 해결해보려 했지만 방법을 모르겠네요 ㅠㅠ 만약 @Query가 안된다면 다른 방식으로 가져오는 방법이 있을까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
버전 질문입니다.
자바버전이나 jdk,인텔리제이 버전, 스프링 부트 버전을 전부다 강사님께 맞춰야하나요? 인텔리제이 얼티메이트 2023.3 버전을 쓰고있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다.
섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다.테스트 junit으로 테스트 실행시 아래와 같은 에러가 나옵니다.Execution failed for task ':test'.> No tests found for given includes: [jpabook.jpashop.Service.MemberServiceTest](filter.includeTestsMatching)package jpabook.jpashop.Service; import static org.junit.Assert.*; import jpabook.jpashop.domains.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; //메모리db로 test import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; @RunWith(SpringRunner.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(savedId)); } // @Test // public void 중복회원예외() throws Exception { // //given // // //when // // //then // // } }에러 사항을 찾아보니 디렉토리 위치가 다를 경우에 에러가 날 수 있다고 하여 디렉토리 위치를 비교해봐도 같습니다. junit테스트도 동일합니다. 어느 부분이 틀린지 알 수 있을까요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
BeanPropertySqlParameter 사용 시 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Item 클래스에 getId()도 있는데BeanPropertySqlParameterSouce(item)을 사용하면id값도 만들어지나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
CascadeType 자식 엔티티 삭제
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tr = em.getTransaction(); tr.begin(); try{ Parent parent = new Parent(); Child child = new Child(); Child child1 = new Child(); parent.addChild(child); parent.addChild(child1); em.persist(parent); em.flush(); em.clear(); Parent newParent = em.find(Parent.class, parent.getId()); Child child2 = newParent.getChildList().get(0); em.remove(child2); tr.commit(); } catch (Exception e){ tr.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } }안녕하세요 CascadeType 관련해서 질문을 남깁니다. Parent에 CascadeType을 ALL 또는 PERSIST로 했을 때 위에서 child 삭제 쿼리가 나가지 않습니다. 다른 속성들은 모두 잘 동작을 하는데 왜 저 두 속성만 안되는건지 혹시 알 수 있을까요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
Fixture 클렌징 관련 질문드립니다.
안녕하세요! 저는 강사님이 말씀해주신 방법들이 아닌 @Sql 어노테이션을 사용해서 모든 테이블을 Truncate하는 방법으로 클렌징을 하고 있었습니다.Truncate는 복구가 안되지만 성능 면에서 Delete보다 빠른 것으로 알고 있는데 제가 사용한 방식도 괜찮은 방법일지, 혹은 발생할만한 문제가 있을지 궁금합니다. teardown.sql-- 모든 제약 조건 비활성화 SET REFERENTIAL_INTEGRITY FALSE; truncate table user_tb; truncate table oauth_tb; truncate table vote_tb; truncate table choice_tb; truncate table vote_item_tb; truncate table place_tb; truncate table review_tb; truncate table review_vibe_tb; truncate table vibe_tb; truncate table place_vibe_tb; truncate table place_food_tb; truncate table food_tb; truncate table participant_tb; -- 모든 제약 조건 활성화 SET REFERENTIAL_INTEGRITY TRUE;
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
섹션10 언제 나오나요?
대략적인 일정이라도 궁금합니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
KafkaListener DB에서 update 나 delete 이벤트 감지하는방법있을까요?
카프라 활용 1~2를 보면서 궁금한 점이 생겼는데DB서 insert 가 발생했을 때는 @KafkaListener 를 통해 생성된 데이터를 받을 수 있는데 update나 delete 가 발생했을 때는 @KafkaListener로 받을 수 없더라고요?DB에서 update또는 delete문이 발생했을 때의 이벤트도 받으려면 어떻게 해야할까요?