묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경 감지에 의해 데이터를 변경하는 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]10분대 까지의 내용은 findItem 즉 영속성을 갖은 객체를 변경감지에 의해 데이터를 변경하는 방법 맞을까요 ? 준영속성 객체의 데이터 변경 방법에 두가지가 있는데 변경감지와 merge가 있다고 강의 자료에서 보이는데 해당 내용은 영속성을 갖은 데이터가 변경감지에 의해 데이터를 변경하는 내용이라 이해해서요 .!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
book이 준영속 객체인 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]book 이 일반 객체가 아니라 준영속 객체인 이유가 잘 이해가 안 가는데itemcontroller에서 create 메소드가html form에서 데이터를 데이터를 받아와서 새로 선언한 book 객체에 값을 넣어 만든 엔티티인데 이 때 bookForm에 담겨 있는 데이터가 db를 들렸다 온 데이터 인가요 .. ? 저는 html에서 입력 받은 데이터를 bookForm 그저 모델에 저장 되어 create 메소드 파라메타로 전달 되었다고 생각했는데 강의에서 디비에 한번 들렀다 온 식별자가 명확한 객체의 값이라는 부분이 bookForm에서 get한 데이터를 말하는 걸까요 ..? 질문이 두서 없는데 해당 부분의 내용을 강의를 봐도 이해가 잘 되지않아서요제가 질문한 부분에서 틀린 내용을 집어주시면 감사하겠습니다 ㅜ ㅜ
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 7분 50초 쯤에 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]테이블 생성에서 SQL을 보시는데 Member 테이블 쿼리에 FAVORITE_FOOD와 ADDRESS 에 대한 정보가 아무것도 없는데 그럼 어떻게 저 둘과 연결시키나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
44강 AWS 배포시 테이블생성 질문있습니다!
local에서는 테이블 생성이나 변경된점을 자동으로 생성및 변경해줘서 인텔리제이에서 할때는 테이블을 생성하지 않았습니다. 리눅스서버에는 테이블과 컬럼을 다 작성해서 만들어 줘야하는 부분일까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 - 9.값 타입 강의 관련 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]값 타입 컬렉션 부분 설명해주실때 기본적으로 컬렉션은 remove의 대상을 찾을때 equals를 사용한다고 하셨는데요member.get~History().remove(new Address(~~));에서 만약 Address 클래스에서 equals 메서드를 오버라이딩 하지 않았다면 Object 의 equals 메서드를 사용하는건가요??
-
미해결실전! 스프링 데이터 JPA
EntityGraph을 할 때, 페치조인 대상이 여러 개인 경우
안녕하세요. 강의를 듣고 개인 프로젝트 진행 중에 있는데, 궁금한게 있어서 질문드립니다.@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class SecurityMedia { @Id @GeneratedValue @Column(name = "secu_no") private Long secuNo; // 보안매체 번호(pk) .... @OneToMany(mappedBy = "kftcSecurityMedia", fetch = LAZY) private List<KftcToken> kftcToken = new ArrayList<>(); // 토큰 @OneToMany(mappedBy = "kftcSecurityMedia") // 보안매체 이력 private List<KftcSecurityMediaHistory> kftcSecurityMediaHistoryList = new ArrayList<>();현재 SecurityMedia 라는 엔티티 객체에서 pk인 secuNo를 key로 하여 manyToOne 관계로 있는 TOKEN 클래스, HISTORY클래스를 가지고 오려고 합니다.패치 조인을 하나 이상하면 조인 되는 ROW 수 때문에 총 데이터 갯수가 꼬여버릴 수 있다고 기억하여.. SecurityMedia - Token / SecurityMedia - History 각각 패치조인 하여 가지고 오는 메소드를 따려고 생각했습니다. 그런데 서비스 영역에서 이를 로직으로 표현하고자 할 때 어떤 식으로 표현을 해야할지 감이 잘 안 오는데요. token 리스트를 가지고 있는 SecurityMedia 객체 하나, History 리스트를 가지고 있는 SecurityMedia 객체 하나, 총 두 개의 객체가 만들어질텐데.. List<Token> tokenList = repository.findSecurityMediaWithToken(secuNo).getToken();List<History> historyList = repository.findSecurityMediaWithHistory(secuNo).getHistory();이렇게 각각 패치 조인으로 가지고온 데이터를 get하는 방식이 옳은 방식인지 의문입니다. 2. 각 리스트로 가지고 온 값에서 유효한 토큰, 최신 보안 이력 1개만 뽑아낼 생각인데 이것은 쿼리를 통해 전체 리스트를 받아오고, 서비스 영역에서 entity 함수로 원하는 값을 필터하는 식으로 대상을 추려내면 될까요? 아니면 레포지토리 영역에서 select한 리스트를 필터를 해줘서 서비스 영역에 리턴 해주는게 맞는걸까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
배포 시기 질문입니다
안녕하세요 태현님, 항상 강의 잘 듣고 있습니다.강의를 들으며 프로젝트를 진행하고 있는데 배포 관련하여 여쭙고 싶어서 글 남깁니다.현재 백엔드와 프론트엔드(안드로이드)가 나눠진 상태로 개발 중인데 이때 스웨거라던지 프론트와 소통을 위해서 base url이 필요합니다. 그러면 강의처럼 모든 개발을 끝내고 배포하지않고 먼저 배포를 하고 시작하는 방식을 택하는 것도 괜찮나요?보통 모든 코드를 마무리하고 배포를 하는지 아니면 먼저 무중단 배포를 하고 개발을 하는지 그 방법이 궁금합니다.감사합니다!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
대칭키 암호화 취약점
대칭키 암호화 내용을 보고 의문이 들었습니다.config server에서 관리하는 yml 파일이 git 에 올라갔을 때 적혀 있는 데이터를 평문으로 저장하지 않고 암호화 하여 보호하려는 것은 이해를 했습니다.그러나 config server 프로젝트를 내려받으면 config 설정 파일명은 알 수 있으니 실행 후 브라우저를 통해 접근하면 원본값 반환으로 바로 알 수 있는 것 아닌가요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
실제 구동은 되지만 테스트는 실패합니다.
강사님 현재 스프링과 JPA 기반 웹 애플리케이션을 듣는 중입니다.여러 번 반복하면서 개발 흐름을 파악하는 중인데요.AccountControllerTest에서 회원 가입 테스트- 잘못된 입력값을 테스트하는 중인데, 실제로는 구동이 잘 되지만 테스트 중에는 매번 테스트 실패로 뜹니다. 코드는 다음과 같습니다.@Test @DisplayName("회원 가입 테스트 - 잘못된 입력값") public void signUpSubmitTest_wrong() throws Exception{ mockMvc.perform(post("/sign-up") .param("nickname", "yena") .param("email", "yenice") .param("password", "12354") .with(csrf())) .andDo(print()) .andExpect(status().isOk()) .andExpect(view().name("account/sign-up")); }깃허브 주소: https://github.com/KrillM/studyclub이 문제를 넘어가기에는 앞으로 수업을 들으면서, 이후 포트폴리오를 만들 때 발목을 잡을 것 같아 질문합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hibernate.properties not found 오류 안고쳐짐
아무리 인터넷에 나와있는대로 pom.xml 파일에 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency>아래 코드를 추가해보아도 뭘 해도 저 오류가 없어지지 않습니다. 무엇이 문제일까요.... 다른 해결방법이 또 있을까요? java17 버전 입니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
궁금한게 있습니다.
언제 @MockBean 쓰고@Mock + @InjectMocks 을 이용하나요?? @MockBean은 자동으로 DI해주니 @MockBean 쓰는게 낫지 않나요?? 제가 설명해주신걸 놓친거 같은데..다시한번 설명 부탁드리겠습니다.미리 감사드릴게요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
무조건적인 @Transactional?
@Service @RequiredArgsConstructor public class SignUpMemberService implements SignUpMemberUseCase { private final MemberRepository memberRepository; @Override public Long invoke(final Command command) { validateEmailIsUnique(command.email()); validateNicknameIsUnique(command.nickname()); validatePhoneIsUnique(command.phone()); final Member member = command.toDomain(); return memberRepository.save(member).getId(); } } @Service @Transactional @RequiredArgsConstructor public class SignUpMemberService implements SignUpMemberUseCase { private final MemberRepository memberRepository; @Override public Long invoke(final Command command) { validateEmailIsUnique(command.email()); validateNicknameIsUnique(command.nickname()); validatePhoneIsUnique(command.phone()); final Member member = command.toDomain(); return memberRepository.save(member).getId(); } }사용자 가입 UseCase에 대한 구현에서 앞단에서는 unique field에 대한 validation을 진행합니다그 후에 memberRepository.save(member)를 진행하는데 (memberRepository는 Data Jpa Repo)아시다시피 SimpleJpaRepository의 save흐름에는 @Transactional이 적용되어 있습니다따라서 이 SignUpMemberService의 invoke 흐름부터 굳이 @Transactional을 걸어야 하는 생각이 듭니다물론 붙임으로써 이 메소드가 writable한 로직을 가진다고 코드레벨에서 알고 JPA를 모르는사람은 SimpleJpaRepository의 구조를 모르기 때문에 가독성?적인 측면에서는 붙이는게 이해에 수월하다고 생각하는데 tx scope를 최대한 짧게 가져가는게 좋다는 생각이 들어서 약간의 고민을 하게 되었습니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 기본 - 8.프록시와 연관관계 관리
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]즉시로딩과 지연로딩 파트 설명해주실때 질문이 있습니다.fetch = FetchType.LAZY)로 지연로딩을 사용해서 프록시로 조회한다고 하시면서 코드로 설명해 주실때Team만들고 em.persist(team);Member 만들고 em.persist(member);em.flush();em.clear();Member m = em.find(~~);m.getTeam().getName();이 부분에서 마지막 m.getTeam().getName(); 이 부분할때 db에 쿼리가 나간다고 하셨는데 왜 쿼리가 나가는 건가요?? em.find로 db에서 찾은 객체가 영속성 컨텍스트에 올라와 있어서 쿼리문을 안날려도 되는거 아닌가요?? 그리고 지연로딩할때 Member클래스의 Team 필드에만 지연로딩을 적용했는데 JpaMain 클래스에서 em.find(Member.class,~~);로 객체 찾을때 이 Member 클래스 자체가 프록시가 되는건가요???
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 기본 - 8.프록시와 연관관계 관리
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]8.프록시와 연관관계 관리 강의 중에서 프록시 부분 설명하실때 이해가 안되는 부분이 있는데요em.getReference()하면 프록시 객체가 영속성 컨테스트에 생성되는 건가요??JpaMain 클래스에서 코드 작성하실때Member member1 = new Member();member1.setUsername("member1");em.persist(member1);em.flush();em.clear();Member refMember = em.getReference(~,member1.getId());refMember.getUsername();이렇게 작성하셨는데 아래쪽에 프록시 객체 생성하고 refMember.getUsername()할때 왜 db에 select문이 나가는 건가요??영속성 컨텍스트에 없어서 그런건가요???그리고 위의 코드에서 refMember.getUsername(); 할때 프록시를 초기화 한다고 하셨는데 getter 메서드쓰는게 어떻게 초기화를 하는건가요??프록시에 getUsername()을 하면 프록시에 username 값이 세팅되는 건가요?? 프록시는 target 이랑 진짜 객체의 메소드만 갖고있는거 아닌가요???
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
즉시로딩의 문제점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 15분에 즉시로딩의 문제점에서 JPQL의 N+1문제점에서 쿼리가 2번나가면 문제가 발생하는 이유가 있나요?? 데이터 잘 들어오는거 같은데 성능문제인가요?? 근데 어차피 지연 로딩하면 쿼리가 2번 나가게 되는거아닌가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@transactional 어노테이션
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@transactional 어노테이션을 메소드에 붙여주면 강의의 Main에 코드에 있는 아래 코드 부분이 자동화 해주는 것인가요?EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close();
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링 부트 3.1.3버전 CGLIB
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.스프링 부트 3.1.3버전 CGLIB스프링 부트 3.1.3버전으로 해당 강의를 따라가던 중 proxyCheck() 테스트의 로그가 CGLIB$$0이 출력됩니다. 테스트는 성공하였지만 영한님처럼 프록시 객체의 해시코드가 16진수로 이루어진 값이 아니라 0이 나옵니다. 혹시 몰라서 부트를 2.7.14로 다운그레이드 했더니 영한님과 비슷하게 16진수의 해시코드가 나오더라구요. 혹시 스프링부트3 버전 이상부터 프록시 객체의 해시코드 값이 변경된 걸까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
2.6버전 이상만 있을때 어떻게 진행하나요
zuul은 지원이 안됩니다. 그러면 zuul 대신 다른 gateway를 사용해야하는건지 억지로 2.3대이하로 내려서 zuul을 사용해야하는건지 궁금합니다.혹시 zuul이외에 다른 게이트웨이를 사용해야한다면 어떤것을 사용해야하는지, 혹시 참고할 자료가 없는지 여쭙습니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
config name 기준
각 마이크로서비스에서 지정하는 config name이 파일 명으로 들어가는데요, 만약 다른 확장자의 동일이름인 파일인 경우 어떻게 되는건가요?ecommerce.yml, ecommerce.properties name을 ecommerce로만 지정해도 되는 이유가 무엇인지 궁금합니다. 단순 설정 파일의 확장자를 제외하는 이유인지 아님 yml 파일로만 config server에 등록될 수 있는지요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gateway route 순서
gateway에 작성하는 routes의 작성 순서가 의미가 있는건가요?Path=/user-service/** 를 먼저 작성하고Path=/user-service/actuater를 뒤에 작성하면 actuater에 대한 처리를 위의 path에서 가져가는 것 같았습니다.순서를 바꾸어서 작성하니 정상 동작하네요알아서 내부 로직으로 처리가 되지 않고 ,(ex) url에 actuater가 포함 시 해당 라우팅으로 수행)작성 순서에 따른 우선순위로 처리되는건지 궁금합니다.