학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] Connection 객체의 경우에는 해당 커넥션이 만들어지고 close하지않으면 네트워크 리소스 소모때문에 close를 해야하는것으로 이해했습니다. 그렇다면 preparedStatement와 ResultSet객체의 경우에는 해당 데이터베이스로 SQL문을 전송및 전달받는 객체인걸로 보이는데 왜 close로 명시적으로 닫아야하는건가요?
[질문 내용] 제가 지금 이해한 내용으로는 Parent parent = new child(); 가 있을때 메모리에는 Child를 기준으로 상위 부모 클래스만 메모리에 적재되고 (편의상 Child 메모리라고 하겠습니다), parent의 참조 주소는 생성된 Child 메모리 안의 Parent 클래스를 참조하며, parent의 멤버변수는 Parent 클래스의 멤버변수만 가질 수 있고, 오버라이딩된 메소드가 존재한다면 무조건 오버라이딩된 메소드가 우선권을 가진다 라고이해했는데, 덧붙일 개념들이 혹시 있을까요? 아, 그리고 만약 오버라이딩된 메소드가 부모클래스에서 실행할 수 없는 메소드라면 어떻게되는지도 궁금합니다. (혹시, 오버라이딩된 메소드가 부모클래스에서 실행되지않을 가능성은 아예 없나요?)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 강의 16분 즈음부터 @Table(name = "MBR") 같은 것들은 런타임에 영향을 주지만 @Column(unique = true) 같은 제약조건들은 런타임에 영향을 주지 않는다는 말이 왜 그런 건지 이해가 잘 안 가는데 조금 더 설명해주실 수 있을까요?? 둘 다 데이터베이스에 어떤 쿼리를 날려야 하는데 하나는 런타임에 영향을 주고 하나는 그렇지 않다는 게 이해가 잘 가지 않습니다.
(스프링부트 3.0 이상인 상태에서) @Controller 에노테이션을 붙이면 (스프링부트 서버 가동시!) 스프링컨테이너에 싱글톤빈으로 미리 등록 이 되고 클라이언트로부터 예) @RequestMapping("get-form") 의 요청이 들어온다면 1.디스패처 서블릿은 모든 요청을 받을 수 있으므로 요청을 받는다. 디스패처서블릿은 @RequestMapping("~~")으로 (스프링 컨테이너에서 스프링빈으로 등록된 컨트롤러중 ) 에서 url 정보와 일치하는 컨트롤러의 메소드 정보를 조회한다. 디스패처 서블릿은 조회한 메소드정보를 호출할수 있는 RequestMappingHandlerAdapter 을 조회한다. 2번에서 핸들러 매핑을 통해 조회한 메소드정보를 RequestMappingHandlerAdapter 을 호출하면서 파라미터로 넘겨주어 핸들러 메소드가 실행하게 한다. 궁금한점은, 등록이 되어있다면 초반에 매핑정보를 조회할때 스프링에 이미 등록되어있는 핸들러 목록(아래 캡처본)에서 1. BeanNameUrlHandkerMapping : "빈 이름으로 컨트롤러 조회" 를 먼저 거친 후 0=RequestMappingHandlerMapping("") 으로 1번으로 필터링이 된 컨트롤러안의 메소드가 실행되는것일까요? 초반에 스프링빈으로 등록된 컨트롤러를 먼저 찾아야 하니까 0번도 포함이라고 생각했습니다.!!
(스프링부트 3.0 이상인 상태에서) @Controller 에노테이션을 붙이면 (스프링부트 서버 가동시!) 스프링컨테이너에 싱글톤빈으로 미리 등록 이 되고 클라이언트로부터 예) @RequestMapping("get-form") 의 요청이 들어온다면 1.디스패처 서블릿은 모든 요청을 받을 수 있으므로 요청을 받는다. 디스패처서블릿은 @RequestMapping("~~")으로 (스프링 컨테이너에서 스프링빈으로 등록된 컨트롤러중 ) 에서 url 정보와 일치하는 컨트롤러의 메소드 정보를 조회한다. 디스패처 서블릿은 조회한 메소드정보를 호출할수 있는 RequestMappingHandlerAdapter 을 조회한다. 2번에서 핸들러 매핑을 통해 조회한 메소드정보를 RequestMappingHandlerAdapter 을 호출하면서 파라미터로 넘겨주어 핸들러 메소드가 실행하게 한다. 여기서 궁금한점은 핸들러 매핑정보를 확인할때 일단 컨트롤러가 스프링 빈(싱글톤 빈)으로 등록되어있어야 한다고 이해한 상태입니다. 등록이 되어있다면 초반에 매핑정보를 조회할때 스프링에 이미 등록되어있는 핸들러 목록(아래 캡처본)에서 1. BeanNameUrlHandkerMapping : "빈 이름으로 컨트롤러 조회" 를 먼저 거친 후 0=RequestMappingHandlerMapping("") 으로 1번으로 필터링이 된 컨트롤러안의 메소드가 실행되는것일까요? 1~5번 각각 답변 주시면 제 궁금중이 시원하게 풀릴것같습니다. 감사합니다. 초반에 스프링빈으로 등록된 컨트롤러를 먼저 찾아야 하니까 0번도 포함이라고 생각했습니다.!!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] errors.properties 의 {0}, {1} 등에 숫자가 들어간 형태로 출력되는 것 같은데 숫자 출력 포맷이 기본적으로 #,###인가요? 따로 어떠한 작업 없이 숫자만 들어간 것 같은데 아래처럼 #,###로 숫자가 출력이 되길래 궁금해서 질문드립니다. 만약 그렇다면 숫자 구분자 없이 기본 형태로 숫자를 출력하고 싶으면 어떻게 해야하나요 아래는 addItemV3를 만든 후 출력된 결과입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] jar파일까지 정상적으로 만들어졌는데 마지막에 실행하는게 안되네요.. 뭐가문제일까요?ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강제로 중복 회원가입을 시켜서 에러를 발생시켜서 익셉션에 담긴 메세지랑 assertThat으로 비교하는 코드인데 잘 동작되던 코드가 JdbcTemplate 강의를 듣던 중에 테스트를 돌리니 에러가 발생하였습니다. @Test public void 중복_회원_예외() { //given Members members1 = new Members(); members1.setName("spring"); Members members2 = new Members(); members2.setName("spring"); //when membersService.join(members1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> membersService.join(members2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); //then } public Long join(Members members) { validateDuplicateMember(members); membersRepository.save(members); return members.getId(); } public class MembersService { private final MembersRepository membersRepository; @Autowired public MembersService(MembersRepository membersRepository) { this.membersRepository = membersRepository; } private void validateDuplicateMember(Members members) { membersRepository.findByName(members.getName()).ifPresent(members1 -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); } }
예를들어 id값이 20~30인 member를 가져올때 영속성 컨테스트안의 1차캐시에는 값들이 어떻게 저장이 되나요? 일단 강의에서는 em.persist 와 em.find 인 경우 1차 캐시에 값을 저장한다고 해서 위와 같이 jpql을 사용했을때 일단 영속성 컨테스트에 값이 저장되는지 확인해보았습니다. 영속성 컨테스트에 값이 저장되었다면 commit시 1.flush 발생 2.스냅샷과 비교해서 변경감지. 3.변경이있었다면(setter) 쓰기 지연 SQL 저장소에 UPDATE쿼리 생성 및 저장 4.쓰기 지연 SQL 저장소에 있는 모든 쿼리를 실행. 5.커밋(실제DB반영) 위 과정이 일어나서 NAME 값이 changeMember로 변경되어야하는데 확인해보니 실제로 값이 변경되는걸 확인할 수 있었습니다. update 쿼리도 2번일어나는데 그럼 위의 예시에서 executeQuery로 jpql 실행 시 1차 캐시에 값이 @id Entity 20 member(20,memberA) 30 member(30,memberB) 이렇게 저장되는 거 같은데 맞나요??(리스트로 가져오면 , 하나씩 풀어서 저장) 그리고 commit시 위에 제가 생각한 과정대로 이해한게 맞을까요?
외래키 사용을 지양하라는 내용이 있어서 링크된 글을 읽어봤는데 궁금증이 있습니다. 외래키를 지양한다면 PK 값을 다른 테이블에 넣으면서 그 값으로 조인을 사용하는건가요? 외래키를 지양했을 때 성능상의 이점은 알겠는데 결국 데이터 정합성 부분에서 문제가 발생합니다. RDB에서 데이터 정합성이 깨지면 사용하는 의미가 없다고 하는데 이부분에선 어떻게 생각하시나요? 외래키를 안쓸경우 JPA에서 ManyToOne같은 메소드도 사용하지 않는건가요? 그리고 해당 주장에 대해 반박하는 아래의 링크도 있는데 이 의견은 어떠신가요? https://gdsc-university-of-seoul.github.io/foreign-key/
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 1.필터와 인터셉트의 선능차이 관련 로그인 체크해서, 로그인 페이지로 날려버리는 기능을 추가할때 필터의 경우는 디스패치서블릿 이전에 실행되고, 차단할 수 있으니까 인터셉터보다는 서버 비용을 조금이라도 더 절감할 수 있는건가요?? 아니면 그냥 무시할정도의 미비한차이니까 인터셉터를 사용하든 상관 없나요? afterCompletion()로 로그처리 afterCompletion의 경우는 핸들러에서 예외가 발생할때에도 실행이 되니까, 모~든 핸들러의 예외를 로그 메세지로 관리하고 싶은 경우에는 "/*"로 필터를 걸고 afterCompletion에 예외관련된 로그 메세지를 출력되게 하면 되나요? 실무에서도 이런식으로, 시스템 전체의 예외 메세지를 남기기위해서 사용하나요?
안녕하세요, 강의 실습을 따라서 진행하는 중에 화면이 잘 안나오는 문제가 있어서 질문 드립니다. 지난번에 MVC01에서 화면이 로드되지 않는 문제에 대해 maven clean, install을 알려주셔서 이후에는 화면 부분을 생성할 때마다 maven clean, install을 진행했습니다ㅜㅜ 하지만 이번에는 maven clean,install을 실행하거나 프로그램을 껐다가 다시 해봐도 List가 나오지 않습니다. 브라우저의 결과는 아래와 같습니다. List 출력 전 json 알림까지도 잘 나왔고 http://localhost:8080/controller/boardList.do에서도 아래 이미지처럼 나왔습니다. main.jsp 파일입니다. 제가 보기에는 오타 없는 것 같아요. 32번줄 table부분은 var listHtml="<table class='table table-boardered'>";로도 바꿔봤는데 결과는 같습니다. controller 부분입니다. 또한 pom.xml dependency도 추가했습니다. 서버도 문제 없이 작동되고 있습니다. 어디가 문제일까요... 강의를 너무 잘 듣고 있는데 환경 설정 때문인지 자꾸 실행되지 않는 부분이 생겨서 질문 남깁니다ㅜㅜ egov 4.0으로 초기 셋팅은 강사님과 동일합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] Controller 인터페이스 HttpRequestHandler 인터페이스를 상속받은클래스를 OverRide한 메소드를 사용하는경우에는 해당 클래스의 객체 단위로 Mapping이 등록되는것으로 아는데 @RequestMapping를 사용하면 기존과는 다르게 HandlerMapping부분에는 메소드 단위로 Mapping에 등록이 되는건가요?
java -jar hello-spring-0.0.1-SNAPSHOT.jar 오류: 기본 클래스 org.springframework.boot.loader.launch.JarLauncher을(를) 로드하는 중 LinkageError가 발생했습니다. java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 Java 17, 스프링부트 3.2.0 입니다 이런 에러가 뜨는데 어떻게 해결해야하나요??
안녕하세요 강의를 듣던 와중에 궁금한 점이 생겨 질문 남깁니다. 실제로 그렇다면 추상 클래스와 인터페이스 중에 인터페이스를 사용하는게 이점일 것 같은데. 대부분의 경우 인터페이스로 구현되고, 추상 클래스는 사용하지 않는 것인가요 ? 백엔드 개발 시에도 인터페이스 구현을 통해서만 작성하는 것 같아 여쭤봅니다.