Test의 이름을 가진
contact의 정보를 받고싶지 않는
상황을 가정해 봅시다
이는 누군가 애플리케이션을
테스트하고 있다는 뜻이고
해당 데이터를
데이터베이스 속에 입력하고 싶지 않다는 뜻입니다
이러한 상황에서는
@PreFilter 주석을 활용할 수 있습니다
그리고 누군가 Test 이름의 contact를 보내려 한다면
해당 정보는 처리하거나
데이터베이스에
저장하지 않습니다
이를 구현하기 위해서는
ContactController 클래스를 열어야 합니다
해당 클래스 안에는
saveContactInquiryDetails라는 메소드가 있습니다
이 메소드 위에는
@PreFilter 주석을
사용합니다
저의 요구사항은
누군가 test이라는 이름으로
contact 객체를 보내오면
해당 정보는 처리하고 싶지 않습니다
즉 test라는 이름을 갖지 않은
contact 객체만
받고 싶은 것입니다
이렇기 때문에 이 부정 조건을 여기 넣은 것입니다
그리고 어떤 기반으로 해당 contact 이름을 사용하는 것이냐면
Contact 객체를 열면
contactName라는 매개변수가 있습니다
이는 UI 애플리케이션에서 오는
이름 필드를 갖고 있습니다
그리고 여기서 아주 중요한
변화를 만들 것입니다
이 @PreFilter를 활용하여
이는 컬렉션 이너페이스 유형이라면
입력에 필터링 기준과
권한 기준을 시행할 수 있습니다
해당 입력을 contact 객체 목록으로
변환해야 하는 이유입니다
그리고 매개변수 역시
contact로 바꾸겠습니다
입력을 Contact 객체 목록으로
하려는 이 변화로
우리는 메소드 속 비즈니스 로직을 변경해야 하는 것입니다
변경하겠습니다
우선
해당 목록 안에 처음으로 있는
contact를 얻으려 해보겠습니다
그리고 그 안에
무작위의 서비스 요청 번호를 생성하여
Contact ID에 지정합니다
여기 CreateDt (생성 날짜)를 채우고
save 메소드를 ContactRepository
인터페이스로 보냅니다
그리고 저장된 contact 객체는 save 메소드
실행 후 보내져 옵니다
결국 작성된 형태를 contact 목록
유형으로도
보내려 하는 것입니다
왜냐하면 다음 수업에서
PostAuthorize를
활용하려 할 때
이 리턴 유형을 contact 목록을
변경하기 때문입니다
따라서 자체적으로 바뀌게끔 하려 하는 것입니다
해당 방법으로
입력은 contact 목록이고
출력도 contact 목록입니다
따라서 입력 유형, 작성 유형 모두
컬렉션 인터페이스 유형임을 확인해야 합니다
물론 이런 상황에서는 목록 속에 있는
contact 객체 하나만
받게 됩니다
하지만 실제 상황에서
이를 적용할 때
메소드에 수백개를 받게 되어
전부 처리하고 싶지 않는
경우가 생길 수 있습니다
특정 필터링 조건을 기반으로
몇 개만 처리하고 싶을 수도 있습니다
따라서 이러한 상황에서는
이런 기능들이 큰 도움이 됩니다
이러한
변화들로
여기에 중단점을 두고
bill을 할 수 있습니다
이제 해당 변화들을 테스트하기 위해
UI 애플리케이션으로 다시 가겠습니다
여기 데이터를 바로 작성하면
이게 잘 된다고 느껴지십니까?
물론 아닙니다
현재로서 이유는
UI 애플리케이션에서 데이터를
목록이 아닌
단독 객체로 보내고 있기 때문입니다
따라서 UI 애플리케이션 안에 이러한 변경 사항들을
빠르게 적용해 봅시다
dashboardservice.ts 파일을 우선 열고
해당 파일 내에는
현재로서
saveMessage 메소드를 호출하기 위해
타이핑을 하면
이는 내부적으로 백엔드 요청을 만들 것입니다
현재로서는 요청을
contact 객체 단독으로 보내고 있습니다
하지만 지금은 요청을 contact
객체 목록으로 보내야 합니다
그렇기에 이러한 변경 사항을 적용해야 합니다
우선
먼저
빈 목록을 생성하고
이름을 contacts로 설정합니다
그리고 난 후 html 형식으로 받은
contact 객체를
이 목록에 더해줍니다
이제 이 post 메소드로
입력을 보내줍니다
이렇게 하면 UI 애플리케이션에서 보내는
데이터는 괜찮을 것입니다
하지만 우리는 Contact 목록도 허용할 수 있어야 합니다
contactcomponent.ts를 열고
안에 보시다시피
현재로서 그냥 saveMessage 메소드를 호출하고 있습니다
이후에는 contact 객체를
단독으로 받을 때 늘 작성된 형식으로 받을 것이라고
추정할 수 있습니다
그렇기 때문에 바디를 가져와서
contact 유형인
이 모델 객체에 지정하려는 것입니다
하지만 이는 작동하지 않습니다
왜냐하면 지금은 contact 객체
목록이기 때문입니다
그렇기 때문에 여기도
특정 변경 사항들을 적용하려 하는 것입니다
가장 우선적으로 진행할 변화는
바디에서의 데이터를 읽는 것입니다
그리고 해당 데이터를 바디에서 읽을 때
Contacts 객체 안에 이것을 저장할 것입니다
현재로서는 클래스 안으로
선언된 contact 객체가 없어서
컴파일 에러가 뜨는 것입니다
여기서 할 수 있는 일은
이런 코드와 같은 contact의 도움으로
새로운 Array와 동일한 Array 유형의
매개변수 contact를 생성할 수 있습니다
이러한 변경 사항이 적용되면
컴파일 에러가 해결 됩니다
현재는 받은 모든 데이터는
해당 contacts array속에서 찾을 수 있습니다
다음 단계로는
첫 요소를 해당 Contacts array에서 가져온 후
이 모델 객체에
지정해야 합니다
이를 위해 각 루프에 있는
해당 줄에 있는 코드를
삭제합니다
이렇게 하면 해당 루프에
Contacts array 속 가능한
요소들을 반복해 줍니다
그 다음에 contact 요소를
이 모델 객체에 지정하고
이 모델 객체를 클래스에 바인딩 합니다
그래서 .bind(this).를 이용합니다
이러한 변경 사항으로
해결할 수 있습니다
해당 변화들을 저장 후
UI 애플리케이션으로 가겠습니다
첫번째로 tutor@eazybytes.com, 샘플 메시지, 자세한 메시지와 같이
괜찮은 데이터를
작성해 보겠습니다
이것이 제출하고자 하는
입력입니다
Send Message를 클릭하면
이 메소드 내에 실행을 멈출 것입니다
보시다시피
contact 목록은 요구 사항을 충족하는
딱 한개의 contact 객체만 갖고 있습니다
이는 Eazy Bytes 는 test와 같지 않습니다
그렇기 때문에 이는 메소드를 만족 시키는 것입니다
이게 입력입니다
UI 애플리케이션 속
중단점을 해제하면
메시지가 제출되고
이는 백엔드 로직에서 생성된
서비스 요청 숫자입니다
이제 해당 페이지를
새로고침 하겠습니다
이제 Test라는 이름의
데이터를 제출합니다
이메일, 내용, 메시지는
필터링 기준이 따로 없기 때문에
아무거나 작성해도
됩니다
우리는 이름 기반으로만
검증하는 것입니다
따라서 이름은 test입니다
Send Message를
클릭하면 이번에는
Contacts 목록 사이즈가 0이 됩니다
PreFilter 기준을 기반으로
UI에서 받은 객체는
필터링 되었기 때문입니다
따라서 test로 이름이 된 contact는
걸러지는 것입니다
메소드는 test라는 이름이 아닌
객체만 받게 됩니다
이것이 필터링 기준입니다
그렇기 때문에
현재는 여기가
비어있습니다
이것을 시행하면
분명 null point Exception을 받을 것입니다
여기에 있는 null check을 아직
해결하지 않았기 때문입니다 하지만 괜찮습니다
이제 PreFilter 기준의 목적에 대해
명확히 이해 하셨길 바랍니다
이제 개발자 콘솔을 열어보면
500 에러가 떴음을 알 수 있습니다
왜냐하면 뒤에서는
null point Exception을 받았기 때문입니다
해당 내용은 PreFilter 주석의 기능입니다
다음 강의에서는 PostFilter 주석에 대해서도
살펴봅시다
그럼 다음 강의에서 뵙겠습니다
감사합니다