inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

테스트 코드 작성

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.강사님께서 테스트 케이스를 작성할 때 앞의 테스트가 뒤의 테스트에 영향을 미치는 것을 방지하기 위해 clearStore() 를 작성하시고 사용하셨는데 다형성에 의해서 MemberRepository memberRepository = new MemberRepositoryImpl();// 전자 이와 같이 쓰는 것으로 알고 있는데 clearStore()를 적용하기 위해서 코드를 직접 구현체 클래스의 타입으로 바꾸셔서 아래와 같이 작성을 하시고 테스트하셨습니다. MemberRepositoryImpl memberRepository = new MemberRepositoryImpl();// 후자 MemberRepository 인터페이스에 clearStore()를 써주게 되면 직접 기능 구현을 할 때 당연히 이 추상 메서드가 쓰일 일은 없지만 테스트 케이스를 작성할땐 쓰이고 안 써주면 테스트 케이스를 작성할 때 후자처럼 작성을 해야하잖아요...? 어느 것이 더 좋은 방법이라고 할 수 있을까요? 강사님 방법을 100% 신뢰하면 되는 것일까요?

  • java
  • spring
  • mvc
  • spring-boot
피곤한개발자 댓글 2 좋아요 0 조회수 413

batchsize와 in 쿼리 관련해서 질문드립니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] order와 orderItem의 예시의 경우 스트림의 map으로 order를 OrderDto로 바꾸는 과정에서 OrderDto의 생성자로 order 객체가 들어간 후 oderItem.getItem().getName()을 호출하면서 in 쿼리가 나가는 것 같은데 여기서 이해가 안 가는 부분이 있습니다. 조회된 order의 컬렉션이 매개변수로 넘어가는 것도 아니고 스트림은 원소를 하나씩 처리하는 것으로 알고 있는데 어떻게 조회된 모든 order의 아이디를 알고 in절 안에 넣을 수 있는 것인가요? 강의를 보면 orderItem을 찾는 in 쿼리가 한 번만 나가는데 이건 첫 in 쿼리를 통해 모든 정보를 조회해서 이후에는 1차 캐시에서 조회 가능하기 때문에 그런 것인가요?

  • java
  • spring
  • spring-boot
  • jpa
shk 댓글 2 좋아요 0 조회수 277

스프링부트 html 질문

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

강의 html에서는 CRUD 버튼을 js로 제어 하신 것 같은데 html에서 <form action="/postuser" method="POST"> 이런 식으로 작성하고 어노테이션마다 /user부분을 다르게 해줘도 가능한가요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
서동재 댓글 1 좋아요 0 조회수 237

테스트 코드 내의 지역변수를 final로 선언하는 이유가 궁금합니다.

미해결

실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD

테스트 코드 내에서 인텔리제이 자동 필드선언 기능 사용시 저는 따로 상수키워드가 붙지 않는데. 선생님께서는 final이 자동으로 붙는 것 자체도 신기하지만 그 이유가 궁금합니다.

  • tdd
  • spring-boot
  • pojo
  • 소프트웨어-테스트
  • api
Yoonjae han 댓글 1 좋아요 0 조회수 571

Jpa(Hibernate)가 올라오는 과정을 공부해 보고 싶습니다.

미해결

실전! 스프링 데이터 JPA

안녕하세요 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 감사합니다.

  • java
  • spring
  • spring-boot
  • jpa
lee 댓글 1 좋아요 0 조회수 245

EntityManager관련 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

@Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; 안녕하세요 EntityManager을 위처럼 주입받을 때 주입시점이 MemberRepository에 @Repository가 있으므로 MemberRepository가 스프링 빈에 등록되고 의존관계 주입을 할 때인가요? 그렇기 때문에 더더욱 @Repository가 필요한가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
AAA 댓글 2 좋아요 0 조회수 227

io.jsonwebtoken.security.WeakKeyException 해결방법

미해결

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

현재 강의 기준으로 실행 할 경우 WeakKeyException 예외가 발생합니다. secret Key 길이를 늘려주세요.

  • spring-boot
  • jpa
  • web-api
