묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
스프링 빈의 라이프사이클 내에서
안녕하세요, 다른 분들의 질문을 참고해봐도 혼자서 이해하는게 너무 버거워서 질문을 남깁니다. 여기저기 출력문을 찍어보니 ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); 에서 "스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백" 까지 한번에 된다는 사실을 알았습니다. public class BeanLifeCycleTest { @Test public void lifeCycleTest() { System.out.println("rmfjadjswptodtjdeh;a??1"); ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); System.out.println("rmfjadjswptodtjdeh;a??2"); NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); } @Configuration static class LifeCycleConfig { @Bean public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); //networkClient.setUrl("http://hello-spring.dev"); System.out.println("stestesatestasetasetaset"); return networkClient; } } } 1. setUrl은 생성자 주입처럼 동시에 의존관계가 주입되는게 맞을까요?? 2. 여기서 setUrl은 다른 분들의 질문을 보니 값 주입이라고 하던데 의존관계 주입이나 값 주입이나 비슷하다고 이해하고 넘어가면 될까요?? 3. afterPropertiesSet() 은 따로 호출을 하지 않았는데, 어떻게 호출을 하는건가요?? 4. 초기화 콜백은 '무조건' 호출이 되는 걸까요? 실제로 setUrl을 주석 처리해도 콜백함수가 호출이 됩니다. 질문이 조금 많지만 답변 부탁드립니다 ㅠㅠ 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
파라미터 질문
@Configurationstatic class SameBeanConfig { @Bean public MemberRepository memberRepository1() { return new MemoryMemberRepository("10"); } @Bean public MemberRepository memberRepository2() { return new MemoryMemberRepository("1000"); }} 2분59초 경에 MemoryMemberRepository("10") 이렇게 파라미터 값을 넘겨줄 수 있다고 하셨는데 MemoryMemberRepository 클래스에는 파라미터 1개를 받는 생성자가 없는데 어떻게 쓸 수 있는건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
다운캐스팅에 대해서 질문이 있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]무지한 질문을 드려서 정말 죄송합니다. 다운캐스팅 하실때에 원래 업캐스팅을 진행하고 다운캐스팅이 가능한것으로 알고있는데 구글링을 해봐도 RequestServlet -> HttpServletRequest로 다운캐스팅 가능한 이유를 모르겠습니다.. 답변 해주시면 감사하겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
카테고리 다대다 매핑 => 다대일, 일대다로 매핑
@ManyToMany를 다대일 일대다 관계로 바꿔보았는데 이렇게 바꾸는 게 맞을까요?? <CategoryItem.java> package jpabook.jpashop.domain;import jpabook.jpashop.domain.item.Item;import lombok.Getter;import lombok.Setter;import javax.persistence.*;@Entity@Getter @Setterpublic class CategoryItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "category_item_id") private Long id; @ManyToOne @JoinColumn(name = "category_id") private Category category; @ManyToOne @JoinColumn(name = "item_id") private Item item;} <Category.java> package jpabook.jpashop.domain;import jpabook.jpashop.domain.item.Item;import lombok.Getter;import lombok.Setter;import javax.persistence.*;import java.util.ArrayList;import java.util.List;import static javax.persistence.FetchType.*;@Entity@Getter @Setterpublic class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "category_id") private Long id; private String name; @ManyToOne(fetch = LAZY) @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>();} <Item.java> package jpabook.jpashop.domain.item;import jpabook.jpashop.domain.Category;import jpabook.jpashop.domain.CategoryItem;import lombok.Getter;import lombok.Setter;import javax.persistence.*;import java.util.ArrayList;import java.util.List;@Entity@Getter @Setter@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name = "DTYPE")public abstract class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "item_id") private Long id; private String name; private int price; // 가격 private int stockQuantity; // 재고수량 @OneToMany(mappedBy = "item") private List<CategoryItem> categoryItems = new ArrayList<>();}
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
객체지향에 대해 궁금한 점
안녕하십니까 강사님 객체지향에 대해 궁금한 점이 생겨 질문드립니다. 17:05에서 order라는 메서드 안에 createOrderItem, createOrder 메서드들이 있습니다. 이 두 메서드는 OrderService 입장에서 OrderItem과 Order한테 "니네가 무슨 일은 하는지는 모르겠지만, 나는 이 두 개를 받아서 주문을 생성한다"라는 말이잖아요? OrderService가 하는 일은 OrderItem과 Order에서 받은 것들을 이용하여 주문 생성 OrderItem이 하는 일은 주문 상품 생성 Order가 하는 일은 주문 생성 그렇다면 이게 객체지향성을 나타내는 것일까요? 감사합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThat 오류
이번 강의에서 회원 서비스 테스트 클래스에서 assertThat 오류가 발생합니다. 다른 클래스에서 assertThat를 이용할 때는 잘 사용이 되었지만 이번 클래스에서는 오류가 뜨네요 오류 내용 The method assertThat(String, T, Matcher<? super T>) in the type Assert is not applicable for the arguments (String) 임포트 내용 구글링을 해서 많은 방법을 써봤지만 해결이 되지 않았습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
addItemV1 메소드 파라미터 타입 질문 드립니다.
addItemV1 메서드에서 @RequestParam으로 요청 파라미터 변수를 받을 때 price는 int 타입이고, quantity는 Integer 타입으로 선언하신 이유가 무엇인지 궁금합니다. @PostMapping("/add")public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model) { Item item = new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item",item); return "basic/item";}
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSON 형식으로 파싱하는 이유?..
json도 문자라서 객체로 변환시켜주어야 된다고하셨는데 그이유가 궁금합니다.{"username":"jeong","age":"24"}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4분 20초에 동시성에 문제가 있을수 있다고 말씀해주셨는데요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오[질문 내용]4분 20초에 실무에서는 동시성을 고려해야 할수 있다고 말씀해주셨는데요. 저코드에서 동시성에 관련된 문제가 어떻게 발생이 되는지 알려주시면 감사하게습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member_Id, item_id,order_id 가 공유되는거 같은데 따로 할려면 어떻게 해야하나요?
4:33에 order 하나 만들었는데 #3이 되어있어서 확인해보니까 멤버 하나 만들면member_id=1 아이템 하나 만들면 item_id=2 주문 하나 만들면 order_id=3 이런식으로 id가 공유되는거 같은데 @GeneratedValue 때문인가요? 각각 따로 id를 만들어줄려면 어떻게 해야하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Rest API 로 받을 때의 검증에 대해 질문있습니다.
Bean Validation에서 발생한 @NotBlank, @Max 등을 이후 강의에 나오는 RestControllerAdvice에서 잡아서 handling 하는 방법도 있을까요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요 영한님 쿠키 관련 질문이 있습니다. :)
안녕하세요 영한님 :) 강의 정말 잘 듣고 있습니다. 다름이 아니라 질문이 있는데요 쿠키를 설정할 때 하위 도메인은 같이 쿠키가 공유 된다고 하셨었는데 하위 도메인이 아니라 아예 다른 도메인간에 쿠키를 공유하거나 다른 도메인에 쿠키를 설정할 수 도 있는 것인가요?? 안된다는 글도 봤었고 SameSite 속성을 None 으로 설정하면 된다는 것도 보았었는데 정말 다른 도메인간에 쿠키를 설정 또는 공유할 수 있는 것인지 궁금합니다. :) ex) exampleAAA.com exampleBBB.com 이렇게 서로 다른 도메인간 쿠키 공유 or 설정
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
run을 클릭할 때 실행이 되지 않아요
강의 내용 중 run을 실행시키는 부분에서 왼쪽에 화살표 모양이 나타나지 않습니다 상단에 있는 목록 중 run을 눌러 실행을 하면 밑의 이미지와 같은 문구만 나타납니다
-
미해결스프링 핵심 원리 - 기본편
회원 도메인 개발 05:52
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 안녕하세요. 질문 있습니다. store.put(member.getId(), member)에서 value로 member.getName()이 와야하지 않나요? 왜 member인지 모르겠습니다..ㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
사용되는 Servlet
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이번에 내용을 정리하면서 깨달은 사실이 맞는지 확인하고자 질문을 남깁니다. 원래 사용자의 요청이 들어오면 서블릿 컨테이너에서 해당되는 서블릿 객체를 꺼내서 사용한다고 알고 있습니다. 하지만 FrontController(DispatcherServlet)을 사용하여서 개발자는 컨트롤러만 작성하면 되었고 그 뜻은 실제로 사용되는 서블릿 객체는 위의 DispatcherServlet이 끝이라는 뜻인가요? 물론 저도 모르는 곳에서 이미 만들어진 Servlet이 사용될 수는 있지만 개발자가 따로 서블릿을 만드는 일이 별로 없는 것인지 궁금해서 질문을 남깁니다.
-
미해결실전! 스프링 데이터 JPA
Auditing transaction
안녕하세요, auditing 강의를 듣고 적용해보았습니다. 게시글을 처음에 만들때 원하는 값들이 잘 들어가지만 게시글을 수정하여 다시 저장할 경우audit 부분에서 createdBy, modifiedBy 를 못가져오면서 transaction 에러를 냅니다..! 혹시 실무에 적용하기 위해 추가로 적용해야 할 부분이 있을까요? 아마 AuditorAwareImpl에서 @Autowired MemberRepository memberRepository; 부분이 이상한 것 같은데...이유는 모르겠습니다 ㅠ_ㅠ public class AuditorAwareImpl implements AuditorAware<Long> { @Autowired MemberRepository memberRepository; @Override public Optional<Long> getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (null == authentication || !authentication.isAuthenticated()) { return null; } DefaultOAuth2User principal = (DefaultOAuth2User) authentication.getPrincipal(); String email = (String) principal.getAttributes().get("email"); if(email == null ){ return null; } Member member = memberRepository.findByEmail(email).orElse(null); if(member == null){ return null; } return Optional.of(member.getId()); } }
-
미해결스프링 핵심 원리 - 기본편
@Configuration 없이 @Bean만 사용할 때에 대한 질문
안녕하세요! 진짜 영한님 강의는 최고네요. 감사합니다. 듣다가 질문이 생겼는데요. `@Configuration`을 주석처리하고 `@Bean`만 남겼을 때 빈으로 등록되긴 하는데 여러개가 등록(싱글톤 X)된다고 하셨잖아요. 여기서 헷갈리는 이유는, "Bean은 스프링컨테이너에서 관리되는 싱글톤 객체이다."라는 이론적 내용과, "같은 이름의 Bean이 여러개 생성되기도 한다"라는 이 강의의 실험 결과과 충돌해서인데요. 엄밀한 정리를 하고 싶어서 질문드려요. 일단은 "같은 이름의 Bean이 여러개 생성되기도 한다"가 먼저 가능성 측면에서 맞는 얘기고, "Bean은 스프링컨테이너에서 관리되는 싱글톤 객체이다."는 정상적(일반적)인 방식으로 Bean을 등록한다면이라는 전제가 깔렸을 때 맞는 얘기일 거로 생각 됩니다. 그럼, 아래 내용중에는 무엇이 맞는 걸까요? 영한님이 보여주신 실험처럼, `@Configuration`을 누락하면 동일한 Bean이 여러번 생성되는 경우가 있는데 이 때, 1. `memberRepository`라는 메서드가 3번이나 호출되었는데, 새로 생성될 때마다 기존에 먼저 생성되었던 빈을 덮어쓰기(override)한다. 고로 생성만 N번 될 뿐이지, 결과적으로는 스프링 내에서는 싱글톤으로 존재한다.(* 만일 이게 맞다면 컴파일타임/런타임 모두 에러가 안나고, 동작 자체에는 문제가 없겠네요. 리소스는 많이 잡아먹겠지만요.) 2. `memberRepository`라는 메서드가 3번이나 호출되어 총 3개의 인스턴스가 빈으로 각각 등록되었다. 고로 이름을 같지만 3개의 빈이 실제로 모두 존재한다. (* 만일 이게 맞다면, 이 경우 빈을 사용하기 위해 주입할 때 컴포넌트 스캔 결과, ConflictingBeanDefinitionException이 뜨게 되겠네요.) --- 앗. 질문이 잘못된 부분이 있어서 수정했습니다.
-
미해결스프링 핵심 원리 - 기본편
@ComponentScan
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]컴포넌트 단원의 @ComponentScan에 관한 질문입니다 package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration //ComponentSacn은 Spring빈을 전부 검색해서 담는 과정을 수행함, 정확히는 @Componet가 붙은 녀석들을 전부 담아줌 @ComponentScan( //AppConfig에 등록한 Configuration을 제외해주는 과정ㅇ excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) 위의 코드는 예제 AutoAppConfig.java 파일안의 코드입니다. 이렇게 하면 AppCongif, TestConfig에서 주가되는 Bean을 예외로 하는것은 이해했습니다. 여기서 궁금증이 생기는데 자기 자신에도 @Configuration이 추가 되어있는데 자기 자신의 @Configuaration은 예외 처리를 안해주는것인가요? 질문을 정리하면 @ComponentScan을 통한 예외처리를 진행할 때 자기 자신의 클래스는 제외하고 예외처리를 진행하는것인지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링에서 post를 막아놨다는 의미.
안녕하세요. '상품 서비스 html' 강의 6분 50초 쯤에 상품 등록할 때의 버튼이 동작 안했을 때 김영한 선생님이 말씀하시길, static 정적 리소스는 get일 때 받는 것으로 되어있따. 스프링에서 post를 막아놨다는 말은 무슨 뜻인가요? 단순 브라우저에서 열었기 때문에(브라우저는 다양한 http메서드를 지원하지 않아서 postman 으로 여러 메서드들을 확인하듯) post를 지원하지 않는다? 뭐 이런 의미랑 관련이 있나요 스프링에서 막아놨다는 말과, get일 때 받는 것으로 되어있다.. 등 여러 의미적인 면에서 이해가 잘 안되네요. 미리 감사드립니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
spring MVC와 REST API차이의 개념이 궁금합니다.
제가 이해한건 Spring MVC와 REST API 개발의 차이는 VIEW를 반환하는가 아니면 JSON의 데이터를 반환하는가의 차이인데 제가 이해한것이 맞나요??