묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
mvc패턴 외워야 하나요?
강사님은 이게 어떤 방식으로 되는지 다 아시는데 보는 저는 이해가 잘 되지 않습니다. 처음이라 그런거겠지요. 근데 mvc패턴 다 외워야 하나요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html에서 ${data}에 줄이 그어집니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]hello.htmlHellocontrollerlocalhost:8080/hello! hello.html에서 줄이 그어져있고웹에서 출력하니 null로 값이 들어와있습니다. ! 어디가 문제인지 알수 없네요 ㅠㅠ현재 인텔리제이 교육용 라이센스, 스프링부트 2.7.8, 자바 11사용 중입니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
영한님의 스프링 강의를 듣다보면 REST API 도 익히게 되나요
스프링 핵심 원리 - 기본편 스프링 컨테이너와 스프링 빈 부분 공부중입니다.REST API 는 HTTP 요청을 보낼 때 , 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속.이라고 얕게 알고 있습니다.영한님 강의를 들으면서 따라 치고 이해하는 과정속에 자연스럽게 이 부분도 녹여져 있는지 궁금합니다. 무엇이던지 별도로 추가적으로 공부하면 좋겠지만영한님의 스프링 강의 과정을 따라가다보면 자연스럽게 익히게 되는지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field="*{open}"에 의해 생성된 value 속성 관련
addForm.html의 일부 코드입니다. <form th:object="${item}"> <input type="text" id="itemName" th:field="*{itemName}"> <input type="checkbox" id="open" th:field="*{open}"> </form> 렌더링 후 첫 번째 input: <input type="text" id="itemName" name="itemName" value=""> 두 번째 input: <input type="checkbox" id="open" name="open" value="true"> <input type="hidden" name="_open" value="on"/>th:field에 의해 <input>에 name, value 속성이 생기는데, value에는 각각 itemName, open의 값이 들어갑니다.th:object="${item}"에서 넘긴 Item 객체는 빈 객체니까, 첫 번째 <input>에 value=""가 들어간 것은 알겠습니다.그런데, 왜 두 번째 <input>에는 value=""가 아닌 어떻게 true라는 값이 들어가는 것인가요?혹시 <input type="checkbox">일 때는 value에 들어가는 것이 달라지는 것인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<input type="hidden"> value 속성값 관련
<input type="hidden">에서 value 속성을 작성해주는 이유는 알겠습니다. 그런데, 선생님께서 value 속성값으로 on을 작성하신 것에 대해 질문이 있습니다.제가 value="", value="on", value="off", value="true", value="false", value="hello"로 해보았는데, item.open으로 로그를 찍어봤을 때 전부 false로 출력되었습니다. 그렇다면 <input type="hidden">에서 value의 속성값으로는 아무거나 적어도 되는 것인가요? @PostMapping("/add") public String addItem(@ModelAttribute Item item) { ... }@ModelAttribute에 의해 Item 객체가 생성된 후, 넘어오는 것에 open, _open이 있으면 setOpen(true)을 호출하고, 넘어오는 것에 _open이 있으면 setOpen(false)를 호출하는 것인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 만들 때 MemberRepository
서블릿 클래스에서 멤버 리파지토리를private MemberRepository memberRepository = MemberRepository.getInstance(); 로 가져오는데여기서 private을 쓰는 이유가 뭔가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프로젝트 생성
[질문 내용]finished with non-zero exit value 1이러한 오류가 뜨는데 해결방법이 있을까요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 프레임워크 만들기 v3 -> v4 리팩토링 질문입니다.
안녕하세요. Model 추가 - v3 단순하고 실용적인 컨트롤러 - v4v3 -> v4 리팩토링 의문이 생겨 질문드립니다.영한님의 위와 같은 설명은 충분히 이해와 공감이 가는 부분입니다.v3 -> v4 으로 리팩토링 중 v4의 Map<String, Object> model 항목이 ControllerV4 구현체 내 출력인수로 사용되는 것으로 보입니다.오히려 구현 과정에서 번거로운 부분은 제거 하였지만, 출력인수로 인한 혼란이 오지 않을까? 라는 생각이 되어 질문드립니다.v4 process 함수에서 2가지의 결과 값을 받는 형태로 보여집니다.process 함수의 실제 return 값 String(viewName)render에 필요한 Map<String, Object> model 값꼭 v3 -> v4 리팩토링 과정이 아닌 실제 현업에서 이와 비슷한 경우 어떠한 방식을 채택하여, 풀어가는지 궁금하여 질문드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
service 오버라이드 할때 protected
HttpServlet 상속받고 service 메소드를 오버라이드할 때 꼭 protected로 하라고 하셨는데 이유를 알 수 있을까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Hibernate 질문
강의 영상에서 보면 test 실행 시 콘솔창에 'Hibernate: insert into member(id, name) values(null, ?)'라는 SQL문이 뜨는데요.실제로 db에 요청되는 쿼리라면insert into member(id, name) values(null, spring)insert into member(id, name) values(null, spring100)이런식으로 떠야할 것 같은데, ? 라고 뜨는 이유가 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController.java 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]실행 시, 콘솔 창과 같은 에러 때문에 실행이 안 됩니다. JDK 19.0.1 버전을 사용하는데, 버전에 문제가 있는 것일까요? 아니면 다른 해결 방법이 있는 걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThat 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]assertThat메서드가 두 값을 비교할 때 사용된다는 건 알겠는데 구글링 해보니 assertThat(actual, isEqualTo(expected)) 이런식으로 actual와 expected이 들어갈 위치라고 나와있고 강의에선 반대 느낌으로 설명하는거 같아서요강의코드로 혹시 어떤 게 actual값이고 expected값인지 이해하면 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오류(java.lang.IllegalStateException: java.lang.IllegalArgumentException: No DataSource specified)
강의와 똑같이 한 것 같은데 "No DataSource specified" 오류가 뜹니다ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
main/resources에서 basic 폴더 찾는 법 관련 질문
BasicItemController.java의 items()에서 return "basic/item";을 수행합니다.그리고 resources 폴더 하위는 다음과 같이 구성되어 있습니다.static > css폴더, html폴더templates > basic폴더return "basic/item"; 했을 때, basic폴더가 static이 아닌 templates폴더 하위에 있다는 것을 어떻게 아나요?static폴더에 있는지, templates폴더에 있는지 다 조회를 해보고 아는 것인가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
직접 스프링 빈 등록하기 관련 질문
자바 코드로 직접 스프링 빈 등록하기에서 SpringConfig 파일에 코드를 작성하시는 부분을 보다가 궁금한게 생겨서 질문합니다.스프링 컨테이너에 빈을 등록한다는 것은 등록하고자하는 클래스의 실제 객체, 즉 인스턴스를 하나 생성하여 관리한다는 것으로 이해했는데요. 그럼 @Bean annotation을 붙이는 것은 빈으로 등록하겠다는 것을 명시하는 것을 나타내는 것 같은데, 꼭 메서드 형식으로 작성을 해야하는 것인가요? 예를 들어, 강의에 적혀있던 메서드 대신@Bean public MemberService memberService = new MemberService();위와 같이 변수 형태로 선언하면 안되는 것인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:text에 의해 대체되는 부분 관련 질문
items.html의 일부 코드입니다. <td><a th:text="${item.id}">회원id</a></td> <td><a th:text="${item.itemName}">상품명</a></td> <td th:text="${item.price}">10000</td> <td th:text="${item.quantity}">10</td>선생님께서는 th:text에 의해 대체될 부분에 '회원id', '상품명', '10000', '10'을 작성하셨습니다.사실 저는 어차피 대체될 부분이니까 비워둬야 겠다고 생각을 했었는데, (th:text에 대체되더라도) 무엇이 들어가는지를 작성해두는 것이 좋은가요?그렇다면 혹시 서버에서 렌더링되지 않고 브라우저로 바로 봤을 때 무엇이 들어가는지 알기 위함인 것인가요?서버를 거치지 않고 브라우저로 바로 봤을 때의 상황까지 고려해주는 것이 좋은가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프에서 URL 표현하는 법
items.html의 일부 코드입니다. <link th:href="@{/css/bootstrap.min.css}"> <button th:onclick="|location.href='@{/basic/items/add}'|"></button>MVC2 강의의 타임리프 편을 듣고 왔는데요,쿼리 파라미터, 경로변수 없는 단순한 URL(ex. @{/hello} -> /hello)인 경우, @{} 없이 그냥 문자열로 다루면 안 되는 것인가요?타임리프에서 th:href로 경로를 작성할 때는 단순 경로일지라도 @{}로 경로를 작성하는 것이 원칙인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute Item item에 관한 질문(추가 수정)
앞선 질문내용이 잘못된것이 있어서 수정합니다.[질문 내용]@ModelAttribute는 지정된 객체를 생성하여, 요청 파라미터의 값을 해당 객체의 프로퍼티를 보고 입력해준다고 알고 있습니다.그리고 자동으로model.addAttribute("item", item);을 실행해 줄텐데 이때 모델에 담기는 item은기존에 업데이트하려는 item객체가 아니라 @ModelAttribute로 인해 새로 생성된 item을 넣어주게 되는 것 아닙니까?해당 모델을 return "/basic/item";으로 넘겨주게 되면 새로 생성된 item은 updateParam이기 때문에 id값이 없어서 예외가 발생하는 문제가 있습니다.따라서 redirect를 이용하여return "redirect:/basic/items/{itemId}"로 재요청을 하게되면 기존 model이 초기화 되고, itemId로 리포지토리에 있는 item을 찾고 해당 아이템을 model에 추가 하여"/basic/item" Html From으로 경로 이름을 반환하는 것으로 이해하면 될까요? (추가)리턴을 pathName으로 바로 해주어도item.id에 값이 제대로 들어가는 것으로 확인되는데Model에 담기는것은 updateParam 으로 id값이 없는 것으로 알고 있습니다. 어떻게 잘 작동하는지 궁금합니다.!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
모델추가 부분에서 왜 에러가 뜨는지 잘모르겠습니다.
지금까지 잘 되다가 모델에 멤버객체를 집어넣는 부분에서 에러가 떠서 진행이 안되네요.. 구글에 쳐도 여거가지 시도를 해도 잘안되서 질문드립니다..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
quantity 검증에 질문이 있습니다.
안녕하세요. 우선 좋은 강의 감사드립니다.수업을 따라 진행하다가, quantity 검증과 관련해 질문이 있습니다.일부러 수량(quantity)에 큰 값을 넣어봤는데요, 저장을 누르면 이 숫자를 문자로 인식하는 것 같습니다. 99999로 입력하면 올바른 에러가 발생하는데요, 캡쳐본에 있는 값으로 넣게 되면2023-01-23 12:23:56.797 WARN 21288 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'item' on field 'quantity': rejected value [9999999999999]; codes [typeMismatch.item.quantity,typeMismatch.quantity,typeMismatch.java.lang.Integer,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'quantity'; nested exception is java.lang.NumberFormatException: For input string: "9999999999999"]]이러한 에러가 발생하게됩니다.혹시 이런 에러가 발생하는 이유가 있나요? 아 혹시 integer의 최대 숫자보다 커서 문자로 인식이되는건가요?감사합니다.