묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JUnit5에서 @Autowired사용 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 회원도메인 개발 섹션의 회원 기능 테스트 강의를 듣다가 궁금한 점이 생겨서 질문을 남깁니다. 테스트를 할 때 MemberService와 MemberRepository를 사용하기 위해 @Autowired를 이용해 진행하셔서 제가 별도로 AnnotationConfigApplicationContext를 사용해 테스트 코드를 수정해봤더니 첨부한 사진과 같이 테스트에 실패하였습니다. 어쨌든 MemberService와 MemberRepository모두 스프링 컨테이너에 등록됐고, 의존성 주입도 완료됐기 때문에 테스트가 통과될 줄 알았는데, 어느 부분에서 제가 잘못 이해하고 있는 것인지 구글링을 해봐도 명확한 답을 찾지 못해 질문 남깁니다. 제가 야생형 코스를 따라가려고 아직 JPA첫 번째 강의는 보지 못한 상태입니다. 아래는 제가 수정한 코드입니다. AutoAppConfig 클래스를 생성해 @ComponentScan애노테이션도 붙인 상태로 진행했습니다. // MemberServiceTest package japbook.jpashop.service;import japbook.jpashop.AutoAppConfig;import japbook.jpashop.domain.Member;import japbook.jpashop.repository.MemberRepository;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.transaction.annotation.Transactional;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest@Transactionalclass MemberServiceTest {// @Autowired// MemberService memberService;//// @Autowired// MemberRepository memberRepository; AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class); MemberService memberService = ac.getBean(MemberService.class); MemberRepository memberRepository = ac.getBean(MemberRepository.class); @Test public void 회원가입() {// MemberService bean = ac.getBean(MemberService.class);// System.out.println("bean = " + bean); Member member = new Member(); member.setName("Cha1"); Long savedMember = memberService.join(member); Assertions.assertThat(member).isEqualTo(memberRepository.findOne(savedMember)); } @Test public void 중복회원예외() { }} // AutoAppConfig package japbook.jpashop;import org.springframework.context.annotation.ComponentScan;@ComponentScanpublic class AutoAppConfig {}
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Item 엔티티와 OrderItem 엔티티와의 일대다 관계 매핑
안녕하십니까 Order 엔티티와 OrderItem 엔티티의 일대다 관계에서는 @OneToMany(mappedBy = "order")private List<OrderItem> orderItems = new ArrayList<>();위와 같이 매핑을 해줬는데Item 엔티티와 OrderItem 엔티티의 일대다 관계에서는 매핑을 안해줘도 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 실행시 오류
실행시 다음과 같은 에러가 발생합니다. initializationError() build.gradle 파일코드는 아래와 같습니다. plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java'}group = 'jpabook'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" }}test { useJUnitPlatform()}ylm 파일 띄어쓰기도 맞췄고, url의 MVCC=TRUE도 제거했으며build Tools > Gradle 도 IntelliJ IDEA로 맞췄는데어느부분이 문제인지 모르겠습니다.H2 콘솔도 잘 켠 것 같습니다만.. 어디가 잘못된걸까요..?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의는 샀지만..
안녕하세요. 입문강의를 다 듣고 이제 다음 강의로 넘어가 보려고 합니다. 하지만 입문강의를 들었을때 좀 벅차다라는 생각이 들었습니다. 흐름은 알겠으나, 이해가 안되는부분을 생각해보면 .(점)이나 ()(괄호) 부분의 사용처 입니다. 막상 제가 혼자 개발을 한다고 생각해보면 ex) member1 = new MMR(); member2 = new MS(member1); Member finMember = memberService.finOne(SaveId).get(); Member member = em.find(Member.class, id); @GeneratedValue(strataegy = GenerationType.IDENTITY) 위 예제처럼 ()안에 들어갈 때와 의미 어떨때 들어가는지, .get()이 추가 의미 및 언제 사용하고 어느때 사용 하는지, Member.class 처럼 .class는 언제 어느때 들어가고 왜들어가는지.. @GeneratedValue에 GenerationType.IDENTITY 선택은 왜 했는지.. Ctrl + Q누르면 설명이 나오긴하는데 감이 안잡힙니다. 어느 핀트를 잡고 그 원리대로만 가면 되는건지... 강사님이 말씀하신것처럼 망망대해처럼 제가 뭐가 부족해서 어떻게 공부를 해야 할 지 잘 모르겠습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
constructor 생성 후
안녕하세요 Constructor 생성 후 강의에서는 memberService가 빨간줄인데 저는 빨간줄이 안나옵니다. 혹시 이유가 있을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
static 내부클래스의 인스턴스화에 대한 질문
화면에서 Hello class를 static으로 정의한 이유가 따로 있는 건가요??? "helloApi 메서드" 블록 내부 첫줄에서. new연산자를 통해, Hello 인스턴스를 만드는데, 그러면 Hello class는 굳이 static이 아니라, static을 지워버려도 상관 없을거 같다는 생각이 들어서요. 혹시 static을 붙인 이유가 따로 있는 건가요? 소스에서 static을 지워버려도 구문오류같은건 보이지 않더라구요. 제 자바 문법의 깊이가 얕아서 그런지 몰라도, static으로 정의한 메서드나 클래스 같은 경우, 보통 인스턴스화 시키지 않는것 같아서요 그리고 Hello class가 static으로 정의되어 있어서, 별도의 인스턴스 생성없이, Hello.setName()으로 접근가능할 줄 알았는데... 구문오류가 발생하던데... 이건 왜일까요...? [
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository에서 findByName 메서드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 저는 중복 이름 허용하려고 이렇게 두신 줄 알았는데 여기서 보니까 중복 이름을 허용하지 않으시더라구요 그럴거면 굳이 List로 반환 받을 필요 없고 getSingleResult로 받아도 상관 없는 건가요? 실제 성능이나 이런 건 아무 관계 없겠지만 의미상 저게 더 맞는 것 같아서요. 그리고 id가 서비스에서 추가하는 시점에서 생성되어 있지 않기 때문에 이름으로 검증하는 것으로 알고 있는데, 만약 중복 이름을 허용하고 싶으면 어느 시점에서 검증해야 할까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
modelmapper 와 service계층에서 리턴값에 대해 질문있습니다
modelmapper의 경우 자주 사용될 것 같은데bean으로 등록 해두고 사용하는게 좀 더 유리할까요?? userEntity -> userDto로 변환하여 리턴할때 기존에 파라미터로 받았던 dto값을 그대로 넘겨줘도 될 것 같은데요! 굳이 변환해서 넘겨주는 의도가 어떤것인지 궁금합니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[JPA와 DB 설정, 동작확인] import Assert 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 현재 <JPA와 DB 설정, 동작확인> 내용을 (09:13) 따라가면서 듣고 있는데 import하는 Assert 부분에서 오류가 납니다. <강의> <내 코드> 구글링해서 찾아보니까 (https://aonee.tistory.com/2) build.gradle에 밑 내용 넣으면 된다고 하는데 다른 방법이 있나요? 강의에서는 안 넣어도 잘 되는 것 같아서 여쭤봅니다. 또 제가 devtools 동작오류가 있어서 (https://www.inflearn.com/course/스프링부트-JPA-활용-1/unit/24277?tab=community&q=152186) 질문에서 알려준 사이트 내용대로 build.gradle에 apply plugin: 'idea'를 적었습니다. 저는 이 부분을 바꾸지 않는 선에서 오류를 해결하고 싶어서 다른 방법을 찾고 싶습니다. 추가) 비슷한 질문 보니까 build.gradle를 올리면 좋다고 하셔서 추가합니다. https://www.inflearn.com/course/스프링부트-JPA-활용-1/unit/24279?tab=community&q=580709 <bulid.gradle> plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java'}apply plugin: 'idea'group = 'jpabook'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') { useJUnitPlatform()}
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 No tests found for given includes: [jpabook.jpashop.MemberRepositoryTest](--tests filter) 이 에러가 나서 도움을 요청합니다.
MemberRepositoryTest을 실행 했는데 아래와 같이 에러가 나옵니다 Execution failed for task ':test'.> No tests found for given includes: [jpabook.jpashop.MemberRepositoryTest](--tests filter) * Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights. MemberRepositoryTest코드 package jpabook.jpashop;import static org.junit.Assert.*;import jpabook.jpashop.Member;import jpabook.jpashop.MemberRepository;import org.assertj.core.api.Assertions;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.annotation.Rollback;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.transaction.annotation.Transactional;import javax.persistence.EntityManager;@RunWith(SpringRunner.class)@SpringBootTestpublic class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() { Member member = new Member(); member.setUsername("memberA"); Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); //JPA 엔티티 동일성 보장 }} application.yml코드 spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: truelogging.level: org.hibernate.SQL: debug# org.hibernate.type: trace build.gradle코드 plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java'}group = 'jpabook'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'junit:junit:4.13.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') { useJUnitPlatform()}인프런 질문에도 찾아보고 구글링도 해봤는데 뭐때문인지 몰라 질문을 합니다 도와주세요ㅠ아래는 제코드 구글드라이브 공유링크입니다. https://drive.google.com/drive/folders/1h5v97WrZW3rjxwzl_G2_73a17sXsQYpw?usp=sharing
-
미해결스프링 시큐리티
savedRequest.getRedirectUrl()가 null이 들어가서 로그인 후 localhost:8080/null이 나옵니다
안녕하세요. localhost:8080/로 들어가서 나오는 시큐리티의 기본 로그인 페이지에서 아무 계정으로 로그인을 하면 localhost:8080/null이 나옵니다. localhost:8080/login로 request를 보냈을떄도 로그인을 하면 localhost:8080/null이 나옵니다 response header를 보면 Location: http://localhost:8080/null 로 나와있고 디버그시에도 savedRequest가 null인게 확인되는데 로그인전에 request로 보낸 url이 httpSessionRequestCache에 저장돼서 로그인 이후 제대로 이동하려면 뭘 수정해야되나요? logout이나 rememberme같은 부차적인 요소들은 가독성을 위해 생략했습니다. 밑에는 코드입니다. // 메모리 방식으로 사용자를 생성하는 configure()는 생략함 @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login").permitAll() .antMatchers("/user").hasRole("USER") .antMatchers("/admin/pay").hasRole("ADMIN") .antMatchers("/admin/**").access("hasRole('ADMIN') or hasRole('SYS')") .anyRequest().authenticated(); http .formLogin() // .loginPage("/loginPage") .defaultSuccessUrl("/", true) .failureUrl("/login") .usernameParameter("userId") .passwordParameter("passwd") .successHandler(new AuthenticationSuccessHandler() { @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { System.out.println("authentication:"+authentication.getName()); // savedRequest가 null로 전달되는게 문제! RequestCache requestCache=new HttpSessionRequestCache(); SavedRequest savedRequest=requestCache.getRequest(request,response); String redirectUrl=savedRequest.getRedirectUrl(); response.sendRedirect(redirectUrl); } }) .permitAll(); // http.logout() 생략 // http.rememberMe() 생략 // http.sessionManagement() 생략 http.exceptionHandling() // .authenticationEntryPoint(new AuthenticationEntryPoint() { // @Override // public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { // response.sendRedirect("/login"); // } // }) .accessDeniedHandler(new AccessDeniedHandler() { @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { response.sendRedirect("/denied"); } }); } @RestController @RequestMapping("/") public class SecurityController { @GetMapping public String index() { return "home"; } @GetMapping("loginPage") public String loginPage() { return "loginPage"; } @GetMapping("user") public String user() { return "user"; } @GetMapping("admin/pay") public String adminPay() { return "adminPay"; } @GetMapping("admin/**") public String admin() { return "admin"; } @GetMapping("login") public String login() { return "login"; } @GetMapping("denied") public String denied() { return "denied"; } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
connect-distributed.bat 오류
안녕하세요. 윈도우 환경에서 강의를 듣던 중에 막히는 부분이 있어서요. PS C:\Users\hoirias\confluent-6.1.0> .\bin\windows\connect-distributed.bat .\etc\kafka\connect-distributed.properties Error: Could not find or load main class org.apache.kafka.connect.cli.ConnectDistributedCaused by: java.lang.ClassNotFoundException: org.apache.kafka.connect.cli.ConnectDistributed 아직 properties 파일 등을 수정하진 않은 상태인데요, 강의를 보면 수정 전에도 돌아는 가야 하는걸로 보여서요. 자바 버전은 현재 18.0.1.1을 사용하고 있으며, 컨플루언트 doc 참조하여 11.0.4까지 낮췄는데도 동일한 현상 입니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring.io
버전이 달라서 그런지(최신) spring boot features 가 보이지 않습니다 ㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
자바8로 하면 안되는 걸까요?
자바11로 하는 이유가 궁금합니다~~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberForm의 패키징 위치?
강의 초반부에 MemberForm객체를 domain 패키지가 아닌 controller 패키지에 생성하시는 이유가 MemberForm 객체의 주 사용 클래스가 controller여서가 맞는지 궁금합니다..!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의자료
영한님이 강의할 때 사용하시는 강의자료(?)는 따로 업로드 안되어있는건가요? 제가 못찾는거인지 궁금합니다.... 베어라고 되어있는데 이 자료가 따로 업로드되어 있는지 궁금합니다..!!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Transactional generate key 질문
안녕하세요! '스프링 통합 테스트' 강의 중 궁금한 사항이 생겨서 올립니다. @Transactional 어노테이션을 붙이면 각 테스트 항목 실행 후 롤백한다고 하셨는데, insert문 실행됐을 때 자동 업데이트되는 키 값은 계속 증가합니다. 왜 이 값은 롤백이 되지 않는지 문의드립니다. 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
야생형 코스대로 진행하려는데
야생형 커리큘럼 순서가 어떻게되는지 알수있을까요? 구글링해도 안나와서요 ㅠㅠ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
질문이 하나 있습니다
api gate way 서버에서 refresh를 해도 모든 서버에 다 적용이 되는건가요 ? 가령 ecommerce.yml파일에서 토큰 정보를 바꿨는데 api gate way 서버 api로 refresh를 해도 유저 서비스에 token도 바뀌는 건가요? 강의에서는 그렇게 나오긴했는데 맞는지 확시히 잘 몰라서 질문드립니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Aspect 사용할수 없음
Aop 섹션 Aop적용 강의에서 @Aspect 를 사용하시는데 저는 사용할수가 없습니다.. 라이브러리를 따로 추가해야하나요?