Sensei 기능 하이라이트: 라이브러리 범위

게시일: Jun 09, 2021
by 닉 반 하버
사례 연구

Sensei 기능 하이라이트: 라이브러리 범위

게시일: Jun 09, 2021
by 닉 반 하버
리소스 보기
리소스 보기

종속성 관리

의 범위 기능 Sensei 항상 개발자의 마음에 드는되었습니다. 레시피 응용 프로그램의 범위를 확장하거나 제한할 수 있는 기능을 갖춘 개발 팀은 조직 내의 개별 프로젝트 및 수직에 대한 사용을 사용자 지정하여 개발자가 자신의 경험을 개인화할 수 있도록 지원합니다.

그리고 당연히, 그것은의 중심에 Sensei '지속적인 혁신 프로세스. "범위"의 범위를 확장하는 혁신 브레인 스토밍 세션 동안 (예, 말장난 의도), 질문이 나왔다 : 

"나는 에 대한 조리법을 만들려고했다 ... 그러나 버전 x 이후, 프레임 워크는 기능을 더 이상 사용되지 않았습니다. 더 이상 레시피를 만드는 것이 유용할지 확실하지 않습니다. 어떻게 생각하세요?"

물론, 우리가 레시피를 만드는 것을 망설인 것은 이번이 처음이 아닙니다. 레시피는 중복 정보를 제공하는 것으로 보일 수 있지만, 관련 종속성의 제한된 수의 버전에 적용할 수 있는 무언가를 만드는 것이 중요하다고 생각합니다. 따라서 라이브러리 범위를 만들었습니다.

라이브러리 범위를 사용하면 프로젝트에 종속성이 있는지 여부를 확인하고 조건부적용할 수 있습니다. Sensei 조리법. 이를 통해 팀이 레거시 코드와 종속성을 탐색할 때 큰 유연성을 제공합니다.

많은 사용자가 일반 설정에서 이미 사용할 수 있는 라이브러리 범위를 알고 있을 수 있습니다. 그래서 당신이 물어이 무엇입니까? 검색과 마찬가지로 라이브러리 범위가 YAML에 표시될 수 있도록 했습니다. 이렇게 하면 더 나은 사용자 환경을 만들고 레시피를 만들 때 흐름을 끊지 않으며, 그렇지 않으면 일반 설정으로 이동하여 메타데이터를 업데이트하도록 해야 합니다. 이러한 범위의 더 YAML에 올 것이다 하지만 우리는 라이브러리 범위로 시작 했습니다.

그래서 우리가 예를 들어 어떻게 작동하는지에 조금 더 다이빙하자.

최대 절전 모드 -jpamodelgen에 적용 라이브러리 범위

다음 사례를 상상해 보십시오. 

일부 데이터를 쿼리할 수 있는 Spring Web REST API를 만들고자 합니다. 모범 사례에 따라 쿼리하려는 엔터티에 대한 모델을 만듭니다. 다음으로 최대 절전 모드 ORM에 종속성을 추가하여 데이터베이스 구조를 만지작할 필요가 없습니다. ORM은 우리를 위해 그것을 돌봅니다. 또한 데이터 액세스 계층(CRUD 리포지토리 등)의 데이터를 컨트롤러에 제공하는 서비스를 만들어야 합니다. 마지막으로 API에 대한 컨트롤러 클래스를 만들어 허용된 쿼리를 끝점으로 노출합니다.

쿼리할 수 있는 각 필드에 대해 서로 다른 끝점을 노출하지 않으려면 대신 JPA 2 사양을 사용하도록 선택합니다. 이렇게 하려면 요청 URL에서 컨트롤러에 사양을 만듭니다. 이 사양은 우리가 찾고있는 엔터티가 어떻게 생겼는지 설명합니다. '사양' 클래스 자체에서는 사양의 유효성을 검사하는 방법을 나타내는 'toPredicate' 방법을 구현합니다.

