묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html에 data
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 왜 data에 빨간줄이 뜰까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
모델에는 여러개의 객체가 들어갈 수 있나요 ?
이번 멀티 체크박스를 넣을 때 보면 @ModelAttribute로 Map 자료구조의 regions 라는 객체를 모델에 넣어주고 또 model.addAttribute로 items 자료구조의 items라는 객체를 넣어줘서 Model에는 총 2개의 객체가 있는건가요 ? 모델에는 여러개의 객체가 공존할 수 있나요 ? 그냥 컨트롤러와 뷰를 연결시켜주는 데이터베이스라 생각하면되나요 ?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
뜬금없지만 value가 뭔가요 ?
제가 까먹었을 수도 있지만 배운 기억이 없어서요 ㅠ ㅠ html 안에서 value가 무엇인가요 ? 폼소스랑 비교해보니까 입력폼에 들어 있는 값 같은데 이건 어떻게 정해지는건가요 ??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@GetMapping과 return 할 때 슬래쉬 유무
return 할 때는 슬래쉬를 안붙이는게 낫다고 그러셨고 @GetMapping에서는 아무거나 상관없다고 하셨는데 보통 현업에서는 어떤편인가요? 저는 return에 슬래쉬를 안붙이기때문에 @GetMapping도 안쓰는걸로 통합하려고했는데 영한님은 사용하시는걸 보니 @GetMapping에서는 슬래쉬를 붙이는게 정설인가 싶어서 여쭤봅니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
이 코드가 여전히 이해가 안갑니다..
안녕하세요. 해당 싱글톤을 만드는 코드가 여전히 이해가 가지 않습니다. 앞전에 static 부분을 공부 하라는 조언에 따라서 관련된 지식을 습득하려고 노력했지만 궁금증을 해결하지 못했습니다. 제가 해당 코드를 보고 드는 궁금증은 두 가지입니다. 1. 최초에 애플리케이션이 실행되고, MemberRepository 클래스를 읽습니다. 이 때, MemberRepository 클래스에 있는 static 변수들을 static 영역에 올리겠죠. 그렇다면 차례대로 store, sequence가 static 영역에 올라갑니다. 여기까지는 늘 이해가 갑니다. 하지만 private static final MemberRepository instance = new MemberRepository() 이 코드가 이해가 가지 않습니다. 이 코드가 실행되는 시점에 MemberRepository 클래스는 세번 째 줄을 실행하고 있는 중인데, 어떻게 MemberRepository 객체를 생성해 instance 변수에 넣어 static 영역에 올릴 수 있는지 이해가 가지 않습니다. 다시 말해, MemberRepository 클래스가 적어도 한 번 실행된 후, new MemberRepository()를 통해 온전한 객체 생성이 가능하다는 생각이 듭니다. 즉, 세 줄 밖에 실행되지 않은 시점에 new MemberRepository()를 호출하면 아래 생성자, 메소드들은 없는 불완전한 객체가 존재하는 것 아닌지, 그런 종류의 의문이 풀리지 않습니다. 2. 두 번째는 첫 번째 궁금증은 해결 됐다고 치고, 그림을 한번 그려봤습니다. instance는 참조 값으로 new MemberRepository() 객체를 참조하고, 그 값을 static에 올립니다. 이 과정에서 new MemberRepository에 해당되는 200이라는 주소를 가진 객체의 내부를 그려봤습니다. 그림에는 변수 명만 표시했지만 제가 알기로는 private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; private static final MemberRepository instance = new MemberRepository(); public static MemberRepository getInstance() { return instance;} private MemberRepository() {} public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member;} 이와 같이 멤버 변수, 생성자, 메소드 등이 그대로 들어가는 것으로 알고있습니다. (기타 메소드는 생략) 여기서 두 번째 의문이 생깁니다. instance 변수는 200이란 주소를 참조한 상태로 static 영역으로 올라가는데, 실제 200이라는 주소 안에 객체에는 private static final MemberRepository instance = new MemberRepository(); 이와 같은 코드가 존재하고 있습니다. 그렇다면 앞선 과정이 해당 코드가 실행될 때 반복 돼야 한다고 생각합니다. 같은 맥락에서 그 과정은 계속 이어져, 무한 반복돼야 할 것 같다는 생각이 들었습니다. 여기서 그냥 static이기에 한 번 올라간게 끝이다라고 하기에는 뒤가 너무 구리고, 찝찝합니다. 1, 2 번 질문 모두 최대한 제가 궁금해 하는 부분이 무엇인지 표현하려고 많이 노력했습니다. 하지만 아주 명확하게 질문 하기는 불가능해서 위와 같이 질문을 남기게 됐습니다. 제가 궁금해 하는 부분에 대해 명확한 해답을 얻고 싶습니다. 지금 강의에서 싱글톤 구현 코드를 접하는 것이 두 번째인가 세 번째인데, 계속 위와 같은 의문에 대한 답을 찾지 못하고 있습니다. 아마 잘못 아는 부분이 있거나 기초 지식이 없는 상태에서 이것저것 배우다 보니 혼동 하는게 있어서 그렇다고 느껴지는데, 그게 어떤 부분인지 잘 모르겠습니다. 도움 부탁드리겠습니다. 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
템플릿 넘겨줄 때 매개변수?
th:fragment=:common_header(~{::title}, ~{::link})"> 이렇게 넘겨줄 때 title 과 link는 태그 이름으로 넘겨주고 base에서 common_header(title, links) 이렇게 받는다면 {links} 와 {title}이 들어간 곳만 대체한다고 보면 되는건가요 ? 넘겨줄 땐 태그명으로 넘겨주고 받을 땐 변수처럼 받아서 사용한다고 보면 되나요 ? base에서 title, link 태그가 다 바뀌는게 아니라 {변수명?} 이렇게 되어 있는 부분만 대체 돼서 질문 남깁니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의를 다 수강하고 생긴 핸들러/어댑터와 관련된 질문들입니다... ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 1, 프론트 컨트롤러인 DispatcherServlet은 실제로 어디에 있는건가요? 영한님 강의 들으면서 간단한 웹 페이지 구현해봤는데 저는 @RequestMapping 으로 컨트롤러만 만들었는데 DispatchServlet을 제가 언제 사용한지를 모르겠습니다 .. 2. @Controller 붙은게 다 핸들러라고 보면 되는거 맞나요 ?? 3. 맞다면 이 Controller는 각자 다 return 값이 다르고 필요로하는 매개변수도 다르니까 스프링 내부적으로 어댑터를 돌려서 리턴값에 따라 해결해주는거아닌가요 ?? 제가 직접 어댑터를 쓴 적이 없어서 혼동이 옵니다 ㅠㅠ 3. @Controller, @RequestMapping 붙은게 다 return "basic/items" 이런식으로 리턴했는데 뷰 리졸버가 알아서 html이랑 매핑을 시켜주는 것 같은데 그럼 뷰 리졸버도 어댑터가 내포되어 있는건가요 ㅠㅠ? 4. 핸들러마다 다 다르게 매개변수를 필요로하고 리턴값도 다 다르니까 그걸 ModelAndView로 리턴갑을 고정해서 자유롭게 쓸 수 있게 해준다고 배웠는데 왜 ModelAndview를 리턴하는게 아니라 절대경로를 String 형식으로만 리턴한건가요 ㅠㅠ?.. 이 부분들에 대해 어떤 강의를 다시보면 될지 알려주시면 강의도 다시 들어보겠습니다! 매번 강의 잘 수강중이며 질문에 대한 답도 항상 감사드립니다 _ _ )
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
싱글톤 관련하여 헷갈려서 질문합니다 ㅠㅠ
예전 강의에서 영한님이 싱글톤?을 설명하시면서 상태를 유지하는 코드를 만들면 안된다고 하셨던게 기억이 나서요 ... 근데 지금 ItemRepository 는 계속해서 데이터가 들어가 있는 상태이고 Item도 set메쏘드로 상태가 유지되는 것 아닌가?? 싶어서요 개념이 헷갈려서 그러는데 제가 잘못이해하고 있는건가요 ??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute가 객체를 생성하는 과정
파라미터로 값이 넘어오면 @ModelAtrribute("hi") Hello hello 일 경우에 파라미터의 변수와, Hello 클래스의 안에 있는 변수끼리 비교해서 같은 변수명을 가진 데이터들만 hello 객체 안에 데이터를 넣어주고 hello 안에 변수가 없는 파라미터들은 다 버려지는것인가요 ? 그 후 hi라는 이름으로 Model에 자동으로 넣어주는건가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문입니다 !
1. 강의 초반에 Model에 addAttribute 하는 모습이 있었는데요 예전 강의에서는 ModelAndView 객체를 사용했었는데 Model과 ModelAndView의 차이점이 어떻게 되나요 ?? 모델은 컨트롤러와 뷰사이에서 데이터를 주고 받을때 사용하는 걸로 알고 있는데 각각 어떨 때 사용하는지 궁금합니다 2. 8:47경에 th:href로 /css/bootstrap.min.css 를 하셔서 기존꺼를 덮어버리면서 앞에 .. 을 없앤다고 했는데 이럴 경우 좋은 점이 무엇인가요 ?? 3. 타임리프 문법 같은 경우 다 암기를 해야하나요?? 자주 쓰다보면 손과 눈이 익을 것 같은데 강의만 보고 따라 치는걸로는 안익어서요 ㅠㅠ 서버를 통해 html파일을 열면 기존의 href를 th= 붙은게 덮는다는 개념은 알겠는데 어디까지 알아야하나 궁금합니다 !
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이 강의 수강 후 JPA 로드맵과 스프링 DB
현재 영한님 강의중 스프링DB 1편만 제외하고 모든 강의를 구입 후 MVC2를 수강중인데요. 이 이후에 JPA 로드맵을 수강하기 전에 스프링 DB를 수강하고 가면 좋다는 말이 있던데 차이가 큰가요 ?? 스프링 DB 2편 나오기 까지 기다리기가 싫어서 큰 문제가 안된다면 Spring DB 시리즈를 건너뛰고 JPA로드맵을 따라갈까 하는데... JPA로드맵과 Spring DB의 차이가 무엇인가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Json 을 객체로 받을 때 질문입니다
예를들어 전 강의에서 영한님이 username : kim, age : 20 이런식으로 하고 Hellodata에도 username과 age 라는 변수가 있었는데요 만약 json의 @RequestBody로 들어오는 변수?들이 Hellodata에 선언되어 있지 않다면 어떻게 되나요 ? 예를들어 Hellodata가 변수가 username 하나밖에 없다고 하면 age는 어떻게 되는 것인가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
URL에 따라 처리하는 모든 메쏘드와 클래스가
핸들러라고 보면 되는건가요 ? 이번 강의에서는 @RequestMapping , @GetMapping, @PostMapping 등이 붙은 메쏘드가 모두 핸들러인거고 저런 URI에 따라 처리하는 것이 메쏘드가 아니라 클래스단에 있다면 그 클래스도 핸들러라고 봐도 되는건가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러와 어댑터의 정확한 구분법?이 뭘까요
핸들러는 Request에 들어오는 파라미터?링크? 에 따라 처리하는 모든 클래스?메소드? 들을 핸들러라고 보면 될까요 ? 왜 @RequestMapping, Controller 인터페이스와 같이 우선순위가 나누어지는 것인가요? 같은 파라미터에 대한 핸들러가 많으면 첫번째로 잡는건가요 ?? 그렇다면 같은 파라미터에 대해 여러가지 핸들러가 있다면 우선순위가 높은 핸들러를 선택하게 되는 것인가요 ?? 이때 클래스마다 String, ModelAndView 등등 무엇을 return 할지 모르기 때문에 DispatcherServlet에서 자유롭게 사용할 수 없는 불편함이 있고 이것들을 공통적으로 ModelAndView로 return 하게끔 도와주는게 어댑터인가요 ?? 강의를 보며 직접 타이핑도 했는데 헷갈립니다 ㅠㅠ..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
갑작스런 오류..;
v3까지 잘 작동되다가 v4부터 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.라는 오류가 뜨면서 서버가 안켜집니다 ㅠ 자바11, 인텔리제이 재설치도 해보고 구글링도 다 해봤는데 고쳐지질 않아서 이전 프로젝트 실행해보니 이건 잘됐고 강의자료에 있는 프로젝트도 시도해보니 안되네요.. 어떻게 해야 고칠 수 있을까요 ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
api 예외 처리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 좋은 강의 감사합니다 :) 제가 이해하기로는 테스트를 하기 위해서 ApiExceptionController 에서 파라미터로 받은 것 같은데요. 실무에서는 어떤 방식으로 하는지 궁금해서 질문 올렸습니다.. 예시 코드 있으시면 깃허브나 코드 복사 등 으로 답글 부탁드립니다 @RestController public class ApiExceptionController { @GetMapping("/api/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } if (id.equals("bad")) { throw new IllegalArgumentException("잘못된 입력 값"); } if (id.equals("user-ex")) { throw new UserException("사용자 오류"); } } } @ExceptionHandler public ResponseEntity<ErrorResult> userExHandle(UserException e) { log.error("[exceptionHandle] ex", e); ErrorResult errorResult = new ErrorResult("USER-EX", e.getMessage()); return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST);
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 관련 이해한 내용이 맞는지 확인부탁드립니다
1명의 유저에게 1개 세션(저장소) & 1개 세션 Key(JSESSIONID) 할당 다수의 세션을 갖는 하나의 세션 저장소(Tomcat이 관리) 다수의 키(SessionConst.LOGIN_MEMBER etc..) & 상응하는 값(loginMember etc..) 을 갖는 하나의 세션 세션 내용이 이해가 잘 안돼서 질문글들을 정독해보고 내린 결론인데 잘 이해했는지 혹시 잘못 이해한게 있는지 확인해주시면 감사하겠습니다 추가로 이게 맞다면 이전에 만든 SessionManager와의 차이가 One Session for Multi User ( SessionManager) vs One Session for One User (HttpSession) 라고 생각했는데 괜찮을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ModelView가 어떻게 흘러가는지와 model의 역할이 궁금합니다
Q1. 처음 new-form 에 들어오게 되면 FrontControllerServleV3에서는 Http 메세지 바디에 있는 파라미터들을 만들어서 paramMap 으로 만들고, 이것들 MemberFormControllerV3에 넘겨줄거고 여기서 "new-form"이라는 String을 가진 ModelView를 리턴받는 mv가 생기고, 이 mv.getViewName 해서 나오는 viewName은 논리이름이기 때문에 viewResolver로 상대 이름으로 바꿔주고, 이것은 MyView에 있는 render로 보내서 new-form 화면이 뜨게 되는 것인가요 ?? Q2. 그 후 MEmberListControllerV3, MemberSaveControllerV3 에서 ModelView에 있는 HashMap으로 구현 된 model에 members와 member를 넣어주는데 넣는 이유가 궁금합니다. 실제로는 memberRepository 에 저장하고, findAll를 하기때문에 사실상 MemberRepository와 ModelView에 있는 Model은 항상 같은 것 아닌가요? 맞다면 왜 굳이 2가지의 객체를 만들어서 사용하는지가 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
경로 질문드립니다.
안녕하세요. @GetMapping("/hello") public void hello(Model model){ model.addAttribute("data", "hello!"); } 웹 브라우저에서 hello 경로로 접근할 때 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버가 화면을 찾아서 처리한다고 하셨는데 return 반환값이 없는 void로 해도 접근이 가능해서요. hello 경로에 접근하면 스프링 내부에서 resources -> static -> templates 순서대로 hello.html이 있는지 확인하는게 아닌가 싶어서 질문드립니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MessageSource를 ms로 바꾸면 Could not autowire라고 나옵니다.
제목과 같이 MessageSource 변수명을 ms로 바꾸면 빨간줄이 나오는데 어떻게 해결해야 하나요? 강의 소스를 열어도 똑같이 빨간줄이 나옵니다.ㅜㅠ @Aotuwired위에 @Qualifier("messageSource") 를 하면 되기는 하는데 왜 저는 @Qualifier을 해야 되는 걸까요?