묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
통합테스트
[질문 내용]안녕하세요 수업과 직접적으로 관련된 질문은 아니지만 궁금한 점이 있어서 질문 드립니다.영한님 강의에서는 controller통합테스트를 postman으로 진행하는데restTemplate을 이용해 직접 통합테스트 코드를 짜는것과 포스트 맨을 이용해 테스트하는 것 중 어느것을 더 추천하시는지 궁금합니다또한 직접코드를짜지않고 포스트맨으로 테스트하면 스펙상 불이익이 있는지도 궁금합니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문
강의 내용 중 엔티티에 비즈니스 로직을 포함시키셨는데 여러 사이트를 보면서 내용을 이해하려고 노력하면서 최종적으로 이런 결론을 지었습니다. Q. 어떤 비즈니스 로직을 서비스 계층에서 구현해야 하고 어떤 비즈니스 로직을 도메인에서 구현하는 것이 맞을까?A. 상품과 관련된 비즈니스 로직(주문 접수에 따른 재고 감소, 주문 취소에 따른 재고 증가)에서는 하나의 도메인만 활용이 되므로 하나의 도메인만으로 비즈니스 로직을 구현할 수 있다고 판단되는 상황이라면 도메인에 비즈니스 로직을 구현해도 괜찮지만 여러 도메인을 활용해야하는 복잡한 비즈니스 로직을 구현하거나 회원가입이나 로그인과 같이 리포지토리와 직접적 관련을 맺고 있는 비즈니스 로직의 경우라면 서비스 계층에서 구현하는 것이 맞다.질문에 대한 대답이 이게 맞는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
브라우저 마다 URL이 다르게 전송됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]hello-form에 폼 action에 분명 "/request-param-v1"으로 입력되어 있는데 크롬으로 전송하면 "/request-param"으로 url이 바껴버리는 증상이 있습니다. 막상 다른 브라우저로 전송하면 정상적으로 작동하는데 원인을 모르겠습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 비즈니스 로직 vs 서비스 비즈니스 로직
강의에서 DDD의 개념을 적용하시면서 엔티티에 비즈니스 로직을 넣으셨었는데요.아직까진 DDD에 대한 개념이 완벽히 정립되지 않아 별도의 자료로 공부를 하고 있습니다.공부하는 차원에서 서비스 계층에서의 비즈니스 로직 개발로 코드 리팩토링을 스스로 해보고 강의에 나오지 않았던 상품 서비스 테스트 코드 작성 결과 일단 통과가 나오긴 했습니다만... 잘 한 것인지 몰라서 코드 평가를 좀 받아보고 싶어 질문을 올리게 되었습니다.테스트 코드 역시 각 계층별로 지켜야 하는 테스트 코드 원칙이 있으나 이 부분도 같이 공부하느라 제대로 적용해보기 아직 어려운 단계라 @SpringBootTest를 사용했습니다. 이 부분은 감안해주세요..! 또 다른 추가 질문이 있습니다. 강의에서 엔티티에 구현한 비즈니스 로직을 서비스 계층에 비즈니스 로직을 개발하는 방식으로 바꾸는 과정에서 엔티티를 직접 이용하는 것보다는 DTO를 만들어서 전달하는게 엔티티에 많은 변화를 가하지않는 유일한 방법일까요?ItemService 코드package spring.project.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import spring.project.domain.Item; import spring.project.exception.NotEnoughStockException; import spring.project.repository.ItemRepository; import java.util.List; @Service @Transactional(readOnly = true) public class ItemService { private final ItemRepository itemRepository; @Autowired public ItemService(ItemRepository itemRepository) { this.itemRepository = itemRepository; } @Transactional public Long saveItem(Item item, int quantity) { addStock(item, quantity); itemRepository.save(item); return item.getId(); } private void addStock(Item item, int quantity) { item.setStockQuantity(item.getStockQuantity() + quantity); itemRepository.save(item); } @Transactional public void removeStock(Item item, int quantity) { int restStock = item.getStockQuantity() - quantity; if (restStock < 0) { throw new NotEnoughStockException("재고가 부족합니다."); } item.setStockQuantity(restStock); itemRepository.save(item); } public Item findOne(Long itemId) { return itemRepository.findOne(itemId); } public List<Item> findAll() { return itemRepository.findAll(); } }ItemServiceTest 코드package spring.project.service; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import spring.project.domain.Album; import spring.project.domain.Book; import spring.project.domain.Item; import spring.project.repository.ItemRepository; @SpringBootTest class ItemServiceTest { @Autowired private ItemRepository itemRepository; @Autowired private ItemService itemService; @Test @DisplayName("상품 저장 시 상품 저장과 동시에 재고 수량이 증가해야 한다.") void save() { // given Book book = new Book(); book.setAuthor("홍길동"); // when Long id = itemService.saveItem(book, 3); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getName()).isEqualTo(book.getName()); Assertions.assertThat(item.getStockQuantity()).isEqualTo(3); } @Test @DisplayName("상품 주문이 들어가면 재고 수량에서 주문 수량만큼 차감이 되어야 한다.") void remove() { // given Album album = new Album(); album.setName("영원"); Long id = itemService.saveItem(album, 100); // when itemService.removeStock(album, 4); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getStockQuantity()).isEqualTo(96); } }
-
미해결스프링 핵심 원리 - 기본편
Map, List 조회시 빈등록 여부 질문합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용][조회한 빈 모두 필요할 때 , List, Map] 강의를 보고 스프링 빈에 등록되는 것을 모든 빈이 궁금하여 조회해 보았습니다. 그런데 @Autowire를 통해 Map policyMap, List policies은 빈 에는 등록 되지 않아 보입니다.그 이유가 AutoConfig.class를 통하여 @Componet가 설정된 클래스와 명시적으로 설정한DiscountService.class가 빈으로 등록 되고 Map policyMap, List policies은 @Componet설정이 된것이 아닌 스프링이 제공하는 기능으로 의존 관계 설정만 되는 것이 맞나요?코드package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { @Test void test(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames){ BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){ System.out.println("beanDefinitionName = " + beanDefinitionName + " / beanDefinition = " + beanDefinition.getBeanClassName()); } } } static class DiscountService { // 해당 타입(DiscountPolicy)에 일치하는 모든 빈이 컬렉션에 자동 추가 된다. -> 스프링이 제공하는 기능 // List에는 해당 타입의 빈이 순서대로 들어 간다. // Map에는 빈 이름을 키로, 빈 객체 값을 가지게 된다. private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired public DiscountService(List<DiscountPolicy> policies, Map<String, DiscountPolicy> policyMap) { this.policies = policies; this.policyMap = policyMap; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } } }
-
해결됨스프링 핵심 원리 - 기본편
localhost 8080 서버 안 뜸 문제
https://drive.google.com/file/d/1Napy4xVoywSNcyohTGH3kevfrdSkgfWg/view?usp=sharingrequest 스코프 예제 만들기 중 스프링부트 돌려보니 서버가 열리지 않습니다. 로그를 보니 repository 주입을 뭘 해야할지 모른다 되어있는데 어느부분을 고쳐야 할지 알려주심 감사하겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
8:15부분에 관해 질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원가입을 하면 그냥 db에다가 데이터만 저장하면 되는데 왜 이렇게 id를 리턴 해주는지 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
log-demo 페이지로 들어갔을 때 404에러가 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.16:08:32.949 [main] INFO hello.core.CoreApplication -- Started CoreApplication in 2.149 seconds (process running for 3.122)16:08:32.950 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean -- Application availability state LivenessState changed to CORRECT16:08:32.953 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean -- Application availability state ReadinessState changed to ACCEPTING_TRAFFIC16:08:38.630 [http-nio-8080-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] -- Initializing Spring DispatcherServlet 'dispatcherServlet'16:08:38.631 [http-nio-8080-exec-1] INFO o.s.web.servlet.DispatcherServlet -- Initializing Servlet 'dispatcherServlet'16:08:38.631 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Detected StandardServletMultipartResolver16:08:38.631 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Detected AcceptHeaderLocaleResolver16:08:38.631 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Detected FixedThemeResolver16:08:38.631 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@4be7db1f16:08:38.632 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Detected org.springframework.web.servlet.support.SessionFlashMapManager@35f6ed7816:08:38.632 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data16:08:38.632 [http-nio-8080-exec-1] INFO o.s.web.servlet.DispatcherServlet -- Completed initialization in 1 ms16:08:38.644 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- GET "/log-demo", parameters={}16:08:38.657 [http-nio-8080-exec-1] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping -- Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]16:08:38.671 [http-nio-8080-exec-1] DEBUG o.s.w.s.r.ResourceHttpRequestHandler -- Resource not found16:08:38.679 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver -- Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource log-demo.]16:08:38.679 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Completed 404 NOT_FOUND16:08:38.689 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- "ERROR" dispatch for GET "/error", parameters={}16:08:38.693 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping -- Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)16:08:38.728 [http-nio-8080-exec-1] DEBUG o.s.w.s.v.ContentNegotiatingViewResolver -- Selected 'text/html' given [text/html, text/html;q=0.8]16:08:38.736 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet -- Exiting from "ERROR" dispatch, status 40416:08:38.800 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet -- GET "/favicon.ico", parameters={}16:08:38.801 [http-nio-8080-exec-2] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping -- Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]16:08:38.803 [http-nio-8080-exec-2] DEBUG o.s.w.s.r.ResourceHttpRequestHandler -- Resource not found16:08:38.803 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver -- Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.]16:08:38.804 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet -- Completed 404 NOT_FOUND16:08:38.804 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet -- "ERROR" dispatch for GET "/error", parameters={}16:08:38.804 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping -- Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)16:08:38.822 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor -- Using 'application/json;q=0.8', given [image/avif, image/webp, image/apng, image/svg+xml, image/*, /;q=0.8] and supported [application/json, application/*+json]16:08:38.825 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor -- Writing [{timestamp=Mon Jul 22 16:08:38 KST 2024, status=404, error=Not Found, path=/favicon.ico}]16:08:38.902 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet -- Exiting from "ERROR" dispatch, status 40416:08:43.731 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet -- GET "/", parameters={}16:08:43.732 [http-nio-8080-exec-3] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping -- Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]16:08:43.733 [http-nio-8080-exec-3] DEBUG o.s.w.s.r.ResourceHttpRequestHandler -- Resource not found16:08:43.733 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver -- Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource .]16:08:43.733 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet -- Completed 404 NOT_FOUND16:08:43.733 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet -- "ERROR" dispatch for GET "/error", parameters={}16:08:43.734 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping -- Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)16:08:43.736 [http-nio-8080-exec-3] DEBUG o.s.w.s.v.ContentNegotiatingViewResolver -- Selected 'text/html' given [text/html, text/html;q=0.8]16:08:43.737 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet -- Exiting from "ERROR" dispatch, status 404
-
미해결토비의 스프링 6 - 이해와 원리
자바 버전
jdk 버전 관련 개념이 조금 헷갈려서 질문 드립니다.현재 터미널에서 java -version 명령어를 통해 출력되는 자바 버전은 11인데스프링 프로젝트 별로 자바 버전을 다르게 할 수 있다면혹시 제 컴퓨터에 설치되고 환경 변수 설정까지 하여 터미널에서 출력되는 자바 버전은 전혀 상관이 없는 건가요??상관이 없다면 제 컴퓨터에 따로 자바를 설치하고 환경 변수 설정 까지 해야 하는 이유가 무엇인가요??
-
미해결스프링 핵심 원리 - 기본편
프로젝트 생성 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]오류가 뜹니다.
-
해결됨비전공자를 위한 Spring IoC(Inversion of Control) 뽀개기
@Service name 중복
@Service("aaa")같은 이름 aaa로 두군데서 선언하면 안된다고 배웠는데요interface BoardService{}@Service("boardService")BoardServiceImpl implements BoardService{}@Service("boardService")BoardServiceCustom extends BoardServiceImpl{}이렇게 선언은 가능한건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 name 속성 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]타임리프 관련해서 헷갈리는 게 있어서 질문드립니다.강의에서와 똑같이 이 화면에서 페이지 소스 보기를 누르면이렇게 나옵니다. value가 2개 있습니다."127.0.0.1:8080""hello.typeconverter.type.IpPort@59cb0946"만약 제출 버튼을 누르게 되면 "127.0.0.1:8080" 이건 name="ipPort"가 있기 때문에 @PostMapping("/converter/edit") public String converterEdit(@ModelAttribute Form form, Model model) { IpPort ipPort = form.getIpPort(); model.addAttribute("ipPort", ipPort); return "converter-view"; }여기의 Form 객체의 ipPort 필드와 타임리프 속성 name의 "ipPort"가 똑같기 때문에 값이 들어갈 수 있는 거로 이해했는데 맞나요?즉 여기선 타임리프의 name 속성이 중요한 역할을 하고 있는 건가요?그리고 "hello.typeconverter.type.IpPort@59cb0946" 이건 name 속성이 없는데, 제출 버튼을 누르게 되면 이 값은 어떻게 되는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티를 다른 서비스로 바로 넘겨도 될까요?
a도메인 서비스에서 jpa로 가져온 엔티티를b도메인 서비스로 넘겨도 될까요?dto를 쓰지 않고 엔티티 타입을 그냥 바로 넘기려구요 이때 영속성 컨텍스트를 끊어주려고 OSIV off하고 데이터커넥션 끊기도록 설정할겁니다 이렇게만 하면 다른 서비스로 넘어가도 괜찮을까요?
-
미해결스프링 핵심 원리 - 기본편
gradle 오류
로 했는데 이렇게 뜹니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 gradlew
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.java 환경변수 버전 매칭은 잘 되어있는거 같은데 이렇게 되고 더이상 진행이 안되네요... 윈도우 gradlew build가 안됩니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션 6 requestparam
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Requestparam. V2에서 username과 age를 각각 hello 20 으로 보낸 적이 없는데 왜 알아서 보내지나요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Dto와 공통되는 클래스가 있을 때
안녕하세요 Dto클래스가 있을 때, 다른 곳에서도 그와 동일한 스펙의 클래스가 필요하다면 재사용을 해도 되는지, 아니라면 각각 구현해야 하는지 궁금합니다.예를 들어 컨트롤러에서 요청을 통해, Coordinate(위도와 경도를 필드로 갖는)라는 타입으로 좌표를 받아서 사용하는데, 다른 패키지에서도 동일한 스펙을 갖는 클래스가 필요하다면 Coordinate를 재사용해도 되는 걸까요? 아니면 CoordinateForXXXXDto와 같이 동일한 스펙의 클래스를 이름만 다르게 구현하여 사용해야 할까요? webdtorequestCoordinateDto Dto로만 사용되면 위와 비슷한 구조를 가지면 된다고 생각하는데, 만약 재사용이 가능하여 Dto의 역할(계층간의 데이터 전송)이 아닌, 오로지 하나의 클래스 안에서만 사용되는 경우도 포함돼 있다면 어떤 패키지에 놓아야 할지도 궁금합니다!public class CoordinateDto { private double latitude; private double longitude; }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
id 숫자 건너뜀
다른 질문 글에도 비슷한 내용이 있길래 답변 해주신대로 블로그도 참고해봤는데 해결하지 못 했어요..(33이 아닌 36으로 뜨는 이유는 데이터를 삭제해서 그렇습니다.)
-
미해결스프링 핵심 원리 - 기본편
IllegalStateException
CoreApplicationTests를 run 했을 때 아래와 같은 에러가 발생합니다. 라이브 코딩으로 똑같이 따라했는데 왜 그러는걸까요? ㅠㅠ 구글 드라이브 링크 첨부합니다... 도와주세요 ㅠ java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@298d9a05 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@4ef37659, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@306cf3ea, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@52102734, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@4d910fd6, org.springframework.boot.test.context.SpringBootTestAnnotation@e50e93c5], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] 구글 드라이브 링크 : https://drive.google.com/drive/folders/1KhcvynthGyhTtm1G1hGlFdkD7R1eHDBN?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드에서 플러시 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @ExtendWith(SpringExtension.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member,memberRepository.findOne(savedId)); } @Test public void 중복_회원_에외() throws Exception { //given //when //then } }해당 코드에서 @Transactional 어노테이션으로 롤백이 일어나는 것은 이해했으나 이것이 Flush 자체가 일어나지 않는 다는 것이 이해 되지 않습니다. 회원가입시 em.persist()가 호출이 되면 자동으로 Flush발생했다가 다시롤백되는게 아니지 궁금해서 질문 남깁니다.