학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 사진과 같이 intelliJ 에서 JDK는 17로 맞춰놓았습니다. 그래서 빌드도 성공적으로 잘됩니다. 하지만 빌드 후, 제 로컬환경에서 CMD에서 위와같이 gradlew 입력시 , 아래와같은 오류가 뜹니다 ㅠ 어떻게 해결할 수 있을까요? 검색해서 해보라는 조치는 다해본상태입니다 ㅠ
@Bean 등록은 일반적으로 @Configuration 애노테이션이 있는 설정 클래스 내부에서 이뤄지는 걸로 이해하고 있습니다. 하지만 ItemServiceApplication 클래스를 보면 @Configuration 이 아닌데도 TestDataInit가 @Bean 으로 등록되고 있습니다. @Import(MemoryConfig.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } @Bean @Profile("local") public TestDataInit testDataInit(ItemRepository itemRepository) { return new TestDataInit(itemRepository); } } 찾아보니, @SpringBootApplication 애노테이션이 이미 암시적으로 @Configuration 애노테이션을 포함하고 있기 때문에 가능하다고 봤습니다. 실제 @SpringBootApplication 이 @Comfiguration 을 포함하고 있어서 위 코드가 가능한 게 맞나요? 그렇다고 해도 이미 @Configuration 이 붙은 MemoryConfig가 이미 있는데, 왜 굳이 @SpringBootApplication 에서 빈으로 등록하려는 건가요?
자바'만' 알아요. 입문강의라고 해서 들어봤는데 자바 처음 공부할때처럼 자바란 뭐고 어디에 쓰이고 등등부터 알려주시는것처럼 알려주시는줄 알았는데 그냥 따라하기부터 바로 들어가시더라구여.... 저는 스프링이 뭔지, 어디에 쓰이는지, 왜 배워야되는지 등등 완전 기초적인것부터 알려주실줄 알았는데... 완전 기초용 강의는 없나요?....
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 스프링 부트 버전 3.2.0 사용 하시는분들 mybatis 의존성 추가하실때 이렇게 추가하시면 돼요..!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] private static method 를 사용하는 이유를 알고 싶습니다. [질문 배경] 영한님의 다른 강의(스프링 강의로 기억합니다.) 중에 아주 단순한 기능을 private static method를 사용하셔서 만드신 걸 본적이 있었습니다. 왜 private 접근제어자를 사용하셨는데, 인스턴스 메서드가 아닌 static 메서드를 사용하셨을까? 궁금하여 여러 검색과 이리 저리 혼자서 생각도 많이 해보고 나름대로 정리했습니다만 뇌내 망상 수준이라.. 영한님의 답변만큼 확실한건 없을 것 같아 질문드립니다. [검색 등을 통해 제가 정리한 내용] 속도 : 인스턴스 메서드의 경우에는 메서드 영역의 virtual table을 거쳐서 이 인스턴스에 매핑되는 메서드를 조회 후 메서드에 접근해야 하지만, static 메서드의 경우에는 그럴 필요가 없어 인스턴스 메서드에 비해 빠르다. -> 이 부분은 제가 여러 정보를 조합한 내용이라 신빙성이 떨어지고, 과연 속도 측면에서 유의미한 차이가 있을까 의문입니다. 객체지향기반의 커뮤니케이션 : private 접근제어자를 명시하여 캡슐화를 하였으나 static 까지 붙여 이 메서드는 내부에서만 쓸 뿐더러 객체지향적으로 대화할 의도가 없으니 거들떠도 보지 말아라 라는 의미를 담고 있는 것이 아니었을까 추측해봅니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 제가 이해한 내용을 설명하고, 이해가지 않은 내용을 질문하려 합니다. Spring Data JPA 기술을 이용하여 SpringDataJpaItemRepository를 구성했고, 해당 interface를 바로 ItemServiceV1에서 의존관계 주입하여 사용하고 싶다. 하지만, 이미 ItemServiceV1은 ItemRepository interface를 주입받아 사용하고 있기 때문에 SpringDataJpaItemRepository interface를 사용하려면 ItemServiceV1에서 코드레벨에서의 수정이 필연적으로 일어나게 된다.(문제점 1) 또한, SpringDataJpaItemRepository는 ItemRepository를 extends한 것이 아닌 JpaRepository를 extends한 것임.(문제점 2) 따라서 이런 문제점들 때문에 JpaItemRepostioryV2 class를 도입하여 ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다. 위 내용처럼 서술했을 때 올바르게 서술한 것인지 궁금하고, 2가지 이해가지 않는 부분에 대해서 질문하고 싶습니다. 첫번째: 문제점2가 왜 문제인건지 잘 모르겠습니다. 두번째: “ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다”에서 맞춘다가 정확히 어떤 것을 맞추는 것이라고 해야 표현 상 올바른 것인지 잘 모르겠습니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] -> 강의 pdf 캡처본입니다. 해당 캡처본에서 JpaRepository를 인터페이스 상속받으면 기본적인 CRUD 기능을 사용할 수 있다고 하는데, '기본적인 CRUD 기능'이 의미하는 것이 'CrudRepository가 가지고 있는 CRUD 메서드'(save, delete 등등)를 의미하는 것인가요?
트랜잭션의 동작 원리에 대해서 정리해봤습니다. 제대로 이해했는지 확인 부탁드립니다! 혹시 잘못 이해하고 있는 부분이 있다면 말씀 부탁드립니다. 서비스 클래스의 메소드에 @Transactional 이 있으면 스프링은 해당 비즈니스 로직을 상속한 AOP 프록시 객체를 생성한 후, 이를 스프링 빈에 등록한다. 클라이언트가 해당 프록시 를 호출한다. (비즈니스 로직 자체를 호출하지 않는다) 스프링은 스프링 컨테이너에 등록된 트랜잭션 매니저 를 획득한다. 트랜잭션 매니저의 transactionManager.getTransaction() 을 호출하여 트랜잭션을 시작한다. 트랜잭션 매니저는 스프링 컨테이너에 등록된 데이터 소스 를 이용하여 커넥션 을 생성한다. 커넥션의 con.setAutoCommit(false) 호출로 수동 커밋 모드로 변환한다. 생성하고 설정을 끝낸 커넥션을 트랜잭션 동기화 매니저 에 보관한다. 실제 서비스를 호출하면, 서비스의 비즈니스 로직과 리포지토리의 데이터 접근 로직이 수행된다. 리포지토리의 데이터 접근 로직은 트랜잭션 동기화 매니저에 보관된 커넥션을 획득한 후 DB에 접근하여 SQL을 수행한다. 비즈니스 로직이 끝나면서 AOP 프록시에서 커밋 또는 롤백 을 통해 트랜잭션을 종료한다. 트랜잭션을 종료함으로써 커넥션은 커넥션 풀에 반납된다.
프록시에 대해서 잘 모르는 상태로 질문드립니다. 앞으로 다른 강의에서 나올 수 있는 내용이지만, 일단 큰 그림을 잡을 수 있게 간단하게 질문드립니다. 이번 강의에서 메소드에 @Transactional 을 붙이면 프록시 객체가 만들어진다고 배웠습니다. 그렇다면 @Transactional 가 붙어있는 메소드 단위로 프록시 객체가 만들어지는 건지, 아니면 Service 클래스 단위로 프록시 객체가 만들어지는 건지 궁금합니다. 예를 들어, Service 클래스에 3개의 메소드가 있다고 가정했을 때, @Transactional 메소드가 2개, 일반 메소드가 1개 있다면, 프록시 객체는 2개가 만들어지는 건가요? 아니면 한 개의 프록시 객체에 두 개의 메소드가 등록되는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] mapper.xml 제일 윗줄인 DOCTYPE 부분 제일 뒤쪽 dtd 주소에 빨간줄이 그어지면서 cannot find dtd file 또는 해당 dtd 파일을 받는중에 오류가 났다고 나오는데요, 덕분에 <mapper>, <select>등 전부 빨간줄이 그어집니다 ㅠ 모든 dtd 파일을 못가져오나 싶었는데, mybatis-context.xml의 config dtd는 또 잘 가져오구요... 어떤것 때문에 mapper dtd를 못가져오는건지 모르겠습니다
프로젝트 코드 : https://drive.google.com/file/d/11CCB36D9oTLIXMvT4LUcGoXfyXB9Pk0E/view?usp=sharing MemberSerivceV3_1Test , MemberSerivceV3_2Test 에서 이체중 예외 발생 테스트 가 통과가 안됩니다. 기대하는 바는 롤백이 적용되어야 하는데, 실제 값은 롤백이 적용되지 않는 8000원이 저장됩니다. PlatformTransactionManager 을 적용한 코드에서 문제가 발생하는 것 같습니다. 딱히 놓친 부분이나 잘못한 부분을 발견하기 힘들어서 도움을 요청드리고자 질문 올립니다. ㅠㅠ 감사합니다.
뷰 <form => PostMapping 컨트롤러 VO(int 형) 받기 문의 드립니다 안녕하세요 강사님 프로젝트 도중에 막히는 부분이 있어 질문드립니다 보안 지적사항이 나와서 기존 소스 호출 get 방식으로 호출 하는 부분을 모두 post 방식으로 변경 하라고 해서 작업중입니다 뷰 => 컨트롤러 => 서비스 => dao or repository 뷰 화면단에서 <form 에 있는 항목을 컨트롤러로 PostMapping 으로 넘겨 vo 로 받고 싶은데 바인딩예외가 발생합니다. vo 클래스에는 현재 int 형으로 선언이 되어 있는데 get으로 넘길때는 에러가 없었으나 post 로 변경해서 컨트롤러로 넘어가지 않습니다 제가 뷰화면단에서 <form 안에 input 타입을 "text" or "number" 형으로 변경 해가면서 테스트 해봐도 마찬가지네요 혹시 해결 방법이 있을까요? <<■■■■ 뷰 화면 단 >> <form <input type="text" => post 넘기면 에러 발생 <input type="number" => post 넘기면 에러 발생 <<■■■■ 컨트롤러 단 >> @PostMapping('~.do') public getSomeMethod(SomeVoClass param){ //■■메서드파라미터 SomeVoClass 안에 int 형 sn 항목 있습니다 <<■■■■ vo 클래스 >> pubiic class SomeVoClass{ private int sn;//■■게시판일련번호 int 형으로 선언됨 } <<■■■■ 자바에러메세지 >> org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult typeMissmatch.SomeVoClass.sn typeMissmatch.sn typeMissMatch.int.typeMismatch default message[Failed to convert property value of type 'java.lang.String[]' nested exception is java.lang.NumberFormatException: for input string ",1234"] 혹시 시간 나실 때 알려주시면 감사하겠습니다 수고하세요.. 김동희 드림
spring mvc vo int 받기 문의 드립니다 안녕하세요 강사님 프로젝트 도중에 막히는 부분이 있어 질문드립니다 보안 지적사항이 나와서 기존 소스 호출 get 방식으로 호출 하는 부분을 모두 post 방식으로 변경 하라고 해서 작업중입니다 뷰 => 컨트롤러 => 서비스 => dao or repository 뷰 화면단에서 <form 에 있는 항목을 컨트롤러로 PostMapping 으로 넘겨 vo 로 받고 싶은데 바인딩예외가 발생합니다. vo 클래스에는 현재 int 형으로 선언이 되어 있는데 get으로 넘길때는 에러가 없었으나 post 로 변경해서 컨트롤러로 넘어가지 않습니다 제가 뷰화면단에서 <form 안에 input 타입을 "text" or "number" 형으로 변경 해가면서 테스트 해봐도 마찬가지네요 혹시 해결 방법이 있을까요? <<■■■■ 뷰 화면 단 >> <form <input type="text" => post 넘기면 에러 발생 <input type="number" => post 넘기면 에러 발생 <<■■■■ 컨트롤러 단 >> @PostMapping('~.do') public getSomeMethod(SomeVoClass param){ //■■메서드파라미터 SomeVoClass 안에 int 형 sn 항목 있습니다 <<■■■■ vo 클래스 >> pubiic class SomeVoClass{ private int sn;//■■게시판일련번호 int 형으로 선언됨 } <<■■■■ 자바에러메세지 >> org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult typeMissmatch.SomeVoClass.sn typeMissmatch.sn typeMissMatch.int.typeMismatch default message[Failed to convert property value of type 'java.lang.String[]' nested exception is java.lang.NumberFormatException: for input string ",1234"] 혹시 시간 나실 때 알려주시면 감사하겠습니다 수고하세요.. 김동희 드림
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Expected java.lang.IllegalStateException to be thrown, but nothing was thrown 이게 문제인가요? 이게 문제인가요? 중복처리에서 걸려야 하는데 안 걸려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] findById의 리턴 값은 Optonal.ofNullable을 사용해서 값을 반환하는데 findByName의 리턴 값은 왜 Optoinal.ofNullable을 사용하지 않나요?