묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 테스트에서 No test were found가 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
강의 Vue-Django 연동 원리 중 vue-cli 시작하기에서
vue add vuetify 명령어로 vuetify를 깔다가 Default로 설치를 하시는데 저는 이렇게 에러가 납니다. 찾아보니 지원을 안해서 그렇다고 하는데요.. 해결방법이 있을까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
BooleanExpression 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 강의 영상을 따라하다가 똑같은 에러를 만났는데 확인해보니 잘못된 타입을 imort해서 발생한 에러였습니다. import할 때 querydsl에서 제공하는 BooleanExpression이 아닌 ibatis에서 제공하는 BooleanExpression으로 import해서 생기는 문제인 것 같습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
페치조인 쿼리시 쿼리가 두번 나갑니다.
강의에서 보면 쿼리가 한번 나가는데 저는 두번이 나갑니다 ㅠㅠ http://localhost:8080/api/v3/simple-orders 호출 2022-06-26 01:02:45.805 DEBUG 5062 --- [nio-8080-exec-6] org.hibernate.SQL : select order0_.order_id as order_id1_6_0_, member1_.member_id as member_i1_4_1_, delivery2_.delivery_id as delivery1_2_2_, order0_.delivery_id as delivery4_6_0_, order0_.member_id as member_i5_6_0_, order0_.order_date as order_da2_6_0_, order0_.status as status3_6_0_, member1_.city as city2_4_1_, member1_.street as street3_4_1_, member1_.zipcode as zipcode4_4_1_, member1_.name as name5_4_1_, delivery2_.city as city2_2_2_, delivery2_.street as street3_2_2_, delivery2_.zipcode as zipcode4_2_2_, delivery2_.status as status5_2_2_ from orders order0_ inner join member member1_ on order0_.member_id=member1_.member_id inner join delivery delivery2_ on order0_.delivery_id=delivery2_.delivery_id Hibernate: select order0_.order_id as order_id1_6_0_, member1_.member_id as member_i1_4_1_, delivery2_.delivery_id as delivery1_2_2_, order0_.delivery_id as delivery4_6_0_, order0_.member_id as member_i5_6_0_, order0_.order_date as order_da2_6_0_, order0_.status as status3_6_0_, member1_.city as city2_4_1_, member1_.street as street3_4_1_, member1_.zipcode as zipcode4_4_1_, member1_.name as name5_4_1_, delivery2_.city as city2_2_2_, delivery2_.street as street3_2_2_, delivery2_.zipcode as zipcode4_2_2_, delivery2_.status as status5_2_2_ from orders order0_ inner join member member1_ on order0_.member_id=member1_.member_id inner join delivery delivery2_ on order0_.delivery_id=delivery2_.delivery_id 전체 코드 Order 엔티티 package jpabook.jpashop.domain.entity;import lombok.Getter;import lombok.Setter;import javax.persistence.*;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.List;@Entity@Table(name = "orders")@Getter @Setterpublic class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; private final LocalDateTime orderDate = LocalDateTime.now(); @Enumerated(EnumType.STRING) private OrderStatus status; //==연관관계 메서드==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); } //==생성 메서드==// 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); return order; } //==비즈니스 로직==/ /** * 주문 취소 */ public void cancel() { if (delivery.getStatus() == DeliveryStatus.COMP) { throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다."); } this.setStatus(OrderStatus.CANCEL); for (OrderItem orderItem : orderItems) { orderItem.cancel(); } } //==조회 로직==// /** * 전체 주문 가격 조회 */ public int getTotalPrice() { return orderItems.stream().mapToInt(OrderItem::getTotalPrice).sum(); }} controller package jpabook.jpashop.api;import jpabook.jpashop.domain.entity.Address;import jpabook.jpashop.domain.entity.Order;import jpabook.jpashop.domain.entity.OrderStatus;import jpabook.jpashop.domain.repository.OrderRepository;import jpabook.jpashop.domain.repository.OrderSearch;import lombok.Data;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;import java.util.List;import java.util.stream.Collectors;/** * xToOne(ManyToOne, OneToOne) * Order * Order -> Member * Order -> Delivery */@Slf4j@RestController@RequiredArgsConstructorpublic class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/simple-orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); all.stream().forEach(o -> { o.getMember().getName(); // Lazy 강제 초기화 o.getDelivery().getAddress(); // Lazy 강제 초기화 }); return all; } @GetMapping("/api/v2/simple-orders") public List<SimpleOrderDto> ordersV2() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); return orders.stream() .map(SimpleOrderDto::new) .collect(Collectors.toList()); } @GetMapping("/api/v3/simple-orders") public List<SimpleOrderDto> ordersV3() { List<Order> orders = orderRepository.findAllWithMemberDelivery(new OrderSearch()); return orders.stream() .map(SimpleOrderDto::new) .collect(Collectors.toList()); } @Data static class SimpleOrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; public SimpleOrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); this.address = order.getDelivery().getAddress(); } }} repository package jpabook.jpashop.domain.repository;import org.springframework.stereotype.Repository;import org.springframework.util.StringUtils;import javax.persistence.EntityManager;import javax.persistence.TypedQuery;import javax.persistence.criteria.*;import java.util.ArrayList;import java.util.List;import jpabook.jpashop.domain.entity.Order;@Repositorypublic class OrderRepository { private final EntityManager em; public OrderRepository(EntityManager em) { this.em = em; } public void save(Order order) { em.persist(order); } public Order findOne(Long id) { return em.find(Order.class, id); } public List<Order> findAllByString(OrderSearch orderSearch) { String jpql = "select o from Order o join o.member m"; boolean isFirstCondition = true; //주문 상태 검색 if (orderSearch.getOrderStatus() != null) { if (isFirstCondition) { jpql += " where"; isFirstCondition = false; } else { jpql += " and"; } jpql += " o.status = :status"; } //회원 이름 검색 if (StringUtils.hasText(orderSearch.getMemberName())) { if (isFirstCondition) { jpql += " where"; isFirstCondition = false; } else { jpql += " and"; } jpql += " m.name like :name"; } TypedQuery<Order> query = em.createQuery(jpql, Order.class) .setMaxResults(1000); if (orderSearch.getOrderStatus() != null) { query = query.setParameter("status", orderSearch.getOrderStatus()); } if (StringUtils.hasText(orderSearch.getMemberName())) { query = query.setParameter("name", orderSearch.getMemberName()); } return query.getResultList(); } /** * JPA Criteria */ public List<Order> findAllByCriteria(OrderSearch orderSearch) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Order> cq = cb.createQuery(Order.class); Root<Order> o = cq.from(Order.class); Join<Object, Object> m = o.join("member", JoinType.INNER); List<Predicate> criteria = new ArrayList<>(); //주문 상태 검색 if (orderSearch.getOrderStatus() != null) { Predicate status = cb.equal(o.get("status"), orderSearch.getOrderStatus()); criteria.add(status); } //회원 이름 검색 if (StringUtils.hasText(orderSearch.getMemberName())) { Predicate name = cb.like(m.<String>get("name"), orderSearch.getMemberName()); criteria.add(name); } cq.where(cb.and(criteria.toArray(new Predicate[criteria.size()]))); TypedQuery<Order> query = em.createQuery(cq).setMaxResults(1000); return query.getResultList(); } public List<Order> findAllWithMemberDelivery(OrderSearch orderSearch) { return em.createQuery("select o from Order o join fetch o.member m join fetch o.delivery d", Order.class) .getResultList(); }}
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Dto Json 출력 오류 질문
Address 필드가 Response 시 빈 객체로 나옵니다. [ { "orderId": 4, "name": "userA", "orderDate": "2022-06-26T00:43:08.07663", "orderStatus": "ORDER", "address": {} }, { "orderId": 11, "name": "userB", "orderDate": "2022-06-26T00:43:08.155045", "orderStatus": "ORDER", "address": {} } ] log를 찍어 봤는데 아래와 같이 dto에 address는 잘 들어가있습니다. 2022-06-26 00:43:11.618 INFO 4953 --- [nio-8080-exec-2] j.jpashop.api.OrderSimpleApiController : dto address = Address(city=서울, street=1, zipcode=1111) 2022-06-26 00:43:11.618 INFO 4953 --- [nio-8080-exec-2] j.jpashop.api.OrderSimpleApiController : dto address = Address(city=진주, street=2, zipcode=2222) 뭐가 문제일까요 ㅠㅠㅠ 전체코드 package jpabook.jpashop.api;import jpabook.jpashop.domain.entity.Address;import jpabook.jpashop.domain.entity.Order;import jpabook.jpashop.domain.entity.OrderStatus;import jpabook.jpashop.domain.repository.OrderRepository;import jpabook.jpashop.domain.repository.OrderSearch;import lombok.Data;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;import java.util.List;import java.util.stream.Collectors;/** * xToOne(ManyToOne, OneToOne) * Order * Order -> Member * Order -> Delivery */@Slf4j@RestController@RequiredArgsConstructorpublic class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/simple-orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); all.stream().forEach(o -> { o.getMember().getName(); // Lazy 강제 초기화 o.getDelivery().getAddress(); // Lazy 강제 초기화 }); return all; } @GetMapping("/api/v2/simple-orders") public List<SimpleOrderDto> ordersV2() { List<Order> orders = orderRepository.findAllByString(new OrderSearch()); List<SimpleOrderDto> result = orders.stream() .map(SimpleOrderDto::new) .collect(Collectors.toList()); result.forEach(dto -> log.info("dto address = {}", dto.getAddress())); return result; } @Data static class SimpleOrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; public SimpleOrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); } }}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
no such file or directory: /usr/local/include
cd /usr/local/include mkdir bits cd bits vi stdc++.h m1 맥북에어 사용중인데 brew install gcc 설치 교안대로 include 폴더에서 bits폴더를 만드려고하니 아래와같이 에러가 나는데 혹시 해결방법이 무엇인지 궁금합니다; no such file or directory: /usr/local/include 제 경우 gcc -v로 확인시 아래와같습니다(/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk/usr/include/경로 안에서 교안 내용 적용하고 g++ -std=c++14 -Wall a.cpp -o test.out./test.out 하면 정상적으로 출력되긴합니다;) Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk/usr/include/c++/4.2.1 Apple clang version 13.0.0 (clang-1300.0.27.3) Target: arm64-apple-darwin21.4.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ControllerV3HandlerAdapter 질문
ModelView mv = adapter.handle(request, response, handler) 실제로 adapter.handle에서 response를 사용하지 않는데 인자로 넘기는 이유가 있나요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
연산자 조건문 대신 eval 사용해도 되나요?
if(x === '+') stack.push(lt + rt); else if(x === '-') stack.push(lt - rt); else if(x === '*') stack.push(lt * rt); else if(x === '/') stack.push(lt / rt); 이렇게 연산자 별로 조건문을 나눠서 푸시하셨는데 eval 을 사용해도 크게 상관없나요? stack.push(eval(lt+x+rt));
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BindingResult
밑에 질문답을 봤는데 살짝 이해가 안가서 질문남깁니다. BindingResult 는 Model에 자동으로 포함된다. 라고 하셨는데 그러면 넘어갈때 Model안에 item객체랑 bindingResult가 같이 담겨서 보내지는 건가요
-
미해결[개념부터 실습까지] 추천 시스템 입문편
현업에서 어떠한 방식으로 진행하는지 궁금합니다
안녕하세요 강의 너무 잘 들었습니다!! 강의를 듣고 궁금한 점이 있습니다 궁금한 점은 현업에서도 이와 유사한 프로세스로 진행되나요? 그리고 선형 모델 말고 트리기반이라던가(xgb lgm cbm) 뉴럴넷을 사용했을 때 모든 사용자에 대해 각각의 모델을 따로 만들어서 진행 해야할 것 같은데 너무 오래걸리거나 그런 문제는 없나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
C++ 에서는 메인 함수 밖에서 쓰면 0과 공백으로 초기화되나요?
int t, n; string a, b; int main(){ int m; ... } 컴파일 후 실행해보니, 메인 함수 안에서는 쓰레기 값이 들어가고 메인 함수밖에서는 항상 0이나 공백으로 초기화되어있는 것 같아서요. 혹시 왜 그런건지 알 수 있나요? 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
배열 선언에 104, 1004처럼 4로 끝나는 이유가 있나요?
int a[1004], b[100004]; 예를 들어 이렇게 되어있는 배열이 있다고 하면 a라는 배열은 1000 * 4바이트의 크기를 가지게 되죠? [출처] [알고리즘 강의] 1주차. 복잡도, 재귀함수, 누적합, 구현|작성자 큰돌 이처럼 배열 선언을 4로 끝내는 이유가 있나요? 저 위의 설명은 1004 * 4바이트가 되어야하는게 아닌가요? int는 4바이트 정수이고 1004의 요소를 선언한 것이므로.. 끝의 4가 C++에서는 특별한 의미가 있나요? 감사합니다.
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
안녕하세요 선생님! 질문있습니다.
웹 크롤링 관련해서 강의 너무 잘해주셔서 감사합니다! 다름이 아니라 웹이 아니라 앱크롤링은 대략 어떤 과정을 거쳐 진행하게되나요? 앱크롤링은 자료가 그렇게 많지는 않은 것 같아서 힌트를 얻을 수 있을까해서 질문드립니다. 감사합니다~!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Member 클래스만 자동완성에 import 문이 안나타나요
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의 진행하며 다른 클래스들은 자동완성 기능이 잘 되었으나 Member만 reflect import만 나타나는데 무슨 문제일까요 public class로 설정해두고 패키지도 다른 패키지와 동일하게 만들어서 별다른 차이가 없는데 딱 Member만 안되네요
-
미해결
파이썬 초보 코드 질문 ㅜㅜ
- 이렇게 코드를 작성하는데, age 이하 if age< 12부터 오류가 나오는데, 논리적으로 보면 들여쓰기를 하나 안 하나 똑 같이 작동이 되어야 할 거 같은데 들여쓰기를 하니까 오류가 나오네요, age = int~ 이하 부터 if문 들여쓰기 하면 왜 안 되는지 좀 설명 부탁드릴 수 있을까요.
-
미해결ARM Cortex-M 프로세서 프로그래밍
실습 보드 선택
안녕하세요 ARM cortex-M 강의와 freeRTOS 강의를 수강 하고 있는 학생입니다. 두 강의 에서 F429 보드와 F103 보드가 모두 지원되고 있다고 들었습니다. 그렇다면 두 보드 중 하나만 선택해서 두 강의를 수강하고 싶은데 어떤 보드를 추천하시나요?? 이유도 같이 알려주시면 감사하겠습니다!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
셀레니움 기초 사용법 - find_element_by_css_selector가 존재하지 않습니다.
네이버 페이지가 열리는 것까지는 되는데 그 후에 쇼핑탭을 클릭하기 위해서 find_element_by_css_selector함수를 이용하니 사진과 같은 에러가 뜹니다. 혹시 관련이 있을까 싶어 셀레니움 설치 시 오류메세지가 뜬 것도 함께 첨부합니다! ERROR: conda 4.12.0 requires ruamel_yaml_conda>=0.11.14, which is not installed. ERROR: requests 2.24.0 has requirement urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1, but you'll have urllib3 1.26.9 which is incompatible. Installing collected packages: h11, wsproto, async-generator, sniffio, outcome, trio, trio-websocket, urllib3, selenium Attempting uninstall: urllib3 Found existing installation: urllib3 1.25.9 Uninstalling urllib3-1.25.9: Successfully uninstalled urllib3-1.25.9 Successfully installed async-generator-1.10 h11-0.13.0 outcome-1.2.0 selenium-4.3.0 sniffio-1.2.0 trio-0.21.0 trio-websocket-0.9.2 urllib3-1.26.9 wsproto-1.1.0
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
보드 선택 질문드립니다 :-)
안녕하세요! 실습을 위한 보드를 선택하려고 하는데 기존에 Arty-A7 100T 보드가 있어서 이를 사용해도 괜찮은지 궁금합니다~! :-)
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
리사이클러뷰에서 context
context랑 requireContext() 다르게 쓸 때가 있던데 무슨 차이인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:errors
<div> <label for="itemName" th:text="#{label.item.itemName}">상품명</label> <input type="text" id="itemName" th:field="*{itemName}" th:errorclass="field-error" class="form-control" placeholder="이름을 입력하세요"> <div class="field-error" th:errors="*{itemName}"> 상품명 오류 </div></div> 여기에서 궁금한게 th:field="*{itemName}"이거는 모델에 담긴 item의 itemName이고 th:errors="*{itemName}" 이거는 바인딩리절트에 담긴 에러 item의 itemName이라고 보면 되나요? 그리고 필드네임이 맞춰져있어서 쓸 수 있다는 강사님의 말이 th:field와 th:errors의 변수이름이 같다는 걸 의미하는건가요?