묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
request scope
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]LogDeomContrller에서 MyLogger myLogger = myLoggerProvider.getObject(); 할 때 MyLogger 객체를 생성해서 반환하는 것으로 인지했습니다. 그런데 LogDeomService에서 다시 한 번 MyLogger myLogger = myLoggerProvider.getObject(); 를 할 때 어떤 원리로 LogDeomContrller에서 생성된 MyLogger객체를 가져올 수 있는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품등록 클릭시 WhiteLabel 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품등록 코드를 작성했고 전부 알맞게 친것 같은데 상품등록 버튼을 누르면 위 Whitelabel Page가 뜹니다 이유를 알 수 있을까요?
-
해결됨실전! 스프링 데이터 JPA
기초적인 질문입니다...
public void changeTeam(Team team) { this.team = team; team.getMembers().add(this);}강의를 들었을 때 양방향 연관관계에서는 한쪽에만 작업을 해주면 안되고 양쪽을 작업해줘야 하기 때문에 위와 같은 코드를 작성한다고 알고 있습니다.위 코드에서 팀 변경으로 인해 새로운 팀에 member를 추가해주고 기존의 팀의 list에서 제거해주는 작업은 별도로 진행하지 않아도 되는지 궁금하여 질문 남깁니다...한쪽에 설정해주면 JPA가 알아서 양방향 연관관계에 대해서 정리해주는건가 싶기도 하고 잘모르겠어서 질문 드립니다
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
스프2탄 PPT파일은 없나요?
강의 설명해주시는거 PPT파일 확인하면서 보려고하는데 PPT파일은 없는거같아서요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JapMemberRepository 클래스에서 메서드의 리턴값에 관한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Overridepublic Member save(Member member) {em.persist(member); return member;}여기에서 스펙을 맞추기 위해 return값을 넣어준다고 하셨는데요, 이게 무슨 의미인지 궁금합니다!혼자 코딩을 하게 될 경우 return값이 필요한지, 어떤 값으로 리턴해야 하는지 판단하려면 어떻게 해야 하나요?
-
해결됨스프링 핵심 원리 - 기본편
@Configuration
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Configuration을 지정해주지 않아도 스프링 컨테이너 파라미터에 등록하게 되면 싱글톤이 보장되는게 맞나요? 맞다면 그 이유는 scope의 defualt가 싱글톤이기 때문인가요? @Configuration의 역할이 CGLIB를 사용해서 싱글톤을 유지해주는걸로 알고있는데 만약 1번에 가정이 맞다는 경우에 굳이 @Configuration을 사용하지 않아도 싱글톤을 유지해줄텐데 @Configuration을 사용하는 이유가 궁금합나다.
-
미해결실전! 스프링 데이터 JPA
JOIN 관련해서 질문드릴게 있어요!
안녕하세요. 수업 듣다가 갑자기헷갈려서 여쭤볼게 생겼어요.@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) " + "from Member m join m.team t")위 같은 쿼리에서 Member entity에 t.name이란게 없으니 저는 fetch join을 써야 한다고 처음에 생각했거든요.일반 join은 조회시 join 대상이 되는 entity는 조회 대상이 되는 칼럼에서 불러지지 않고, 불러진다면, 따로 쿼리가 동작하기 떄문에 N+1 이 발생하는 걸로 알고있었는데, 수업에서 log보니깐 select 쿼리에서 t.name 도 같이 한 쿼리에 조회되는게 보여서 갑자기.. 멍해지더라구요 ㅋㅋ;;;저는 member 따로 1번, team따로 1번 돌거라고 예상했었는데... 제가 놓친 부분이 있을까요?? 답변 미리 감사드리겠습니다.
-
해결됨실전! 스프링 데이터 JPA
isNew() 메서드의 구현체 문의
안녕하세요! isNew() 메서드의 구현체가 정확히 무엇인지 확인하고 싶어 질문드립니다!SimpleJpaRepository의 save() 메서드 내부에서 isNew() 메서드가 호출될 때,if (entityInformation.isNew(entity)) {처럼 호출되는데요, 이 때 isNew 가 org.springframework.data.repository.core.EntityInformation 인터페이스의 추상 메서드인 것을 확인했습니다.그런데 이 isNew 의 구현체가 여러개라서 하나씩 확인해보니 강의에서 설명해주신 내용이 추상 클래스 org.springframework.data.repository.core.support.AbstractEntityInformation 에 구현된 내용과 같더라고요.// AbstractEntityInformation.isNew() public boolean isNew(T entity) { ID id = getId(entity); Class<ID> idType = getIdType(); if (!idType.isPrimitive()) { return id == null; } if (id instanceof Number) { return ((Number) id).longValue() == 0L; } throw new IllegalArgumentException(String.format("Unsupported primitive id type %s", idType)); }그런데 AbstractEntityInformation 역시 추상 클래스이다 보니 정확한 구현체를 찾기가 힘든 상태입니다. 질문) SimpleJpaRepository의 save() 내부에서 사용되는 isNew() 의 구현체는 정확히 어떤 클래스인가요? 또, 이러한 구현체가 정확히 무엇인지 알 수 있는 방법이 있을까요?확인해주셔서 감사합니다. :D
-
미해결스프링 시큐리티 OAuth2
프론트와 백으로 나누어진 형태에선, Authorization Code Grant Type을 어떻게 구현하나요?
안녕하세요 강의 잘 듣고있습니다.저는 강의에서 사용하고있는 Spring + Thymeleaf 구조를 사용하고 있지않습니다.spring + react와 같이 백엔드와 프론트로 나누어져 있고 rest api방식으로 통신하는 구조입니다. 구글링해본 결과. rest api 구조에서 소셜로그인을 시도할경우.대부분 소셜로그인을 전부 프론트에서만 처리하고있었습니다.즉, Implict Grant Type이죠.하지만 강의에서 강사님께서 이 방법은 Deprecated되었으며 바람직하지 않다고 하셨습니다. 그래서 저는 Authorization Code Grant Type으로 인증을 받으려 시도했습니다만.구글링을 해봐도 죄다 Implict 방식만나오고 Code방식은 나오지 않아 어려움을 겪고있습니다. 그냥 모바일앱이나 react와 같은 프론트앱에서는 Implicit Type으로 하는게 최선일까요? 이 강의의 다른 질문글들을 읽어보았는데도 정확한 해결방법은 제시되어 있지 않는것 같아재차 질문글을 작성하게 되었습니다. 읽어주셔서 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
unsupported Post method [405 error]
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술섹션 5. 회원 웹 기능 -등록 을 수강하고 있습니다. 저는 VSCODE 로 IDE를 활용하고 있고, 코드서버를 쓰고 있습니다. 강의에서 배운 내용 그대로 코드를 쳤는데도 불구하고 위의 그림과 같이 Unsupported POST method 라고 뜹니다.혹시 몰라서 마지막에 IDE 화면도 첨부했습니다.package donghun.donghunspring.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import donghun.donghunspring.domain.Member; import donghun.donghunspring.service.MemberService; @Controller public class MemberController { //memberService new 객체를 만드는 게 아니고, 연결 시켜줘야 한다 : 생성자 이용. private final MemberService memberService; //스프링이 뜰 때 Controller 에 service와 repository 연결한다. annotation 붙여 (service, repository) //연결하려면 service 와 repository 를 스프링 빈에 등록해야 하므로 service, repository 각각에 @Service, @repository 등록. //또는 직접 자바코드 작성하여 Bean 등록할 수 있음. @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } @GetMapping("/members") public String membersForm(){ return "members/mF"; } @PostMapping("/members/new") public String create(MemberForm form){ Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } @GetMapping("/members/new") public String createForm() { return "members/createMemberForm"; } //post 방식으로 form 입력하므로 postmapping 이 선택된다. } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ template : createMemberForm.html //두 개의 코드가 첨부가 안되므로 절취선 이용해 붙이겠습니다. <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <body> <div class="container"> <form action="/members/new" method="post"> <div class="form-group"> <label for="name">이름</label> <input type="text" id="name" name="name" placeholder="이름을 입력하세요"> </div> <button type="submit">등록</button> </form> </div> <!-- /container --> </body> </html>
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
clearStore() 메서드의 작성 위치 의문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]MemoryMemberRepository 클래스에서public void clearStore() 메서드를 추가해서 테스트 실행 시 사용하는데,Repository클래스의 목적에 맞지 않게 테스트에서만 사용하기 위한 clearStore() 메서드를 Repository클래스에 정의하여 적어 주는 게 일반적이고 흔히 쓰는 방식인가요 ?테스트 케이스에서 따로 save된 정보를 삭제하는 방식으로 하는 게 더 올바른 방식은 없고 그 방식을 안하는 이유가 있을까요 ? 궁금해서 질문드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 인터셉터가 똑바로 동작하지 않아 질문드립니다.
안녕하세요, 이 강의를 수강한 프로젝트를 진행 중인 학부생입니다.코드를 구성하던 중 이해가 가지 않는 현상이 발생하여 질문드립니다. LoginInterceptor.javapackage Alchole_free.Cockpybara.interceptor; import Alchole_free.Cockpybara.constant.SessionLoginConst; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @Slf4j //@Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); log.info("session = {}", session); if (session == null || session.getAttribute(SessionLoginConst.LOGIN_MEMBER) == null) { log.info("로그인되지 않은 사용자"); response.sendRedirect("/login"); return false; } log.info("정상 요청"); return true; } } WebConfig.javapackage Alchole_free.Cockpybara.config; import Alchole_free.Cockpybara.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //@Slf4j @Configuration //@RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { // private final LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/", "/join", "/login", "/css/**", "/*.ico", "/error"); } } 위와 같이 코드를 구성하고 어플리케이션을 실행시켜도 인터셉터가 똑바로 등록되지않더군요. 디버깅을 해봤는데 아예 Configuration 자체가 적용이 안되는 것 같습니다.어떤 문제인지 도무지 파악할 수 없어 질문드립니다. 혹시 몰라 설정 파일들도 올립니다. build.gradleplugins { id 'java' id 'org.springframework.boot' version '2.7.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'Alchole_free' version = '0.0.1-SNAPSHOT' java { 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-web' implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //swagger 설정 implementation group:'io.springfox', name:'springfox-swagger2', version:'2.8.0' implementation group:'io.springfox', name:'springfox-swagger-ui', version:'2.8.0' } tasks.named('test') { useJUnitPlatform() } application.properties# ?????? ?? ?? spring.datasource.url=jdbc:mariadb://localhost:3306/cockpybara spring.datasource.username=root spring.datasource.password=cockpybara spring.datasource.driver-class-name=org.mariadb.jdbc.Driver # JPA ?? spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.format_sql=true //JPA ???? Hibernate? ????? ???? SQL? formating?? ?? spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect #show parameter binding logging.level.org.hibernate.type.descriptor.sql=DEBUG logging.level.org.hibernate.SQL=DEBUG
-
미해결
스프링 인터셉터가 동작하지 않아 질문드립니다.
안녕하세요, 스프링 MVC 강의를 완강이후 프로젝트를 수행중인 학부생입니다.로그인 기능 구현과 관련하여 강의 예제 코드를 참고하며 구현하던 중이해할 수 없는 현상이 발생하여 질문 드립니다. 코드LoginInterceptor.javapackage Alchole_free.Cockpybara.interceptor; import Alchole_free.Cockpybara.constant.SessionLoginConst; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @Slf4j //@Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); log.info("session = {}", session); if(session==null || session.getAttribute(SessionLoginConst.LOGIN_MEMBER)==null){ log.info("로그인되지 않은 사용자"); response.sendRedirect("/login"); return false; } log.info("정상 요청"); return true; } } WebConfig.javapackage Alchole_free.Cockpybara.config; import Alchole_free.Cockpybara.interceptor.LoginInterceptor; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //@Slf4j @Configuration //@RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { // private final LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/", "/join", "/login", "/css/**", "/*.ico", "/error"); } } 문제위와 같이 코드를 구성하고 애플리케이션을 동작시켰는데, 인터셉터가 아예 로그에 남지않는(생성되지 않는 것으로 보이는) 현상이 발생하였습니다. 관련하여 구글링을 하다보니인터셉터 클래스를 빈으로 등록해주는 형태가 아니면 동작하지 않을 수 있다고 하여,빈으로 등록하고 WebConfig 클래스에서 생성자를 통해 주입받는 형태로 구현도 해보았는데여전히 같은 문제가 발생하더군요. 도대체 어느 부분에서 문제가 발생하는 것인지파악하기가 힘들어 고민끝에 질문드립니다. 혹시 몰라 아래 빌드, 설정 파일도 첨부합니다. 문제 실행 화면/hello 로 Controller @GetMapping 메서드를 구현해놓고 요청을 보냈으나 인터셉터 관련 로그가기록되지 않는 모습입니다.build.gradleplugins { id 'java' id 'org.springframework.boot' version '2.7.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'Alchole_free' version = '0.0.1-SNAPSHOT' java { 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-web' implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //swagger 설정 implementation group:'io.springfox', name:'springfox-swagger2', version:'2.8.0' implementation group:'io.springfox', name:'springfox-swagger-ui', version:'2.8.0' } tasks.named('test') { useJUnitPlatform() } application.properties# ?????? ?? ?? spring.datasource.url=jdbc:mariadb://localhost:3306/cockpybara spring.datasource.username=root spring.datasource.password=cockpybara spring.datasource.driver-class-name=org.mariadb.jdbc.Driver # JPA ?? spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.format_sql=true //JPA ???? Hibernate? ????? ???? SQL? formating?? ?? spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect #show parameter binding logging.level.org.hibernate.type.descriptor.sql=DEBUG logging.level.org.hibernate.SQL=DEBUG
-
미해결스프링 핵심 원리 - 기본편
의존관계 자동 주입 - 조회한 빈이 모두 필요할 때
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]조회한 빈이 모두 필요할 때, List, Map을 사용하는 예제에서요 DiscountService 클래스는 Map으로 모든 DiscountPolicy를 주입받는다고 했는데 생성자로 의존관계가 주입되는건가요??그리고 만약 생성자로 의존관계가 주입된다고 하면 Map<String, DiscountPolicy> 에서 String 타입은 빈으로 등록된 게 없어서 의존관계가 주입될 수 없는거 아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa 테이블 생성 시 질문
로컬서버에서 appication.yml 에jpa:hibernate:ddl-auto: create이렇게 설정하면 테이블이 전체 지워지고 다시 생성되는 것까지 이했습니다. 그런데 만들어놓은 테이블은 그대로 두고 새로운 컬럼이나 테이블을 추가한거만 업데이트를 하면 좋을 거같은데 구글링 해봐도 잘모르겠네요 ㅜ 자꾸 테이블을 지우고 다시 생성하니까 테스트하기가 좀 힘든거같아요. 혹시 방법이 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션의 필요성에 대해 질문 좀 드리겠습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]먼저 다 대 다 관계라고 하겠습니다.A라는 엔티티와 B라는 엔티티가 다대다로 묶여져 있고 그 중간테이블을 C라고 하겠습니다.이럴 경우에 걍 컬렉션 배치size으로 하는게 아니라 중간 테이블 B로 하면 안되나요?요약하면 강의에서는 페이징이 필요하지 않으면 join fetch로 페이징이 필요하다면 batch size를 활용하라 라고 되어있는데 역으로 @ManyToOne이 있는 다대 일의 다 쪽에서 jon fetch로 모든 것을 해결하면 안되는 건가요?? 아 그리고 질문이 또 있는데 위에서 B에서 A와 C를 fetch join으로 모두 가져오게 설계해도 괜찮죠??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderServiceTest 시 OrderItem 을리스트로 넘길때
안녕하세요. 강의 기준으로 응용하고 싶어서 orderitem을 한개가 아닌 여러개생성하고 주문하려고 하고 있는데 테스트java @Test @Rollback(value = false) public void 상품주문() throws Exception{ Member member = new Member(); member.setName("회원1"); member.setLoginId("admin"); member.setPassword("admin"); member.setEmail("admin"); em.persist(member); Item item = new Item(); item.setItemName("티셔츠1"); item.setPrice(100000); em.persist(item); OrderItem order1 = OrderItem.createOrderItem(item, item.getPrice(), 2,"blue","L"); OrderItem order2 = OrderItem.createOrderItem(item, item.getPrice(), 4,"blue","L"); List<OrderItem> orders = new ArrayList<>(); orders.add(order1); orders.add(order2); Long orderId = orderService.order(member.getId(), item.getId(), orders); Order findOrder = orderRepository.findOne(orderId); Assert.assertEquals("상품 주문시 상태는 : ", OrderStatus.ORDER,findOrder.getOrderStatus()); }OrderService.java @Transactional public Long order(Long memberId, Long itemId, OrderItem... orderItems) { //엔티티 조회 Member member = memberRepository.findOne(memberId); Item item = itemRepository.findOne(itemId); List<OrderItem> orders = new ArrayList<>(); //주문상품 생성 for(OrderItem order : orderItems){ OrderItem orderItem = OrderItem.createOrderItem(item,item.getPrice(),order.getQuantity(),order.getColor(),order.getSize()); orders.add(orderItem); } // 주문 생성 Order order = Order.createOrder(member, (OrderItem) orders); //주문 저장 orderRepository.save(order); return order.getId(); }OrderItem... orderItems 파라미터가 list를 받지 못하는거같은데 혹시 어떻게 해야할까요?
-
미해결스프링 핵심 원리 - 기본편
롬복
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]롬복 관련해서 질문이 있는데요 @RequiredArgsConstructor 쓰면 자동으로 생성자에 의존관계가 주입되는 건가요??
-
미해결스프링 핵심 원리 - 기본편
의존관계 자동 주입 - 필드주입
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]의존관계 자동주입 부분 강의에서 필드 주입이라는거는 스프링 컨테이너에서 빈을 찾아서 주입해주는걸 말하는 건가요?? 필드 주입은 정확히 어떤 때 쓰는건가요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:for 사용 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다음 내용에서 th:each로 반복문을 사용하고 있는데 th:for 반복문을 다시 사용하는 이유는 뭔가요? <!-- multi checkbox --> <div> <div>등록 지역</div> <div th:each="region : ${regions}" class="form-check form-check-inline"> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div> </div>