JPA를 사용하지 않으면 데이터베이스에 바로 SQL을 을 보내지만, 커밋을 할 때 저장을하고, 롤백을 하면 내용을 원래대로 복구하던 것을 JPA를 사용하면 커밋을 할 때 까지 SQL을 보내지 않기 때문에 롤백이란 기능이 사라졌다고 생각하면 되는 것일까요? 그렇다면 원래는 커밋을 하지 않아도 내부에선 반영이 되기 때문에 테스트를 할 수 있었는데 이런 경우는 어떻게 되는 것인가요 ? (테스트코드에서 @Transactional같은 경우 )
https://drive.google.com/file/d/1txo4odVUdZBk8BnrLM0yAo5LKhBSpdR5/view?usp=sharing MemberServiceV4Test 가 실패했다고 나오는데 MemberRepositoryV4_2로 주입해주면 잘 되는 걸로 봐서 MemberRepositoryV5가 문제가 있는 것 같은데 아무리 찾아도 모르겠습니다 ㅠㅠ
@RequiredArgsConstructor 이 애노테이션은 final이 붙은 변수의 생성자를 자동으로 생성해주고, 생성자가 하나만 있다면 @AutoWired를 생략할 수 있다고 알고 있습니다. private final MemberRepositoryV1 memberRepository; 근데 여기서, MemberRepositoryV1가 Bean으로 등록되지 않았는데 어떻게 자동으로 주입을 받을 수 있는 것이죠?
public void aaa() throws SQLException { String sql = "delete from member where member_id =?"; String memberId = "!"; try { Connection con = getConnection(); PreparedStatement pstmt = null; pstmt = con.prepareStatement(sql); } catch (Exception e) { } } 이렇게 try 문 안에서 한번에 받지 않고 Connection con = null; PreparedStatement pstmt = null; 이렇게 null로 외부에서 선언을 하는 것은 finally 문 안에 close 메서드에 파라미터로 넘겨주기 위함이 맞나요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Java 기본 문법을 여쭤보는 것 같지만 궁금합니다ㅜㅜ. 어떻게 부모타입(DataAccessException)으로 throw했는데 자식타입(BadSqlGrammarException)으로 catch할 수 있는 건가요? 이렇게 테스트를 해보았는데, 잡히더라구요. 그래서 catch문에서 자동으로 upcasting이 되는건가 싶어서 RuntimeException이 아닌 Checked Exception으로도 진행을 해보았습니다. 하지만 컴파일 에러가 발생하더라구요ㅜㅜ. RuntimeException만 upcasting을 해주는 건지, 아니라면 어떻게 자식타입으로 catch할 수 있는건지 궁금합니다!
세션 만들기 //로그인 성공 처리 //세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성 HttpSession session = request.getSession(); //세션 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); 세션 지우기 HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } 세션 확인하기 HttpSession session = request.getSession(false); if (session == null) { return "home"; } 쿠키는 클라이언트 측에서 저장하고 세션은 서버측에서 저장한다고 알고 있는데요. request 로부터 getSession을 통해 얻는 것이 무엇인지가 궁금합니다. request.getSessin()을 통해 얻는다는 것은 사용자의 요청으로부터 얻은 Session이고 여기에 setAttribute 하는 것은 서버에 데이터를 저장하는게 아니라 사용자의 요청에 저장을 하게 되는 것 아닌가요 ?? (setAttribute가 사용자의 request와 서버 모두 저장하는 것인가요?) session은 cookie와 같다면 서버 내부적으로 어디에 저장돼서 어떻게 확인할 수 있는 건지 궁금합니다.
author이랑 isbn이 null로 나와있는데 싱글테이블에서 Album이랑 Movie에 관련된 컬럼은 안나오고 딱 Book이랑만 관련된 author이랑 isbn 만 null로 표시됐는데 이건 JPA가 Book인 걸 알아서 그것만 표시해주는건가요 ?? 어떻게 author이랑 isbn만 표시해주게 되는건지 궁금합니다 ..
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 개인 토이 프로젝트에 생성과 관련된 트랜잭션이 발생할 때마다 로그를 남기는 기능을 aop를 적용 해서 만들어 보고 싶어서 새로운 어노테이션을 만들어서 구현을 했습니다. 그런데 이렇게 구현하면 aop의 장점인 본래 코드를 수정하지 않고 적용할 수 있다는 점을 놓치게 되는것 같아서 고민이 생겼습니다. 새로운 어노테이션을 만들어서 적용하는 것과 관련된 메서드의 이름을 전부 통일( "ex) create~~()" ) 하는 것 중에 어떤 방법이 좀 더 좋은 방법일지 기준이 잘 안섭니다. 사진도 같이 첨부하겠습니다. 감사합니다. +) 혹시 스프링 시큐리티에 대한 강의가 계획에 있으신지 궁금합니다. 당장 계획이 없으시다면 공부하기 좋은 도서도 추천해주시면 감사하겠습니다.
@ExceptionHandler public ErrorResult exHandler(Exception e) { return new ErrorResult("error", e.getMessage()); } 실무에서 웬만한 예외들은 다 처리를 해줄 텐데 예기치 못한 예외들을 위해 저런 식으로 Exception e를 파라미터로 받는 메서드를 작성해줄까요 ???
@RequestMapping 을 하지 않은 URL을 입력하면 [404 오류 화면 스프링 부트 제공] 화면 만 나오는데 이유가 무엇인가요? 좀 더 포괄적인 [4xx 오류 화면 스프링 부트 제공] 이 나오는게 맞지 않나요 ?? 다른 이유 없이 스프링 측에서 저렇게 세팅했기 때문에 나오는 건가요 ?? 200과 300을 보냈을 때는 하얀 공간만 나오는데 2xx,3xx 상태코드들은 실패가 아니기 때문에 그런 것인가요? 맞다면 이 하얀 화면은 HTTP Status 500 – Internal Server Error (error/500.html이 없을 때 나오는 화면) 가 나오는 것처럼 스프링부트가 내부적으로 세팅해놓은 화면인 건가요?
세션 만들기 //로그인 성공 처리 //세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성 HttpSession session = request.getSession(); //세션 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); 세션 지우기 HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } 세션 확인하기 HttpSession session = request.getSession(false); if (session == null) { return "home"; } 세션 만들기에서는 session.setAttribute 로 정보를 저장도 했다가, 지우기 혹은 확인하기에서는 쿠키의 역할을 하는 것 같은데 session은 쿠키 + 쿠키저장소(SessionManager의 HashMap) 두 역할을 모두 하는 건가요 ? 그게 아니라 session은 cookie와 같다면 서버 내부적으로 어디에 저장돼서 어떻게 확인할 수 있는 건지 궁금합니다.
예를 들어 @NotBlank String nickName 이런 경우에 nickName :"12 34 56" 이런 닉네임도 안 되는 건가요?? 아니면 nickName : " " << 이런 경우만 금지하는 건가요?? " " 만 금지하는 것인지, 문자열 속에 " "를 금지하는 것인지 궁금합니다 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하십니까, 자주하는 질문 에서 학습방법을 봤는데 코드를 쭉 따라하는식 방법이 적혀있었는데, 이렇게 따라만 해도 공부가 되는게 맞을까 혹시나 하는 마음에 따로 질문을 올리게 되었습니다. 따로 국비학원 수료 없이 학교 졸업하자마자 취업했는데 백엔드 스프링을 사용한다해서 선생님 강의 커리큘럼을 따라갈려고합니다. 스프링을 배우는데 자바 기본 지식이 필요하다해서 자바의 정석 유튜브를 먼저 보고, 부족하지만 최대한 자바 기본 문법개념 같은걸 숙지한 상태에서 선생님 영상 시청하고있습니다. 선생님의 이론수업이 정말로 재밌고 스프링 입문하는데 좋은걸 알겠는데 이론설명뒤에 선생님이 치시는 코드가 무엇을 의미 해석이 안되고, 코드형식(?) 코드 구조 (문법?) 이게 정말 와닿지 않는 상태이다보니 ,영상을 보고 타이핑하니깐 공부 하는 느낌이 안들어서 걱정이 됩니다. 프로그래밍 능력, 자바기초실력이 부족해서 이런 느낌을 받는 거 같은데 회사 실무에 도움이 될까 걱정이 됩니다.처음 취직한 회사라서 최대한 적응하고 회사에 도움이 되는 개발자가 되어보고싶은데 어떠한 방식으로 공부를 해야할 지 조언이 가능할까요? (혹시 책이나 강의같은걸 추천해주시면 감사하겠습니다.)
@GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v1/addForm"; } 저는 item에 빈값을 만드는 이유는 등록화면 처음 들어갈때 input에 item을 빈값으로 두기위해 (안하면 There was an unexpected error (type=Internal Server Error, status=500 이되니까) 만들었다고 생각이 듭니다. 하지만 강의14:08 에서 등록화면에 model.addAttribute("item", new Item()); 빈값을 넘긴 이유 중 하나가 검증에 실패했을 때 item을 재사용할 수 있게 하기 위해서라고 말씀하셨는데 굳이 따지자면 재사용을 할 수 있는 건 이 때 item에 빈값을 넣어줘서가 아니라 @PostMapping의 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { } @ModelAttribute Item item @ModelAttribute에서 item에 값을 넣어줘서 (물론 위에서 생성된 같은 item이기는 하지만) 그 값이 재사용될 수 있는 거 아닌가요?? 정리하면 우리가 검증이 실패해도 재사용 할 수 있는 건 @GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v1/addForm"; } 에서 new Item()때문이 아니라 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { } @ModelAttribute Item item 때문이 아닌가 라는 생각이 듭니다. 답변해주시면 정말 감사하겠습니다.