최종민 댓글 1 좋아요 0 조회수 447

배포 환경에서 db 분리 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 영한님! 항상 강의 정말 잘 듣고 있습니다! gradle build를 진행할 때 테스트 코드를 수행하는 걸로 알고 있습니다. 테스트 코드는 운영 db가 아닌 테스트용 db를 통해 수행하도록 하는게 맞을까요? 생각하고 있는 방법은 1. test/resources에 application.yml을 추가해서 테스트 코드는 인메모리 db (h2)를 통해 수행 2. ec2 안에 테스트용 mysql 컨테이너를 띄워두고 mysql을 통해 테스트 코드 수행 이렇게 2가지 방식을 생각중인데 맞는 방법일까요??

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
나 좀 도와줘요 댓글 2 좋아요 0 조회수 364

왜 @Configuration의 WebSecurity 클래스에서 생성자 주입을 하지 않나요?

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

@Configuration @EnableWebSecurity public 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로 주입을 받지 않아도 되는 걸까요?

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
고은우 댓글 1 좋아요 0 조회수 339

JPA를 이용한 개별 사용자 상세 조회 5분 21초

미해결

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

섹션 5. Java Persistence API 사용 JPA를 이용한 개별 사용자 상세 조회 5분 21초 캡처 화면입니다. 응답 값으로 id는 없고 name, joinDate, link정보만 나오는 이유가 궁금합니다.

  • rest-api
  • spring-boot
focandlol 댓글 2 좋아요 0 조회수 230

@Profile을 이용해 환경에 맞는 bean을 등록하는 과정에 대해 궁금한 것이 있습니다.

해결됨

스프링 부트 - 핵심 원리와 활용

안녕하세요. 항상 좋은 강의 올려주셔 감사합니다. 강의를 보며 @Profile 으로 빈을 환경(로컬, 개발, 운영)에 따라 달리 등록하는 과정에 대해 궁금한 점이 생겨 질문 올립니다. 영한님은(약 1분36초 쯤) "로컬에서는 로직을 테스트하기 위해 빈을 등록한다." 라는 뉘앙스로 빈을 환경에 따라 달리 등록한다 말씀하셨는데 저는 "테스트 환경을 위해 빈을 등록한다"는 느낌을 받았습니다. 저는 과거 클린코드에 대해 공부하며 테스트를 위한 코드와 실제 비즈니스 로직이 담긴 코드는 서로 분리하는 것이 좋다고 배웠습니다. 이러한 관점에서 보았을때 LocalPayClient 와 payConfig 에서 localPayClient() 메서드는 @Slf4j @Configuration public class PayConfig { @Bean @Profile("default") public LocalPayClient localPayClient(){ log.info("LocalPayClient 빈 등록"); return new LocalPayClient(); } @Bean @Profile("prod") public ProdPayClient prodPayClient(){ log.info("ProdPayClient 빈 등록"); return new ProdPayClient(); } } 테스트를 위한 코드라 생각이 들며 결과적으로 pay 디렉토리 내부에 테스트를 위한 객체와 실제 비즈니스를 위한 객체가 섞여 어색하다는 느낌을 받았습니다. 혹시 이에 대해서 어떻게 생각하시는지 궁금합니다! 안정적인 테스트를 위해 어쩔수 없이 희생해야 하는 부분일까요?

  • spring
  • spring-boot
  • prometheus
  • grafana
  • profile
이상민 댓글 2 좋아요 0 조회수 296

인텔리제이 run이 안돼요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의 그대로 따라했고 17버전으로 맞췄는데 강의에서 선생님처럼 화살표 (run) 버튼도 뜨질 않고 The file in the editor in not runnable 이라고 나옵니다 구글링해서 configuration을 추가해보았으나 잘 안되는 것 같습니다 도와주세요 ㅠㅠ

  • java
  • spring
  • mvc
  • spring-boot
choco 댓글 2 좋아요 0 조회수 2036

dependency-management 버전 질문

미해결

토비의 스프링 부트 - 이해와 원리

