묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
선생님 19강 UI 테스트 하시는 부분에서 질문이 있습니다.
19강 9분30초 지점에서 책 등록할 때는 400에러가 나면서 책 등록이 안 되는데 왜 그 전에 유저는 바로 정상적으로 등록이 되는걸까요?build.gradle에 implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3' 이 디펜던시를 추가해주기 전에도 유저 등록은 정상적으로 되는 이유가 궁금합니다!제가 자바로 개발을 할 때도 웹 계층 DTO에 필드가 한 개만 있을 때는 잭슨이 정상적으로 작동 안 해서 @NoArgConstructor 어노테이션이나 @Setter 등을 꼭 붙여줘야 이게 정상 작동했던 경험이 있습니다. (구글링을 해보니 잭슨 라이브러리 쪽 이슈인데 아직도 open 상태라는 글을 본 거 같기도 합니다..)혹시 UserCreateRequest에는 프로퍼티가 2개 있고, BookRequest에는 프로퍼티가 1개 뿐이라 이런 일이 생긴 것인지도 좀 궁금하네요..
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
수업자료 문의
수업자료에 소스 코드 같은 것 밖에 없는데 PDF파일은 어디서 볼 수 있나요? 위 사진 외 자료는 없나요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
안녕하세요 강사님 동시성 테스트에 대한 질문이 있습니다.
현재 apply 메서드에서 if (count > 100) return; 입니다.이러한 코드는 테스트하기 편하고 수강생들이 쉽게 이해할 수 있게 작성해주셨는데,실제 비즈니스 로직에서는 예외가 터질텐데 이거에 대해서는 어떻게 테스트하고 적용할 수 있나요?현재 제 코드는 이러합니다.주석이 되어있는 부분만 테스트했을 때는정상적으로 제가 원하는 값을 받을 수 있었는데, ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount);이 부분을 적용해서 테스트를 돌리면 무한으로 돌아가고 테스트가 종료가 되지 않습니다. 이러한 에러코드가 뜨는데 해결 방법을 모르겠습니다 ㅠㅠconstraint 뒤에는 syntax error라고 적혀있습니다. 왜 저 두 줄을 작성했을 때 이러한 에러가 발생할까요..?
-
미해결자바 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한 리스트를 필터를 해줘서 서비스 영역에 리턴 해주는게 맞는걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Autowired 역할
컴포넌트 스캔과 자동 의존관계 설정 강의를 보고 제가 이해한 것이 맞는지 궁금하여 질문 드립니다. 각 컨트롤러, 서비스, 레포지토리에 @Controller, @Service, @Repository 를 붙여주면new로 객체 생성하지 않아도 @Autowired로 스프링 컨테이너에서 가져다 쓸 수 있는 것인가요?그리고 프로그램 동작 중 오직 하나의 컨트롤러, 서비스, 레포지토리만 존재하는 것인지 궁금합니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
배포 시기 질문입니다
안녕하세요 태현님, 항상 강의 잘 듣고 있습니다.강의를 들으며 프로젝트를 진행하고 있는데 배포 관련하여 여쭙고 싶어서 글 남깁니다.현재 백엔드와 프론트엔드(안드로이드)가 나눠진 상태로 개발 중인데 이때 스웨거라던지 프론트와 소통을 위해서 base url이 필요합니다. 그러면 강의처럼 모든 개발을 끝내고 배포하지않고 먼저 배포를 하고 시작하는 방식을 택하는 것도 괜찮나요?보통 모든 코드를 마무리하고 배포를 하는지 아니면 먼저 무중단 배포를 하고 개발을 하는지 그 방법이 궁금합니다.감사합니다!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
try 소괄호로 객체를 바로 생성하면 인터페이스 실행
try(MyFileWriter writer2 = new MyFileWriter()){ writer2.write("빵이 먹고 싶어요."); } catch (Exception e){ e.printStackTrace(); }이런 경우에 close()함수가 실행된다고 하셨는데요.AutoCloseable이 아닌 인터페이스를 구현한 class인 경우에도,try구문에 소괄호로 객체를 생성했을때 해당 인터페이스에 있는 메소드를 호출하나요?
-
미해결스프링과 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 버전 입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Junit5 테스트 시, JDK 17 stackoverflow error 해결 문의드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]jdk 17로 사용하고 있는데회원 리포지토리 테스트 케이스 작성 강의를 보면서Hashmap과 Long 때문에 stackoverflow error가 발생하는데 어떻게 해결해야 하나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
배열을 생성할때
String[] a = new String[] {“abc”, “bcd”}; 이 방법과String[] a = {“abc”, “bcd”} 의 방법중 아래의 방법이 조금 더 깔끔하고 효율적인 코드가 아닌가요? 첫번째 방법을 사용하는 이유를 알고 싶습니다
-
해결됨자바 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를 최대한 짧게 가져가는게 좋다는 생각이 들어서 약간의 고민을 하게 되었습니다
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
스트림 문법 사용 중 중간 연산을 두 번 사용하는 것과 And를 통해서 중간 연산을 한 번만 하는 것이 다른 걸까요?
// 중간 연산 한 번 사용으로 And 연산 사용하기 langList.stream().filter(x -> x.length() <= 4 && x.contains("c")).forEach(System.out::println); System.out.println("-----------------------------"); // 중간 연산 두 번 사용 langList.stream().filter(x -> x.length() <= 4 && x.contains("c")).forEach(System.out::println); System.out.println("-----------------------------");-> 궁금해서 해보다가 And 연사자를 사용하는 것도 되더라고요. 위에 나와있는 두 개의 코드 모두 사용해도 상관없는 지와 어떤 것을 사용하는 것이 더 좋다고 할 수 있는지 궁금합니다
-
미해결자바 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번 나가게 되는거아닌가요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
컨슈머를 왜 다른 모듈로 구성하는지 궁금해요!
안녕하세요. 강의 잘 듣고 있습니다.왜 쿠폰 모듈 아래 api모듈과 컨슈머 모듈을 나눠서 구성했는지 알고싶어요!!감사합니다.
-
해결됨자바 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();
-
미해결스프링 시큐리티 OAuth2
keyclock page not found 오류
clientFundamentals 클라이언트앱 커리큘럼을 실습하고 있는데요저는 9090 포트를 프로젝트의 서버 포트로 설정하고8080으로 키클락을 띄운상태인데요server: port: 9090 spring: security: oauth2: client: registration: # 클라이언트 설정 keyclock: authorization-grant-type: authorization_code # Oauth 2.0 권한부여타입 client-id: oauth2-client-app # 서비스 공급자에 등록된 클라이언트 아이디 client-name: oauth2-client-app # 클라이언트 이름 client-secret: XkPnnSZ9RLdMX6vJBsgcbTIL7gtYJ8m8 # 서비스 공급자에 등록된 클라이언트 비밀번호 redirect-uri: http:localhost:9090/login/oauth2/code/keyclock # 인가서버에 권한 코드 부여 후 클라이언트로 리다이렉트하는 위치 authorizationGrantType: authorization_code clientAuthenticationMethod: client-secret-basic # 클라이언트 자격증명 전송방식 scope: openid,profile,email # 리소스에 접근 제한 범위 provider: # 공급자 설정 keyclock: authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth # oauth 2.0 권한 코드 부여 엔드포인트 issuer-uri: http://localhost:8080/realms/oauth2 # 서비스 공급자 위치 jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo user-name-attribute: preferred_username user 아이디로 로그인시 강나님처럼 do you grant these access privilliges? 화면이 뜨지않고http://localhost:8080/realms/oauth2/login-actions/localhost:9090/login/oauth2/code/keyclock?state=kCCPxAYfg3uXfG7M_vmcVzq4FVQIldvt_3viiZlE0U0%3D&session_state=09a4fb12-19eb-4f15-991e-24365d7b5b05&code=6b7b3d33-8f8f-4979-8bfe-e038f7a275a4.09a4fb12-19eb-4f15-991e-24365d7b5b05.2912d929-159d-4403-b7cb-7e7cb0d24f5e 해당 URI 로 이동하면서 we are sorry... page not found가 뜹니다어떤부분이 누락되서 오류가 나는건지 모르겠습니다