묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
안녕하세요. 아래 스윙님이 하신 질문과 동일한 질문입니다.
저도 해당 내용이 궁금해서 질문을 남기려다가 답변 내용을 보고 그렇구나 하고 넘어갔습니다. 하지만 뭔가 이상해서 질문 남깁니다. 스윙님의 질문 내용은 왜 config 클래스에 @Configuration을 붙이지 않았는데 싱글톤으로 관리가 되느냐였습니다. 그 답변은 스프링 컨테이너로 직접 등록하면 싱글톤으로 관리가 된다였구요. 그런데 다음강의의 ConfigurationSingletonTest 클래스의 configurationTest를 보고, 강의를 들으면 AppConfig에 @Configuration이 있기 때문에 싱글톤으로 관리가 되고 있다고 합니다. 또한 제거하면 유지가 되지 않는다고 하고있고요. 그 사실을 찍어서 객체 생성이 몇번 일어나는지, 객체가 동일한지로 판단하고 있습니다. 보시다시피 해당 메서드에서는 스프링 컨테이너를 통해 AppConfig를 설정 파일로 쓰고 있습니다. 그렇다면 스윙님의 질문에 대한 답변에 의하면 @Configuration이 붙던, 아니던 싱글톤이 유지되어야 하는데, 이 강의 회차의 주 내용이 @Configuration이 있기 때문에 싱글톤이 유지되고, 없다면 유지되지 않는다는 내용이라서 이부분에 대해서 재차 궁금합니다. 따라서 TestConfig에 @Configuration을 붙이지 않은 이유와 붙이지 않아도 싱글톤으로 작동한 이유가 궁금합니다. 제가 잘못 이해한 부분이 있으면 설명 부탁드리겠습니다. 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order 생성 메서드
안녕하세요 Order 생성 메서드를 setter없이 작성해봤는데 올바르게 작성했는지 궁금해서 질문드립니다. 강의코드 /** * 생성 메서드 */public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order;} 제가 작성한 setter를 사용하지 않은 생성 메서드 public Order(Member member, Delivery delivery, LocalDateTime orderDate, OrderStatus status) { this.member = member; this.delivery = delivery; this.orderDate = orderDate; this.status = status;}public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(member, delivery, LocalDateTime.now(), OrderStatus.ORDER); for (OrderItem orderItem : orderItems) { order.orderItems.add(orderItem); } return order;} 이렇게 작성했습니다. 올바르게 작성했는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
itemRepository.save(item); 부분에서 궁금한 것이 있습니다 !
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 영한님, 서포터즈님! 강의 너무너무 잘 보고있습니다. 다름이 아니라 itemRepository.save(item) 부분에서 궁금한게, 영한님은 따로 Item savedItem 이라는 변수를 만들어서 redirectAttributes.addAttribute("itemId", savedItem.getId()) 이렇게 사용하시는데 저는 굳이 변수를 따로 만드는게 아니라, @ModelAttribute Item item 객체를 가지고 redirectAttributes.addAttribute("itemId", item.getId()); 라고 상용해도 되지 않을까? 라는 궁금증이 생겼습니다. 실행은 문제가 없었는데, 문제될 점이 따로 있을까요 ?
-
미해결스프링 핵심 원리 - 기본편
생성자를 통한 주입 테스트 질문
OrderServiceImpl orderService = new OrderServiceImpl(memberRepository, new FixDiscountPolicy()); 이렇게 써야 하는데, OrderServiceImpl orderService = new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy()); 이렇게 써도 실행이 잘 됩니다. 위에서 new MemoryMemberRepository()를 한 후, save까지 지정한 것은 맞지만, OrderServiceImpl 을 new 로 생성하면서 생성자로 new MemoryMemberRepository를 파라미터로 전달하였으니 위에서 직접 save로 생성한 객체가 아니라 새롭게 생성된 MemoryMemberRepository가 전달되는 것 아닌가요? 그러면 널포인트가 터져야할 것 같은데 왜 테스트가 성공하나요..?
-
미해결스프링 핵심 원리 - 기본편
저도 static 선언부 이해가 안가네요..
안녕하세요. 최근에 어떤분이 질문하신 내용과 답변을 봤는데도 저렇게 선언해서 사용하는 것에 대해서 이해가 안가네요.. static에 대해서는 이해가 가고, 첨부해주신 링크도 다 읽었습니다. 하지만 강의에서 SingletonService 클래스를 작성할때 private static final SingletonService instance = new SingletonService();를 선언하고 사용하는 것에 대해서 흐름이 이해가 가질 않습니다. 메모리에 static 영역에 SingletonService 클래스와 instance라는 변수가 올라가는 것인가요? 만약 올라가던, 안올라가던 상관없이 어떤 맥락으로 자신의 클래스에서 자신의 인스턴스를 만들어서 사용하는지 모르겠습니다. 보통 클래스를 생성하면 다른 곳에서 인스턴스를 생성해 사용하는 것을 많이 봤는데요.. 자신의 클래스 첫줄에 자신을 선언한다라는게 무엇을 뜻하고, 어떻게 사용되는지 어떻게 공부해볼 수 있을까요? 왜 굳이 사용할 곳에서 인스턴스를 생성하는게 아닌 저런 방법이 사용되는지도 모르겠고, 동작 방식이나 그런걸 모르겠습니다. 저게 재귀 그런건가요? 솔직히 전 질문자님도 모르는걸 정리해서 묻기 힘든 모습이셨는데, 저도 그렇네요. 이 부분에 대해 어떻게 해결할 수 있을지 도움좀 부탁드리겠습니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
isNotEqualTo, isNotSameAs 두개 같은건가요?
안녕하세요. 이 두개를 구글링 해보니까 실제 값이 주어진 값과 같은지 틀린지라는 말인데, 결국 같은말 아닌가요? `==` 비교도 값만 비교하는 거니까 isEqualTo의 실제 값을 비교하는거랑 같다고 생각이드네요. 근데 만약 두개가 같다면 저렇게 중복되서 존재할 이유가 없다고 생각이 들어서 질문 남기게 됐습니다. 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member는 생성 메서드를 만들지 않은 이유가 있나요?
member는 생성 메서드를 따로 만들지 않고 그냥 MemberRepository에서 저장, 조회를 했는데 Order와 OrderItem에만 생성 메서드를 만들어줬나요? 단지 단순한 로직(다른 엔티티에서 값을 가져와서 처리하는 비즈리스 로직이 없어서)이라서 Member 엔티티는 생성 메서드를 만들어 주지 않은 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
update 로직 짤때
위 사진처럼 짜면 put으로 있던 id에 updateParam으로 덮어씌워져서 업데이트 되는거 아닌가요? 테스트도 정상적으로 작동하는데 위에 4줄로 작성하면 더 좋은점이 어떤게 있나요?
-
미해결실전! 스프링 데이터 JPA
@Path variable로 Id를 받을 때 궁금증
강의를 듣다가 궁금한게 생겼는데요 Id 같은 PK의 경우에 좀 중요한 정보라고 생각을 합니다. 사용자 입장에서는 자동적으로 매겨진 pk인 id를 모르겠지만 이것을 사용자 측에서 저장하고 server와 주고 받는것이 맞는건지 궁금합니다. 공부를 하는 입장이라 실무에서는 어떤 방식으로 사용자 정보를 조회하도록 하는지가 너무 궁금합니다. ID정도는 넘겨줘도 상관이 없는건가요? 아니면 이러한 정보를 절대 전송하면 안되고 매번 session에서 꺼내야 하는건가요? cookie 에서 이 값을 저장해도 무방한가요? 무엇이 나은가요? ㅠㅠ cooki Id
-
미해결
엔티티 매니저 없이도 DB 값 저장이 가능한건가요??
안녕하세요 영한님 강의로 JPA, SPRING DATA JPA 공부중인 초보 입니다 강의 하나를 완강했음에도 제가 아직 전반적인 구조에 대해서 이해를 못한건지 잘 이해가 안되는 부분이 있어서요.. 강의에서는 항상 엔티티 매니저를 통해 ~.persist() 로 DB에 저장을 해서 자연스럽게 저렇게 저장을 하는거구나 했는데 한 예제 프로젝트를 보니까 게시글 crud를 엔티티 매니저 일절 사용 없이 구현하더라구요 분명 스프링 데이터 JPA 를 이용한 예제인것 같은데 이게 원래 가능한걸까요?? 가능하다면 엔티티 매니저는 왜쓰는지도 궁금합니다 검색해봐도 감이 잘 안잡혀서요 ㅠㅠ 영한님 강의 레포지토리 예제 레포지토리
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
테스트에서의 bindingResult 오작동
안녕하세요. 스프링 Junit 테스트로 검증 부분을 테스트 하던 중 의도대로 되지 않는 부분이 있어서 질문드립니다. 먼저 테스트 하려는 컨트롤러는 JSON 데이터를 파라미터로 받아서 검증을 하고 (@Valid @RequestBody) 검증이 실패하면(bindingResult.hasErrors가 true일 때) 예외를 발생시키는데, 해당 예외는 컨트롤러 어드바이스로 받아 http 400코드를 응답 하게끔 설계를 하였습니다. (포스트맨으로 검증에 실패하는 데이터를 보냈을 때 400으로 응답되는 것을 확인하였습니다.) 그런데 테스트 코드에선 검증에 통과못하는 데이터를 넣어 mockMvc.perform으로 테스트 해보니 기대와는 다르게 http 200코드가 찍히면서 검증이 통과되는 결과가 나왔습니다. (andExpect에서 getResolvedException()이 null로 찍히는 것을 보니 bindingResult.hasErrors가 false가 되는 것 같습니다) 컨트롤러 어드바이스가 문제인가 싶어서 다른 예외를 발생시켜 테스트 해보았는데, 다른 예외는 잘 처리되더라구요. 혹시 이러한 검증 로직을 mockMvc로 테스트 하는 방법이 따로 있는 것 일까요? 스프링은 5.x.x 버전이며 junit은 4.12 버전을 사용 중 입니다.
-
미해결스프링 핵심 원리 - 고급편
포인트컷 지시자 단독 사용 관련해서 질문 있습니다.
args, @target 등은 실제 객체 인스턴스가 생성되고 실행될 때 어드바이스 적용 여부를 확인할 수 있다는 부분이 잘 이해가 가지 않습니다. 빈 후처리기에서 빈으로 넘어오는 클래스의 메소드 정보를 보면 args랑 매칭시킬수 있을것 같고 @target도 빈으로 넘어오는 클래스를 상속한 자손클래스에서 특정 애노테이션이 있는지 여부를 확인하면 프록시 적용 여부를 판단 할 수 있을것 같은데... 왜 무조건 프록시를 만들어 놓고 런닝타임에 객체 인스턴스가 넘어와야 어드바이스 적용 여부를 판단 할 수 있는것인지 궁금합니다!! 답 주시면 감사하겠습니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
요즘은 장기 로그인 유지를 많이 하는 거 같은데 맞나요?
원칙적으론 보안에 위협이 되겠지만 배민이나 쿠팡이나 등등 쇼핑 서비스를 보면 로그아웃을 하지 않는 이상 로그인이 유지시키는 것 같은데 아무래도 편의성 때문에 그렇겠죠? 그런 큰 서비스들은 회원 수만 몇천만일텐데 이런 경우도 다 메모리에 저장하고 있는 것인가요? 위와 같은 초대형의 사례들에선 세션 유지관리의 개념과 철학이 아예 근본부터 다를 것 같은데 어떤 식으로 관리 되는 것인지 궁금합니다. 아니면 그런 거 없이 동일한 건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
PathVariable의 대한 검증
안녕하세요 영한님. 수정 혹은 삭제 시 pathvariable을 사용해서 처리를 했었는데요. 이 강의를 보고 조작의 위험성에 대해서 고민이 되었습니다. 실제 사용자가 해당 리소스에 대한 권한이 있는지 체크해야 한다 라고 말씀하셨는데요. 예제의 내용으로 보안을 해야 한다면 itemId와 사용자 Id로 상품 조회 후 결과 값이 있으면 해당 리소스에 대한 권한이 있는 사용자로 판단 고로 수정 혹은 삭제가 가능으로 처리 하면 되겠습니까?? 그리고..수정은 주로 PutMapping을 사용하는데 예제에서는 PostMapping을 사용하셨더라구요. 이건 영한님의 개인 취향 일까요?? 아니면 PutMapping을 안쓰시는 이유가 있으면 알려주십시아. 질문 다시 정리하자면. 1. pathvariable로 수정, 삭제 시 가장 좋은 검증 방법 2. PutMapping 혹은 DeleteMapping에 대한 영한님의 의견을 듣고 싶습니다. 코로나 조심하세요. 영한님. 항상 좋은 강의 감사합니다 !
-
미해결스프링 핵심 원리 - 기본편
2:15초 쯤에 static 장점 말씀하시는데 이해가 안갑니다.
안녕하세요. static은 프로그램 실행 시 메모리에 올라와서 끝날떄까지 하나만 만들어지고, 어디서든 선언해서 쓸 수 있는 전역변수 아닌가요? 근데 왜 개발자님은 static 지정의 장점을 해당 클래스 안에서만 쓴다는 것을 표현하는 것이라고 설명해주시죠..? 이부분에 대해서 궁금합니다. 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
자바에서 valid하는 것과 JS로 valid하는 경우
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 자바에서 valid하는 것과 JS로 valid하는 경우 커스터마이징이 JS가 좀더 쉬워보이는데 자바로 하는게 더 효율적인가요??
-
미해결Python 모듈을 활용한 공간 분석
folium의 map을 html
folium의 map을 html로 저장한 후에, 저장된 html 소스코드를 spring으로 만든 웹 사이트에 넣으려고 하는데 geojson 때문에 오류가 생깁니다. 혹시 spring으로 만든 웹 사이트에 folium 지도를 띄울 수 있는 방법을 알 수 있을까요?
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
JAVA에 ContentBean의 content_data가 int형이여도 되는이유가 뭔가요
안녕하세요. 현재 강의에서 XML, JAVA 모두 kr.co.softcampus.beans 패키지 안에 ContentBean.java 클래스에서 content_data변수를 String으로 사용하고 있습니다. 하지만, java프로젝트에서 String이 아니라 int로 설정하여도 작동되어서 문의드립니다. 왜 그런가요? XML의 경우는 안된다고 나옵니다.(당연히..)
-
미해결스프링부트 시큐리티 & JWT 강의
chain 부분
chain.dofFilter 부분이 이해가 잘안가서 그런데 우리가 만든 필터를 FilterChainProxy에 넣어준다는 의미로 봐도 무방할까요?? 정확히 무슨 역활을 하는 부분인가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA에서 findById, findByName에서 궁금한게있습니다.
package hello.hellospring.repository; import hello.hellospring.domain.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; // build.gradle에서 data-jpa를 등록함 // 스프링부트가 자동으로 EntityManager 만들어줌 public JpaMemberRepository(EntityManager em) { this.em = em; } // 저장, 조회, 업데이트는 쿼리 짤 필요 없음 @Override public Member save(Member member) { em.persist(member); // persist=영구저장-> setId등 모든것을 해줌 return member; } @Override public Optional findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } // 리스트로 탐색 시 @Override public Optional findByName(String name) { List result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List findAll() { // 객체를 대상으로 쿼리를 날림 -> entity 자체를 select하는 것임 List result = em.createQuery("select m from Member m", Member.class) .getResultList(); return result; // return em.createQuery("select m from Member m", Member.class) // .getResultList(); } } 여기에서 findById는 sql없이 찾을 수 있는데 findByName은 쿼리를 작성해주는데, 이유가 어떤건가요? 혹시 id의 경우 제가 db에 넣는게아니라 컴퓨터에서 직접 넣어주는거고 name은 제가 입력해서 db에 넣기 때문인가요? 그리고 findByName에서 sql을 이용해서 특정 데이터를 뽑아내면 list로 나오는데, findById의 경우는 리스트로 나오는게 아닌가요,,?