그러나 우리는 'toPredicate'방법의 문제에 직면하고 있습니다. 조건자 구성을 구성하려면 비교할 데이터베이스의 열 이름을 알아야 합니다. 그러나 ORM을 사용하고 있기 때문에 이러한 열이 별도의 모델에 존재하지 않습니다. 그래서, 최대 절전 모드의 JPA 2 메타 모델 발전기 () 구조에 온다! 이렇게 하면 처리하도록 요청한 엔터티에 대한 메타모델을 생성하는 데 도움이 됩니다. 이러한 메타모델은 열 이름을 하드코딩대신 속성으로 참조할 수 있습니다.

Sensei 처방

이제 메타모델이 생성되었으므로 이를 잘 활용하고 자합니다. Sensei 메타모델을 사용하도록 상기시키고 열 이름이 어디에서도 하드코딩되지 않도록 하여 프로젝트에서 작업하는 모든 사람을 도울 수 있습니다. 그래서 실천하자.

시작하려면 'toPredicate' 방법을 살펴보겠습니다.

To 술어 메서드

이 기본 조건자만 엔터티 이름을 비교합니다. 우리는 '및'절을 사용하여 확장 할 수 있지만,이 조리법의 목적을 위해,이 '간단한'검사가 할 것입니다.

레시피의 검색 구성 요소에 대해 루트 매개변수의 메서드 'get(get()'을 호출하여 드롭다운에서 '메서드call' 옵션을 선택합니다. 다음으로'javax.persistence.criteria' 패키지의 '경로' 인터페이스에서 서명이 선언된 'get'이라는 이름으로 검색을 메서드콜로 제한하려고 합니다. 메서드가 오버로드되었기 때문에 단일 문자열을 인수로 사용하는 변형에만 레시피가 적용된다는 검색에 알려야 합니다. 코드에 열 이름을 갖는 문제를 해결하려면 메타모델 생성기에서 제공하는 동일한 형식인 'SingularAttribute' 형식의 인수를 대신 사용하려고 합니다.

레시피에 대한 검색 기준 설정

지금까지 만든 레시피는 최대 절전 모드로 설정되었는지 여부에 관계없이 JPA 2 'Path' 인터페이스를 사용하는 모든 코드베이스에서 트리거됩니다. 이 라이브러리가 프로젝트에 있는 경우 사용자에게 사용해야 함을 표시하여 레시피에 라이브러리 범위를 추가합니다.

이 레시피 검색 범위 제한

그리고 마지막으로, 우리의 조리법은 이제 준비가되어 있습니다.

테스트 레시피 메서드 호출

이 레시피에서는 문자열 값을 인수로 사용하는 'Path#get'의 발생이 플래그가 지정됩니다. 위의 스크린샷에서 강조 표시된 예제 코드에서 알 수 있듯이 이 레시피는 열 이름의 문자 이름이 중간 변수에 저장될 때 계속 작동합니다.

참고 - 라이브러리 범위를 반전하여 범위에 '안 함' 절을 전제로 라이브러리를 사용할 수 없는 경우를 처리할 수도 있습니다.

결론

위의 예제에서 보았듯이 이 새로운 기능을 사용하면 프로젝트에 종속성이 있는 것을 기반으로 적용하여 보다 유용한 레시피를 만들 수 있습니다. 그 힘을 더욱 강화하기 위해, 우리는 종속성이 존재하는지 확인하는 것뿐만 아니라 종속성의 특정 버전에 조건을 적용하는 것과 같은 예제에 표시된 것보다 더 많은 옵션을 포함시켰습니다. 

이 기능에 대해 표시되는 주요 사용 사례는 레시피가 중복 정보를 제공하지 못하도록 하고 특정 버전의 종속성과 관련된 문제를 감지하는 동시에 한 종속성 버전에서 다음 종속성 버전으로 마이그레이션을 수행하는 것입니다. 이 기능에 대해 표시되는 용도에 대해 의견을 듣기를 기대합니다.

모두에 관해서는 Sensei 참조 설명서에서라이브러리 범위에 대한 자세한 정보를 사용할 수 있습니다.

