안녕하세요! 강의 도중 궁금한 점이 생겨 질문드립니다. form의 입력값들을 객체에 세팅할 때 setter를 쓰는걸로 알고있습니다! 아래 코드 처럼요 < input type ="text" th :field =" *{ name } "> -> memberForm.setName(input의 입력값); 영한님이 setter를 열어두는 것은 위험하다고 하셨는데 form 태그에 들어가는 정보와 관련된 필드를 가진 객체를 사용할 때는 setter를 반드시 열어둬야 하는건가요? MemberForm의 @Setter를 지우고 실행하면 form 필드의 값이 전부 null이 찍힙니다!
강의 중 나오는 선언 태그 내 system.out.println~ 구문에서 에러가 발생합니다. page 지시어로 java.lang.* 을 추가했는데도 실행이 안되네요 ㅠㅠ 왜 이럴까요.. Type Exception Report Message JSP를 위한 클래스를 컴파일할 수 없습니다.: Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.apache.jasper.JasperException: JSP를 위한 클래스를 컴파일할 수 없습니다.: JSP 파일 [/jspEx.jsp]의 [22] 행에서 오류가 발생했습니다. System.out cannot be resolved to a type 19: ArrayList<String> list = new ArrayList<String>(); 20: 21: public void jspMethod() { 22: System.out.println("-- jspMethod() --"); 23: } 24: %> 25:
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Q1. IDENTITY 전략에서만 예외적으로, persist() 호출 직후 바로 insert 쿼리가 전달되어, DB에 데이터가 저장된다고 설명해주셨는데요, 이때 DB에 저장한 직후 동시에 그 DB에 넣은 Entity를 영속성 컨텍스트의 1차 캐시에도 넣고, insert 시DB에 생성된 PK를 가져와서 영속성 컨텍스트 안에 해당 Entity를 관리하는데 사용하는게 맞을 까요 ? Q2. ppt 32p 를 보면 allocaitonSize 속성 부분에서 "데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다" 라고 나와있는데요, 수업 내용과 같이 이 allocationSize 값 만큼 한번에 DB에 id를 할당하기 때문에 , DB에 할당되어야 할 id값을 1나씩 증가하도록 설정해야 하는 상황이라면, 이 값을 1로 설정해야 한다 라고 이해하였습니다. 그런데 ppt에 나온것과 같이 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정해야 하는 특별한 상황이 따로 있는지 궁금합니다.
자주 쓰이고, 오타가 날법한 String 을 모아 아래 처럼 상수화 했습니다. 상수패키지 com.studyolle.core.constant.* 이후 Controller , Test 등에서 아래와 같이 사용중입니다. 질문입니다 Enum 으로 관리 하려고 했지만, 컨트롤러-핸들러 의 @GetMapping( Enum.URI.name() ) 과같은 선언도 불가능 하고, 단순 값 참조를 Enum .name() 이라던지, Enum .custom() 과 같이 덕지덕지 메서드가 붙게되어, 심플하게 하고자, Enum 은 사용하지 않았습니다. 그러나 이렇게 static final 필드 로 관리하다보면, 언젠가 양이 많아 질탠데, 이럴 경우는 또다시 나누어야 될거라 생각이 듭니다만.. 이런 일반적인 방식 보다 효과적으로 관리하는 ( Map 을 쓴다던지, 특정 패턴이라던지) 방법이 있을까요? 상수 관리는 이런 방향이 괜찮았다.. 라는 사례가 궁금합니다. 읽어주셔서 감사합니다.
안녕하세요. 맨 마지막에 플러시 정리해주실 때 설명이 헷갈려서 질문드립니다. 플러시는 트랜잭션 단위로 동작하기 때문에 '커밋 직전'에만 변경 내역을 DB에 날려주면 된다고 하셨는데요, 앞서 배운 그림 자료는 commit() 호출 -> flush() 호출 -> 쿼리가 날아감 인 것 같은데 커밋 직전에 변경 내역을 날린다는 게 무슨 의미인지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 주문 목록 검색 요청을 처리하는 OrderController의 orderList() 메서드 관련 질문이 있습니다. 제가 findOrders()내부 findAllByString() 로직을 이해한게 아니여서, orderList()메소드가 이런식으로 동작하는게 맞는지 궁금합니다. 이 메소드는 다음의 3가지 상황에 의해 호출 될 것 같은데요, 1. 상품 주문 화면에서 상품 주문 후, 주문을 처리하는 order() 메소드에 의한 리다이렉션 요청을 받을 때 2. 홈 화면에서 순수하게 주문 내역을 클릭하였을 때 3. 주문 내역 화면에서, 회원명 or 주문상태를 조건으로 하여 검색할 때 그래서 상황 1,2와 같은 경우에는 모든 주문 내역을 다 보여주고, 상황 3의 경우에는 조건에 따른 주문내역만을 보여주도록 동작해야 할 것 같습니다. 이때 실제 코드에서는 OrderService의 findOrders() 메소드 호출만으로 위 3가지 상황을 모두 커버하고 있는데요, 그렇게 되면 () 상황 1,2의 경우에는 orderList()의 @ModelAttribute orderSearch에 null이 대입되어 모든 주문 내역이 다 조회되는 것 같습니다. 그리고 상황 3의 경우에는 선택한 조건에 따른 orderSearch 객체가 form태그에 의해 요청파라미터로 념겨져와서, orderList()의 파라미터 중 orderSearch가 받아 조건에 따른 주문 내역이 조회되는 것 같은데, 제가 맞게 이해한건지 궁금합니다. 그리고 특히 상황 3의 경우 선택한 회원명or주문상태에 따른 orderSearch객체를, form태그가 생성하여 보내주는 것이 맞는지 궁금합니다. 긴 질문 읽어주셔서 감사합니다!
안녕하세요 강사님! 이번 강의에서 addStock함수와 removeStock 함수를 entity에 작성하셨는데요. 응집력 측면에서 해당하는 entity에 함수에 관련된 로직들을 넣는 건 이해했습니다. 여기서 궁금한건 테스트 코드인데요 저렇게 entity에 로직이 들어가면 해당 로직도 테스트 코드를 작성해야 할거 같거든요. 일반적으로 서비스에 비지니스 로직을 넣고 여러 함수들이 생기면 테스트클래스를 작성해서(ex. SampleService -> SampleServiceTest) 각 함수들을 테스트하는 테스트 코드를 짜는데요. 단위테스트를 할 때 외부 디펜던시(ex. db 등)를 끊고 해당 기능만 테스트 하는게 좋다고 배웠습니다. 그럼 Service에 있는 함수는 함수대로 테스트하고, 엔티티에 있는 함수들은 그거대로 또 따로 테스트를 작성해야 할 거 같은데 현업에서는 엔티티도 테스트를 작성하는 건가요? 아래처럼요 public class ItemTest { @Test public void removeStockTest() { //given //when itemEntity.removeStockTest() //then } }
안녕하세요. 학습내용을 복습하던중 질문이 있습니다. <p>DelegatingFilterProxy</p> 와 <p>FilterChainProxy</p> 의 요청 처리 흐름을 <p>DispatcherServlet</p>을 포함하여 설명하는 그림에서 질문이 있습니다. <p>FilterChainProxy</p>가 직접 <p>DispatcherServlet</p>에 요청을 하는 것이 맞나요? 제 생각에는 첨부한 그림과 같은 실행 순서가 되야 할 것 같습니다. <p>FilterChainProxy</p>가 인증 인가 처리를 마친 후 직접 <p>DispatcherServlet</p>에 요청을 날리게 되면 <p>Servlet Container</p>의 필터 Filter 체인 실행에 문제가 있을 것 같습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원 이메일을 사용하여 MemberRepository에서 회원 정보를 조회하는 메서드를 구현해 보았습니다. 해당 이메일의 회원이 DB에 존재하지 않을경우를 고려하여 다음과 같이 Optional로 감싸주었습니다. Transactional(readOnly = true) public interface MemberRepository extends JpaRepository<Member, Long> { Optional<Member> findByEmail(String email); ... } 이 경우 Service 단에서 해당 메서드를 사용할 경우 변수 타입을 Optional<Member>로 선언해 줘야 했습니다. @Transactional public void followFriend(FollowFriendRequest request) { Member requester = getMember(request.getRequesterEmail()); Optional<Member> receiver = memberRepository.findByEmail(request.getReceiverEmail()); log.info("requester: '{}', receiver: '{}'", requester, receiver); if (receiver == null) { throw new MemberEmailNotFound(); } if (requester.hasFriend(receiver) || relationRepository.existsByOwnerEmailAndFriendEmail(request.getRequesterEmail(), request.getReceiverEmail())) { throw new EmailDuplicatedException(request.getReceiverEmail()); } relationRepository.save(new Relation(requester, receiver)); } 이러면 위 코드 마지막 줄의 Relation 생성자 또한 Optional을 포함한 생성자를 추가로 만들어 줘야 하고 이렇게 되면 Relation 엔티티의 receiver 필드값에도 Optional을 씌워줘야 하는 문제가 발생했습니다. 이 경우 Optional을 어떻게 사용하는게 옳은건지 궁금합니다.
안녕하세요! 강의 너무나 잘 듣고 있습니다. public class Settings { private Settings() { } private static class SettingsHolder { private static final Settings INSTANCE = new Settings(); } public static Settings getInstance() { return SettingsHolder.INSTANCE; } } 로드 시점에 관한 질문입니다. getInstance가 호출 될때 SettingsHolder가 JVM에 로드된다고 말씀하셨습니다. 자바는 잘 모르지만, 동적으로 로드가 된다고 해석했습니다. public class Settings { private static final Settings INSTANCE = new Settings(); private Settings() { } public static Settings getInstance() { return INSTANCE; } } 그렇다면 이른 초기화 방식도, 마치 SettingsHolder가 그러하듯, 필요로 할 때 동적으로 로드 될 순 없나요? 필요로 할 때 로드된다면 SettingsHolder를 필요로 하지 않을 테니 말이죠. 그럼에도 불구하고 static inner class를 사용하는 건 반드시 이유가 있을 테니.. 하여 제 나름대로 찾아보고 테스트해 본 결과 자바 파일에 정의된 기본 클래스들은 실행 시 로드됨을 확인했습니다. 모든 클래스가 실행 시 로드되는진 확실하진 않지만 이와 관련된 JVM의 로드 정책에 대해서 간략하게 설명 부탁드립니다. :)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 군인 신분으로 사지방 특성상 차단되어 있는 기능이 좀 있는데 h2.bat이나 윈도우창의 h2 콘솔 모두 켜지지 않는데 이러면 방법이 없는건가요?
안녕하세요! 일대다 패치조인을 진행하게 될시에, 다쪽의 갯수에 맞추어서 데이터가 뻥튀기, 즉 일쪽이 뻥튀기 된다는 사실을 인지하고 있습니다. 위 코드의 진행과정을 알고싶은데요, 위 처럼 일대다 페치 조인으로 데이터가 뻥튀긴 테이블이 완성되고 -> 뻥튀기 된 데이터들이 애플리케이션(메모리)에 올라가고 -> 거기에서 jpa가 이제 List<Order>에 담는것이 맞을까요? 이게 만약 맞다면, 일대다 패치조인시 페이징할때의 위험성과 같이 저것도 다 메모리에 올라가는 상황이 아닌가요?!, 아니면 제가 메모리의 개념을 잘 이해 못하고 있는지.. 답답하네요 ㅠ