묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html 오류
hello.html에서 thymeleaf 엔진을 받아오지 못하는 것 같은데 어디서 오류가 있는지 찾아주세요... 앞선 질문들에서 나왔던 8080포트의 중복인가 싶어 방법대로 8080 포트 프로세스 종료 후 재실행 & 다른 포트 번호로 접속. 두 가지 방법으로 다 해보았지만 계속 /hello에서 에러가 뜹니다 ㅠㅠ 도움 부탁드려요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Compoent 사용시 순환 참조가 일어나지 않는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 순환 참조 문제가 발생하여 커뮤니티 글을 확인하고 해결하였는데요, 해당 링크를 참고해도 이해가 가지 않는 부분이 있어서 질문 남깁니다."@Around에서 자기 자신을 포함하고 있기 때문에 순환 참조가 발생한다" 라는 것은 이해를 했는데 "컴포넌트 스캔을 사용할 때는 AOP의 대상이 되는 이런 코드 자체가 없기 때문에 문제가 발생하지 않았습니다." 이 부분이 이해가 되지 않습니다. 컴포넌트 스캔을 사용해도 @Around에 명시한 경로에는 자기 자신인 TimeTraceAop 가 포함되는데 왜 이 경우에는 순환 참조가 일어나지 않는 것 인가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오타 제보합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]간단한 경계값 범위 오타 같아요.강의 자료 검증1 5page if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); } item.getQuantity() > 9999 로 조건문 범위 변경.그외 13,18,22,24,35page도 마찬가지로 수정이 필요한것 같습니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 시에 세션객체
스프링 세큐리티의 userDetails를 이용해서 로그인을 구현할 때멤버 테이블의 모든 정보를 담지말라고 하던데... 여기에 pk정도만 담는게 맞을까요?public class CustomMemberDetails implements UserDetails { private String username; private String password; private Collection<? extends GrantedAuthority> authorities; }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ws와 was 질문이 있어요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저희가 강의에선 was 톰캣 하나로 웹서버를 구동 시킬수있는데ws 아파치도 웹서버를 구동 시킬수 있자나요?문제는 실무에서 아파치도 띄우고 톰캣도 띄우는데 중복이 되서오류가 날꺼라고 생각이 드는데 어떻게 작동되는지 궁금합니다.예로들어 톰캣은 8080으로 띄우고아파치는 9090으로 띄우는건가요?클라이언트에서 요청을 하면 9090 에서 요청 받고 동적인 컨텐츠면 8080으로 요청 하는식으로요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html 관련 오류 문의
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]이런식으로 해당 주소를 인식 못하는 건지 오류가 납니다. 아래 th의 경우도 마찬가지입니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
웹 서버, WAS
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]웹 서버(아파치)는 정적인 컨텐츠를 담당해서 작성한 대로 전달하고, WAS(톰캣)은 동적인 컨텐츠를 담당해서 db 등과 연결되어 결과를 전달한다고 이해했습니다. 그런데 현재 개인 컴퓨터로 실습하는 입장에서 잘 이해가 되지 않는 부분이 있어 질문합니다.스프링부트를 이용해 빌드된 파일을 서버에 실행시키면 웹 서버가 구동된다고 이해했습니다. 그렇다면 이 빌드된 파일은 서버를 위한 파일인가요? 개인 컴퓨터로 프로젝트를 할 때 따로 물리적인 서버를 두지 않으면 이때는 개인 컴퓨터가 서버 역할을 하게 되는 것인가요? 백엔드 개발자란 서버의 동적 컨텐츠들을 담당하는 개발자라고 이해하면 될까요? 답변 기다리겠습니다. 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"
먼저 html은 다음과 같이 작성되어있습니다.<form th:action method="post" th:object="${form}" enctype="multipart/form-data"> <input class="form-control" accept=".txt" type="file"> <div th:if="${#fields.hasGlobalErrors()}"> <p class="field-error" th:each="err: ${#fields.globalErrors()}" th:text="${err}">전체 오류 메시지</p> <button class="btn btn-primary">Submit</button> </form>그리고 controller에서는 다음과 같이 작성했습니다.@PostMapping public String getFile(@Validated @ModelAttribute("form") ConvertInputForm inputForm, Model model, BindingResult bindingResult) { if (inputForm.getAttachFile() == null || inputForm.getAttachFile().isEmpty()) { bindingResult.reject("FileSelected", "파일을 다시 선택하세요."); } if (bindingResult.hasErrors()) { return "[위에 작성된 html]"; } ... }ConvertInputForm은 다음과 같이 작성했습니다.@Data public class ConvertInputForm { private MultipartFile attachFile; @NotEmpty private String version; }위와 같이 코드를 작성하고 돌린 다음 파일을 선택하지 않고 버튼을 눌렀습니다.버튼을 눌렀을때 제가 기대한 결과는 bindingResult에 reject("FileSelected", "파일을 다시 선택하세요.") 가 들어가고 html에서 ${#fields.globalErrors() 를 통해서 메시지를 받는 것입니다.그런데 실제 결과는 버튼을 눌렀을때 다음과 같은 에러가 발생합니다.org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"구글링해보면서 해결해보려고 해도 모르겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost8080과 관련된 질문
[질문 템플릿]2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]저 혼자 개발할 때는 localhost:8080 과 postman에서 API를 사용해 본다는 것까지 이해했습니다.만약 안드로이드 개발자와 협업을 합니다.그러면 그 사람도 개발 과정에서 api를 호출해서 받아올텐데 제가 만든 api를 어떻게 가져오나요??대부분 개발 과정에서 어떻게 하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이 경우에는 어떻게 하나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]저희가 보았던 인증은 /add/items에 접근을 할 수 있느냐 없느냐 였구 이 과정에서 interceptor에서 걸렀습니다.그런데 자신만의 page에서는 동작 방식이 어떻게 되나요?예를 들면 제 아이디가 dionisos198이니까 dionisos198만 수정 가능한 아이디 변경이라던가 이런 것이요.어떤 과정이 일어나는 것인가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JSON key값이 getter기준으로 설정되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Hello 클래스 객체에서 인스턴스 name이 결과로 나오는 JSON형식의 key값이 아니라, getter/setter의 getter의 영향만 받는것 같습니다. 제가 이해한게 맞나요? 왜 이런식으로 동작하나요?예를 들어 pricate String name1; public String getName2(){ return name1; } public void setName3(){ return name1; } 위 처럼 코드를 짜면 {"name1":"value"}가 나오는게 아니라{"name2":"value"}로 나오는데 왜 이런건지 궁금합니다...
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정적페이지, 컨트롤러 Priority
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]정적 컨텐츠 이미지 설명하실 때 목록 관련 컨트롤러가 존재하지 않을 경우 정적 페이지를 로드한다고 설명하신 것 같은데(제가 이해한게 맞나요?), hello-static.html 컨트롤러를 따로 만들고 테스트해본 결과 같은 이름으로 되어있으면 정적페이지가 우선적으로 로딩되는데 제가 뭔가 잘못이해한건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HandlerAdapter 클래스 호출 우선순위 구현 코드
이전 질문(https://www.inflearn.com/questions/458302/handlermapping-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%EC%84%A0%EC%A0%95-%EA%B8%B0%EC%A4%80)을 보고 HandlerMapping인터페이스를 구현한 클래스들은 Ordered 인터페이스를 상속받고 order 값을 set해줘서 우선순위에 따라 핸들러가 호출된다고 이해했습니다. HandlerAdapter도 우선순위를 알아보고자 하니 아래 4개의 어댑터 클래스가 있었고RequestMappingHandlerAdapter HandlerFunctionAdapterHttpRequestHandlerAdapterSimpleControllerHandlerAdapter RequestMappingHandlerAdapter와 HandlerFunctionAdapter만 Ordered 인터페이스를 상속받아 order 값을 set해줬습니다. HttpRequestHandlerAdapter와 SimpleControllerHandlerAdapter는 Ordered 인터페이스를 상속받지 않아 order 값으로 우선순위를 비교할 수 없을 것 같은데 어떻게 강의자료와 같이 우선순위를 비교할 수 있는 건가요?0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리 2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 인터셉터 API 인증 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]postman에서 제가 logout api를 직접 만들어 봤습니다.근데 밑 화면에 보면 cookies가 그대로 살아있습니다. 왜 그럴까요?로그인을 하고 다른 api 호출하면 잘 되고 이렇게 로그 아웃 api 호출하고 다른 api호출하면 안되는 상황입니다. 즉 로그아웃 api를 잘 구현한 것 같습니다. 근데 왜 로그아웃 api 호출한 이후에도 밑에 cookies가 남아있을까요?저것의 의미가 response에서 받은 쿠키 얘기 하는 것아닌가요?response.addCookie안에 setMaxage가 0인것으로 갈아껴서 그거 나타내는 것일까요? 그리고 실무에서 api를 통해서는 이렇게 log in,log out 구현하는거 맞을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
API 인증 실험 중 궁금한 거 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]postman으로 필터를 통한 API인증을 실험해 보고 있었습니다.위 그림처럼 /api/items/api/add 를 하면 인증이 안되어야 하므로 뭐 튕기거나 그런 것은 이해 가능인데 Cookies는 대체 왜 생기는 건가요!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
쿠키와 세션의 관계에 대해서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]세션안에 쿠키가 사용된다 하셔가지고 sessionId와 value가 무슨 관계가 있나? 생각했습니다.저희가 직접 만든 session이용 파트에서 SessionManager의 코드 중Cookie MySessionCookie=new Cookie(SESSION_COOKIE_NAME,sessionID)가 있습니다.그래서 HttpSession 에서 실험해 보았는데요. session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember); System.out.println(session.getId()); System.out.println(session.getAttribute(SessionConst.LOGIN_MEMBER)); Cookie []cookie=request.getCookies(); for(int i=0;i<cookie.length;i++){ System.out.println(cookie[i].getValue()); System.out.println(cookie[i].getName()); } 이거로요.0BF73A108D2A8687E85F4D84FF0BD3FF->sessionID21BCD10FFBAA82EDCBF8D917BCEC0BE8->쿠키의 값 value 인데왜 둘이 다른 걸까요?쿠키와 세션의 관계가 헷갈리네요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[Validation] MultiPartFile에 자동으로 적용된 @NotNull
우선 저는 다음과 같이 MultipartFile을 받도록 작성했습니다.@RequestParam MultipartFile attachFile그리고 attachFile에 마우스를 대보았더니 다음과 같이 뜹니다.위처럼 @NotNull 이라는 annotation이 들어간 것을 확인할 수 있었습니다. 하지만 이 @NotNull이 javax.validation 것인지는 알 수가 없었습니다. 또한 @RequestParam의 required의 default가 true라서 그런가 싶어서 false로 지정해도 @NotNull은 사라지지 않았습니다.Null 인 경우는 파일을 선택하지 않았을때 밖에 생각이 안드는데요. 이때 당연하겠지만 오류 페이지로 넘어가게됩니다.저 @NotNull의 정체가 무엇인지 알고 싶습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증 1, 2 관련 질문들
errors.properties에 args로 max나 range로 숫자를 넘길때 ","가 자동으로 추가됩니다. 예를 들어서 min={0} 이상이어야 합니다. 라고 Message를 설정했을때 화면에 "1,000 이상이어야 합니다." 라고 뜹니다. 하지만 저는 "1000 이상이어야 합니다." 라고 "," 없이 표현하고 싶습니다. 그렇다면 어떻게 수정해야할까요? max, range와 같은 경우에 Args를 넘기고 {0}, {1} 과 같이 설정한 메시지에서 받을 수 있었는데 typeMisMatch일때는 Args를 어떻게 넘겨 받을 수 있는지 알고 싶습니다. @ModelAttribute DTO 를 사용하지 않고 @RequestParam으로 하나의 객체를 받아올 때는 어떻게 validation 할 수 있을까요? 예를 들어서 @RequestParam MultipartFile attachFile 과 같이 attachFile이라는 객체만 받는다고 했을때 어떻게 validation 해야하나요? 객체가 하나라도 DTO를 만드는게 좋을까요 아니면 그냥 if 문을 활용해서 Model.addattribute로 넘기는게 좋을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 순서 관련해서 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 3주 정도의 기간 안에 스프링부트의 틀을 빠르게 공부를 해야됩니다. 김영한 강사님의 강의를 들으려고 하는데 아래의 순서로 진행을 해도 될까요?스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술김영한의 스프링부트와 jpa 실무 완전 정복 로드맵 (야생형)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
디렉토리 변경으로 인한 실행파일변경문제입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]수업을 듣고 나서 강의 때 intellij에서 작성한 코드파일의 디렉토리를 변경하였는데 기존 파일과 다르게 일반.java파일로 변경이 되었습니다.이런 형태로 나와야 하는데 현재 디렉토리를 변경하고 나서 intellij를 실행하여 파일을 import했는데이와 같이 환경설정이 변경이 되었습니다. 어떻게 위에 수업 때처럼 환경설정을 하면 되는건가요..?