묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
프로젝트 생성 시 jdbc:failed 하면서 빌드가 실패했다고 나옵니다.
> Task :prepareKotlinBuildScriptModel UP-TO-DATEFAILURE: Build failed with an exception.* What went wrong:Could not resolve all dependencies for configuration ':compileClasspath'.Failed to calculate the value of task ':compileJava' property 'javaCompiler'.Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=17, vendor=any, implementation=vendor-specific} for MAC_OS on aarch64.No locally installed toolchains match and toolchain download repositories have not been configured.* 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.BUILD FAILED in 504ms 이런 오류가 발생합니다.ㅜㅜ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿과 컨트롤러의 차이
서블릿과 컨트롤러의 차이가 뭔가요?서블릿도 url로 요청 오는 것을 받아들이고 컨트롤러도 url 요청 오는 것을 받아들이는데 서블릿과 컨트롤러의 차이를 모르겠습니다. 참고로 관련한 다른 글을 봐도 이해가 안 돼서 질문 드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션 5.
@Controller @RequestMapping("/springmvc/v3/members") public class SpringMemberControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @GetMapping("/new-form") public String newForm() { return "new-form"; } @PostMapping("/save") public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model) { Member member = new Member(username, age); memberRepository.save(member); model.addAttribute("member", member); return "save-result"; } @GetMapping public String members(Model model) { List<Member> members = memberRepository.findAll(); model.addAttribute("members", members); return "members"; } } RequestMappingHandlerAdapter에서 핸들러 어댑터를 찾으려면 핸들러 어탭터를 등록해야 하는데 스프링에서 애노테이션 인식해서 저장되는 핸들러 어탭터 뭘로 등록되는 건가요?위에 코드는 그냥 핸들러로 등록되는 거고, 그럼 SpringMemberControllerV3 핸들러를 실행시켜줄 핸들러 어댑터는 자동으로 생성되는데 궁금한 건 v4에서는 process로 모든 메서드가 같아서 처리가 가능했는데 지금은 다른데 어떻게 처리가 되는 겁니까?SpringMemberControllerV3에서 메서드가 3개니까 SpringMemberControllerV3을 호출해줄 핸들러 어댑터가 각 newForm, save, members를 사용할 수 있게 3개 생성되는 건가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SpringMemberFormControllerV1 404 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]http://localhost:8080/springmvc/v1/members/new-form 접속시에 404 에러가 납니다 매핑이 안되는거 같은데... 왜 일까요 ㅠㅠㅠ 도와주세욥 소스코드입니다!commit 11 기준으로 봐주시면 감사하겠습니다!https://github.com/Leejuseop/Spring_Mvc_1
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오타라고 봐도 될지 모르겠는데 일단 제보합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]6. 로그인 처리1 - 쿠키, 세션.pdf (v20240408) '쿠키를 사용해서 로그인Id를 전달해서 ~~~' 이런 식으로 나와 있는데여기에 써진 로그인Id가 loginId랑 같은 의미라면 혹시 오타일까요?쿠키를 통해 전달하는 건 MemberRepository의 store에 저장된 id라서 memberId 혹은 id가 좀 더 명확하지 않나 싶어서 제보합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션5. RequestMappingHandlerAdapter
@Controller @RequestMapping("/springmvc/v3/members") public class SpringMemberControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @GetMapping("/new-form") public String newForm() { return "new-form"; } @PostMapping("/save") public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model) { Member member = new Member(username, age); memberRepository.save(member); model.addAttribute("member", member); return "save-result"; } @GetMapping public String members(Model model) { List<Member> members = memberRepository.findAll(); model.addAttribute("members", members); return "members"; } }코드를 실행하면 스프링 빈에 Controller가 붙은 SpringMemberControllerV3가 등록되고, 자동으로 맵핑도 됩니다.질문:http 요청이 오면, mapping된 핸들러를 찾습니다. 여기서 핸들러는 SpringMemberControllerV3인 건가요?핸들러가 핸들러 어댑터를 찾아야하는데 핸들러 어댑터 맵핑 할 때는 뭐가 등록이 되는 건가요?제가 이해한 건 SpringMemberControllerV3 클래스가 핸들러 어댑터로 등록이 되고, SpringMemberControllerV3 클래스 안에 있는 메서드가 핸들러로 등록이 되는 거 맞나요? 어떤게 핸들러 어댑터고 어떤 게 핸들러(컨트롤러) 인지 잘 모르겠습니다.여기서는 핸들러(컨트롤러)만 만들어놓은 거 같은데 여기서 핸들러 어댑터는 뭐로 맵핑이 되는지를 몰라서 핸들러 어댑터를 찾을 때 어떤 것과 비교를 하는 건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2-database 오류 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Database "/home/ubuntu/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 90149/90149 (도움말)오류가 발생합니다..구글링을 해보니test.mv.db 를 생성해주어야하더라구요..원래 맨처음에는 잘 됐는데 비번 잘못설정해서 다 삭제하고 다시 설치하였습니다. 일단 설명대로 C:\Users\user에 직접 만들어주었습니다. 하지만 같은 오류가 발생해서 원인을 모르겠습니다 ㅠㅠ.ㅠ
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
예외처리
예외처리에 관련해 질문이 있습니다.try 구문안에서 예외가 발생하면 밑에있는 try의 남은 구문 건너뛰고 바로 catch문으로가서 잡아주는것으로 알고있습니다.그런데 공부하다보니까 헷갈리는게 MemberRepository에 있는 save메서드로 예를 들면,con.prepareStatement(sql)부터 SQLException을 발생시키는데 어떻게 try안에 있는 것들이 정상적으로 수행되는지 궁금합니다.예외가 나오는 순간 catch문으로가서 catch구문을 수행하는 것이 아닌가요 ?? @Override public Member save(Member member) { String sql = "insert into member(member_id,money) values(?,?)"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); //수정 return member; } catch (SQLException e) { log.error("db error", e); throw new MyDbException(e); }finally { close(con, pstmt, null); } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Content-Type 질문
1번 text/html2번 application/x-www-form-urlencoded 질문:a. 둘 다 Content-Type이 html인 걸로 알고있는데 2번은 html form에 사용되는 거고, 1번도 html form에 사용되는 거 아닌가요?!b. 1번과 2번의 차이가 뭔가요?c. 1번과 2번의 post전송 방식이 어떻게 다른 건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
test.mv.db 파일이 생성된걸 어디에서 확인 가능한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.test.mv.db 파일이 생성된걸 어디에서 확인 가능한가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
매뉴얼이 어디있나요?
매뉴얼이 어디있나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
postman에서 message : ??? 나올 때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 Postman으로 요청을 보냈을 때 ??? 값이 나온다면Setting > File Encodings > Transparent native-to-ascii conversion 을 체크 해주시고 다시 Postman을 확인해보면 잘 나옵니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예외 처리에 대해 질문 있습니다.
아래 내용은 제가 정리한 글입니다. - 예외 처리 흐름🧸 Spring MVC 내부에서 예외 처리:1. 예외 발생: 컨트롤러에서 예외가 발생한다.2. 예외 전파: 예외가 DispatcherServlet으로 전파된다.3. HandlerExceptionResolver: DispatcherServlet은 등록된 예외 처리기를 통해 예외를 처리하려고 시도한다.4. Custom Exception Handlers: @ControllerAdvice에 정의된 예외 처리기가 있으면 이를 사용하여 예외를 처리한다.5. BasicErrorController: 위의 처리기들에서 예외를 처리하지 못하면, /error 경로로 요청이 전달되어 BasicErrorController가 기본적인 에러 처리를 수행한다.6. 클라이언트 응답: BasicErrorController가 예외를 처리하고 클라이언트에게 적절한 에러 응답을 반환한다.🧸 WAS로 예외 전파:1. 예외 처리 실패: DispatcherServlet이나 BasicErrorController가 예외를 처리하지 못한다.2. WAS로 전파: 예외가 WAS(톰캣)로 전파된다.3. 에러 설정에 따른 재요청: WAS는 Spring Boot가 설정한 에러 핸들링 설정에 따라 /error 경로로 재요청을 보낸다.4. 에러 처리: /error 경로로 재요청된 에러를 BasicErrorController가 처리한다.5. 클라이언트 응답: BasicErrorController가 예외를 처리하고 클라이언트에게 적절한 에러 응답을 반환한다.위의 흐름에서 알 수 있듯이, 기본적인 에러 처리 방식은 컨트롤러에서 발생한 예외를 BasicErrorController를 통해 처리하는 것이다. 예외가 WAS까지 전파되는 경우는 예외적인 상황이며, 일반적으로는 Spring MVC 내부에서 예외가 처리된다. 간단하게 얘기해서 예외 또는 에러가 WAS까지 전파되는 상황은 드물고, 주로 Spring MVC(ControllerAdvice, RestControllerAdvice, ExceptionHandler, ResponseStatus, ResponseStatusException, BasicErrorController)가 처리하여 컨트롤러단에서 예외가 처리되는 것으로 이해를 하고 정리를 하였습니다. 그런데 검색을 하다보니 아래와 같은 내용들을 발견하였습니다.Spring은 BasicErrorController를 구현해두었다. ExceptionHandler나 ControllerAdvice처럼 직접 에러를 반환하는 경우에는 BasicErrorController를 거치지 않지만, @ResponseStatus, ResponseStatusException 등과 같이 직접 에러 응답을 반환하지 않는 경우에는 최종적으로 BasicErrorController를 거쳐 에러가 처리된다. 클라이언트 입장에서는 이를 모르지만 내부에서는 2번 컨트롤러로 요청이 전달되는 과정이 진행된다.우리가 만든 예외 클래스에 다음과 같이 @ResponseStatus로 응답 상태를 지정해줄 수 있다. @ResponseStatus(value = HttpStatus.NOT_FOUND) public class NoSuchElementFoundException extends RuntimeException { ... } // 그러면 ResponseStatusExceptionResolver가 지정해준 상태로 에러 응답이 내려가도록 처리한다. { "timestamp": "2021-12-31T03:35:44.675+00:00", "status": 404, "error": "Not Found", "path": "/product/5000" }하지만 에러 응답에서 볼 수 있듯이 이는 BasicErrorController에 의한 응답이다. 즉, @ResponseStatus를 처리하는 ResponseStatusExceptionResolver는 WAS까지 예외를 전달시키며, 복잡한 WAS의 에러 요청 전달이 진행되는 것이다. (WAS까지 예외가 전달되고, WAS의 에러 요청 전달이 진행됨)그렇다면 제가 정리한 내용과 위 내용은 반대되는데, 어떤 것이 맞는건지 잘 모르겠습니다.제가 정리한 내용이 맞다면, @Responsestatus는 ExceptioNResolver, 정확하게는 ResponseStatusExceptionResolver에 의해서 처리되므로 컨트롤러단에서 예외처리가 되어야 하는것이 맞다고 생각하는데, 어떤 것이 참인가요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
임베디드모드는 H2에서만 가능할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]오라클에서 하려고 하니까 안 되는 것 같습니다 ㅠㅠ 임베디드 DB 사용 방법이테스트 클래스에 @Transactional 넣기test/resources/schema.sql 파일 작성test/resouces/application.properties 파일 작성맞지않나요?!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요 react협업에 관련해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]타임리프로 서버사이드렌더링 하는법은 김영한님께 배워서 알지만 프론트엔드 (리액트) 와 협업하는 강의는 따로 없을까요? @responsebody로 해야하는 것 같은데.. 어떻게 협업해야하는지 모르겠습니다. 따로 찾아봐야 하는걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션6 스프링데이터 JPA에서 오류 질문
private final MemberRepository memberRepository; @Autowired public SpringConfig(MemberRepository memberRepository){ this.memberRepository = memberRepository; } 자동 주입을 할 수 없습니다. 'MemberRepository' 타입의 bean이 두 개 이상 있습니다.Beans:memoryMemberRepository (MemoryMemberRepository.java) springDataJpaMemberRepository (SpringDataJpaMemberRepository.java) 라는 오류가 발생합니다 어디를 고쳐야 하는 건가요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트시 @Transactional 붙이고, orphanRemoval = true
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트시 @Transactional 을 붙이고 , 객체 A(1) - B(N)간 다대일 양방향 참조를 설정 (일쪽에 mappedby Casecade ALL, orphanRemoval = true) 한 상태에서 부모객체의 참조를 끊으면 자연스레, 자연스레 N쪽에서 데이터가 사라지는 코드를 구현했었는데, @Transactional 적용 테스트시에 변경감지나, orphanRemoval = true 같은 경우 트랜잭션이 롤백되어서 orphanRemoval = true 작동이 되지 않는 문제가 있습니다. 이럴경우 테스트는 어떻게 해야하나요?? 실제 구현은 잘동작하지만, 테스트시에 동작 X @Transactional로 인해 orphanRemoval = true가 작동 안해서 , 떼고 테스트 코드를 작성할경우 검증로직에서 N쪽에서 데이터가 잘 들어갔거나, 삭제되는걸 검증하는 경우에는, 이미 트랜잭션이 서비스로직에서 detached 된 에러로, no session 에러를 만나게 되었습니다. 이럴 경우 어떻게 테스트 하시는지 여쭙고 싶습니다. 1쪽만 테스트 해야하는지, 본 강의에서와 같이 @Commit으로 해결하나요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MSA
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4분경 보여주는 화면에서 server to server로 API를 통신한다고 되어있는데, 이런경우에 MSA로 구성되었다고 할 수 있는건가요??
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
예외처리
안녕하세요 예외처리에 대한 질문이생겨 글 적습니다 !MemberServiceV3_2에서 bizLogic()을 호출해서 메서드에서 던져진 SQLException을 잡습니다 그런데 MemberServiceV3_1에서 트랜잭션 매니저로 처리하는 try catch문에서는 Exception으로 예외를 잡는데 Exception이 모든 예외의 조상이라서 모든 예외를 잡는건 알고있습니다 !그런데 헷갈리는 부분이 SQLException이 commit을 하면 사라지나요 ?아니면이때 SQLException이 잡히나요 ? 잡히지만 이미 커밋을 해버려서 롤백할 데이터가 없기 때문에 SQLException을 IllegalStateException으로 바꿔주기만 하고 try catch문을 빠져나오는 걸까요 ??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
한글깨짐 현상
username에 한글을 사용해서 보냈을 때, log나 println에서 깨짐현상이 일어나서 setCharacterEncoding에서 UTF-8로 설정해도 깨지길래 postman content-type에 charset=utf-8로 설정도 해봤는데 계속 깨진 상태입니다... 어디에서 발생한 문제인가요?