묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
frontcontrollerV3 질문
[질문 내용]안녕하세요. V3 부분을 하다가 문제가 되는 부분을 찾지 못해서 도움을 요청드리기 위해 질문 남깁니다.인텔리제이에서는 문제가 없이 실행이 되는데, 브라우저에서localhost:8080의 V3 회원가입을 누르면There was an unexpected error (type=Not Found, status=404) 가 발생합니다. https://drive.google.com/drive/folders/1LDQPD2zjQm5mwDCrFZLluDEMNpS1U3l-?usp=drive_link
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
실전프로젝트 소스코드 확인부탁드립니다.
현재 실전프로젝트 강의 듣고 있는데요 로그인페이지를 확인하려고 하는데 소스를 확인할수 없네요.https://github.com/onjsdnjs/spring-security-master/tree/3404뜨는데 강의자료가 유실된건가요? 확인부탁드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
교재 내용중에 질문 있습니다!
스프링 부트는 DispacherServlet을 서블릿으로 자동으로 등록하면서 모든 경로(urlPatterns="/")에 대해서 매핑한다.참고: 더 자세한 경로가 우선순위가 높다. 그래서 기존에 등록한 서블릿도 함께 동작한다.기존에 등록한 서블릿의 경로가 존재한다면 이 서블릿이 우선으로 동작한다.교재중에 위 내용이 있는데요만약에 HttpServlet을 상속받아 구현한 클래스에 경로를 따로 설정을 했다면 DispacherServlet가 우선 실행되는게 아니라 HttpServlet 을 상속받아 구현한 클래스가 먼저 실행되고 그 후에 DispacherServlet이 실행되는건가요?요청 흐름서블릿이 호출되면 HttpServlet이 제공하는 serivce()가 호출된다.스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해두었다.FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 DispacherServlet.doDispatch() 가 호출된다.최종적으로 DispacherServlet의 doDispatch() 함수가 호출된다. 교재중에 위 내용이 있는데요 서블릿이 호출되면 흐름이 HttpServlet의 service()가 호출되는데 이때 service()를 오버라이딩한 자식 클래스의 service()가 호출되고 최종적으로 DispacherServlet의 doDispatch() 실행이 된다 라고 내용을 이해 했는데 맞게 이해한건지 궁금합니다. 감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원서비스테스트 질문
MemberServiceTest에서Long saveId = memberService.join(member)의 memberService부분에서 밑줄이 그어지며 Cannot resolve symbol 'memberSerivce' 오류가 납니다.캐쉬도 지워봤습니다. 각각 MemberServiceTest와 MemberService 파일 화면입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberRepository 인터페이스질문 ㅠㅠ 초보적인거라 죄송합니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기 인터페이스에 구현된 save findById findByName findAll 이 4가지는 메서드로 정의된건가요 ...?인터페이스는 앞에 접근제어가 없이도 메서드로 정의하는게 가능한건가요 ..?
-
미해결토비의 스프링 6 - 이해와 원리
클래스의 관심사는 하나인게 이상적인가요?
안녕하세요. 하나의 클래스는 무조건 하나의 관심사만 가지는 것이 좋나요? 여러 가지의 관심사를 가지는 경우는 무조건 피해야 하나요? 수업에서 Client가 두 가지 관심사를 가지고 있다고 하셨고 (PaymentService 이용해서 비즈니스 로직 처리 + PaymentService의 내부 의존관계 설정), 후자의 책임은 오브젝트 팩토리로 옮겨버리셨는데요. '하나의 클래스는 하나의 관심사만 처리하도록 코드를 짜는게 좋다'라고 이해해도 괜찮을까요? 하나의 클래스가 여러 가지 관심사를 가져도 되는 경우도 있는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
key value 값 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]key value에서 key값은 제가 임의로 설정해서 넘길수있는건가요??예를들어 지금 key의 이름이 data라고 되어있는데 그냥 key라고 설정하고 resourses에 있는 hello 파일에 있는 data를 key로 바꿔서 설정해도 괜찮나요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 생성 시점 질문드립니다.
안녕하세요. 커넥션이 처음 생성되는 시점이 언제인지 질문드립니다..DataSourceUtils.getConnection()을 호출하는 시점에 커넥션이 처음 생성되는것인지, 아니면TransactionStatus status = transactionManager.getTransaction();을 호출하는 시점에 커넥션이 처음 생성되는것인지 질문드립니다..현재 강의에서는 DataSourceUtils.getConnection()의 경우에 트랜잭션 동기화 매니저가 관리하는 커넥션이 없는 경우 새로운 커넥션을 생성해서 반환한다고 되어있는데, 다음강의 에서는 transactionManager.getTransaction()을 호출해서 트랜잭션을 시작하는데 이떄 커넥션을 생성한다고 되어있습니다..그래서 두가지 경우중 언제 커넥션이 생성되는것인지 혼란이와서 질문드립니다.. 감사합니다 + 위 내용에 대해서 알아보다가 아래와 같이 정리해 보았는데 이렇게 이해하면 될까요? 1. transactionManager.getTransaction(); 을 통해 트랜잭션 매니저가 트랜잭션을 시작하고, 커넥션을 생성해서 트랜잭션 동기화 매니저에 보관한다. bizLogic()안에 있는 fingById()나 update()를 통해 getConnection() 즉, DataSourceUtil.getConnection(dataSource)를 하게되면, 이때는 트랜잭션 동기화 매니저가 관리하는 커넥션이 있는 경우이므로, 해당 커넥션을 반환한다. 즉, findById()를 할떄의 커넥션과 update()를 할떄의 커넥션이 동일하다.2. transactionManager.getTransaction(); 을 하지않으면, 이때는 트랜잭션을 시작하지않은것이므로,bizLogic()안에 있는 fingById()나 update()를 통해 getConnection() 즉, DataSourceUtil.getConnection(dataSource)를 하게되면, 이때는 트랜잭션 동기화 매니저도 없고, 트랜잭션 동기화 매니저가 관리하는 커넥션이 없는 경우이므로, 새로운 커넥션을 생성해서 반환한다. 즉, findById()를 할떄의 커넥션과 update()를 할떄의 커넥션이 각각 다르다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강사님 v3 만들때
MyView에 뷰를 렌더링하는 과정에서 Map으로 username과 age 에 관련한 파라미터값이 전달이 되고 Myview (두번째코드에서) 그 내용이 전달이 되는 거 맞나요 ? (강의를 3번 돌려봤는데 좀 애매해서 질문드립니다.) (블로그 글도 찾아봤는데 데이터를 뷰로 전달하는 코드인 것 같은데 정확히 이해가 안돼서 질문 드립니다.)package hello.servlet.domain.web.servlet.frontcontroller.v3; import hello.servlet.domain.web.servlet.frontcontroller.ModelView; import hello.servlet.domain.web.servlet.frontcontroller.MyView; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberFormControllerV3; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberListControllerV3; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberSaveControllerV3; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; // /front-controller/v3/* URL 패턴을 처리하는 서블릿 @WebServlet(name = "frontControllerServletV3", urlPatterns = "/front-controller/v3/*") public class FrontControllerServlet3 extends HttpServlet { private Map<String, ControllerV3> controllerMap = new HashMap<>(); public FrontControllerServlet3() { controllerMap.put("/front-controller/v3/members/new-form", new MemberFormControllerV3()); controllerMap.put("/front-controller/v3/members/save", new MemberSaveControllerV3()); controllerMap.put("/front-controller/v3/members", new MemberListControllerV3()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("FrontControllerServlet3.service"); String requestUri = request.getRequestURI(); ControllerV3 controller = controllerMap.get(requestUri); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } Map<String, String> paramMap = createParamMap(request); ModelView mv = controller.process(paramMap); String viewName = mv.getViewname(); MyView view = viewResolver(viewName); view.render(mv.getModel(), request, response); } private 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; } private MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } } public void modelToRequestAttribute(Map<String,Object> model,HttpServletRequest request) { //.jsp는 setAttribute를 씀 model.forEach((key,value)->request.setAttribute(key,value)); //request에 모든 정보를 저장한다. model에 있는 정보를 requestAttribute로 바꾼다. //request에 값을 다 담아둔다. } }
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
인터페이스 테스트인데 왜 구현체가 나오는건가요?
코드를 보면 초기화를 MemoryItemRepository로 하지 않고 ItemRepository로 초기화를 했는데 인터페이스는 구현체가 아니라서 함수가 정의가 안 되어있는데 어디서 구현체를 들고와서 테스트가 진행되는건가요..?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member db 미생성 및 NullPointerException 문의
build.grade 파일application.yml 파일Member 파일MemberRepository 파일MemberRepositoryTest 파일Assertions.assertThat 가 안되는부분은 QnA를 통해 해결하였습니다.h2 데이터베이스 접속은 되는상태이며 실행시 member 테이블이 생성되지 않습니다.그리고 아래와 같은 NullPointerException 이 발생하여 문의드립니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
request에 setCookies를 하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]실제 웹사이트에서는 response에 sessionId가 담긴 쿠키를 보내주게 되면 다음request부터는 쿠키를 매번 보내게되는것으로 알고있는데,MockHttpServletRequest의 인스턴스인 request에 setCookies를 하는 이유가 일시적으로 만들어진 request요청이라서 그런건가요? 테스트 상황에서만 setCookie를 하는것이 맞나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080이 다른 프로젝트에서 사용 중인 것같아요
안녕하세요~localhost:8080이 사용중인 것 같습니다.처음 테스트로 실행시키고 초기화까지 된 것 같은데해당 localhost로 들어가면 로그인 화면이 뜨네요...일전에 다른 강의 보다가 다른 프로젝트를 실행시켜서 그런 것 같네요어떻게 해결해야 할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 DB 연결시 Table not found
[질문 내용]섹션 6 JDBC 연결 과정h2 DB 연결 과정에서 h2 환경 구축, memebr 테이블 생성까지 에러없이 잘 됐구요. h2 콘솔에서도 테이블 확인 해 보면 잘 보입니다.근데 이제 강사님이 알려주신 방법대로 DB를 MemoryMemberRepository -> JdbcMemberRepository로 변경하는 과정에서 JdbcMemberRepository 클래스 파일과 SpringConfig 파일 코드 복붙 해왔는데 실행시키면 회원가입과 회원 목록 조회시 자꾸 member라는 테이블을 못찾는 오류가 뜹니다...ㅠ 왜 그런걸까요ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2.bat해도 실행이 안돼요 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 배치파일이 아니라고 뜨는데 왜이러는걸까요 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트시 DB 사용
안녕하세요, 강의를 듣고 있는 학생입니다. 강사님께서 강의 중에 언급해주신 거 같은데 제가 이해를 잘 못해서 다시 질문드립니다. 통합 테스트 시 이전 강의에서 쌓아 둔 데이터를 DELETE query를 통해서 없애고 진행을 했는데, 그렇다면 테스트 코드와 실제 코드가 같은 DB를 공유하고 있다고 봐도 되나요? 만약 같은 DB를 공유하게 된다면, 원래 있던 데이터를 항상 날려야 되는데 문제가 생긴다고 생각이 들어 제가 잘못 이해한 부분을 찾고 싶어 질문을 드렸습니다. 글 읽어주셔서 감사합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 유저 정보 가져오기에서 질문 있습니다
유저 정보를 가져올 때 orElseThrow를 사용하면 userRepository에 입력되어 있는 findByName이 Optional로 선언되어야 한다고 문구가 뜹니다!근데 Optional<User>로 바꾸면 UserServiceV2에 @Transactional public void deleteUser(String name){ User user = userRepository.findByName(name); if(user == null){ throw new IllegalArgumentException(); } userRepository.delete(user); }user의 타입을 User로 할 수 없다고 떠서 Optional<User>로 바꾸면 userRepository.delete(user)가 파라미터가 적절하지 않다고 뜹니다ㅜㅜ일단, 구현은 하고 싶어서 userRepository에 findByName은 User 타입으로 정의하고// 4. 유저 정보를 가져온다 if(userRepository.findByName(request.getUserName()) == null){ throw new IllegalArgumentException(); } else{ User user = userRepository.findByName(request.getUserName()); // 5. 유저 정보와 책 정보를 기반으로 UserLoanHistory를 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(),book.getName())); }bookService를 이렇게 바꾸었는데 상관없을까요?어떤식으로 해결하는게 맞을까요...
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 로직 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]세션 생성 로직은 UUID로 랜덤한 값 만들어서 sessionStore.put(sessionId, value);하고 new Cookie(SESSION_COOKIE_NAME, sessionId);해서 mySessionId인 SESSION_COOKIE_NAME과 sessionId를 응답할 때 담아서 보내는 것까지는 이해했는데 조회와 만료하는 로직, findCookie메서드에서 request로 넘어온 쿠키 이름과 cookieName(SESSION_COOKIE_NAME)이 일치하면 findAny()로 반환된 값이 sessionCookie에 담기고 sessionCookie.getValue()로 값을 꺼내서 sessionStore에서 .get()으로 조회하고 .remove()로 삭제하는 로직이 맞는건지 제가 제대로 이해한게 맞는지 궁긍합니다. 항상 친절하게 답변해주셔서 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Data 애노테이션 질문입니다!
안녕하세요 김영한 강사님의 강의를 듣고 스프링부트를 공부중인 개발자 지망생입니다. 디름이 아니라 @Data 애노테이션에 대한 질문입니다. 다른 분들의 프로젝트 코드를 보던중저 애노테이션을 엔티티 클래스에 붙여놓은 코드를 보았는데 제가 힉습하기로는 저 애노테이션엔 세터가 내장되어있어 사용을 지양하는것으로 알고있는데시용해도되는지 시용해도된다면 언제 사용하는것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
설계할때 순서
안녕하세요 실전! 스프링 부트와 jpa활용1을 듣고있는데요설계할때 순서가 궁금합니다먼저 요구사항을 분석하고도메인모데을 설계한 후에테이블틀을 먼저 설계하는게 우선인가요아니면 엔티티 틀을 설계하는게 우선인가요학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.