묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
이 강의 주제를 듣다가.. 외부 시스템
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 제가 테스트 코드를 수행 도중에 맞닥뜨린 고민이 있었습니다.보통 메일과 같은 외부시스템(AWS)를 사용하게 되면, 그 해당 외부시스템의 key값과, secret값이 필요해서 application.yml 에 해당 key값과 secret값을 환경 변수로 설정해서, @Value 애노테이션을 통해서 설정 클래스를 만드는데, 이때테스트 코드를 만들게 되면 application-test.yml과 같은 테스트 전용 yml 파일을 만들어서 테스트 환경을 실행시키도록 하게 되는데, 강사님은 이럴때 어떻게 처리하시는지 궁금합니다. application-test 파일에 설정을 안하게 되면 런타임시 에러가 발생하게 되어, 실행시 에러가 나는데. 외부 시스템은 Mocking 처리하도록 하니. 테스트용 임시로 임의값을 key, secret 값으로 설정하면 되는건지 궁금하네요 진짜 좋은 강의 감사합니다 ^^ ㅎㅎ
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
내부 호출에 대한 재질문
제가 좀 헷갈려서 다시 질문을 좀 드립니다.@Transactional이 있으면 프록시 생성이 된다그런데 내부 호출을 하면 대상 객체(this)의 메소드를 호출하니까 트랜잭션이 발생하지 않는다그래서 문제이다. 이를 해결하기 위한 방법 중에서 제일 권장하는 것이 클래스를 분리하는 것이다라고 이해를 했습니다. 그런데 실무에서는@Transactional (<= 클래스 전체에 트랜잭션을 걸었다는 표현입니다 어떻게 했는지는 잘 모르겠지만...클래스에 걸린 것은 확실합니다)class ServiceImpl implements Servcie {public void mainMethod() { // 메인 메서드deleteMethod(); // 내부 메서드 호출insertMethod(); // 내부 메서드 호출} public void deleteMethod() {} // 내부 메서드public void insertMethod() {} // 내부 메서드}보통 위와 같이 코딩을 자주 하는데 이때는 클래스에 @Transactioanl 어노테이션이 있어전체 메서드에 @Transactional 이 적용된다는 것은 이해를 합니다. "그런데 mainMethod()에서 deleteMethod()를 호출하면 내부 호출이라 대상 객체의 즉, ServiceImpl 클래스에서 deleteMethod()를 호출하므로 트랜잭션이 적용되지 않는다"가 맞지 않나요? 아니면 굳이 클래스를 분리하지 않고 클래스 단위에 @Transactional 애노테이션을 적용시키면내부 호출에 문제가 없다는 뜻인지? 글로 질문을 하기가 어렵습니다. 답변을 글로써 하시기는 더욱 더 어려우실 것 같은데너무 궁금해서 다시 질문을 드리니 양해 바랍니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
페이징 기능은 어떻게 테스트 하시나요?
안녕하세요. 강사님 강의듣고나서 새로운 시각이 열리게 된 것 같아서 요새 개발을 재밌게 배우고 있습니다. 감사합니다.배경public interface PostJpaRepository extends JpaRepository<PostEntity, Long> { @Query(value = "select new store.ppingpong.board.post.dto.PostWithWriter(p.id, p.title, p.postType, u.userInfo.nickname, p.createdAt) " + "from PostEntity p " + "join UserEntity u on p.userId = u.id " + "where p.forumId = :forumId", countQuery = "select count(p) from PostEntity p where p.forumId = :forumId") Page<PostWithWriter> findPostAndUsernameByForumId(@Param("forumId") String forumId, Pageable pageable); }(Post는 User의 id를 필드로 가지고 있고 Forum을 조회 시, forumId와 같은 Post리스트를 페이징처리하면서, User의 name필드 정보가 필요해서 다음과 같은 쿼리를 작성한 상황입니다.)페이징 기능이 필요해서, 제일 먼저 생각난게 spring data jpa에서 제공하는 페이징기능이었습니다.그런데, 테스트코드를 작성하려보니 뭔가 잘못된 것 같다고 느꼈습니다.문제상황@Override public Page<PostWithWriter> findByForumId(String forumId, Integer listNum, Pageable pageable) { List<Post> list = data.stream() .filter(post -> post.getForumId().equals(forumId)) .toList(); FakePage<Post> posts = new FakePage<>(list, pageable.getPageNumber(), pageable.getPageSize(), list.size()); posts.stream() .map() // ??? return null; }FakePostRepository를 작성하던 중 Page를 상속받은 FakePage를 구현 후, "스트림으로 PostWithWriter dto에 넣어줘야겠다" 라고 생각할 때였습니다.위 상황에서는 Post를 받는 정적 팩토리 메서드를 만들면 될 것 같긴했습니다. 그러나, 테스트코드를 위해서 메인코드를 수정해야하는 상황이 좀 이상하다고 생각했습니다.질문일단 제가 이 상황에서 드는 다양한 생각은dto는 단순히 전달목적이니 코드수정이 들어가도 상관없다.jpa의 페이징기능을 포기하고 Comparator를 구현해서 직접 정렬한다.페이징 기능에 한해서 Mock 프레임워크 기능을 이용한다. 물론 지금은 서비스가 단순히 repository를 호출하는거라 테스트 할 의미가 적은 것 같지만, 나중에 위 같은 상황에서의 대처가 궁금해서 질문올립니다.강사님의 답변을 듣고 싶습니다. 감사합니다!
-
미해결JPA & Spring Data JPA 기초
git 링크 안들어가져요 404에러
https://github.com/madvirus/jpa-basic/jpa-01git링크가 들어가면 404가 뜹니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
batchsize와 in 쿼리 관련해서 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]order와 orderItem의 예시의 경우 스트림의 map으로 order를 OrderDto로 바꾸는 과정에서 OrderDto의 생성자로 order 객체가 들어간 후 oderItem.getItem().getName()을 호출하면서 in 쿼리가 나가는 것 같은데 여기서 이해가 안 가는 부분이 있습니다. 조회된 order의 컬렉션이 매개변수로 넘어가는 것도 아니고 스트림은 원소를 하나씩 처리하는 것으로 알고 있는데 어떻게 조회된 모든 order의 아이디를 알고 in절 안에 넣을 수 있는 것인가요?강의를 보면 orderItem을 찾는 in 쿼리가 한 번만 나가는데 이건 첫 in 쿼리를 통해 모든 정보를 조회해서 이후에는 1차 캐시에서 조회 가능하기 때문에 그런 것인가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링부트 html 질문
강의 html에서는 CRUD 버튼을 js로 제어 하신 것 같은데html에서 <form action="/postuser" method="POST">이런 식으로 작성하고 어노테이션마다 /user부분을 다르게 해줘도 가능한가요?
-
미해결실전! 스프링 데이터 JPA
Jpa(Hibernate)가 올라오는 과정을 공부해 보고 싶습니다.
안녕하세요 Spring Data jpa 이용해서 프로젝트를 하던중 웹 검색을 하다가 아래와 같이 사용할 수 있다는 것을 알게 되었습니다.public interface ItemRepository<T extends Item> extends JpaRepository<T, Long> {} public interface BookRepository extends JpaRepository<Book, Long> {} public interface AlbumRepository extends JpaRepository<Album, Long> {} public interface MovieRepository extends JpaRepository<Movie, Long> {}Item을 상속받은 객체를 repository ItemRepository 에 넣으면 잘 들어갑니다.더 신기한 것은 Item객체를 상속 받은 Book객체를 BookRepository에서 찾을 수 있습니다. 아마 내부적으로 Jpa(hibernate)에서 엔티티에 있는 어노테이션을 뒤져서 조인 전략을 사용한 것이라는 사실을 애플리케이션 시작 전에 알고 있을텐데, 정확히 어떤 방식으로 이것을 귀신같이 알고 있는 건지 잘 이해가 되지 않습니다.(item객체인지만 알 수 있을텐데, 어떻게 BookRepsoitory에도 나머지 데이터를 넣어주는지 너무 궁금합니다.)DataJpa나 하이버네이트 관련 메뉴얼도 많이 찾아 보았는데, 내부적으로 작동하는 것에 대해서는 크게 설명하지 않고 사용법만 있어서 해당 부분 키워드나 방법이라도 알 수 있지 않을까 싶어서 질문 드립니다. 그리고 위의 예제는 아래 블로그에서 찾을 수 있었는데, 강의에 있던 내용이라고 댓글에 적혀 있었는데요제가 빼먹은 건가 싶어서 열심히 책과 모든 강의를 찾아보았지만.. 저는 찾을 수 없었는데요, 혹시라도 강의에서 언급 하시고 넘어가셨다면 해당 부분이라도 알고 싶습니다.블로그 링크는 아래와 같습니다.https://jyami.tistory.com/23 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
EntityManager관련 질문
@Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; 안녕하세요 EntityManager을 위처럼 주입받을 때 주입시점이 MemberRepository에 @Repository가 있으므로 MemberRepository가 스프링 빈에 등록되고 의존관계 주입을 할 때인가요? 그렇기 때문에 더더욱 @Repository가 필요한가요?
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
io.jsonwebtoken.security.WeakKeyException 해결방법
현재 강의 기준으로 실행 할 경우 WeakKeyException 예외가 발생합니다. secret Key 길이를 늘려주세요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1대다 양방향 관계에서 질문있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]1대다 양방향 관계가 있다면 필연적으로 List<다쪽 엔티티> lists=new ArrayList<>();가 존재합니다. 그런데 만약에 일쪽에서 조회하면 저장한 순서대로 나오는게 보장이 될까요?? 예를 들면 List<ResponseDto> dtos =new ArrayList<>();team.getMembers().stream.forEach(m->{ dtos.add(ResponseDto.from(m)) ;}뭐 이런식으로 하면 처음에 team 에 들어간 멤버 순서대로 dto 에 들어가는 그런 느낌일까요?? 잘 나오다가 순서대로 안나오는 경우가 있어서 질문드립니다. ㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
배포 환경에서 db 분리 질문
안녕하세요 영한님! 항상 강의 정말 잘 듣고 있습니다!gradle build를 진행할 때 테스트 코드를 수행하는 걸로 알고 있습니다.테스트 코드는 운영 db가 아닌 테스트용 db를 통해 수행하도록 하는게 맞을까요? 생각하고 있는 방법은1. test/resources에 application.yml을 추가해서 테스트 코드는 인메모리 db (h2)를 통해 수행 2. ec2 안에 테스트용 mysql 컨테이너를 띄워두고 mysql을 통해 테스트 코드 수행이렇게 2가지 방식을 생각중인데 맞는 방법일까요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
왜 @Configuration의 WebSecurity 클래스에서 생성자 주입을 하지 않나요?
@Configuration@EnableWebSecuritypublic class WebSecurity { extends WebSecurityConfigurerAdapter { private UserService userService; private BCryptPasswordEncoder bCryptPasswordEncoder; private Environment env; public WebSecurity(Environment env, UserService userService, BCryptPasswordEncoder bCryptPasswordEncoder) { this.env = env; this.userService = userService; this.bCryptPasswordEncoder = bCryptPasswordEncoder; }강의에서 보면 @Configuration으로 WebSecurity클래스가 설정되어있기에 userService, bCryptPasswordEncoder, environment 인스턴스가 준비되어 있다고합니다. 따라서 위의 코드와 같이 생성자주입을 하지않는데, 왜 @Configuration으로 설정되어 있으면 @Autowired로 주입을 받지 않아도 되는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
친구목록 테이블 설계관련 질문
현재 채팅시스템이있는 애플리케이션 개발중입니다.친구목록 테이블을 설계하고 있는데 연관관계 설정과 테이블 설계에 어려움이 있어 질문드립니다.멤버 클래스의 코드입니다.친구 클래스의 코드입니다.강의 내용처럼 N:M 을 1:N N:1로 뜯어서 설계를 하려하는데 1:N N:1 의 상태에서 1이 같은 테이블과 클래스여서 어떻게 해결할지 모르겠어서 질문드립니다.
-
미해결실전! Querydsl
jpa와 스프링DB는 별도인건가요 ?
현재 김영한 강사님의 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵 은 모두 수강한 상황입니다.별도로 스프링 완전 정복 로드맵을 따라가고 있는데, 로드맵상에 스프링db 강의 1,2편을 수강할지 말지 고민이 됩니다.일단 커리큘럼 상으로는 겹쳐지는 부분이 많아보여서요. 이에 대해 답변해주신다면 저에게 많은 도움이 될 거 같습니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
학습 내용과 번외로 의존관계 주입 시 궁금증
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1. 의존관계 주입 방법@Configuration public class HelloConfig{ @Autowired private DataSource dataSource; @Bean public PlatformTransactionManager txManager(){ return new DataSourceTransactionManager(dataSource); } } 2. 의존관계 주입 방법@Configuration public class HelloConfig{ @Bean public PlatformTransactionManager txManager(DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } } 안녕하세요 의존관계 주입 연습 도중 궁금한 점이 생겨 올렸습니다 ! 보통 1번방법으로 스프링 부트에서 자동으로 등록해준 히카리 커넥션 풀 DataSource 구현체를 dataSource 변수에 의존관계 주입(@Autowired) 받았었습니다 그런데 2번 방법으로 시도해보니까 자동으로 dataSource 변수에 의존관계 주입이 되어서 DataSourceTransactionManager 객체가 정상적으로 빈으로 등록되는 것을 확인할 수 있었습니다. @Autowired가 있지도 않았는데 이것이 가능한 원리가 무엇인지 궁금합니다 !
-
미해결실전! Querydsl
QuerydslApplicationTests 오류 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. QuerydslApplicationTests 실행시 아래와 같은 에러가 발생합니다. HELLO_SEQ가 없다는 오류인것 같은데요H2 DB에 이걸 만들어야 한다는 의미인가요?강의 내용에는 없는 것 같아서 질문드립니다. 확인 부탁드립니다.감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의내용과 동일하게 컨트롤+쉬프트+T 눌러서 JUnit4 선택하고 코드를 동일하게 쳤을때 이런 오류가 발생합니다 https://www.inflearn.com/questions/15495/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%A4%91-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D링크에서 설정에서 run test를 intelliJ IDEA로 바꾸면 아래와 같은 오류입니다intellij IDEA로 변경 + 임포트를 jupiter.api.test 로 하면이런 오류입니다 run test를 default + 임포트를 jupiter.api.test로 하면이런 오류입니다....어떻게 해야 할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
create 시 반환 타입 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]create시에 반환 타입을 Long 을 주는 실무적인 관점에서 이유가 뭘까요?? 어떤 경우에 좋은지 예를 들어 주실 수 있을까요??https://woojin.tistory.com/115#google_vignette에서는 아예 void 를 사용하지 말라고하는데 그 이유가 공감이 전혀 안됩니다.예를 들어 뭐 이런 건가요?? 주문 완료하기 버튼을 딱 누르면 생성된 주문 ID 가 딱 반환이되고 생성된 주문 ID를 바탕으로 조회해서 어떤 주문이 완료되었는지 표시해주게? 그러면 만약에 상품에 대한 평가를 남긴다고 하면 상품 평가 ID 를 반환해봤자 차피 바로 조회할 필요가 없어 보이는데 이러면 void 써도 되는 것 아닌가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 주인
안녕하세요. 선생님 . 프로젝트 병행하며 JPA 내용 복습중인데요.강의 자료에서는 진짜 매핑 - 연관관계의 주인 (Member.team) 가짜 매핑 - 주인의 반대편 (Team.members)라 하셨습니다!! 제가 이해한 바로는 Member와 Team의 관계는 N : 1이고, 외래키를 갖고 있는 Member Entity가 연관관계의 주인이다. 라고 이해하였는데 자료에서는 Member.team이 주인이다 라는 것이 이해가 가지 않습니답!! 제가 이해한대로 머리속에 집어넣어도 무방할까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실전예제 3 - 다양한 연관관계 수강 중 Could not determine recommended JdbcType for Java type오류 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 코드에 문제가 있는건가 싶어 수업도 두번 듣고 멈춰서 선생님코드와 비교까지 했는데 Exception in thread "main" org.hibernate.type.descriptor.java.spi.JdbcTypeRecommendationException: Could not determine recommended JdbcType for Java type 'jpabook.jpashop.domain.Member'이런 오류 메세지가 발생합니다... 원인을 어디서 찾아야 될지 모르겠어서 질문 남깁니다.