[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서 messages.properties 에 한글로 저장을 하게 되는데, 인텔리제이를 사용하면 한글 깨짐이 발생하더라구요 Setting - File Encodings에서 Default encoding for properties files 를 ISO-8859-1 에서 UTF-8 로 변경후 Transparent native-to-ascil conversion 체크하면 해결돼서 혹시 도움이 될까 하고 남겨봤습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] @GetMapping, @RequestParam같은 걸 어노테이션이라고 한다는데 이거에 대한 문법같은걸 배우고 들어야 할까요?
20강 수강중입니다. membervo에서 pass는 int로 지정되어있짐만 memberInsertController에서는 String으로 되어있는지 궁금합니다. 위 내용으로 인해 오류가 발생합니다. 도와주세요 java: constructor MemberVo in class model.MemberVo cannot be applied to given types; required: int,java.lang.String,int,java.lang.String,int,java.lang.String,java.lang.String found: no arguments reason: actual and formal argument lists differ in length
안녕하세요. 최근 검색어 구현 중 Store.js에서 스토리지의 historyData를 받아와서 sort를 할 때, 강의에서 나오는대로 > 부등호로 하면 정렬이 되지 않고 - 를 해줘야 내림차순으로 정렬이 됩니다. 왜 강의와 똑같이 부등호로 했을 때 정렬이 안되는 것일까요? getHistoryList() { return this.storage.historyData.sort(this._sortHistory); // 날짜 역순 정렬 } _sortHistory(history1, history2) { // return history2.date > history1.date; return history2.date - history1.date; }
public class StringImmutable2 { public static void main(String[] args) { String before = "hello"; String after = before.concat(" java"); System.out.println("before = " + before); System.out.println("after = " + after); } } 자바 프로그램 로딩 시점에 문자열 리터럴이 문자열 풀에 보관된다고 알고 있는데요. 위 코드에서 "hello" 뿐만 아니라 " java"도 문자열 리터럴인가요? 그렇다면 " java"도 문자열 풀에 저장되는 것인가요? (제가 자바 기초 지식이 부족한 상태입니다) concat() 내부에서 생성하는 String 인스턴스는 문자열풀에 생성되는 것인가요? 아니면 문자열풀이 아닌 힙 영역에 생성되는 것인가요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의와 똑같이 진행했는데 어떤부분이 오류 발생원인인지 파악을 못하겠습니다. ㅠㅠ [구글 드라이브 주소] https://drive.google.com/file/d/1HzSpLYQbb-IFI5ho7YYkSjGvV0ZOySYm/view?usp=drive_link
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 5:50에서 공통 처리 catch를 최상위 예외인 Exception으로 잡았는데 결국 해결할 수 없는 예외들은 언체크 예외들로 구성되어 있으니깐 RuntimeException으로 잡는게 낫지 않나요? 다른 케이스가 있어서 그런건지 궁금해서 질문 남깁니다.
맨 윗 사진이 사진1, 두번째 사진이 사진2라고 가정시. package com.example.itemstore.itemservice.web.basic; import com.example.itemstore.itemservice.domain.item.Item; import com.example.itemstore.itemservice.domain.item.ItemRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.util.List; @Controller @RequestMapping("/basic/items") @RequiredArgsConstructor public class BasicItemController { private final ItemRepository itemRepository; @GetMapping public String items(Model model){ List<Item> item=itemRepository.findAll(); model.addAttribute("item",item); return "basic/items"; } @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model){ Item item = itemRepository.findById(itemId); model.addAttribute("item",item); return "basic/items"; } @GetMapping("/add") public String addForm() { return "basic/addForm"; } /**테스트용 데이터 추가 / @PostConstruct public void init(){ itemRepository.save(new Item("a",10,1)); } } 질문 : 위 코드는 사진 2처럼 나오고 아래코드는 사진1처럼 정상출력되는데 이유가 뭔가요? 변수명items과 model.addAttribute에 이름을 같게 넣어서 아래 위 코드 둘다 같은 결과가 나와야 한다고 생각하는데 막상 실행하면 결과가 다르게 나와서요. public class BasicItemController { private final ItemRepository itemRepository; @GetMapping public String items(Model model){ List<Item> items=itemRepository.findAll(); model.addAttribute("items",items); return "basic/items"; } 전체코드: https://drive.google.com/file/d/1wGf0aRjKQ-haXmTupwJy9KUVwoY8gIbY/view?usp=drive_link 질문: 아래 링크 추가질문 올려놨는데 답변 부탁드립니다. https://www.inflearn.com/questions/1251246/%EC%83%81%ED%92%88-%EB%93%B1%EB%A1%9D-%EC%B2%98%EB%A6%AC-modelattribute-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] index.html이 열리지 않습니다. 지난 동일한 질문에 대한 답변을 보았는데 이해가 되질 않았습니다. 자세하게 해결방법을 알려주시면 감사하겠습니다.
//JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; } JdbcTemplate을 사용하도록 스프링 설정 변경하는 부분인데 이전에 객체를 생성해서 직접 주입하면 안좋다고 하셨었는데 jdbc템플릿을 적용하시는 부분에서는 직접 dataSource를 JdbcTemplate를 생성해서 넣으셨습니다. public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; }대신에 JdbcTemplate를 빈에 등록해서 이렇게 사용하는게 이전에 배운내용에 따르면 의존성, 결합성 면에서 나은 코드라 생각했습니다. (@autowired를 사용하게끔 수정해본 코드) //JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; @Autowired public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } 이렇게 수정해서 사용하라고 설명해주시다가 이 JdbcTemplate강의에서는 직접 주입하시면서 설명해주셨는데, JdbcTemplate빈을 정의해서 주입하는 방식이 아닌 Datasource를 직접 사용한 이유가 있을까요? 뭔가 데이터접근할때는 다른부분이 있어서 이런 방법이 사용된건지 궁금합니다.
안녕하세요! 유익한 수업 너무 재밌게 잘 듣고 있습니다. 감사합니다. 제가 많이 미흡하여 이상한 질문일 수 있는 점 미리 양해부탁드립니다. 강사님께서 FrontControllerServletV5 의 handlerMappingMap, handlerAdpaterList 에 DI 를 할 수 있다는 말씀을 듣고 공부차원에서 시도해보았는데요. 아래와 같이 handlerMappingMap, handlerAdpaterList 를 일급 컬렉션으로 만들어 HandlerMappingConfig 와 HandlerAdapterConfig 를 이용하여 @Bean 으로 등록했습니다. FrontControllerServletV5 에는 @RequiredArgsConstructor 를 이용해 의존관계를 주입했습니다. FrontControllerServletV5 @RequiredArgsConstructor @WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private final HandlerMappingMap handlerMappingMap; private final HandlerAdapterList handlerAdapterList; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } private Object getHandler(HttpServletRequest request) { return handlerMappingMap.getHandler(request); } private MyHandlerAdapter getHandlerAdapter(Object handler) { return handlerAdapterList.getHandlerAdapter(handler); } ... } HandlerAdapterConfig @Configuration public class HandlerAdapterConfig { @Bean public HandlerAdapterList handlerAdapterList() { return new HandlerAdapterList(registerHandlerAdapters()); } private List<MyHandlerAdapter> registerHandlerAdapters() { List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); handlerAdapters.add(new ControllerV3HandlerAdapter()); handlerAdapters.add(new ControllerV4HandlerAdapter()); handlerAdapters.add(new ControllerV2HandlerAdapter()); return handlerAdapters; } } HandlerMappingConfig @Configuration public class HandlerMappingConfig { @Bean public HandlerMappingMap handlerMappingMap() { return new HandlerMappingMap(registerHandlers()); } private Map<String, Object> registerHandlers() { HashMap<String, Object> urlMap = new HashMap<>(); urlMap.put("/front-controller/v5/v2/members/new-form", new MemberFormControllerV2()); urlMap.put("/front-controller/v5/v2/members/save", new MemberSaveControllerV2()); urlMap.put("/front-controller/v5/v2/members", new MemberListControllerV2()); urlMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); urlMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); urlMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); urlMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4()); urlMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4()); urlMap.put("/front-controller/v5/v4/members", new MemberListControllerV4()); return urlMap; } } HandlerAdapterList public class HandlerAdapterList { private final List<MyHandlerAdapter> handlerAdapters; public HandlerAdapterList(List<MyHandlerAdapter> handlerAdapters) { this.handlerAdapters = handlerAdapters; } public MyHandlerAdapter getHandlerAdapter(Object handler) { for (MyHandlerAdapter handlerAdapter : handlerAdapters) { if (handlerAdapter.supports(handler)) { return handlerAdapter; } } throw new IllegalArgumentException("handler adapter 를 찾을 수 없습니다. handler=" + handler); } } HandlerMappingMap public class HandlerMappingMap { private final Map<String, Object> handlerMappingMap; public HandlerMappingMap(Map<String, Object> handlerMappingMap) { this.handlerMappingMap = handlerMappingMap; } public Object getHandler(HttpServletRequest request) { String requestURI = request.getRequestURI(); return handlerMappingMap.get(requestURI); } } 정상 작동하는 것은 확인하였지만, 몇가지 궁금한 사항이 있어서 질문 드립니다. 1. @Configuration 과 @Bean, 일급 컬렉션을 이용한 방법 말고도 다른 DI 적용 방법이 있을까요? 2. Map, List 를 일급 컬렉션으로 만드는 과정에서 getHandlerAdapter, getHandler 와 같은 메서드들을 의미있는 논리 메서드로 판단해서 각각의 컬렉션의 메서드로 뺐는데, 제가 맞게 판단한 것일까요? 3. 여전히 registerHandlers, registerHandlerAdapters 에는 각각의 객체들을 더하는 코드들이 길게 나열되어 있어 지저분합니다. 이것들도 깔끔하게 자동으로 주입 받는 방법이 있을까요? (강사님께서 언급하신 @RequestMapping 어노테이션의 작동 원리와 관련이 있을까요? spring-webmvc 코드를 살펴보았을 때는 SimpleUrlHandlerMapping 의 protected void registerHandlers(Map<String, Object> urlMap) 을 통해 url 을 등록하는 것으로 보이는데, 이것과 연관이 있을까요?) 긴 글 읽어주셔서 감사합니다.
cmd 실행 시 위와 같은 오류가 계속 발생하고 있습니다. 위와 같이 옵션을 인텔리제이 idea로 바꿨음에도 오류가 발생합니다. jdk 21이며, 환경변수 모두 세팅되어 있습니다. (java -version, javac -version) 테스트 리포트는 아래와 같습니다.
1.빨간색 박스끼리 서로 데이터를 받고 초록색끼리 데이터를 받는거 맞나요? // @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item, Model model) { itemRepository.save(item); // model.addAttribute("item", item); //자동 추가, 생략 가능 return "basic/item"; } 2. 위에 코드에서 ModelAttribute로 모델을 받아오는데 Model model이 부분은 또 왜쓰는건가요? @Data public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item() { 아래 부터는 상품 도메인 개발 강의 질문입니다. 기본생성자는 왜만드는건가요? @Data public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item() { } 3분36초에서 4분까지 싱글톤을 넣기 위해서 static을 사용하시는 이유를 말씀하셨는데요. 그런데 스프링부트는 자동으로 싱글톤 지원하는거 아닌가요? New를 작성하여 객체를 생성한다는게 자세하게 설명을 들을 수 있을까요? 9분 16초에서 지금은 스프링을 안쓴다고 하셨는데요. 스프링을 쓰는데는 강의에서 언제인가요?