묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 학습 전 자바를 어디까지 해야 할지
안녕하세요 지금 자바를 공부하고 있는데요이것이 자바다 2권을 공부 중인데 어디까지 공부해 두는 게 좋을지 궁금합니다2권 목차에멀티 스레드, 제네릭, 람다식, 컬렉션 프레임워크, 스트림과 병렬 처리, JavaFX, IO입출력/네트워킹, NIO 입출력/네트워킹이렇게 있는데 예전에 다른 곳에서 질문했을 때는 JavaFX랑 NIO 입출력/네트워킹 빼고 다 공부하면 된다고 들었었는데 맞나요? JavaFX는 필요 없을 것 같긴 한데, NIO는 굳이 공부 안 해도 상관없는 건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
시간 추출 실행 결과
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.시간추출을 했는데 (MemberServiceTest 실행)강사님과 다르게 이렇게 나옵니다회원 목록 조회나.. 회원가입을 해도 따로 추가되는 시간측정값이 없어요
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
jwt 토큰 인증 시 Authentication 객체를 SecurityContext에 저장하는 건 이해했는데
최초 로그인 시에 Authentication 객체를 저장하는 이유가 이해되지 않아 질문드립니다..로그인 요청을 하면 사용자 인증 정보를 통해 확인 후 응답 헤더에 토큰을 실어서 반환하고Stateless 설정으로 인해 요청/응답이 끝남과 동시에 세션이 비워지는 걸로 이해했는데,토큰만 응답헤더에 실어서 보내면 끝인데 세션에 Authentication 객체는 저장 안 해도 상관 없지 않나 하는 의문이 들었습니다.. 설명해주시면 감사하겠습니다!
-
미해결스프링 시큐리티
vue같은 프런트 엔드 프레임워크를 사용할 때는 CSRF 토큰을 어떻게 설정하나요?
코드를 보면 타임리프가 만들어준 CSRF를 meta 태그로 전달하는데 이를 서버쪽에서 만들어주는 html 파일을 통해 브라우저에 전달하는데요.Vue 같은 프런트 엔드 프레임워크를 사용하면 Web Server를 별도로 띄워서 정적파일을 관리하는데 이런 상황에선 타임리프가 정적파일에 CSRF 토큰을 심어줄 수 없는 구조라고 생각이 됩니다.이런 경우에는 CSRF 공격을 어떻게 막을 수 있나요?제가 생각나는 건 이 두 가지네요.. Web Server에서 요청 프록시를 해주고(Reverse 프록시) Web Server에서 CSRF 토큰을 관리한다.CSRF 토큰이 필요한 곳은 정적파일을 WAS에서 관리한다.좋은 방법이 있을까요?
-
미해결스프링 부트 - 핵심 원리와 활용
[애플리케이션] 초기화의 의미!
[애플리케이션] 초기화도 결국에는 서블릿을 등록하는 것인데, 왜 굳이 [애플리케이션]이라는 용어를 썼을까요?저 같으면, 그냥 [서블릿 컨테이너 초기화의 또 다른 방법]이라고 설명을 했을텐데....여기서 말하는 애플리케이션의 의미는 무엇인가요??
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요
우리가 스프링 부트를 사용할 떄 dispatcher랑 factory를 등록하는 것 없이 사용 가능한데spring boot starter web 라이브러리를 추가 하면 자동으로 등록되는 거죠??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 submit 버튼 누룰 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported https://drive.google.com/file/d/1SPT29SzTIZ-E-f3aJrRZ8IvxPyXhJVtR/view?usp=sharing
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
DB Table 생성, 데이터 입력 외래키 생성 문의
DB table 생성, 데이터 입력 문의jdbc 연결 부분에서 계속 문제가 발생해 maridb 버전을 5점대로 다시 깔고 지금 학습 중입니다. 영상에서 cust_info 테이블에 cust_id를 unique 키로 만들면 외래 키가 만들어지는데 전 안 만들어져서 문의 드립니다?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
생성자가 하나인경우 자동으로 스프링 bin 등록?
스프링 JdbcTemplate 강의 2분 17초 내용 관련하여 질문이 있습니다.생성자가 딱 하나 있으면 자동으로 스프링 bin 에 등록이 되어서 @autowire를 생략할 수 있다고 하는데, 그럴려면관리하고 싶은 객체 클래스에 @Controller, @service, @Repository 혹은 자바로 등록하는 방법인 @Configuration 과 @bean 이 필요하잖아요하지만 2분 17초 화면에서는 위와 같은 애노테이션을 찾아 볼 수 없고, 상속받은 MemberRepostiory 가 자바로 빈에 등록 되어있는 것을 볼 수 있습니다.내가 스프링 bin에 등록하여 관리하고 싶은 객체가 클래스위에 직접 선언 혹은 implements 로 상속받은 클래스가 bin으로 등록 되어 있다면 위의 경우 모두 똑같이 생성자가 딱 하나 있다면, @autowire를 생략할 수 있다고 생각하면 되는지 궁금합니다. 만약 틀리다면 아닌 이유에 설명 부탁드립니다. 또한 @Override 를 붙이는 이유에 대해서도 설명 부탁드립니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
THIS!
안녕하세요, 자바 기본 적인 질문 한가지만 드릴게요...! public class HellobootApplication { public static void main(String[] args) { GenericWebApplicationContext applicationContext = new GenericWebApplicationContext() { @Override protected void onRefresh() { super.onRefresh(); ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); WebServer webServer = serverFactory.getWebServer(servletContext -> { servletContext.addServlet("dispatcherServlet", new DispatcherServlet(this)) .addMapping("/*"); }); webServer.start(); } }; applicationContext.registerBean(HelloController.class); applicationContext.registerBean(SimpleHelloService.class); applicationContext.refresh(); }} 여기서 this는 HellobootApplication class가 아닌, applicationContext 를 지칭 하는게 맞을까요..?매번 this가 조금씩 헷갈리네요 ,,,, 이상한 질문 죄송합니다....!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
자동주입이 안되고 있습니다. ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)주입이 안되고 있는데 왜그런지 모르겠습니다 ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정시 유효성 검사
상품 수정 기능 구현중에수정내역의 유효성 검사를 추가해보고 싶어서 코드를 추가했습니다.```java``` package jpabook.jpashopre.controller; import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotEmpty; @Getter @Setter public class BookForm { private Long id; @NotEmpty(message = "이름은 필수 입력 사항입니다.") private String name; private int price; private int stockQuantity; @NotEmpty(message = "작가은 필수 입력 사항입니다.") private String author; private String isbn; } package jpabook.jpashopre.controller; import jpabook.jpashopre.domain.item.Book; import jpabook.jpashopre.domain.item.Item; import jpabook.jpashopre.service.ItemService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; @Controller @RequiredArgsConstructor @Slf4j public class itemController { private final ItemService itemService; @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "item/createItemForm"; } @PostMapping("/items/new") public String create(@Valid @ModelAttribute("form") BookForm form, BindingResult result) { if(result.hasErrors()){ return "item/createItemForm"; } Book item = new Book(); item.setName(form.getName()); item.setPrice(form.getPrice()); item.setStockQuantity(form.getStockQuantity()); item.setAuthor(form.getAuthor()); item.setIsbn(form.getIsbn()); itemService.saveItem(item); return "redirect:/"; } @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "item/itemList"; } @GetMapping("/items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findOne(itemId); BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); form.setAuthor(item.getAuthor()); form.setIsbn(item.getIsbn()); model.addAttribute("form", form); return "item/updateItemForm"; } @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") @Valid BookForm form,@PathVariable("itemId")Long itemId, BindingResult result) { if (result.hasErrors()) { return "item/updateItemForm"; } itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity(), form.getAuthor(), form.getIsbn()); return "redirect:/items"; } } <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header" /> <style> .fieldError { border-color: #bd2130; } </style> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <form th:object="${form}" method="post"> <!-- id --> <input type="hidden" th:field="*{id}" /> <div class="form-group"> <label th:for="name">상품명</label> <input type="text" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요" th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p> </div> <div class="form-group"> <label th:for="price">가격</label> <input type="number" th:field="*{price}" class="form-control" placeholder="가격을 입력하세요" /> </div> <div class="form-group"> <label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}" class="form-control" placeholder="수량을 입력하세요" /> </div> <div class="form-group"> <label th:for="author">저자</label> <input type="text" th:field="*{author}" class="form-control" placeholder="저자를 입력하세요" th:class="${#fields.hasErrors('author')}? 'form-control fieldError' : 'form-control'"> <p th:if="${#fields.hasErrors('author')}" th:errors="*{author}">Incorrect date</p> </div> <div class="form-group"> <label th:for="isbn">ISBN</label> <input type="text" th:field="*{isbn}" class="form-control" placeholder="ISBN을 입력하세요" /> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <div th:replace="fragments/footer :: footer" /> </div> <!-- /container --> </body> </html>이름을 입력하지 않고 유효성검사를 실시했습니다. 하지만...네...실패했습니다네트워크에서도 이름이 빠진채로 의도대로 전달도 되었으나 뷰를 표기하지 못하고 화이트라벨 에러페이지만 나옵니다 ㅠ콘솔도 의도된 에러메시지가 출력이 됩니다.뷰단쪽에 문제 일까요? 해결th:action="@{/items/*{id}/edit}" ->updateItemForm,html에 form에 action으로 해결하였습니다.화이트라벨 에러페이지가 좀더 상세한 에러메시지를보여줬으면 하는데 어떻게 설정해야 할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@ResponseBody 사용 시 html 파일로 리턴됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]컨트롤러에서 아래와 같이 작성해서@ResponseBody @GetMapping("hello-string") public String helloString(@RequestParam("name") String name){ return "helloooooooooo " + name; }http://localhost:8080/hello-string?name=spring를 호출하면.. 개발자도구를 열었을때 단순 string 이 아니라 text/html 을 반환하는데 왜그런건가요?브라우져는 크롬 사용하고있습니다.크롬 개발자도구에서 아래와 같이 보입니다.
-
미해결스프링 시큐리티 OAuth2
고도의 신뢰성을 가지고있는 클라이언트
안녕하세요 클라이언트가 고도의 신뢰성을 가지고있는가? 에 대해 No인경우 Authorization Code 방식을, Yes인경우에는 Resource Owner 방식을 선택한다는 내용이있었는데 여기서 말하는 고도의 신뢰성을 가진 클라이언트는 구글,네이버,페이스북 이런 곳들이 해당되는걸까요?흔히 생각했을때 인프런 로그인을할때 구글로 로그인하는경우에는 Authorization code 방식이지만, 구글자체에 로그인한다고하면 Resource Owner 방식으로 하고있는건가? 라는 생각이 들어서요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@ Controller 와 @Autowired 의미
컴포넌트 스캔과 자동 의존관계 설정 강의에서4분 6초관련하여 질문합니다. @Controller 를 하면 스프링이 MemberController 객체를 들고 있도록 해주는 것이며, 강의 자료에서는 녹색으로 동그라미 쳐져 있는 그림으로 보면 된다.@Autowired는 스프링 컨테이너에 있는 memberService를 가져와서 연결해준다..이렇게 말씀 하셨는데, 위에 제가 알아들은게 맞는 지 궁금하며, 2번 보면 memberService를 가져와서 연결해준다고 하였는데 누구랑 연결을 해준다는 건지 이해가 가질 않습니다. 그니까 Controller를 사용해서 MemberController를 등록하고 그안에서 MemberService 와 연결해주려면 Autowired를 해주면 된다는게 맞나요? 틀리다면 다시 정정해주세요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의 6강 질문
CalculatorMultiplyRequest DTO에서 다음과 같이 final을 붙여주면, postman에서 send 버튼 눌렀을 때 에러가 표시되는데 왜 그런지 알 수 있을까요?!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
GetMapping("") 대신 ("/") 를 사용?
16강 "홈 화면 추가" 강의를 듣고 있는데, @GetMapping("/")으로 기본 홈 페이지를 만드는데 사용하셨습니다. @GetMapping("") 으로 사용해도 되는지 궁금해서 해보니까 가능한 것을 확인했습니다.@GetMapping("") 대신에 ("/") 를 사용해야 되는 이유가 혹시 있는지, 아니면 둘 중 아무거나 사용해도 상관은 없는지 궁금합니다.
-
미해결스프링 시큐리티
Account 객체 형변환 오류 문의드립니다
실전프로젝트 강의 듣고 있습니다.접근권한 관련해서 오류가 있어서 문의 드립니다.authentication.getPrincipal() 을 Account 로 형변환시 오류가 발생하네요.값들을 찍었을 때 아래와 같이 나옵니다. 1. accountContext.getAccount() : Account(Id=1, username=user, password={bcrypt}$2a$10$Uh4Z9AZmSNzdke9QgvawxODb0pK2vwV2xzrMS9EgXGzICO54WoIU2, email=abc@gmail.com, age=99, role=ROLE_USER)2. authentication.getPrincipal() : io.security.corespringsecurity.security.service.AccountContext [Username=user, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]] getPrincipal() 에 관련없는 텍스트가 나와서 그런지 잘모르겠군요. => 'io.security.corespringsecurity.security.service.AccountContext'어떤 이유에서 오류가 발생하는지 답변 부탁드려요~ @GetMapping(value={"/denied", "/api/denied"})public String accessDenied(@RequestParam(value = "exception", required = false) String exception, Model model){Authentication authentication = SecurityContextHolder.getContext().getAuthentication();// 형 변환이 안되네요.Account account = (Account) authentication.getPrincipal();model.addAttribute("username", account.getUsername());model.addAttribute("exception", exception);return "user/login/denied";}
-
미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
강의수강 연장이 가능할까요?
안녕하세요 강사님 지난 연말연초에 일이 있어 그동안 강의를 많이 듣지 못했는데 강의가 오늘까지더라구요. 혹시 수강기간 연장이 가능할까요? 꼭 완강하고 싶습니다..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
flush() 전에 Insert 쿼리 출력되는 현상
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의에서는 flush()를 호출하기 전에는 insert 문이 나가지 않는다고 하셨는데, 저 같은 경우에는 위와 같이 작성해도 insert 문이 콘솔에 출력됩니다. 이유가 궁금합니다.