안녕하세요. 현재 스프링 부트 2.7 버전을 사용하고 dependency-management 버전을 최신 버전으로 1.1.4를 사용해도 스프링 부트 버전에 맞는 라이브러리 버전을 가져오고 문제없이 동작하는 걸 확인했는데요. 또한 부트 2.7 버전 출시 전에 나온 1.0.5를 적용해봐도 라이브러리 버전은 동일하고 동작엔 문제가 없었습니다. io.spring.dependency-management 버전은 크게 중요하지 않는걸까요??

  • spring-boot
화이 댓글 2 좋아요 0 조회수 837

properties파일 혹은 yaml파일을 통해 설정 데이터를 관리하는 방법에 대해 질문이 있습니다.

미해결

스프링 부트 - 핵심 원리와 활용

안녕하세요 강의 잘 보고 있습니다. 강의에서 언급해주신 내부 파일을 통한 설정 데이터 관리에 대해 궁금한 점이 있어 질문 드립니다. 강의에 있는 내용대로 소스코드와 설정데이터를 같이 관리한다고 하였을때 깃헙을 통해 버전관리를 하게 되면(public 레포지토리라 가정) 외부에 설정 정보가 노출되는 보안상 문제가 발생하게 되지 않을까요? 해당 이슈를 막기 위한 방법으로는 깃 이그노어에 설정파일을 추가하고 pull할 때 마다 설정파일을 공유를 하는 방법이 있을것 같습니다. 그러나 이는 설정 파일에 대한 버전을 관리하지 못하는 문제점이 발생하기에 바람직한 방법은 아니라 생각합니다. 이러한 상황에 대해서 버전관리 레포를 private으로 하는것 이외의 해결책은 존재하는지 궁금합니다.

  • spring
  • spring-boot
  • prometheus
  • grafana
  • 설정파일
이상민 댓글 3 좋아요 0 조회수 661

java17환경에서 scouter 실행법 문의

미해결

백엔드 개발자 성능 개선 초석 다지기

java17에서 scouter를 구동할수있는 방법이 있을까요? server는 강제적으로 java11로 실행시켰지만 인텔리제이 안에서 VM옵션을 넣어 에이전트와 함께 실행시키면 java.lang.IllegalArgumentException: Unsupported class file major version 61 에러가나네요 ㅜㅜ 서로 호환이 안맞나봅니다.. scouter는 무조건 java11환경에서만 구동해야하나요?

  • java
  • mysql
  • spring-boot
  • cache
  • index
이순용 댓글 2 좋아요 1 조회수 1103

EntityModel과 ResponseEntity의 차이

미해결

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

