묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 어댑터의 활용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 MVC에 대해서 공부하다가 문득 궁금한 것이 생겼습니다. 스프링 MVC의 구조 중에 어댑터 패턴을 이용해 다양한 컨트롤러를 호환해서 핸들러를 반환한다고 했는데, 솔직하게 어떤 기능은 하는지 알겠으나 감이 잘 오지 않습니다.실무에서 어댑터를 어떻게 활용하는지에 대해서 궁금증이 생겼습니다. 사실 이미 버전이 다른 컨트롤러를 어댑터를 통해서 핸들러를 찾아서 호출하는 것을 예제로 공부해 보았지만, 저에게는 조금 보충이 필요하다는 생각이 들어서 한번 질문 남겨봅니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
No message found under code 'hello' for locale 'null' 오류 해결이 안됩니다
package hello.itemservice.message; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.MessageSource; import static org.assertj.core.api.Assertions.*; @SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage(){ String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } }강사님이 알려주신것 처럼 작성했더니 org.springframework.context.NoSuchMessageException: No message found under code 'hello' for locale 'null'. 이런 오류 메시지가 발생합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
코드 실행과 톰캣 8080포트 관련해서 강의내용과 다른 출력화면이 나옵니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]코드 실행을 했으나 로컬호스트 8080으로 접속시 보여주신 에러화면이 아닌 연결실패 화면이 나와, 정상실행이 안된건지 스프링부트 3. 버전이라 다르게 나오는지 모르겠습니다3 이후부터는 자바17로 하라고 적혀있어 환경변수 및 인텔리제이 내부 프리퍼런스도 확인했습니다.8080포트가 이미 열려있어 그럴수 있다는 답변 내용을 보고 맥에서 확인을 해보고 일부러 오라클측 포트도 열어서 테스트해봤는데 이미 8080포트가 열려져있지 않아서 kill 할수도 없었습니다 어떻게 확인해야할까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
선생님 리액트로 만들어서 사용할 때 ModelAttribute 사용법이 궁금합니다
제가 리액트 공부를 전에 해서 같이 사용해서 테스트 해보려고 하는데 ModelAttribute 개념에 대해 아직 제대로 숙달이 되지 않아, 만약에 리액트에서 사용하려면 어떻게 해야하는지 감이 안잡혀서 그래서 인터넷을 찾아서 하는중인데.. @GetMapping(value = "/add", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8") @ResponseBody public Map<String, String> getRegions(){ Map<String, String> regions = new LinkedHashMap<>(); //순서가 보장이 안됨 regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JUJE", "제주"); return regions; } @GetMapping(value = "") @ResponseBody public List<DeliveryCode> deliveryCodes(){ List<DeliveryCode> deliveryCodes = new ArrayList<>(); deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송")); deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송")); deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송")); return deliveryCodes; } 이런 식으로 하고 있습니다. ModelAttribute 리액트에서 어떻게 사용할 수 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
포맷터의 parse(), print()는 자동으로 사용되는 건가요?
4:39 부분 assertThat(conversionService.convert(1000, String.class)).isEqualTo("1,000");1000(객체) -> String 이므로 MyNumberFormatter에 parse()실행 assertThat(conversionService.convert("1000", Long.class)).isEqualTo(1000L);String -> 1000(Long) 이므로 MyNumberFormatter에 print 실행 위 코드에는 MyNumberFormatter에 있는 parse(), print()를 사용하는 곳이 없는데, 포맷터 사용의 경우 DefaultFormattingConversionService에 의해서 parse(), print()가 알아서 실행된다고 이해하면 될까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
From 과 th:field
converter-form.html을 아래와 같이 작성<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> th:field <input type="text" th:field="${ipPort}"><br/> </form> </body> </html>converterForm을 아래와 같이 작성@GetMapping("/converter/edit") public String converterForm(Model model) { IpPort ipPort = new IpPort("127.0.0.1", 8080); model.addAttribute("ipPort", ipPort); return "converter-form"; }위와 같이 작성하고 실행하면,ipPort값이 출력이 되어야 할 것 같은데1. 아래와 같이 입력창 안에 아무 값도 나오지 않는 이유가 무었인지 궁금합니다. 2. 혹시 th:object="${form}"을 안쓰면 입력창 안에 텍스트가 나오게 할 수 없는 건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Session
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]session Manager을 domain패키지에 두면 이상한가요?session값을 실무에서 데이터베이스에 저장하고 쓰나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
상태코드
1.13:09 부분을Integer statusCode = (Integer)request.getAttribute(ERROR_STATUS_CODE)위와 같이 해도 될텐데, RequestDispatcher를 사용하신 이유가 궁금합니다.2.log.info("1 : " + request.getAttribute(ERROR_STATUS_CODE));log.info("2 : " + request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE));getAttribute의 반환 타입이 Object여서 위와 같이 로그 출력을 하면 Object안에 데이터가 출력될 줄 알았는데 500이 출력 됩니다.이건 왜 그런건가요? 타입 자동 변환 그런것이 있는 건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
가장 간단한 Bean 검증이 안되고 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.Bean Validation 가장 처음에 나오는 간단한 예제를 Item 클래스에 적용해 보았는데 오류 검증로직이 수행되지 않고 있습니다. 어디서 잘못된 것인지 조언 부탁드립니다.제가 만든 프로젝트는 아래 주소에 있습니다.https://drive.google.com/file/d/1QPoMqciIcKlqDc1jQFtRPTu55orNfEOs/view?usp=share_link감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
필터, 인터셉터 흐름
1. 5:29부분에 "인터셉터와 중복으로 처리되지 않기 위해 앞의 logFilter() 의 @Bean 에 주석을 달아두자" 라고 하신거는 로그에 필터와 인터셉터 로그가 나와서 그런건가요?2. FilterRegistrationBean에 있는 @Bean을 제거 해서 doFilter로는 안가는데, 이 경우에는 filter가 없는거라 이해하면 되나요? 아니면 내분에 필터가 따로 있어서 그 필터가 적용되는 건가요?3. 필터에서 dispatchType=REQUEST로 설정해두는 부분이 아래 부분에서filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);이 부분이 맞나요??public FilterRegistrationBean logFilter() { FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(new LogFilter()); filterRegistrationBean.setOrder(1); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR); return filterRegistrationBean;}4. 3번이 맞다면 dispatchType은 REQUEST, ERROR로 설정이 된것이 맞나요?5. 4번이 맞다면 6:37 쯤에서 설명하시는 내용인 4번은 어떻게 진행이 되는 건가요?dispatchType이 REQUEST로 되어 있으면 ERROR의 경우에는 해당 필터가 호출되지 않는다고 하셨는데, 이 경우에는 호출이 되는 건가요?6. 필터, 인터셉터는 개발자가 코드를 작성해야만 적용이 되는 건가요? 아니면 내부에(?) 필터, 인터셉터가 알아서 처리되는 부분도 있는 건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<input type="hidden" name="_open"/> 여기 부분 질문이요
안녕하세요 강의 잘 듣고있습니다 히든태그 부분에서요 value태그가 없어도 잘 작동이 되는데요 value를 굳이 안써도 되는걸까요?<input type="hidden" name="_open"/>
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Validation 과 exception
Validation 과 exception의 차이는 뭔가요..?? 둘이 헷갈려요...
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그아웃시 세션이 유지 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요.수업에 있는 내용을 따라서 프로젝트를 구성했는데 로그아웃시 세션이 유지가 됩니다.로그아웃하고 상품목록 주소를 바로 입력했을 경우 상품목록페이지가 조회됩니다.참고로 저는 login-start를 기준으로 하지 않고 form을 기준으로 시작하였습니다.제가 작성한 프로젝트 전체를 압축해서 공유드립니다.https://drive.google.com/file/d/1QXAgDBbo8In1lIXeLE7nUox8HeQaRm1d/view?usp=share_link 제가 작성한 프로젝트를 기준으로 무엇이 문제인지와 그에 대한 해결책을 알고 싶습니다.그럼 부탁드립니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 문법에서 궁금한게 있습니다. (# 샵과 관련)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]안녕하세요 강사님 강의를 듣다가 명확하게 정리가 안돼서 헷갈리는 부분이 생겨 질문드립니다${} 나 *{}같은 문법은 잘 이해 했는데요#{xxx}와 {#xxx}부분이 헷갈립니다.타임리프에서 #은 어떤 것에 붙여 사용하는 건지 정리할 수 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SessionManager를 제네릭 클래스로 사용해도 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 수업을 듣다가 getSession() 메서드가 Member를 반환한다면 형변환도 필요 없고 좋지 않을까 하는 생각이 들어서 위와 같이 바꿔 봤습니다.일단 실행은 되는데 아직 배우는 단계이다 보니 전체적인 시야가 부족해 어떤 문제점이 있을 수 있는지 궁금합니다. 덧붙여 실무에서도 제네릭을 많이 사용하는지도 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
기본객체들 - @Controller , @Component
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]기본객체들 3분 58초에 나오는 내용인데 문득 궁금증이 생겼어요..@Controller @RequestMapping("/basic") public class BasicController { @GetMapping("text-basic") public String textBasic(Model model){ model.addAttribute("data","Hello <b>Spring!</b>"); return "basic/text-basic"; } @GetMapping("text-unescaped") public String textUnescaped(Model model){ model.addAttribute("data","Hello <b>Spring!</b>"); return "basic/text-unescaped"; } @GetMapping("/variable") public String variable(Model model){ User userA = new User("userA", 10); User userB = new User("userB", 20); List<User> list = new ArrayList<>(); list.add(userA); list.add(userB); Map<String,User> map = new HashMap<>(); map.put("userA",userA); map.put("userB",userB); model.addAttribute("user",userA); model.addAttribute("users",list); model.addAttribute("userMap",map); return "basic/variable"; } @GetMapping("/basic-objects") public String basicObjects(HttpSession session ){ session.setAttribute("sessionData","Hello Session"); return "basic/basic-objects"; } @Component("helloBean") static class HelloBean { public String hello(String data){ return "Hello "+data; } }여기서 컨트롤로 클래스에 @Controller가 붙어있으면 (@Controller 내부에 @Component를 포함하고있으므로 ) 컨트롤로 클래스 안에 내부 클래스를 빈등록시 @Component("helloBean") static class HelloBean { public String hello(String data){ return "Hello "+data; }질문:별도의 빈을 만들때 @Component("helloBean")를 빼줘도 되는거 아닌가요?? 너무 궁금합니다...실행해보면 @Component("helloBean")를 써줘야만 제대로 실행되네요..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
상품 수정 관련해 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.저희가 개발하는 itemService가 실제로 관리자들이 사용하는 서비스라고 가정하면 만약에 관리자1이 상품 상세 페이지에서 상품 수정을 누르려고 할 때 관리자2가 그 상품을 삭제를 하면 관리자 1이 상품 수정을 눌렀을 때 오류가 나나요? 오류가 나지 않는다면 id,name,value 값은 어떻게 렌더링 되나요?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
SQL 질문 드립니다.
public int memberUpdate(MemberVO vo) { String SQL = "update member set age='" + vo.getAge() + "', email='" + vo.getEmail() + "', phone='" + vo.getPhone() + "' where num='" + vo.getNum() + "'"; int cnt = -1; getConnect(); try { stmt = conn.createStatement(); cnt = stmt.executeUpdate(SQL); } catch (Exception e) { e.printStackTrace(); } finally { dbClose(); } return cnt; }안녕하세요 강사님 저는 사이버 보안을 공부하는 학생입니다. MVC2 까지 듣고 문득 SQL인젝션이 가능한지 궁금해 실험해보니 preparedStatement를 사용하고 있어서 특정한 상황이 아닌 이상 발생하지 않는다는 걸 알게되었습니다. 그래서 Statement를 사용하면 인젝션이 성공하는지 궁금해 실험해봤는데 코드가 안전해서 그런건지 제가 실력이 부족해서인지 모르겠지만 인젝션에 계속 실패했습니다.버프 스위트인 프록시 도구로 phone 또는 mail 파라미터 값을 조작했는데요이해가 안가는 부분이 phone 파라미터에 ' or 1=1; # 이 쿼리를 사용하면 주석이 작동되어서 모든 테이블의 phone 컬럼이 1로 바뀌는데 ' ; update member set phone=010-4444-4444 where num=[일련번호]; # 이 쿼리를 사용하면 주석이 작동하지 않아 인젝션이 성공하지 않습니다. 혹시 무엇때문인지 아신다면 도움 부탁드립니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pdf 6장22쪽에서 model에 객체 넘겨주기 위해서 memberRepository에서 찾은거 이해했는데..로그인할때 loginService.login()을 통해서 레포지토리에 있는지 확인하고 null인지 확인하잖아요.근데 다시 homeLogin()에서 null값을 확인하는데 그저 이중검증이라고 생각하면 될까요??아님 제가 잘못이해하고 있는걸까요???(pdf 6장 22쪽) loginService.login()
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test를 만들땐 항상 처음부터 시작하는 식으로 코드를 짜나요?
항상 Member객체를 만들고 시작하시는 것 같은데, 실제로는 멤버객체가 이미 있고 그걸 find하든 save하든 할거아니예요?? Test할땐 항상 처음부터 시작한다고 생각하고 로직을 짜나요??그리고 Test코드를 작성하는 이유는 무엇인가요? 기능 테스트를 할 때 항상 postman으로 했는데 그렇게 하는 것과 차이점이 있을까요 ???그리고 테스트코드에서는 main 디렉토리에 있는 클래스를 자유롭게 접근할 수 있는건가요? 예시에서도 MemoryMemberRepository를 쓰시길래 궁금해서 여쭤봅니다