묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서비스 계층 설계에 대해 질문이 있습니다
안녕하세요 강의를 잘 듣고 현재 프로젝트를 진행하고있는 학생입니다. 프로젝트를 시작하고 설계를 하는 과정중에서 계층을 설계하는 단계에서 어려움을 느껴 이렇게 질문을 남기게 되었습니다. 저희가 서비스 계층을 설계하려 하는데 사용자의 행위(저장, 검색, 수정)에 따라 다른 클래스로 구분을 해야하는지, 단순히 프로그램에서 구현되는 페이지별로 클래스를 구분을 하는것이 좋은지, 혹은 다른 설계 방법이 있는지에 대하여 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
한가지 상품이 아닌 여러가지 상품 주문 시
안녕하세요 강사님 강의를 듣다가 여러가지 상품을 주문할 수 있게 구현해보고 싶은데 thymeleaf에서 여러 상품을 선택 했을 시 선택 데이터들을 리스트형태로 만들어서 postMapping에 보내야하는건가요...?그렇다면 thymeleaf문법은 어떻게 들어가야하는지 궁금합니다... (추가적으로 상품을 고르게되면 고른 리스트가 보이면서 더 상품을 추가하거나 삭제하게 할려면 자바스크립트로 설정해두는건가요?!)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
totalPrice
안녕하세요 15:48 보시면 totalPrice 값이 나오는데 이 메소드는 언제 호출이 된건가요? 따로 호출해 준적이없는거 같습니다 ========== @GetMapping("/api/v1/simple-orders")public List<Order> ordersV1(){ List<Order> all = orderRepository.findAllByString(new OrderSearch()); return all;} =========== public int getTotalPrice(){ int totalPrice = 0 ; for(OrderItem orderItem : orderItems){ totalPrice+=orderItem.getTotalPrice(); } return totalPrice;}
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
일대다 페치조인 메모리상에서 페이징
안녕하세요 영한님 강의 잘 듣고 있습니다!! 일대다 페치조인에서 페이징을 하게되면, 메모리 상에서 페이징을 한다고 이해했습니다. 만약 페치조인 쿼리가 DB로 가면, 뻥튀기된 로우들이 메모리에 올라오게 되고 distinct를 JPA가 하게됩니다. 이 상황에서 만약 페이징이 이루어진다면 뻥튀기된 로우에서 offset만큼 결과를 리턴하게 되다고 이해했습니다. 결론적으로 생각하면 뻥튀기된 로우를 페이징하기 위한 쿼리와 전체를 가져오는 쿼리가 같은 상황에서, 왜 메모리상에서 페이징하는 것이 위험한가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
같은 네트워크에 묶인다는건 물리적으로 같은 Host PC 에 컨테이너가 추가된다는 건가요?
docker network create 명령을 통해 만든 ecommerce-network 상에 컨테이너를 추가하기 위해서는 물리적으로 같은 Host PC에 컨테이너가 존재해야 하나요? 아니면 원격에 물리적으로 다른 위치의 컨테이너도 ip를 추가하여 같은 네트워크로 묶을수도 있는건가요? 강의 마지막 15:17쯤에서 나오는 강의 화면을 보면서 이런 의문이 들었습니다.
-
미해결스프링 시큐리티
Thymeleaf + spring security + JWT 페이지 이동시 인증 구현방법 문의드립니다
안녕하세요 질문을 둘러보았는데 저랑 딱맞는 고민은 없는거 같아서 질문드립니다. 프론트/백서버를 나누지 않고 한 서버로 구현할 경우 JWT를 페이지 이동시 매번 어떻게 헤더로 보내줄까요?? fetch api나 ajax를 통한 api 호출시 헤더 보내는것은 문제없지만 아예 다른 매핑으로 페이지를 이동할 경우 인증이 필요한 페이지에 접근하려면 header에 bearer token이 필요한데 도대체 어떤 방법으로 구현할지 모르겠습니다. 프론트서버를 나눈경우 이게 어려운게 아닌일 같은데 리다이렉션을 헤더요청과 함께하려는 꼴이 되서 안되는거 같네요,.. 그래서 일단은 cookie에 토큰값을 넣어주고 쿠키값에서 찾아오도록하고 있습니다..... 쿠키는 헤더에 자동으로 계속 추가되니깐요.. 그냥 이렇게 해도 상관없을까요 쿠키에 토큰 자체를 넣어버려도 괜찮을지요 프론트와 백이 분리 되지 않고 spring security로 설계한 서비스의 경우 jwt인증을 매 페이지 마다 어떻게 수행할지가 고민입니다. 감사합니다.
-
미해결자바 스프링부트 활용 웹개발 실무용
Whitelabel Error Page
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Aug 17 10:00:13 KST 2021 There was an unexpected error (type=Not Found, status=404). No message available 페이지가 연결이안된거같아요 ㅜ 어떤이유인지모르겠지만 ㅜ 혹시 spring같은경우는 기본 html파일인 home.html이있었던거같은데 그런게 여기서는 아직 없어서 못찾는건가요? ㅜ 아니면 vue를 install해서 npm run serve 해서 터미널에서 실행한후해야할까요? ㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto 만들 때 질문이 있습니다.
요청이나 응답 dto를 만들 때 엔티티의 임베디드 타입 필드의 경우 다 풀어서 생성해야 하나요? 아님 임베디드 타입 필드 그대로 사용해도 괜찮나요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findByName 메소드 작성 질문 있습니다.
안녕하세요. 제가 람다랑 optional, 컬렉션 그런부분을 아직 잘몰라서 자바 공부가 더 필요한데요. 이 부분 듣다가 궁금증이 있어서 질문 남기게 됐습니다. - 중점적인 내용은 `findName 메소드를 findById메소드 처럼 구현하면 안되냐`입니다. -> 다른 질문글을 통해 id는 유일한 기본키로 사용되서 중복이 없고, 이름은 중복이 있을 수 있다고 하셨습니다. 제가 코드는 정확히 모르겠지만 영한님의 강의를 들어보며 추측해보면 -> store - 객체 -> , values() - 값들중 -> . stream() - 모두 돌리는데 -> .filter() - 가로안에 있는 조건에 해당하는 값이 걸리면 -> .findAny() -리턴해라 이런 의미의 식 같습니다. 또 filter 안에 있는 람다표현식?은 member를 받아서 받은 멤버 객체의 name이 findByName 메소드 호출시 매개변수로 받은 name과 같은지를 체크한 것 같구요. 여기서 궁금한점이 store의 member를 하나씩 쭉 돌리는데 우리가 매개변수로 넘겨준 name과 같은 member를 모두 optional에 담아서 반환하는건가요? 즉, findById는 중복 없이 Optional에 하나의 Member 객체만 담아서 반환되어 코드를 저렇게 짠 것이고 findByName은 중복이 있을 수 있어, 매개변수로 받은 name과 같은 모든 member 객체를 optional에 담아 반환해주는 코드인건가요?
-
미해결스프링 시큐리티
서버 기동 후 루트 접근 시 `/` AccessDeniedException 질문입니다
예제에서는 DB 리소스 설정 이후에도루트접근이 가능해 보이는데, 저의경우는 접근이 불가능합니다 아래 이미지는 서버 기동 직후, 브라우저를 통해 루트 접근시차단이 되는 부분에 BreakPoint 를 잡아 캡쳐했습니다. 익명 사용자의 경우에 허용되어야 할 `/` 웹 루트 경로가Denied 되는 것은 어느 부분이 문제일까요.. DB 연동은 잘 처리가 되었으나 이부분에서 막힙니다.특별히 설정을 바꾼것이 없는데DB 연동 처리 이후, 계속 여기서 부터 막힙니다.어느 부분부터 살펴봐야 해결이 될까요..? 혹시 정상인가요?( 지난 강의 돌려보다가 문뜩 생각이 듭니다) 혹제 제가 놓친부분에 대해 조언을 구합니다.읽어주셔서 감사드립니다.
-
미해결Spring Boot JWT Tutorial
data.sql이 실행이 안되는것 같은데...
서버를 실행할때 데이터 insert가 안되는 것 같은데 따로 설정이 필요한건가요?....
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 리스트가 안떠요 ㅠㅠ
목록페이지를 그냥 들어가면 # 이름 이렇게 잘 뜹니다. 하지만 회원등록을 하고 난 후 회원목록에 들어가면 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "${member.id" (template: "members/memberList" - line 19, col 15)] with root cau member.id 를 찾을수없다고 나옵니다 ㅠㅠ
-
해결됨실전! 스프링 데이터 JPA
역할과 구현
안녕하세요. 방학기간을 통해 스프링에 대해 공부하고 있는 대학생입니다. 다름이 아니라 스프링 핵심원리 강의에서 역할과 구현을 분리하라고 배웠습니다. 그래서 만약 '회원 저장소'를 만든다고 하면 pubic interface MemberRepository{ void save(Member member); Member findById(Long memberId); } 을 만들고 필요한 구현체를 따로 만들었습니다. 메모리를 이용한다면 public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(), member); } @Override public Member findById(Long memberId) { return store.get(memberId); } } 이런 식으로 만들고, 만약 JPA를 이용한다면 public class MemberJpaRepository implements MemberRepository { @PersistenceContext private EntityManager em; public void save(Member member) { em.persist(member); } public Member findById(Long id) { Member member = em.find(Member.class, id); return member; } } 이런 식으로 만들어서 사용했습니다. 여기서 스프링데이터JPA를 사용하기 위해선 인터페이스에 JpaRepository를 상속받아야하는데 그러면 기존에 있던 MemberRepository에 상속받아서 사용하면 되나요? 그런데 MemberRepository에서 JpaRepository를 상속받게 되면 기존에 MemberRepository 구현체들이 JpaRepository까지 모두 구현해야하는 문제가 있고, MemberReposity에서 사용하는 메소드 이름과 JpaRepository에서 사용하는 메소드 이름이 같으면 MemberRepository를 주입받아 사용하는 다른 클래스에도 문제가 발생했습니다. 이래저래 글이 길었지만 그래서 어떻게 스프링데이터 JPA를 사용하면서 역할과 구현을 구분할 수 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소 테스트시
주문취소쪽 테스트하다가 궁금한점 있어 질문드립니다. 취소할 주문ID를 조회하고 Order order = orderRepository.findOne(orderId); order.cancel(); 로 주문취소하기 전에 orderItems에 값이 넣어져 있는지 모르겠습니다. Order와 OrderItem은 @OneToMany로 기본이 LAZY 로딩이라 orderItems을 직접 호출하기 전까지는 데이터를 조회하지 않는거로 알고 있는데 어떻게 orderItems에 값이 채워져서 취소가 되는지요?... for (OrderItem orderItem : orderItems) { orderItem.cancel();} 저 for문 시점에 데이터를 조회하면 이해하겠는데 디버깅해보면 order를 조회할때 이미 값이 다 채워져 있습니다...
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
커맨드와 쿼리의 구분 후 쿼리문 한번 더 실행에서의 궁금증...
강의에서 영한님께서는 커맨드와 쿼리를 구분하는 것을 선호하신다고 하셨습니다. 그래서 알아보니 이런걸 CQRS라고 하던데 회원 정보를 update시 update command 메소드 실행 후 보통같으면 update메소드 자체의 반환값으로 member객체나 member id를 받는데, 이것을 명령과 질의를 구분해 memberService.update() 후 memberService.findOne을 실행하면 결과적으로 쿼리문을 한번 더 실행을 하게 되잖아요? update 메소드 내에서도 findOne이라는 메소드를 호출하니깐요. 이렇게 명령과 질의를 분리하였지만 그 대가로 쿼리문을 한번 더 호출하게 된 셈인데 쿼리문을 한번 더 호출해서 명령과 질의를 구분하는 것이 많이 효율적인 패턴인가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
자바 코드로 직접 스프링 빈 등록하기 강의 질문
안녕하십니까? 강사님 수업을 듣는 도 중 똑같이 따라 했는데, Error가 발생해서 질문 드립니다. 먼저 SpringConfig.java 입니다. 위의 Error 내용은 필요 Typedms MemoryMemberRepository인데, 제공된 타입이 MemberRepository여서 Error가 나고 있습니다 MemberService.java 입니다. MemoryMemberRepository.java 입니다. 이렇게 수업대로 따라 했는데, SpringConfig에서 Repository부분에서 Error가 나는데, 왜 나는지가 궁금합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빈연결 에러!
SpringConfig에서 문제가 있는데 이유가 뭔지 모르겠습니다! Could not autowire. There is more than one bean of 'MemberRepository' type.Beans:memoryMemberRepository (MemoryMemberRepository.java)springDataJpaMemberRepository (SpringDataJpaMemberRepository.java)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Update 할 때 조건검사(price >= 0) 는 어디서 하는게 좋은 방법일까요?
안녕하세요. 너무 좋은 강의 잘 듣고있습니다 !! :) 강의 마지막부분에서 가장 좋은 방법이라고 말씀해주신대로, Service 계층에 ItemUpdateDto 를 추가하고, 엔티티 클래스에 update() 함수도 만들어서 구현을 했습니다. 여기서 한 가지 궁금한점이 생겼는데요, - price >= 0 - stockQuantity >= 0 - name 은 빈 문자열이 아님(StringUtils.hasText == true) 등의 조건을 검사하여 exeception 을 날리거나, update 를 진행하고 싶을 때 조건검사를 어디서 하는 것이 가장 좋은지 고민이 됩니다. 제 생각에는 크게 세가지 방법이 있을 것 같은데요.. 1. Controller 에서 검사하여, 검증된 값만 DTO에 담아서 service 에 전달한다. 2. service 에서 엔티티의 update() 함수를 호출하기전에 검사한다. 3. 엔티티 클래스의 update() 함수 내부에서 검사한다. 세 가지 방법에대해 제가 고민해본 내용을 말씀드리면.. Book 클래스의 removeStock() 처럼 엔티티 내부에서 검사하고, NotEnoughStockException 같은 에러를 날리는 비지니스 로직을 넣어야할까요? (코드에 일관성이 있도록..) --> 3번 그런데, Controller 에서 미리 검사를 하면 굳이 service -> repository 를 타고 내려가서 select 쿼리를 날릴 필요가 없어지기 때문에 성능상 유리할 것 같다는 생각도 듭니다. --> 1번 두 군데에서 다 검사를 하는 것이 좋을까요? 실무에서는 보통 어떤 방법을 채택하는지 궁금합니다 .
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
thymeleaf, cannot resolve vars 에러 문제
이런식으로 에러가 떠서 구글링을 해보니 다양한 해결책이 있긴한데 그것이 옳은 방식으로 해결되는 것인지 모르겠습니다 <html xmlns:th="http://www.thymeleaf.org"> 여기에서 www를 삭제하면 th: 라인이 전부 초록색으로 변하면서 에러는 해결되기는 하더라고요 다른 해결 방식이 있을까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
데이터베이스 연동관련 문의
안녕하세요, 강의 잘 듣고 있는 학생입니다. 다름이 아니라 "스프링 통합 테스트"부분에서 기존 메모리에서 진행하던 테스트를 DB랑 연동해서 진행하는 부분에서, 테스트로 진행한 name이 들어가지 않는 중입니다. 테스트 돌릴시 fail은 따로 뜨지 않고, 잘 넘어가는 중입니다. 그리고 id 시퀀스도 하나 증가해서 잘 되는데 name이 등록이 되지 않더라고요. 따로 프로젝트를 실행해서 웹페이지에서 넣으면 문제없이 동작하는 중입니다. (따로 id 시퀀스가 증가가 잘되는 것을 확인한게 웹페이지에서 넣고, 테스트로 돌리고, 다시 웹페이지에서 넣었을시, id가 8,10이 뜨는걸로 확인했습니다.) 어떻게 수정하면 될까요..ㅎ?