묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
db에 저장 시
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. Item 클래스와 UploadFile 클래스는 왜 따로 나눠쓰나요?만약 db에 테이블로 생성 시 Item, ItemForm, UploadFIle의 연관관계는 어떡게 되는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
v3와 v5를 실행할때 각각 404 ,500 에러가 발생합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.v1,v2,v4는 잘 동작하는데 v3,v5는 각각 에러가 발생하여pdf파일에 있는 코드를 복붙해서 작성하였습니다.그래도 실행하니 v3는 404 v5는 500에러가 발생 하는데 어디가 문제인가요?https://drive.google.com/drive/folders/1ZpCesyTQhZA09g5C1NzELrDZnLpAUsY7?usp=sharing 링크를 수정해도 안들어가져서 다시올립니다
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트 DB 방안에 대해
안녕하세요~! 혹시 테스트 DB 단은 단순히 다음과 같이 명시하여 datasource: url: jdbc:h2:mem:test;MODE=MySQL # Test 는 인메모리 사용 driver-class-name: org.h2.Driver username: sa password: 메모리 DB 를 사용하는 방법은 별로 추천하지 않으실까요? 별도의 DB 를 사용하는 것이 제일 좋은 방법일까요? 메모리 DB를 사용하는것이 빠르고 편할 것 같다고 생각헀는데, 보통 어떤 방식을 실무에서 사용하는지 궁금합니다!! 감사합니다 :) (예를 들어, ci 및 build 서버에서 Test 수행시 외부 DB 서버 내 Test 전용 DB 를 통해 Test 를 한다)
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ExceptionHandler를 제대로 이해한건지 모르겠습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@ExceptionHandler 부분을 보고있는데 만약 회원가입 서비스에서 아이디 중복을 확인하는 서비스를 만든다고 가정했을때 중복이면 커스텀 예외를 만들어서 날려준다면.예외를 @ExceptionHandler써서 처리하는걸로 알고있습니다. 그러면 예외가 throw된 service단에서 처리되는건가요?이게 맞다면 api 내에서 throw로 커스텀 에러를 날리고 @exceptionHandler 을 사용한다면 커스텀 에러들이 발생한곳에서 처리되는건지 궁금합니다.3. 커스텀 예외를 만들시 extends RuntimeException를 하는게 controller등등에 예외가 전파되지 않기 위해서인걸로 아는데 그러면 예외를 runtime 에러로 만들었을 시 try catch문은 필요가 없는게 맞나요? 몇몇 코드를 찾아보니 @ExceptionHandler를 사용하고 runtime에러여도 trycatch를 굳이 쓰는 경우도 있던데 코드의 가독성을 위해서 넣은건지 궁금합니다.4. 아이디 중복같은 경우 굳이 예외로 던지지 않아도 해결할 수 있는데 예외를 던지는 이유는 로그라던가 코드의 안정성을 위한건지도 궁금합니다.그리고 커스텀 에러를 체크에러로 만들어서 처리하는 경우 에러를 @ExceptionHandler로 해결해도 전파되던데 이러한 경우는 어째서 인지 궁금합니다!6.spring data jpa 에서는 자동으로 spring이 추상화한 예외를 날려주는걸로 아는데 그러면 DataIntegrityViolationException.class 예외가 터졌을때 (외래키 중복 , 아이디 중복)두개의 오류를 각기 다른 방법으로 처리하고싶으면 어떻게 하나요? 에러코드나 스프링 메뉴얼을 분석해서 그 예외에 종속된 사용자 지정 예외를 만드나요?그러면 결국 그냥 예외가 터지는 try catch 부분에서 if 문을 짜서 그 에러코드를 가진 예외가 터졌을시에 대한것을 처리해주면 되는거 아닌지 헷갈립니다..그리고 그게 아니면 DataIntegrityViolationException.class 예외가 터졌을 시 해결하는 코드를 작성했는데 DataIntegrityViolationException.class에 종속된 다른 오류가 터진거면 어떻게 할지 잘 모르겠습니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
form태그의 상대경로
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요."src/main/resources/static/basic" 경로에 있는 "hello-form.html"파일의 form태그의 action 속성을 "/request-param-v1"으로 했는데 localhost:8080/request-param-v1이 정상적으로 나오는 이유가 무엇인가요? /basic은 무시되는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
v3와 v5를 실행할때 각각 404 ,500 에러가 발생합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.https://drive.google.com/drive/folders/1ZpCesyTQhZA09g5C1NzELrDZnLpAUsY7?usp=sharingv1,v2,v4는 잘 동작하는데 v3,v5는 각각 에러가 발생하여pdf파일에 있는 코드를 복붙해서 작성하였습니다.그래도 실행하니 v3는 404 v5는 500에러가 발생 하는데 어디가 문제인가요?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
안녕하세요 자료문의 드립니다.
선생님께서 작성한 엑셀 자료는 어디에 올려주셨는지 알 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
meberRepository 질문
위 MemberServiceTest 클래스에서 memberRepository참조변수를 beforeEach메서드에서 초기화한게 아니고 필드에서 memberRepository를 한 번 초기화 하였는데 왜 BeforeEach 실행시 이렇게 모두 다른 memberRepository 주소값이 출력되는 지 잘 모르겠습니다. 필드에서 한번만 초기화 하였고 memberRepository의 값의 변화도 없는데 모두 같은 주소값이 출력되야 하는 거 아닌가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 Controller 패키지가 정상 작동 안 합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오): 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오): 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오): 예[질문 내용]여기에 질문 내용을 남겨주세요.Sptring boot가 controller 패키지를 인식안하고converter패키지를 controller로 인식하고있습니다.그래서 HelloController 클래스를 converter 패키지에 구현하고 진행중 입니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
fail() 에 빨간줄이 그어집니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]fail(); 여기서 오류가 나는데 이유를 모르겠어요 package hello.hellospring.service;import hello.hellospring.domain.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import static org.assertj.core.api.Assertions.*;class MemberServiceTest {//테스트는 한글메서드로 바꿔도 좋다.MemberService service = new MemberService();@Testvoid 회원가입() {//givenMember member = new Member();member.setName("hello");//whenLong saveId = service.join(member);//thenMember findeMember = service.findOne(saveId).get();Assertions.assertThat(member.getName()).isEqualTo(findeMember.getName());}@Testvoid 중복회원예외() {//givenMember member1= new Member();member1.setName("spring");Member member2= new Member();member2.setName("spring");//whenservice.join(member1);try{service.join(member2); //validate에서 걸려서 예외가 터져야 한다. fail(); 여기가 오류가 나요 }catch (IllegalStateException e){//성공assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");}//then}@Testvoid 회원조회() {}}
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
basic/items.html 입력시에만 화이트 라베 오류가 발생합니다. 제발 도와주세요 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.items.html 수정 전 코드 입력시에는 웹 페이지가 잘 작동하는데<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <link href="../css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <style> .container { max-width: 560px; } </style> </head> <body> <div class="container"> <div class="py-5 text-center"> <h2>상품 상세</h2> </div> <div> <label for="itemId">상품 ID</label> <input type="text" id="itemId" name="itemId" class="form-control" value="1" th:value="${item.id}" readonly> </div> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" value="10000" th:value="${item.price}" readonly> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form-control" value="10" th:value="${item.quantity}" readonly> </div> <hr class="my-4"> <div class="row"> <div class="col"> <button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" th:onclick="|location.href='@{/basic/items/{itemId}/ edit(itemId=${item.id})}'|" type="button">상품 수정</button> </div> <div class="col"> <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='items.html'" th:onclick="|location.href='@{/basic/items}'|" type="button">목록으로</button> </div> </div> </div> <!-- /container --> </body> </html> 수정 후 코드를 복붙 후에 웹 페이지에 입력하면 화이트 라벨 페이지가 응답합니다...뭐가 문제인지 모르겠습니다.. 도와주세요
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Test 오류 발생 원인이 무엇인지 잘 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; import java.sql.SQLException; /** * 트랙잭션 - @Transactional AOP */ @Slf4j //final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션 public class MemberServiceV3_3 { private final MemberRepositoryV3 memberRepository; public MemberServiceV3_3( MemberRepositoryV3 memberRepository) { this.memberRepository = memberRepository; } @Transactional //이 메소드를 호출할 때, 트랙잭션을 걸고 시작하겠다는 의미. // 성공하면 커밋 실패하면 롤백을 한다. public void accountTransfer(String fromId, String toId, int money) throws SQLException { bizLogic(fromId, toId, money); } private void bizLogic(String fromId, String toId, int money) throws SQLException { Member fromMember = memberRepository.findById(fromId); Member toMember = memberRepository.findById(toId); memberRepository.update(fromId,fromMember.getMoney()- money); validation(toMember); memberRepository.update(toId,toMember.getMoney()+ money); } private static void validation(Member toMember) { if(toMember.getMemberId().equals("ex")){ throw new IllegalStateException("이제 중 예외 발생. 테스트 위해 만듦"); } } }이것이 원본 코드이고 package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; 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 org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * 트랜잭션 - @Transactional AOP */ @Slf4j @SpringBootTest //스프링테스트 어노테이션이 있으면 이 테스트에서 //스프링부트가 이 테스트에서 스프링 컨테이너를 만들고 필요한 스프링 빈을 전부 등록하고 스프링 빈에 대한 의존관계 주입도 받을 수 있게 된다 class MemberServiceV3_3Test { public static final String MEMBER_A = "memberA"; public static final String MEMBER_B = "memberB"; public static final String MEMBER_EX = "ex"; @Autowired // 의존관계 주입을 받아서 사용한다. private MemberRepositoryV3 memberRepository; @Autowired private MemberServiceV3_3 memberService; @TestConfiguration static class TestConfig{ @Bean DataSource dataSource(){ return new DriverManagerDataSource(URL,USERNAME,PASSWORD); } @Bean PlatformTransactionManager transactionManager(){ return new DataSourceTransactionManager(dataSource()); } @Bean MemberRepositoryV3 memberRepositoryV3(){ return new MemberRepositoryV3(dataSource()); } @Bean MemberServiceV3_3 memberServiceV3_3(){ return new MemberServiceV3_3(memberRepositoryV3()); } } @AfterEach void after() throws SQLException { memberRepository.delete(MEMBER_A); memberRepository.delete(MEMBER_B); memberRepository.delete(MEMBER_EX); } @Test @DisplayName("정상 이체") void accountTransfer() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberB = new Member(MEMBER_B, 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberEx = new Member(MEMBER_EX, 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberEx = memberRepository.findById(memberEx.getMemberId()); //memberA의 돈이 롤백 되어야함 assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberEx.getMoney()).isEqualTo(10000); } }이것이 테스트 코드입니다.원본 코드는 따로 수정하지 않았고 테스트 코드만 가져와서 사용했는데 왜 오류가 발생하는지 잘 이해가 안됩니다 설명 부탁드립니다. 오류는 다음과 같이 나옵니다Execution failed for task ':test'.> No tests found for given includes: [hello.jdbc.service.MemberServiceV3_3Test.AopCheck](--tests filter)* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.2.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 577ms4 actionable tasks: 1 executed, 3 up-to-date 설명 부탁드립니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV3_3 테스트 코드 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위는 MemberServiceV3_3 코드의 @Transactional를 사용하는 메소드 부분이고 아래는 MemberServiceV3_3Test 코드입니다.package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; 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 org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * 트랜잭션 - @Transactional AOP */ @Slf4j @SpringBootTest //스프링테스트 어노테이션이 있으면 이 테스트에서 //스프링부트가 이 테스트에서 스프링 컨테이너를 만들고 필요한 스프링 빈을 전부 등록하고 스프링 빈에 대한 의존관계 주입도 받을 수 있게 된다 class MemberServiceV3_3Test { public static final String MEMBER_A = "memberA"; public static final String MEMBER_B = "memberB"; public static final String MEMBER_EX = "ex"; @Autowired // 의존관계 주입을 받아서 사용한다. private MemberRepositoryV3 memberRepository; @Autowired private MemberServiceV3_3 memberService; @TestConfiguration static class TestConfig{ @Bean DataSource dataSource(){ return new DriverManagerDataSource(URL,USERNAME,PASSWORD); } @Bean PlatformTransactionManager transactionManager(){ return new DataSourceTransactionManager(dataSource()); } @Bean MemberRepositoryV3 memberRepositoryV3(){ return new MemberRepositoryV3(dataSource()); } @Bean MemberServiceV3_3 memberServiceV3_3(){ return new MemberServiceV3_3(memberRepositoryV3()); } } @AfterEach void after() throws SQLException { memberRepository.delete(MEMBER_A); memberRepository.delete(MEMBER_B); memberRepository.delete(MEMBER_EX); } @Test @DisplayName("정상 이체") void accountTransfer() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberB = new Member(MEMBER_B, 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberEx = new Member(MEMBER_EX, 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberEx = memberRepository.findById(memberEx.getMemberId()); //memberA의 돈이 롤백 되어야함 assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberEx.getMoney()).isEqualTo(10000); } }저는 지금까지는 원본 코드와 테스트 코드가 따로 따로라고 생각했습니다. 근데 강의에서 원본 코드의 @Transactional을 사용 했을 때와, @Transactional을 주석 처리해 원본 코드를 수정했을 때. 테스트 코드의 결과가 다르게 변하더라구요. 이런 결과가 왜 발생하는건가요?테스트 코드는 원본 코드에 영향을 받는건가요?만약, 영향을 받는다면 어떤 범위까지 영향을 받는건가요? 설명 부탁드립니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원목록 열람 실패 해결관련 문의사항
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 회원 목록 출력?시 에러 발생하여 출력 되지 않아 해결 해보았습니다. 해당 문제를 이렇게 해결 하는게 적절한 방법 인지 확인 부탁드립니다! 현상1. 회원 가입 진행 하지 않고 (데이터 없음), 회원 목록 접근시 정상 화면 송출2. 회원 가입 진행 후, 회원 목록 접근 시, 에러 발생 에러 내용생각한 원인 및 해결 방법Member 클래스 내, 접근 제한자가 Private로 설정된 id와 name 변수를 getId, getName이 아닌 방법으로 꺼내와서 문제 발생. getId, GetName매서드로 접근시 정상 동작 Member 클래스에서 Getter And Setter로 생성하지 않고 직접 타이핑 해서 발생.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
2강 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java 11설치후 Springboot 2.7.16을 깔았는데 Run할수있는 표시도 안나오고자꾸 저렇게 오류가 뜹니다 뭐가 문제일까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 hello 실행했을때의 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4:12:44 PM: 실행 중 ':classes'...> Task :compileJava FAILED1 actionable task: 1 executedFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> invalid source release: 11* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 1s4:12:45 PM: 실행이 완료되었습니다 ':classes'.이런 오류와 함께 빌드가 실패합니다. 뭐가 문젠지 모르겠어요. 한번 빌드를 실행해서 됐었고, 코드를 실행하려고 하니까 빌드가 실패했다는 오류가 뜹니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 부트 버전 어느것을 선택해야하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 여기에서 버전을 어느것을 선택해야하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
build.gradle 호환 에러
start.spring.io 에서 generate 하고 빌드를 하는데 스프링부트 플러그인과 gradle 버전이 호환이 안된다고 에러가 뜨는데 그러면 버전을 낮춰서라도 실행이 되면 상관없나요? 버전을 낮추면 실행은 되는데 이후의 강의를 따라가는데 뭔가 문제가 생길까 싶어서 여쭤봅니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드오류요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]할 수 있는 설정은 전부 jdk 17로 했구요, 컴파일 설정도 17로 해놓았습니다. 3짤에 project탭도 17로 설정되어있습니다. java version 도 보이시는대로 17인데..자꾸 이런 오류 메세지가 뜹니다. Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 11 라구요. 아 세번째 이미지에서 .gradle과 build 폴더는 원래대로 다시 exclude로 빨간색 되어있는 상태입니다.뭐가 문제인지 모르겠네요.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
EntityManager 빈 자동주입
EntityManager Configuration 파일에서 선언할 때@RequiredArgsConstructor 어노테이션을 제거하셨는데 어떻게 자동주입이 된것이죠?