묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
url 패스 관련 질문
다른 질문을 봤을 때url : localhost:8080/abc/def?param1=data1¶m2=data2위와 같이 경로를 지정하고 싶으면 변수를 추가해야 한다고 봤습니다.@GetMapping("link")public String link(Model model) {model.addAttribute("param1", "data1");model.addAttribute("param2", "data2");model.addAttribute("url1", "abc");model.addAttribute("url2", "def");return "basic/link";}위에서와 같이 모델에 값을 새로 추가해주고<li><a th:href="@{/hello/{url1}/{url2}(url1=${url1}, url2=${url2}, param1=${param1}, param2=${param2})}">위와 같이 html에서 값을 넣는 방식이 결과적으론 원하는 값이 출력되긴 했지만 Q.1) () 안에서 변수와 같은 값이 있다면 해당 변수에 대 값을 대입하는 것으로 사용되는 것이고, 없다면 parameter값으로 사용되는 것인지 궁금합니다.Q.2 ) 이렇게 사용하는 것이 맞는지와 실제로도 실무에서 이렇게 사용하는지 빈도가 높은지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
한글, 한국 기준으로 나오는 이유
유틸리티 객체와 날짜 강의에서 temporals를 사용해서 날짜와 시간들을 찍어보았는데요. 신기하게도 한국 기준으로 한글로 나오더라구요. 어떻게해서 이렇게 나오는건가요? 만약 다른 나라 기준으로 찍고 싶다면 어떻게 해야하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 2편에 대해 질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿][질문 내용] MVC 2편에 쿠키와 세션에 관해 다루는 부분이 있더라고요.질문 1)통상적으로 로그인할때 이 방법을 사용한다고 보면 되나요?질문 2)요즘 보니까 OAuth 인가 그것을 로그인할때 사용한다 그러던데 강의 구매하고 들으면 이해하는데 도움이 될까요??질문 3)그리고 여러 open api 들이 많지 않습니까?실제 개발할때 open api를 사용하는 주체가 프론트 쪽인가요, 아니면 벡엔드 쪽에서 json 형식으로 데이터를 받아서 가공해서 프론트한테 넘겨주는 방식인가요?
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
Java 설정 방식에서
안녕하세요.JAVA 설정 방식에서 아래와 같이 의존성을 주가하거나<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version></dependency>WEB-INF/lib/폴더에 ojdbc6.jkar 파일을 직접 넣어서build path 에서 설정하고 해도모두 아래와 같은 오류가 발생합니다.SEVERE: 경로 [/MyBatisJava]의 컨텍스트 내의 서블릿 [dispatcher]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot load JDBC driver class '${db.classname}xml 방식의 설정에서는 똑같이 설정했는대도 (설정과 소스 파일 모두 Java 설정 방식에서와 똑같이 작성했습니다.) 잘 됩니다.어떻게 하면 JAVA 설정 방식에서도 정상적으로 DB 연결이 이루어질 수 있는지요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
default method 구현부가 어디 있는지 궁금합니다.
자바 8 기본 문법에 관한 거라서 질문하기 꺼려지긴 합니다만, 달리 질문할 데가 없어서 질문드립니다.강의에서 Filter, HandleInterceptor 인터페이스를 구현함으로 서블릿 필터와 스프링 인터셉터 기능을 사용할 수 있음을 배웠는데요. 각 인터페이스의 default method들은 이미 구현이 되어 있기 때문에 따로 구현을 해주지 않아도 되는 건 이미 알고 있었습니다.근데, 제가 알기로는 인터페이스의 default 키워드를 붙이려면 구현부가 꼭 있어야 하는 걸로 아는데, 해당 인터페이스들의 소스 코드를 까보면 구현부는 따로 없는 것 같습니다. 구현부는 대체 어디 있는 걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
상품종류와 지역 방식 차이
상품 종류는 이넘을,지역은 컨트롤러에서 생성(?)을,이렇게 다른 방식을 적용하는 이유가 있나요? 혹 체크박스와 라디오의 차이인건지..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 다운로드 후 Redirect
예제로 구현하는 파일 업로드, 다운로드 에서 파일 다운로드 할때 다음과 같이 ReponseEntity를 return해서 진행했었습니다.return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition).body(resource);그런데 다운로드 후 다른 uri로 redirect를 하려면 어떻게 해야하나요? 구글링을 해보니 다운로드 후 redirect는 할 수 없다는데 만약 redirect되게 하고 싶다면 어떻게 구현해야할까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿의 개념을 확실하게 잡고 싶습니다.
제가 서블릿을 들으면서 요약했던 개념으로는클라이언트는 WAS에게 HTTP 요청을 보냄.WAS는 해당 HTTP 요청 메시지를 뜯어서 request 객체랑 response 객체를 생성.(response는 껍데기만 있고, request 안에는 요청 메시지의 바디 내용이 들어있다)request, response 객체를 해당 서블릿에게 넘긴다.서블릿은 프로세스 처리를 하고, 응답 결과를 response 객체에 넣어서 was에게 돌려준다.was는 response를 클라이언트에게 돌려준다.이렇게 정리를 했습니다.이게 제대로 학습한 개념이 맞는지 궁금합니다. 또 pdf 내용에서는HttpServletRequest 역할HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. 라고 적혀있는데 HTTP 요청 메시지를 파싱하는 건 was 아닌가요?was가 파싱해서 request객체에 담아서 서블릿에 전달하는 것으로 알고 있었는데pdf는 서블릿이 http 메시지를 파싱해서 request에 담는다고 나와있어서 질문드립니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
getOriginalFilename null check
public String convertedFile(@RequestParam MultipartFile attachFile) throws IOException { if (attachFile.isEmpty()) { return null; } String originalFilename = attachFile.getOriginalFilename(); String ext = extractExt(originalFilename); }위처럼 MultipartFile를 isEmpty로 체크하고 getOriginalFilename로 originalFilename을 가져온다음 originalFilename을 extractExt 함수의 argument로 넣어려고하는데 null을 check하라고 나옵니다. 정확히는 아래처럼 null이 나올 수 있다고 뜨네요.isEmpty로 위에서 한 번 체크하면 안뜨는 걸로 알고 있는데 뜨는 이유가 뭘까요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
교재 내 instanceof 없이 캐스팅
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Override public void validate(Object target, Errors errors) { Item item = (Item) target; ValidationUtils.rejectIfEmptyOrWhitespace(errors, "itemName", "required")... 여기서 Item item = (Item) target; 하는데target instanceof Item 이 없는 이유를 알 수 있을까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 빈이란 것은
스프링빈 파트 부분을 듣다 보니처음에는 진짜 뭔소린지 하나도 모르겠고스프링스프릴ㅇㅇ스프링빈 컨테이너 막 혼동이 와서 정신줄 잡고 듣고있는데그러면 결국 스프링 빈은 객체 인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
AddPathPattern 경로 세팅에서..?
========================================[질문 내용]안녕하세요.인터셉터 conifg 파일에서 addPathPattern()함수내 인터셉터 대상이되는 경로를 세팅할때 질문있습니다. ^^;예를들어/*/abc.do 와/**/abc.do 의 경로세팅을 한다고했을때위 두예시에서 차이점이 있을까요?즉, 경로 중간에 *이 한개있을때와 2개있을때차이점이 궁금합니다. 찾아봐도 잘 안나오는것 같아서 질문드립니다. (_ _)
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
테스트 코드 작성에 대한 질문
테스트 코드를 작성할 때 테스트하려는 메서드를 제외한 나머지 메서드들은 전부 정상적으로 동작한다고 가정하고 해야하는 건가요??테스트코드를 작성하다보니 헷갈려서 질문 드립니다.. 예를 들면 findById() 메서드를 테스트할때save() 메서드는 정상 동작한다고 가정하고 하는건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
클래스 안의 static 메서드 질문입니다.
강의에 대한 질문이라기보다 자바 문법에 대한 질문입니다... 프론트 컨트롤러에서 service 메서드 안에서 viewResolver와 createParamMap 메서드를 호출하려면두 메서드가 static이 되어야 service 메서드에서 호출할 수 있는 것 아닌가요? Ctrl + Alt + M 으로 자동으로 메서드로 변환해도 static이 붙는데 강의 영상에서는 static이 안 붙어도 동작하는 것 같아 질문 드립니다.private static MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } private static Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName))); return paramMap; } MyView 클래스도 마찬가지입니다.private static void modelToRequestAttribute(Map<String, Object> model, HttpServletRequest request) { model.forEach((key, value) -> request.setAttribute(key, value)); }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프론트 컨트롤러 코드 질문입니다.
안녕하세요.프론트 컨트롤러는 서블릿 객체라 싱글톤으로 관리된다고 이해했습니다.controllerMap에 URL과 다른 컨트롤러 객체를 넣을 때 기본 생성자를 사용하는 이유가 있나요?싱글톤이면 생성자를 사용하지 않고 바로 controllerMap.put해서 넣어도 똑같지 않나요? 어떤 목적으로 생성자에 넣는 것인지요??@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*") public class FrontControllerServletV1 extends HttpServlet { // key는 url private Map<String, ControllerV1> controllerMap = new HashMap<>(); public FrontControllerServletV1() { controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1()); controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1()); controllerMap.put("/front-controller/v1/members", new MemberListControllerV1()); } service 메서드를 상속받을 때 protected와 public 2개가 있었습니다. protected만 써야 하는 이유는 무엇인가요??@Override protected void service(@Override public void service( 항상 잘 듣고 있습니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar hello-spring-0.0.1-SNAPSHOT.jar 설치완료 후
안녕하세요맥 m1 쓰고있는데요터미널에서 java -jar hello-spring-0.0.1-SNAPSHOT.jar 설치 마치고 어떻게 저장하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
국제화 null 기준
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 질문이기보다는 발견한거 찾아낸거라..혹시 컴퓨터 기본 언어가 영어로 세팅되신 분들이라면해당 테스트는 무조건 실패하는거 같습니다locale 이 null 이 나게 되면그리고 이 getDefault() 를 파고들면initDefault가 나오고 initDefault를 보면 message.properties 로 가는것 없이 바로 props = privilegedGetProperties로 가는데 이 privilegedGetProperties 는 System.getProperties() 를 실행...애초에 locale = null 일때에는 시스템에서 가져와버리게 설계가 된 거 같습니다...java - Spring MessageSource seems to ignore property fallbackToSystemLocale - Stack Overflow해당 stackoverflow 를 보더라도 locale = null 일때spring.messages.fallback-to-system-locale=false쓰이는게 아니라고 되있기도 합니다.. 즉 저 fallback-to -system locale 은 locale = null 을 제외한 상황에서 Locale 에 해당하는 파일을 못 찾을 시.. 가 맞는거 같네요.. 아마 null일 때에는spring.messages.use-code-as-default-message를 변경해야 할 거 같습니다.... 시스템 언어 영어이신 분들스프링 정규 docs : Common Application Properties (spring.io) ctrl + f 로 검색저도 그냥 디버거 따라가다가 찾은거라 개인적인 의견을 말씀을 드리는 거라 누가 대신 확인을 좀 해주셨으면.....
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 database 접속 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jdbc:h2:~/test로는 접속이 잘되고 home에 test.mv.db 가 있는 것 까지 확인했습니다. 이후에 jdbc:h2:tcp://localhost/~/test 로 접속하려고 하니 다음과 같이 연결 거부가 뜹니다. 어떻게 해결해야 할까요 ?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
웹브라우저를 종료해도 쿠키 삭제가 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 쿠키 사용 강의 듣다가 해결이 되지 않아서 질문 남겨요. 12:10부터 로그인된 상태로 프로그램은 종료하지 않고 웹브라우저만 종료하고 다시 웹브라우저를 키면 쿠키가 삭제되고 로그아웃이 된 화면이 뜹니다. 그런데 똑같이 완전히 웹브라우저를 종료하고 다시 키면 로그인이 되고 쿠키가 그대로 남아있는 상태로 화면이 뜨네요.강의 자료에 있는 코드로 다 바꿔봐도 해결이 안 되네요.로그아웃 기능까지 다 구현이 된 상태입니다. Expires / Max-Age에도 Session으로 표시되어 있습니다. LoginControllerHomeController웹 브라우저를 완전히 종료시켰는데 이런 현상이 생기는건 코드상의 문제인가요?아니면 크롬에서는 다른 방식으로 종료해야하는건가요??감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
prev('regions') 궁금증
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.class Item 아래 List<String> locations라고 해놓은 상태에```<div> <div> 등록 지역</div> <!-- regions is a map locations belong to Item. did it this way to explicitly show difference --> <div class="form-check form-check-inline" th:each="region : ${regions}"> <input type="checkbox" th:field="*{locations}" th:value="${region.key}" class="form-check-input"> <label th:for="${#ids.prev('regions')}" th:text="${region.value}" class="form-check-label">서울</label> </div></div>```로 해두면 위와 같은 이유로 에러가 납니다public final class IdentifierSequences {private final Map<String,Integer> idCounts;를 열어보면가 나오는데 여기서 바이트 환산 기준 [locations] 를 담는데.get(regions) 를 해서 null 이 나오기 때문입니다.여기서 궁금한 거는 저 idcounts가 어떻게 제가 Item 클래스 안에서 List<String> locations 를 했는지 알 수 있는지 입니다저 context 구하는 코드 원리가 너무 탐이 나네요.