묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Collection을 반환할 때엔 Optional을 사용하지 않는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) YES2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) YES3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) YES[질문 내용]여기에 질문 내용을 남겨주세요. 질문 주제 : Optional 에 대해상세 내용 : MemberService 의 조회용 메서드에서 단일 객체를 조회할 경우, 반환 타입을 Optional<Member> 로 정의하지만, List 등의 컬렉션에서는 Optional<List<Member>>을 사용하지 않고 List<Member> 이유가 궁금합니다. List에 담을 값이 없어도 List라는 객체가 반환되기 때문(null이 아니기 때문)에 괜찮은 걸까요?list.empty() 라는 메서드를 통해 조회 요청에 대해 반환할 객체가 없음을 알 수 있고, 이에 따른 후처리를 할 수 있기 때문인가요?
-
미해결[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)
npx lite-server error 확인 요청드립니다.
git 프로그램에서, code 확인 후에npx lite-server --baseDir 1-vanilla 실행하면npm ERR! code ENOENTnpm ERR! syscall lstatnpm ERR! path C:\Users\ostri\AppData\Roaming\npmnpm ERR! errno -4058npm ERR! enoent ENOENT: no such file or directory, lstat 'C:\Users\ostri\AppData\Roaming\npm'npm ERR! enoent This is related to npm not being able to find a file.npm ERR! enoentnpm ERR! A complete log of this run can be found in: C:\Users\ostri\AppData\Local\npm-cache\_logs\2024-02-24T09_12_51_599Z-debug-0.log 상기 에러메세지가 발생하는데, 혹시 어떻게 해결할 수 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿과 파일 업로드1 - debug 로그 내용이 출력 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) -> 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) -> 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) -> 예[질문 내용]application.properties 에 logging.level.org.apache.coyote.http11=debug 를 설정하여 HTTP 메시지 로그를 보고자 하였으나 강의 영상처럼 출력 되지 않습니다.↑상품명과 파일(임의의 png 이미지)을 서버로 보낸 상태 apache DEBUG 레벨 로깅 내용을 보고 싶은데 어떻게 해야하나요? [사용환경]os: win11springBoot: 3.2.3ide: Ultimate 2023.3.2java: 17
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
was 장애 시, 기본 에러페이지를 커스텀 가능한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.해당 영상을 보고 나서 개발 하는 중 궁금점이 생겨 질문드립니다.WAS가 죽으면(=서버가 과부하가 되거나 어떤 요인에 의해 다운될 경우) WAS가 표출해주는 에러페이지를 보여주지 못하고 (templates 파일은 내부적으로 was만 접근 가능하기 때문)톰캣에 기본 내장된 에러페이지를 보여준다라고 이해했습니다.이 때, 톰캣이 보여주는 내장된 에러페이지는 에러코드 및 톰캣 버전 등 정보를 가지고 있어 보안상 위험하다고 판단이 되었습니다.이러한 경우 정적 소스를 처리할 수 있는 web server에서 개발자가 커스텀한 에러페이지를 표출할 수 있도록 해야 될 거 같은데, 이게 가능한지 , 어떻게 설정을 해야하는지 궁금합니다.또한 불가능하다면 어떤 다른 방식으로 위의 문제점을 해결하는지 궁금합니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
왜 hashMap을 사용하는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. member 라는 객체에 id와 name이 모두 담겨있을 텐데hashmap 을 또 만들어서 id와 name을 맵핑시키는 이유가 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloSpringApplication 파일 run시 무한빌드??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의 진행중에 HelloSpringApplication 파일을 run하면터미널에서 building중이라면서 계속 시간은 지나가는데 종료가안되요.localhost:8080에는 진입되는데 building이 계속진행되는건 뭘까요... 정지를 누르면 아래처럼 에러메시지가 나와요.Execution failed for task ':HelloSpringApplication.main()'.> Build cancelled while executing task ':HelloSpringApplication.main()'* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 13s3 actionable tasks: 2 executed, 1 up-to-date
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
생성자 사용 시 new 연산자를 사용하지 않는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서 public MemberService memberService(){ return new MemberService(memberRepository());}를 사용해서 서비스와 리포지토리 빈을 서로 연결해주셨는데, 여기서 memberRepository()가 생성자니까 public MemberService memberService(){ return new MemberService(new memberRepository());}이런식으로 써야할 것 같은데, new가 사용되지 않아서 질문드립니다. 왜 이런 예외적인 문법이 쓰여지게 되는 것일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바17버전
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]17버전이라 스프링부트 3점대로 만들고 main이랑 test복사해서 프로젝트 생성후 javax를 변경까지 했습니다.메인 애플리케이션을 실행하면 잘 되는데 테스트 코드 실행하면 이렇게 오류가 납니다 뭐가 문제일까요
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
화질이 계속 720p인데 1080은 안되는건가요?
계속 720p로 나와서 눈이 아픈데 1080p설정은 안되는건가요??
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
test 실행이 안됩니다
에러문구는 이렇게 뜨고build.gradle은 이렇게 되어있습니다 여기 문제인거 같은데 방법을 못찾겠네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
memberRepository에 final을 붙이는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. MemberService의 memberRepository에 final 키워드가 붙어야 하는 이유를 알고 싶습니다. store에는 final이 붙지 않았어서 그 둘의 어떤 차이 때문에 final이 붙을지 말지가 결정되는 것인지 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
forward 흐름을 제가 생각한게 맞는지 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@WebServlet(name = "mvcMemberServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); //Model에 데이터를 보관. request.setAttribute("member", member); String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request,response); //-> 요청의 제어권을 save-result.jsp에게 넘김 즉 요청의 흐름이 넘어감 } }그러고 나서 jsp로 흐름이 넘어오고<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 성공 <ul> <%-- 이 부분을 request에 저장된 member 파라미터를 통해 값을 넣고--%> <li>id=${member.id}</li> <li>username=${member.username}</li> <li>age=${member.age}</li> </ul> <a href="/index.html">메인</a> </body> </html> <%--이 부분에서 최종적으로 브라우저에게 응답이 나간다.--%>이렇게 이해했는데 맞을까요 ..?맞다면 처음 클라이언트의 요청을 받은건 서블릿이고 최종 응답을 해준것은 jsp인가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
어떤 메서드를 테스트하는게 바람직한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. findById는 테스트를 하지 않았지만, findByName은 테스트를 하고 있습니다. 레포지토리의 메서드 중 테스트해야하는 것과 테스트를 하지 않아야 하는 것을 구분하는 기준이 있을까요? 또 테스트 케이스를 만들어내는 방법이나 원칙이 있는지도 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
StringHttpMessageConverter가 사용될 때의 미디어 타입
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]위 사진에서 StringHttpMessageConverter의 경우미디어 타입은 별/별이라 써져 있고, 쓰기 미디어 타입은 text/plain이라고 나와 있습니다. 저는 처음에 위 부분을 다음처럼 이해했었습니다.StringHttpMessageConverter가 요청을 받을 때 사용되는 경우(파라미터가 String인 경우) 요청 메시지의 Content-Type이 무엇이든 상관없다. StringHttpMessageConverter가 응답할 때 사용될 경우에도(리턴 타입이 String인 경우) 요청 메시지의 Accept가 무엇이든 상관없다.StringHttpMessageConverter가 응답할 때 사용될 경우(리턴 타입이 String인 경우) 요청 메시지의 Accept가 특정한 거로 지정되어 있지 않다면 응답 메시지의 Content-Type이 text/plain으로 되지만, Accept가 지정되어 있다면 그에 맞는 미디어 타입(application/json 등)으로 나갈 수 있다.원래 이렇게 생각했었는데, 다시 보니 pdf에 별/별이라고 되어 있는 미디어 타입은 요청 미디어 타입에 한정해서 써져 있는 건가?싶기도 해서 헷갈립니다. 그렇게 다시 해석한다면 StringHttpMessageConverter가 요청을 받을 때 사용되는 경우(파라미터가 String인 경우) 요청 메시지의 Content-Type은 아무 거나 상관없다. StringHttpMessageConverter가 응답할 때 사용될 경우(리턴 타입이 String인 경우) 요청 메시지의 Accept는 text/plain(혹은 이걸 포함한 별/별)이어야 하며 다른 미디어 타입은 허용하지 않는다. 전자와 후자 중 어떤 게 맞나요? 혹은 제가 쓴 양쪽 내용 다 잘못된 내용을 포함한다면 무엇인지 궁금합니다. 저는 전자일 것 같기는 합니다. 이전에 produces 관련 코드를 작성할 때 String으로 반환하는데도 produces = "text/plain"이 아닌 produces = "text/html"로 썼기 때문에요. 그런데 확신이 안 들어서 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
모델을 나눈이유는 테스트 때문인가요?
모델을 따로 분리한 이유를 request, response를 안쓰는 컨트롤러가 있어서 라고 말씀하셨는데request를 안쓰는 컨트롤러는 Map도 안쓰고파라미터 -> 맵 -> 파라미터로 다시 바꿔야 하는 수고로움도 있는데 v3로 만든 이유는 나중에 스프링 mvc에서 모델을 친숙하게 하기 위해서 일부로 만든건가요? 아니면 테스트 코드를 쉽게 만들기 위해서 만든건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예제로 구현하는 파일 업로드,다운로드 25:50 부근
제가 지정한 경로에 파일도 업로드 되고redirect 되는것도 확인했습니다 post요청을 보매녀 redirect되서 /items/1로 get요청을 보내는데 여기서 whitelabel 오류가 나옵니다. item-view.html에서첨부파일:<img>를 삭제하고 돌리면정상적으로 뷰를 랜더링 합니다어디서 문제가 발생한건가요??+파일을 첨부안하면 오류가 발생안하고 파일을 첨부하면 오류가 발생합니다. 어디서 문제가 있는지 감이안오네요ㅜ
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
xml파일과 properties에 로그레벨 질문
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration>이 코드를 쓰면 DataSource 커넥션풀에서 별도의 Thread가 동작하는 코드를 볼수가 있는데 application.properties에서 logging.level.root=debug 로 설정을하니까 안보이더라구요... 왜 안되는지 이유를 알수잇을까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
id의 중복 사용 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서는 Member의 필드에 id와 name이 있고, 이를 다시 Map으로 묶어서 사용하고 있습니다. save()가 정상적으로 처리되면 Map에는 key의 id값과 Member필드의 id값이 서로 같은 값으로 중복 저장되게 되는데요, 이렇게 설계하신 이유를 알고 싶습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
클래스 필드의 접근 제어자 설정 기준
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]클래스, 클래스의 필드나 메서드의 접근 제어자를 설정해줄 때, 어떤 것들을 private로 하고 어떤 것들을 public으로 설정하는 것이 바람직한지를 알고 싶습니다. 일관적인 기준이 있나요?예를 들어, MemoryMemberRepository는 public이고 store는 private으로 설정해주셨는데, 그 이유를 알고 싶습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Dispatcher과 웹 mvc의 동작 과정 질문 있습니다,
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]질문1.DispatcherServlet는 따로 프레임워크에서 구현하지 않아도 되나요? 예를 들어, 1)DispatcherServlet이 모든 웹 브라우저로부터의 요청을 받는다.2)DispatcherServlet은 HandlerMapping으로 부터 주어진 request를 처리할 수 있는 Handler객체를 가져온다. 이렇다면, 사용자가 따로 DispatcherServlet를 구현할 필요 없이 스프링 프레임워크 자체에서 DispatcherServlet를 구현 + HandlerMapping을 받을 클래스들을 빈으로 만들어서 관리함.그래서 @RequsetMapping 같은 URL 요청이 들어오면 해당되는 클래스에게 요청을 넘긴다.이렇게 이해하면 옳게 이해한 것이 맞나요? 질문 2.저는 아래와 같이 웹 MVC 동작 과정을 이해 했습니다. 옳게 이해한 것이 맞나요?1.클라이언트가 서버에 요청을 하면 DispatcherServlet 클래스가 요청을 받음2.@Controller 어노테이션을 이용해 빈으로 등록한 컨트롤러를 찾아 매핑된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메소드로 이동함.3.컨트롤러는 해당 요청을 처리할 @Service 클래스를 찾아 로직을 수행함.4.서비스는 DB에 접근하여 요청을 수행하고 DTO를 통해 데이터를 컨트롤러에게 전달한다. 5.그 후 컨트롤러는 DTO를 통해 받은 데이터를 DispatcherServlet에게 다시 전달하고, DispatcherServlet는 응답과 함께 URL(view)를 반환해준다. 질문 3제가 위와 같이 이해를 했을 때, DTO가 Model이라고 이해를 하면 되는건가요? 감사합니다.