리소스 보기
리소스 보기

저자

닉 반 하버

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

Sensei 기능 하이라이트: 라이브러리 범위

게시일: Jun 09, 2021
By 닉 반 하버

종속성 관리

의 범위 기능 Sensei 항상 개발자의 마음에 드는되었습니다. 레시피 응용 프로그램의 범위를 확장하거나 제한할 수 있는 기능을 갖춘 개발 팀은 조직 내의 개별 프로젝트 및 수직에 대한 사용을 사용자 지정하여 개발자가 자신의 경험을 개인화할 수 있도록 지원합니다.

그리고 당연히, 그것은의 중심에 Sensei '지속적인 혁신 프로세스. "범위"의 범위를 확장하는 혁신 브레인 스토밍 세션 동안 (예, 말장난 의도), 질문이 나왔다 : 

"나는 에 대한 조리법을 만들려고했다 ... 그러나 버전 x 이후, 프레임 워크는 기능을 더 이상 사용되지 않았습니다. 더 이상 레시피를 만드는 것이 유용할지 확실하지 않습니다. 어떻게 생각하세요?"

물론, 우리가 레시피를 만드는 것을 망설인 것은 이번이 처음이 아닙니다. 레시피는 중복 정보를 제공하는 것으로 보일 수 있지만, 관련 종속성의 제한된 수의 버전에 적용할 수 있는 무언가를 만드는 것이 중요하다고 생각합니다. 따라서 라이브러리 범위를 만들었습니다.

라이브러리 범위를 사용하면 프로젝트에 종속성이 있는지 여부를 확인하고 조건부적용할 수 있습니다. Sensei 조리법. 이를 통해 팀이 레거시 코드와 종속성을 탐색할 때 큰 유연성을 제공합니다.

많은 사용자가 일반 설정에서 이미 사용할 수 있는 라이브러리 범위를 알고 있을 수 있습니다. 그래서 당신이 물어이 무엇입니까? 검색과 마찬가지로 라이브러리 범위가 YAML에 표시될 수 있도록 했습니다. 이렇게 하면 더 나은 사용자 환경을 만들고 레시피를 만들 때 흐름을 끊지 않으며, 그렇지 않으면 일반 설정으로 이동하여 메타데이터를 업데이트하도록 해야 합니다. 이러한 범위의 더 YAML에 올 것이다 하지만 우리는 라이브러리 범위로 시작 했습니다.

그래서 우리가 예를 들어 어떻게 작동하는지에 조금 더 다이빙하자.

최대 절전 모드 -jpamodelgen에 적용 라이브러리 범위

다음 사례를 상상해 보십시오. 

일부 데이터를 쿼리할 수 있는 Spring Web REST API를 만들고자 합니다. 모범 사례에 따라 쿼리하려는 엔터티에 대한 모델을 만듭니다. 다음으로 최대 절전 모드 ORM에 종속성을 추가하여 데이터베이스 구조를 만지작할 필요가 없습니다. ORM은 우리를 위해 그것을 돌봅니다. 또한 데이터 액세스 계층(CRUD 리포지토리 등)의 데이터를 컨트롤러에 제공하는 서비스를 만들어야 합니다. 마지막으로 API에 대한 컨트롤러 클래스를 만들어 허용된 쿼리를 끝점으로 노출합니다.

쿼리할 수 있는 각 필드에 대해 서로 다른 끝점을 노출하지 않으려면 대신 JPA 2 사양을 사용하도록 선택합니다. 이렇게 하려면 요청 URL에서 컨트롤러에 사양을 만듭니다. 이 사양은 우리가 찾고있는 엔터티가 어떻게 생겼는지 설명합니다. '사양' 클래스 자체에서는 사양의 유효성을 검사하는 방법을 나타내는 'toPredicate' 방법을 구현합니다.

