[질문 내용] 안녕하세요 강사님! 강의 잘 듣고 있습니다. 다름이 아니라 타임리프에서 chekced를 표기하는 방법을 알고 싶습니다! html 소스보기 사진 <div class="form-check form-check-inline"> <input type="radio" value="ETC" class="form-check-input" id="itemType3" name="itemType" /> <label for="itemType3" class="form-check-label" checked="checked" >기타</label> </div> 소스코드 <!-- radio button --> <div> <div>상품 종류</div> <div th:each="type : ${itemTypes}" class="form-check form-check-inline"> <input type="radio" th:field="*{itemType}" th:value="${type.name()}" class="form-check-input" th:checked="${(type.description == '기타')? 'true':'false'}" /> <label th:for="${#ids.prev('itemType')}" th:text="${type.description}" class="form-check-label" th:checked="${(type.description == '기타')? 'true':'false'}" > BOOK </label> </div> </div> 위처럼 표시했는데 label 태그에는 나오고 input태그에는 나오지가 않습니다 ㅠ 이유가 무엇일까요? 또 thymeleaf로 표기하려면 어떻게 해야할까요? 그리고 formController에서 초기값을 설정하는 방법은 직접 해봤습니다! 타임리프에서 조건을 줘서 checked를 주는 방식이 궁금합니다! 감사합니다 ㅎㅎ
String viewName= controller.process(paramMap,model) 을 하게 되면 무슨 값이 들어가게 되나요? paramMap과 model 자체가 map 형태인데 어떻게 string 으로 치환이 되는건지 궁금합니다. process 메서드를 제가 잘 이해를 못한건지 이해가 잘 되지않습니다.
이 부분에서 ModelView mv = new ModelView("save-result") mv.getModel().put("member",member); 이렇게 하면 결과가 어떻게 되는 건가요? mv.setModel().put("member",member); 을 해야 맞는거 같은데 잘 이해가 안되서 질문 드립니다.
해당 강의 8:50 정도 부분에서 double convertedScoreDouble = score; 이 부분이 191 -> 191.0 으로 변환되었다고 해주셨는데 그 다음 줄에 sout(score) 를 입력하니 191 그대로 나옵니다. 제가 실수 한 부분이 무엇인가요??
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 :) 계묘년 새해 복 많이 받으시길 바랍니다. 강의 도중 allEq와 같은 메서드를 where()메서드에 넣게 되면 null 체크를 주의해야 한다고 하셔서 여러가지 Test를 돌려보았는데요 그 결과, return usernameEq(usernameCond).and(ageEq(ageCond));와 같이 체이닝을 하게되면 제일 첫 번째 메서드(여기서는 usernameEq(usernameCond))가 null일 경우 NullPointerException이 발생하는 것을 알았습니다. 이걸 어떤 방식으로 처리해야할까요? 맨앞에 있는 것이 null인지 체크하고 그것을 제외한 조건들만 return 하는 방법도 생각했으나, 이 역시도 조건이 여러개라면 다시 첫번째 조건이 null인지 체크해야한다는 맹점이 있어서, 코드가 길어질것 같다는 생각이 듭니다. 통상적으로 이런 경우 어떻게 대처하는 지 알려주시면 감사하겠습니다! 다시 한 번 새해복 많이 받으세요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] controller.process(request, response); 가 dispatcher.forward(request, response); 와 똑같이 화면을 전환해주는 의미로 볼 수 있나요?
https://www.inflearn.com/questions/693312/profile-email-%EA%B6%8C%ED%95%9C%ED%8E%98%EC%9D%B4%EC%A7%80%EA%B0%80-%EB%82%98%EC%98%A4%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4 해당 페이지에 있는 해결 방법 그대로 consent required를 킨 후에 access token을 받아오는 것 까지는 잘 되는데, 마찬가지로 userinfo 요청시 http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo 에 Authorization에 Bearer Token타입 체크 후 Token값도 받아온 access_token값으로 잘 넣어줬는데도 403 forbidden 에러가 뜨네요 무엇이 잘못된걸까요 keycloack버전은 20.0.2입니다
세션과 메모리에 대해서 질문드립니다. 강의 14:40 경 '예제에서는 Member 인스턴스 자체를 세션 메모리에 저장했지만, 실무에서는 최소한의 정보를 담은 객체만 저장한다.' 라는 의미로 말씀해주셨습니다. 그렇다면 이 때, 최소한의 정보를 담은 객체 는 어떻게 생성해야 하는지 궁금합니다. 제가 생각한 방법은 1. LoginForm 의 ID, PW 를 추출 2. 로그인 서비스에서 리포지토리에 접근에 실제로 ID, PW가 일치하는지 확인 (로그인 로직 수행) 3. 위 로직이 끝나고 ID, PW에 오류가 없으면 ID 필드만 갖는 LoginMember 인스턴스 생성 (이 경우 JPA를 쓴다면 식별자만 필드로 갖는 LoginMember) 4. 생성된 LoginMember 인스턴스를 value 로 세션 메모리 에 저장 이 될 것 같습니다. 혹시 제가 생각한 방법대로 하면 될지, 아니면 다른 방법이 있을 지 (더 좋은 방법이 없는지) 서포터님의 의견을 묻고 싶습니다. 영한님과 서포터님들께 항상 감사드립니다. 🙇♂️
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] html코드 중 <tr th:each="member : ${members}">의 members는 controller 코드의 members로부터 오는 것으로 알고 있습니다. List<Member> members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; 그런데 members의 값이 memberService.findMembers(); 부터 오는 것이여서 MemoryMemberRepository.java의 findAll()를 찾아봤습니다. @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } 여기서 values() method로 인해서 map의 값만 추출되어 list로 변환해서 받는 것으로 알고 있습니다. 그래서 저는 controller의 members가 값만 list로 나열된 것으로 생각했는데 memberList.html에서 "member : ${members}" member가 list의 value가 아닌 domain.Member class라는 것이 잘 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 새해 복 많이 받으세요 ! 열심히 강의를 수강중인 학생 입니다. updateItemDTO 관련하여 궁금한게 생겨서 문의 남깁니다. 영한님이 말씀해주신 의견에 따라 소스를 변경해보았습니다. Controller updateItemDto (service package안에 뒀습니다) Service Item book 소스는 이런식으로 변경해서 잘 동작 하는 것 확인 했습니다. 궁금점 영한님이 다른 분에게 남겨 준 글을 봤을 때 DTO가 생성되는 계층에 dto class를 작성하라고 쓰여있었습니다. 저의 소스 같은 경우 Controller 에서 인스턴스화 되고 있는데 이럴 때는 Controller 밑에 dto package를 만들었어야 하는건가요? Service 쪽에서 Item findItem = itemRepository.findOne(itemId); findItem.changeItem(updateItemDto); 이 로직을 실행하게 되면 Book, Album , Movie 다 똑같이 changeItem override 해주었습니다. 이후에 Controller에서 Album , Movie 에 필요한 필드 값 세팅 후 Service로 넘겼습니다. 3개의 자식 중에 Book 호출 되게 되는데 이 점이 궁금합니다 (기본적인 자바 지식 일수도 있지만, 구글링을 하여도 적합한 글을 찾지 못해서 글 남겼습니다) 3. 2번과 이어지는 질문인데, 혹시 movie , album , book 을 다 수정할 수 있게 된다면 어떤 식으로 구성해야 좋은지 궁금합니다! 4.처음 view에서 넘겨 받은 BookForm을 itemService.updateItem() 인자로 넘기지 않고 중간에 변환해서 넘긴 이유가 궁금합니다! 5번 질문과 같은 맥락일까요 5.service 계층에서 dto를 의존하게 되는 경우는 어떤 경우인지도 궁금합니다 ! 좋은 강의 잘 보고 있습니다. 항상 감사합니다!
안녕하세요 나도코딩님 새해복 많이받으세요! 전달값(Parameter) 강의 듣고있는데 public static void powerByExp(int number, int exponent) { // 전달값을 2개 받는경우 int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; } System.out.println(number + " 의 " + exponent + " 승은 " + result); powerByExp(3,3); // 3 * 3 * 3 = 8 여기서 for문의 사용법이 이해가 안가는데 result = result * number; 3의 3승을 한다고했을때 3 * 1, 3 * 3, 9 * 3는 이렇게 3번 계산하는거잖아요? 그러면 이걸 출력한다고하면 System.out.println(number + " 의 " + exponent + " 승은 " + result); result는 27이 나오는데 마지막 9 * 3 만 result라고 해석하는건가요? 3*1, 3*3 은 왜 result 라고 해석을 안하는건가요? 매소드 너무 어렵습니다.. ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 요청이 text/plain인 "hello"이고, 응답이 application/json인 HelloData ({"username: "hello", "age" : 10})인 경우에는 StringHttpMessageConverter만 쓰이나요? 아니면 MappingJackson2HttpMessageConverter도 함께 쓰이나요? 영한 님의 강의에 따르면 content-type이 application/json이고, void hello(@RequestBody String data) {}일 때는 StringHttpMessageConverter가 모든 타입의 미디어 타입이 가능하므로 StringHttpMessageConverter가 쓰인다고 했는데 그렇게 생각하면 될 지 질문드립니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] MessageSourceTest 의 helloMessage() 메서드를 테스트중 인데 계속 오류가 발생해 질문을 남기게 되었습니다. 처음엔 인코딩 문제인 것 같아 인코딩과 관련된 설정은 모두 질문에 나와있는데로 바꾸었는데도 불구하고 계속 오류가 뜹니다. messages_en.properties 파일을 지우고 messages.properties 파일 하나만 남겨두고 테스트를 하면 테스트가 정상적으로 성공합니다. 하지만 messages_en.properties를 추가하는 순간 이런식으로 Expecting이 "hello"로 바뀌고 오류가 뜨는 것 같습니다. 해결방법을 가르쳐주시면 감사하겠습니다.
@PostMapping("/logout") public String logout(HttpServletResponse response) { expireCookie(response, "memberId"); return "redirect:/"; } private void expireCookie(HttpServletResponse response, String cookieName) { Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie); } logout 메서드를 공부하면서 의문이 생겼습니다. 코드를 보니까 memberId 이름을 가진 쿠키를 하나 생성해서 setMaxAge = 0으로 설정한 후에 addCookie를 하는데 이렇게 되면 memberId 이름을 가진 쿠키가 2개가 되는 것 아닌가요? (기존에 로그인 할 때 memberId 생성 + 로그아웃할 때 memberId 생성) 이 memberId가 대체된다고 생각했을 때에도 여러 회원이 로그인을 하게 되면 memberId = x, memberId = y, ... 이렇게 다양하게 존재할 것 같은데 저렇게 같은 이름으로 memberId의 setMaxAge = 0 처리를 해버리면 모든 회원의 memberId의 setMaxage가 0이 되지 않을까 싶어서 의문이네요ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] allocationSize를 50정도로 설정해서 여러서버에서 사용하더라도 동시성 이슈 없이 사용한다고 하셔서 생각해봤는데... sequence를 얻기위해 호출시에 50씩 증가되서 메모리에 가지고 있고 여러 서버에서 자주 호출되는 서비스의 경우 중간에 빈 숫자가 정말 많을 것 같습니다;; 1번의 트랜잭션에서 다음시퀀스를 받아오는 쿼리를 여러번 수행하는게(allocationsize를 1로 해두고 여러번 nextval 여러번 수행) 성능상으로 차이가 클까요? 실제 배민과 같이 트래픽이 많은 현업에서도 50정도로 잡아서 사용하는지 궁금합니다!(long사이즈도 결국 한계가 있지 않나요?ㅠㅠ)
안녕하세요 ㅠㅠ 빌더패턴 사용시 이런식으로 구성하려고하는데요. 이렇게해서 INSERT를 하면 NULL로 받습니다. 그래서 이렇게 putOrder메소드를 만들어서 빌더패턴안에 포문으로 돌려서 해결했는데 이런식으로 하는게 맞는지(?) 되는지(?) 궁금합니다. 또한 https://www.inflearn.com/questions/419013/%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%ED%8E%B8%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%83%9D%EC%84%B1-%EB%A9%94%EC%86%8C%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A0%A4%EC%9A%94 여기서 질문한 것 역시 봤었는데, 왜 저는 저렇게 안되는 걸까요?? @@ 무슨 차이가 있는 걸까요???
test가 정상으로 처리되어 redisson을 추가하여 test하였습니다. RedissonLockStockFacadeTest는 이상이 없는데 LettuceLockStockFacadeTest를 재시도 한 결과 실패가 됩니다. 원인을 찾아보려고 다 다시 만들어봤지만 동일한 이슈가 발생하여습니다. 무엇이 문제일까요? redisson의 종속성을 삭제하고 돌리면 이상이 없음을 확인하였습니다. LettuceLockStockFacade 컴포넌트 와 RedissonLockStockFacade 컴포넌트는 함께 사용할 수 는 없나요? 또한 그 이유가 무엇인가요?