*UserController @GetMapping("/users/{id}") public EntityModel<User> retrieveUser(@Parameter(description = "사용자 ID", required = true, example = "1") @PathVariable int id) { User user = service.findOne(id); if (user == null) { throw new UserNotFoundException("id-" + id); } EntityModel entityModel = EntityModel.of(user); WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(linkTo.withRel("all-users")); // http://127.0.0.1:8080/users try { return entityModel; } catch (Exception ex) { throw new RuntimeException(); } } @PostMapping("/users") public ResponseEntity<User> createUser(@Valid @RequestBody User user) { User savedUser = service.save(user); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) .toUri(); return ResponseEntity.created(location).build(); } 두 클래스가 비슷하게 느껴져서 질문드립니다. EntityModel 클래스는 Spring HATEOAS에서 지원하는 클래스로 위의 코드로 특정 사용자 정보를 조회하면서 동시에 관련 리소스로 쉽게 이동할수 있는 링크를 제공을 도와주는 클래스고 ResponseEntity클래스는 Spring MVC에서 지원하는 클래스로 HTTP 응답을 제어할 수 있도록 도와주며, 상태 코드, 헤더, 바디 등을 포함할수 있게 도와주는 클래스다. 라고 이해하면될까요 ?? 그렇기 때문에 Get에서는 해당 자원에 대한 추가적인 리소스를 제공하기 위해 EntityModel을 사용하고 Post에는 해당자원의 생성에 대한 201 상태코드를 제공하고 해당자원에 위치를 제공하기위해 ResponseEntity를 사용한것 인가요?? Post에도 반환 값으로 EntityModel을 사용을 하는 경우도 있을까요?? 찾아보니 ResponseEntity<EntityModel<User>> 이렇게 사용하게 되는 경우 상태 코드와 함께 EntityModel<User>를 응답 본문으로 반환이 가능하다고 하는데 그렇다면 함께 사용하는 것이 데이터의 표현과 응답의 정확성을 높여줄것으로 예상이 되는데 이렇게 사용도 자주하는지 궁금합니다!

  • rest-api
  • spring-boot
김준태 댓글 2 좋아요 0 조회수 507

회원가입 테스트 오류

미해결

실전! 스프링 부트와 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로 하면 이런 오류입니다.... 어떻게 해야 할까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
팩맨 댓글 2 좋아요 0 조회수 609

create 시 반환 타입 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] create시에 반환 타입을 Long 을 주는 실무적인 관점에서 이유가 뭘까요?? 어떤 경우에 좋은지 예를 들어 주실 수 있을까요?? https://woojin.tistory.com/115#google_vignette 에서는 아예 void 를 사용하지 말라고하는데 그 이유가 공감이 전혀 안됩니다. 예를 들어 뭐 이런 건가요?? 주문 완료하기 버튼을 딱 누르면 생성된 주문 ID 가 딱 반환이되고 생성된 주문 ID를 바탕으로 조회해서 어떤 주문이 완료되었는지 표시해주게? 그러면 만약에 상품에 대한 평가를 남긴다고 하면 상품 평가 ID 를 반환해봤자 차피 바로 조회할 필요가 없어 보이는데 이러면 void 써도 되는 것 아닌가요??

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
dionisos198 댓글 2 좋아요 0 조회수 282

실습. dto 변환해보기

미해결

코틀린 문법부터 실무까지 (실전 자바->코틀린 변환)

변환도중 85line에서 NullPointException 오류메시지가 나와서 *.http테스트가 안됩니다. 85line 코드는 assertEquals(7, response.getExperienceYears().intValue()); 이고 아래와 같이 오류메세지가 나옵니다. Method invocation 'intValue' may produce 'NullPointerException' CreatePrince.kt에서 @NotNull @Min(0) val experienceYears: Int? = null, null 허용을 해줬는데 NPE를 뱉어서 문의드립니다

  • java
  • spring
  • kotlin
  • spring-boot
  • 객체지향
jheom 댓글 1 좋아요 1 조회수 397

ItemStreamReader 중복실행관련 질문

미해결

스프링 배치

저는 강의를 들으면서, 6번째에서 실패하면 6,7,8,9 이렇게 잡을 실행한다고 이해했는데 아래 코드와 같이 this.index == 7로 바꿨을때 6부터 시작하는게 아닌 5부터 시작하는데 의도한 설명이 맞을까요?? @Override public String read() { String item = null; if (this.index < this.items.size()) { System.out.println("read = " + index); item = this.items.get(index++); } if (this.index == 7 && !restart) { throw new RuntimeException("Restart is required!"); } return item; } // 1번째 실행 open update read = 0 read = 1 read = 2 read = 3 read = 4 update read = 5 read = 6 Exception : Restart is required! // 2번째 실행 open update read = 5 read = 6 read = 7 read = 8 read = 9 update update 가장 최근에 실패한 지점부터 시작한다고 언급해주셨는데, 가장 최근에 실패한 Chunk부터 시작하는 것 같아서 원래 강사님께서 말씀하시려던 부분이 가장 최근에 실패한 Chunk부터 재실행 한다는게 맞을까요?? 맞다면, 중복실행이 될 수 있겠네요 read( ) 메서드에서는 ExecutionContext에 put을 하고 있는게 아니라서 클래스 내부변수 this.index가 변경되더라도 실제 DB에는 적용되지 않는 것 같네요.

  • spring-boot
  • spring-batch
홍찬희 댓글 1 좋아요 0 조회수 261

인기 태그

인프런 TOP Writers

주간 인기글