[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 동일하게 작성했는데 다음과 같은 오류가 발생합니다. 구글링 해봤을 때 unreachable 오류가 null 값이 나올 것 같을 때 발생한다고 하는데 강의 내용 그대로 따라 친거라 왜 오류가 발생하는지 모르겠습니다. 답변기다리겠습니다.
MemberService의 메소드를 보면 findMembers와 findOne같은 경우 Repository의 메소드를 (이름만 바꿔주는 식으로?) 한번 더 호출해주는 역할만 하고 join만 중복 회원 검증이라는 추가 적인 일을 하고 있는데요 이렇다면 굳이 Service단을 만들어서 코드를 입력해야하는 이유가 무엇인가요? findMembers가 필요하다면 그냥 findAll을 사용하면 되고, findOne이 필요하다면 findById를 사용하면 되지 않나요? 차라리 save 메소드에 중복회원을 검증하는 로직을 추가하는게 더 효율적이지 않나요?
public interface MemberRepository { void save(Member member); Member findById(Long memberId); } @Override public Member findById(Long memberId) { return store.get(memberId); } 정말 단순한 질문인데, 여기서 memberId는 임의로 정한 매개변수인건가요? 다른 이름으로 바꿔도 상관없는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] https://drive.google.com/file/d/1dYiDxEpDP2eVFCNY2Z6Lm0feoZscE0JS/view?usp=sharing 안녕하세요. 강의를 다 듣고 상품 삭제 기능을 직접 만들어 보고 있습니다. jquery와 bootstrap을 사용하여 modal창을 만들어 보려고 하는 중에 jquery 라이브러리를 불러오는데 실패 했었습니다. jquery 라이브러리 위치는 resources/templates/css경로 아래에 두었습니다. 영한님께서 말씀하신 out폴더를 지우고 서버를 재실행 하여도 같은 문제가 발생하여, resources/static/css경로에 두고 실행하였더니 jquery 라이브러리가 인식되는데요. templates경로 아래에만 jquery라이브러리 파일을 두었던 이유는 강의 내용에서 아래와 같은 내용을 언급하셨기 때문입니다. 강의 내 " resources/templates인식되는 원리 " 질문의 답에서도 ThymeleafProperties.java파일에 DEFAULT_PREFIX 값이 'classpath:/templates/'으로 되어있다고 답변되어 있어 templates경로 아래에 jquery 라이브러리를 두었던 것인데요. 라이브러리 파일을 어떤 이유에서 static폴더에다가 두어야 동작 하는 것인지 질문드립니다.
//검증 로직 if (item.getPrice() == null) {...} if (item.getQuantity() == null) {...} //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { if(resultPrice < 10000) { errors.put(); } 검증 로직 파트에서 item.getPrice()==null, item.getQuantity()==null을 미리 검증해서 price, quantity가 null인 경우는 걸러지니까, 바깥 if문을 제거해도 괜찮을까요? 추가로 한 가지 더 여쭤보고 싶은 것이 있는데, 검증 요구사항에서 '수량은 최대 9,999'라고 한다면 최소 수량에 대해서는 굳이 신경 쓰지 않아도 되는 것인가요?
// 1번 <link th:href="@{/css/bootstrap.min.css}" href="../css/bootstrap.min.css" rel="stylesheet"> // 2번 <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> 실무에서 타임리프를 작성할 때 1번처럼 th:href 속성과 href 속성을 같이 남겨두는지 2번처럼 th:href 속성만 남겨두는지 궁금합니다. 뷰 템플릿을 순수 html 파일로 사용하지 않는 이상 코드 중복이 없는 2번 방식을 사용하는 것이 더 좋아보이는데 실무에서 1번 방식을 사용해야만 하는 경우가 있을지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.hellospring.service.MemberService.join(hello.hellospring.domain.Member)" because "this.memberService" is null 테스트케이스에서 실행했는데 오류가 뜹니다 this.memberService 가 null이라 오류인건 알았는데 왜 그런건가요? 강의코드 복붙해도 그러네요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @queryprojection 어노테이션이 쿼리 디에스엘에 의존성에 대한 얘기를 해주셨는데요. 레포지토리에서 쓰는 쿼리디에스엘도 같은 의존성 문제가 있는거 아닌가요 ? 극단적인 예로 치명적인 버그로 쿼리디에스엘을 급히 밀어야 되는 문제라던가 다른걸로 대체를 해야 할때 레포지토리에서 사용했던 쿼리펙토리도 모두 바꿔줘야 하는 부분이 아닌가 해서요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. 항상 좋은 강의 감사합니다. create를 통해 HTML에 입력된 name을 받아오는 부분에서 값을 받아오지 못하는 java.lang.NullPointerException: null 에러가 자꾸 발생합니다. 이와 관련된 여러 질문들을 봤는데, 제 경우와 다 다른것 같은데, 제 코드에서 어떤 부분이 잘못되었는지 봐주실 수 있으실까요? https://drive.google.com/file/d/1MJPIw0KvS0eKuGBvYj7QYKnqc931mFiz/view?usp=sharing 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 프로젝션을 보고 있던와중에 궁금증이 생겨서 질문남깁니다. dto로 반환해주고 싶은데 dto가 private final 일 경우 기본 생성자를 만들지 못하는데 이럴땐 final을 풀고 기본생성자를 사용해주는 방법으로 가는게 맞을까요 ? 다른방법이 있으면 추천 부탁드립니다
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
JdbcTemplate 생성자 만드는데 에러나요. JdbcTemplate 타입의 bean을 찾을 수 없다고 하는데 어떻게 해결해야 하나요? 강의를 더 보니까 19강에서 설명해주고 계신 build.gradle 때문인거 같은데요. 저는 해당 파일이 비활성화 되어 있는 것 같아요. 위 캡쳐처럼 코드가 알록달록(주황, 보라, 노랑..) 하지 않고, 모두 회색으로 보이는데 그래서 일까요?
addForm.html의 일부 코드입니다. <select th:field="*{deliveryCode}"> -> 렌더링한 결과: <select id="deliveryCode" name="deliveryCode"> 렌더링한 결과에 value 속성이 없는데, 타임리프가 <select>에는 value 속성이 필요없다고 판단하여 만들어주지 않은 것인가요?
item.html의 일부 코드입니다. <select th:field="${item.deliveryCode}"> <option value="">==배송 방식 선택==</option> <option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"></option> </select> select에서 아무 것도 선택하지 않아서 '==배송 방식 선택=='이 선택된 경우, 'deliveryCode='로 서버에 전달됩니다. 그리고 Item 객체의 deliveryCode필드에 ""로 저장됩니다. 이때, 소스코드 보기를 하면, '<option value="">==배송 방식 선택==</option>' 으로 나옵니다. selected="selected" 속성이 없는 것입니다. th:field, th:value의 값이 같을 때, selected="selected"라는 속성을 추가해줍니다. 두 값이 ""로 같은데도 selected 속성이 추가되지 않은 이유가 무엇일까요? th:value가 아닌 그냥 value이기 때문인가 싶어서 value="" -> th:value="${''}"로 작성해보았는데, 여전히 소스코드 보기를 하면 '<option value="">==배송 방식 선택==</option>'으로, selected 속성 없이 출력됩니다.
강사님, 강의 내용에는 코루틴이 없어 학습중에 궁금한 점이 있어서 문의드립니다. 아래 코드의 실행 순서를 제가 정리 해봤습니다. 제가 코루틴의 suspend, resume을 잘 이해한게 맞나 궁금해서요. 물어볼 곳이 없어서, 죄송스럽게도 강사님께 문의를 하게 되었습니다. 강의 내용과는 관련이 없어 답변을 해주시면 감사하겠지만, 답변이 안달리다도 괜찮습니다. 감사합니다. println("Coroutine Outer") 이 실행된다. A 코루틴에서 delay를 만나, B 코루틴으로 실행권을 넘겨간다. B 코루틴도 delay를 만나, A 코루틴으로 실행권을 넘겨준다. 1초가 지나고 A코루틴의 println("Coroutine A, Si")을 실행한다. 반복문에 의하여 A코루틴의 2번째 delay를 만나, 다시 B 코루틴으로 실행권을 넘겨준다. B 코루틴도 1초가 지난 상태여서, 바로 println("Coroutine B, Si")을 실행한다. 반복문에 의하여 B코루틴의 2번째 delay를 만나, 다시 A 코루틴으로 실행권을 넘겨준다. 그 다음 4~7을 반복문이 끝날 때 까지 반복 후 코루틴이 종료된다. fun main() = runBlocking { // A 코루틴 launch { repeat(5) { i -> delay(1000L) println("Coroutine A") } } // B 코루틴 launch { repeat(5) { i -> delay(1000L) println("Coroutine B") } } println("Coroutine Outer") } fun <T> println(msg: T) { kotlin.io.println("$msg [${Thread.currentThread().name}]") }
안녕하세요. 좋은 강의 만들어주셔서 정말 감사합니다. 덕분에 너무 흥미롭게 스프링 공부를 하고있어요! 제목처럼, 만약 부모,자식의 어플리케이션 컨텍스트에 필터를 설정하지 않으면 같은 빈이 두개 이상의 웹 어플리케이션 컨텍스트에 동시에 등록되는 걸까요? 직접 해보면 좋은데..회사에서 눈치보며 공부중이라 여쭤보아요.^^
안녕하세요 강사님 레코드 캡슐화 설명을 들으면서 궁금한 점이 생겨 질문 드립니다. 강의에서, 퍼블릭 필드를 감추는 용도로 퍼블릭 메서드를 사용할 수 있는데, 그 이유로는 퍼블릭 필드(ex, String name) 와 퍼블릭 메서드(ex, String setLastName()) 의 이름이 완전히 동일하다는 보장이 없기 때문입니다. 위 문장을, 퍼블릭 메서드는 퍼블릭 필드를 감추는 용도로 사용할 수 있다고 이해했습니다. 궁금한 점은, 그렇다면 필드를 감추는 것이 중요한 이유는 클라이언트단에서 데이터 클래스의 필드에 무작위적인 접근을 방지하기 위함인가요? 무작위적인 필드의 접근은 데이터를 쉽게 수정할 수 있게 때문이라고 추측했습니다. 감사합니다.