그러나 우리는 'toPredicate'방법의 문제에 직면하고 있습니다. 조건자 구성을 구성하려면 비교할 데이터베이스의 열 이름을 알아야 합니다. 그러나 ORM을 사용하고 있기 때문에 이러한 열이 별도의 모델에 존재하지 않습니다. 그래서, 최대 절전 모드의 JPA 2 메타 모델 발전기 () 구조에 온다! 이렇게 하면 처리하도록 요청한 엔터티에 대한 메타모델을 생성하는 데 도움이 됩니다. 이러한 메타모델은 열 이름을 하드코딩대신 속성으로 참조할 수 있습니다.

Sensei 처방

이제 메타모델이 생성되었으므로 이를 잘 활용하고 자합니다. Sensei 메타모델을 사용하도록 상기시키고 열 이름이 어디에서도 하드코딩되지 않도록 하여 프로젝트에서 작업하는 모든 사람을 도울 수 있습니다. 그래서 실천하자.

시작하려면 'toPredicate' 방법을 살펴보겠습니다.

To 술어 메서드

이 기본 조건자만 엔터티 이름을 비교합니다. 우리는 '및'절을 사용하여 확장 할 수 있지만,이 조리법의 목적을 위해,이 '간단한'검사가 할 것입니다.

레시피의 검색 구성 요소에 대해 루트 매개변수의 메서드 'get(get()'을 호출하여 드롭다운에서 '메서드call' 옵션을 선택합니다. 다음으로'javax.persistence.criteria' 패키지의 '경로' 인터페이스에서 서명이 선언된 'get'이라는 이름으로 검색을 메서드콜로 제한하려고 합니다. 메서드가 오버로드되었기 때문에 단일 문자열을 인수로 사용하는 변형에만 레시피가 적용된다는 검색에 알려야 합니다. 코드에 열 이름을 갖는 문제를 해결하려면 메타모델 생성기에서 제공하는 동일한 형식인 'SingularAttribute' 형식의 인수를 대신 사용하려고 합니다.

레시피에 대한 검색 기준 설정

지금까지 만든 레시피는 최대 절전 모드로 설정되었는지 여부에 관계없이 JPA 2 'Path' 인터페이스를 사용하는 모든 코드베이스에서 트리거됩니다. 이 라이브러리가 프로젝트에 있는 경우 사용자에게 사용해야 함을 표시하여 레시피에 라이브러리 범위를 추가합니다.

이 레시피 검색 범위 제한

그리고 마지막으로, 우리의 조리법은 이제 준비가되어 있습니다.

테스트 레시피 메서드 호출

이 레시피에서는 문자열 값을 인수로 사용하는 'Path#get'의 발생이 플래그가 지정됩니다. 위의 스크린샷에서 강조 표시된 예제 코드에서 알 수 있듯이 이 레시피는 열 이름의 문자 이름이 중간 변수에 저장될 때 계속 작동합니다.

참고 - 라이브러리 범위를 반전하여 범위에 '안 함' 절을 전제로 라이브러리를 사용할 수 없는 경우를 처리할 수도 있습니다.

결론

위의 예제에서 보았듯이 이 새로운 기능을 사용하면 프로젝트에 종속성이 있는 것을 기반으로 적용하여 보다 유용한 레시피를 만들 수 있습니다. 그 힘을 더욱 강화하기 위해, 우리는 종속성이 존재하는지 확인하는 것뿐만 아니라 종속성의 특정 버전에 조건을 적용하는 것과 같은 예제에 표시된 것보다 더 많은 옵션을 포함시켰습니다. 

이 기능에 대해 표시되는 주요 사용 사례는 레시피가 중복 정보를 제공하지 못하도록 하고 특정 버전의 종속성과 관련된 문제를 감지하는 동시에 한 종속성 버전에서 다음 종속성 버전으로 마이그레이션을 수행하는 것입니다. 이 기능에 대해 표시되는 용도에 대해 의견을 듣기를 기대합니다.

모두에 관해서는 Sensei 참조 설명서에서라이브러리 범위에 대한 자세한 정보를 사용할 수 있습니다.

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.