Skip to main content

표준 컨트롤러 사용

학습 목표

이 유닛을 완료하면 다음을 수행할 수 있습니다.

  • Visualforce 표준 컨트롤러가 무엇인지 설명하고 주요 속성을 설명할 수 있습니다.
  • Visualforce 페이지에서 표준 컨트롤러를 추가할 수 있습니다.
  • 페이지의 표준 컨트롤러에서 검색한 레코드의 데이터를 표시할 수 있습니다.
  • 점 표기법을 사용하여 관련 레코드의 필드에 액세스하는 표현식을 작성할 수 있습니다.
참고

참고

한국어로 학습하시겠어요? Trailhead playground에서 한국어로 실습 과제를 시작하고, 괄호 안에 제공된 번역을 사용해 탐색해 보세요. 영어 데이터를 기반으로 실습 과제 검증이 이루어지므로 영문으로 표시된 값만 복사해 붙여 넣습니다. 한국어 조직에서 실습 과제를 통과하지 못한 경우, (1) 로캘을 미국을 바꾸고 (2) 여기에 제시된 지침에 따라 언어를 영어로 바꾼 후 (3) "Check Challenge(과제 확인)" 버튼을 눌러 다시 진행해 보세요.

원하는 언어로 Trailhead 사용하기 뱃지를 확인해 현지화된 Trailhead 경험을 활용하는 방법에 대해 자세히 알아보세요.

Visualforce 표준 컨트롤러 소개

Visualforce는 기존의 MVC(Model-View-Controller) 패러다임을 사용하고 표준 작업 및 데이터 액세스를 처리하는 정교한 내장 컨트롤러를 포함하여 Lightning Platform 데이터베이스와 간단하고 긴밀하게 통합합니다. 이러한 내장 컨트롤러를 일반적으로 표준 컨트롤러라고 합니다.

MVC 디자인 패턴을 사용하면 기본 데이터베이스 및 논리에서 보기와 스타일을 쉽게 분리할 수 있습니다. MVC에서 보기(Visualforce 페이지)는 컨트롤러와 상호 작용하고 컨트롤러는 페이지에 기능을 제공합니다. 예를 들어 컨트롤러에는 버튼을 클릭할 경우 실행할 논리가 포함될 수 있습니다. 컨트롤러는 또한 일반적으로 모델(데이터베이스)과 상호 작용하여 보기에서 표시할 수 있는 데이터를 사용하거나 변경 사항을 데이터베이스로 다시 푸시합니다.

대부분의 표준 및 모든 사용자 정의 개체에는 개체와 연결된 데이터와 상호 작용하는 데 사용할 수 있는 표준 컨트롤러가 있으므로 컨트롤러에 대한 코드를 직접 작성할 필요가 없습니다. 표준 컨트롤러를 확장하여 새로운 기능을 추가하거나 처음부터 맞춤형 컨트롤러를 생성할 수 있습니다. 여기에서 표준 컨트롤러에 대해 알아보겠습니다.

레코드 ID를 찾아 요청 URL에 추가

요청 URL에 매개변수로 추가하여 표준 컨트롤러에 레코드의 레코드 ID를 제공합니다.

표준 컨트롤러를 사용하여 특정 레코드를 참조하려면 작업할 레코드의 레코드 식별자 또는 ID를 알아야 합니다. ID를 사용하여 데이터를 검색하고 레코드의 데이터가 변경되면 데이터베이스에 다시 저장합니다.

Visualforce 페이지가 조직의 다른 페이지와 상호 작용할 때 레코드의 식별자를 자동으로 전달할 수 있으며 Visualforce 페이지는 이를 사용하여 해당 레코드의 데이터를 조회하고 표시할 수 있습니다. 그러나 개발 중에는 페이지가 독립 실행형이므로 페이지가 데이터베이스의 레코드에서 데이터를 표시하려면 레코드 ID를 수동으로 제공해야 합니다. 이를 수행하는 가장 쉬운 방법은 요청 URL에 GET 매개변수로 추가하는 것입니다.

  1. Developer Console을 열고 File(파일) | New(새로 만들기) | Visualforce Page(Visualforce 페이지)를 클릭하여 새 Visualforce 페이지를 만듭니다. 페이지 이름에 AccountSummary를 입력합니다.
  2. 편집기에서 모든 마크업을 다음으로 바꿉니다.
    <apex:page>
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    이 마크업은 몇 가지 유용한 정보를 추가할 준비가 된 상자를 만듭니다.
  3. Preview(미리보기)를 클릭하여 변경 시 볼 수 있는 페이지 미리보기를 엽니다. 미리보기 창의 URL 필드가 보이는지 확인합니다. 몇 단계만 거치면 바로 이 문제로 돌아올 수 있습니다.
  4. 별도의 브라우저 창에서 조직의 홈 페이지로 이동한 다음 계정 탭을 선택합니다. 계정 탭이 표시되지 않으면 오른쪽 상단 모서리에 있는 애플리케이션 메뉴에서 영업을 선택하여 영업 애플리케이션으로 전환합니다.
  5. 보기 메뉴에 모든 계정이 표시되는지 확인합니다.
  6. 모든 계정 페이지에서 계정 이름을 클릭합니다.
  7. 계정 세부 사항 페이지를 로드한 경우 페이지의 URL을 확인합니다. 해당 URL https://MyDomainName.lightning.force.com/lightning/r/Account/001D000000JRBes/view와 같은 형식이 됩니다. 레코드의 식별자인 ID는 일련의 문자와 숫자입니다. 이 예에서는 001D000000JRBes입니다(그러나 여러분의 조직에서는 다를 것입니다). 조직의 모든 개체 유형에 대한 모든 레코드에서 고유합니다.
  8. 레코드 ID를 선택하고 클립보드에 복사합니다. 계정 세부 사항 페이지를 떠나기 전에 전체 페이지와 여기에 표시된 정보를 살펴보세요. [대체 텍스트: 계정 세부 사항 페이지] 단지 레코드 ID를 얻기 위한 우회가 아닙니다. 여기에서 완료하기 전에 Visualforce 코드에서 동일한 정보를 표시하는 페이지를 작성하는 방법을 알아보겠습니다.
  9. Developer Console에서 열었던 미리보기 페이지로 다시 전환합니다. 브라우저 창의 URL 필드를 클릭하고 URL 끝에 &id=를 입력한 다음 이전에 복사한 레코드 ID를 붙여넣습니다. URL은 https://MyDomainName.lightning.force.com/apex/AccountSummary?core.apexpages.request.devconsole=1&id=001D000000JRBes와 같은 형식이어야 합니다.
  10. Return 키를 눌러 새 URL에서 페이지를 로드합니다.

레코드 ID가 있는 미리보기 페이지를 로드하더라도 아직 달라 보이지 않지만 ID를 추가하면 이제 해당 레코드를 로드하고 페이지에서 사용할 수 있도록 하여 표준 컨트롤러에 도움을 요청할 수 있습니다.

Lightning Experience 컨텍스트에서 페이지를 미리 보려면 계정 세부 사항 페이지를 볼 수 있는 기본 브라우저 창으로 돌아갑니다. 계정 세부 사항 페이지에서 브라우저의 JavaScript 콘솔을 열고 다음 코드를 입력합니다. pageName을 여러분의 페이지 이름으로 변경하는 것을 잊지 마세요.

$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName"}).fire();

JavaScript의 URL 끝에 레코드 ID 매개변수를 추가하여 이러한 방식으로 레코드 ID가 있는 페이지를 미리 볼 수도 있습니다.

$A.get("e.force:navigateToURL").setParams(
    {"url": "/apex/pageName?id=00141000004jkU0AAI"}).fire();

단일 레코드의 데이터 표시

계정에 대한 표준 컨트롤러를 페이지에 추가한 다음 계정 필드를 참조하여 레코드 데이터를 표시합니다.

이전 섹션에서 방금 로드한 페이지 URL에서 다음 단계를 수행하여 계정 요약을 표시하는 페이지를 만듭니다.

  1. 페이지 마크업 시작 부분의 <apex:page>태그에 다음 속성을 추가합니다.
    standardController="Account"지금 페이지를 저장하면 이전과 마찬가지로 미리보기 페이지가 다시 로드되지만 이번에는 계정에 대한 표준 컨트롤러가 활성화됩니다. 페이지가 로드되면 표준 컨트롤러는 URL의 매개변수를 구문 분석하고 id 매개변수를 찾은 다음 해당 값을 사용하여 레코드를 검색하고 페이지에서 사용할 수 있도록 합니다. 아직 표시되지 않지만 있습니다.
  2. 페이지 본문에 다음 마크업을 추가합니다.
Name: {! Account.name }

이제 레코드가 검색되는 것을 볼 수 있습니다. URL에 추가한 레코드 ID가 있는 계정의 이름이 표시되어야 합니다.

  1. 하나의 라인을 다음 마크업이 있는 계정 이름으로 변경합니다.
    Name: {! Account.Name } <br/>
    Phone: {! Account.Phone } <br/>
    Industry: {! Account.Industry } <br/>
    Revenue: {! Account.AnnualRevenue } <br/>
    전체 코드는 다음과 같아야 합니다.
    <apex:page standardController="Account">
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
                Name: {! Account.Name } <br/>
                Phone: {! Account.Phone } <br/>
                Industry: {! Account.Industry } <br/>
                Revenue: {! Account.AnnualRevenue } <br/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    결과는 간단한 계정 요약이어야 합니다. 

간단한 계정 요약 페이지

무슨 일인가요? 표준 컨트롤러를 통해 많은 작업을 할 수 있습니다.

  1. 페이지가 로드되고 <apex:page> 구성 요소가 활성화되면 계정 개체에 대한 표준 컨트롤러가 활성화됩니다.
  2. 표준 컨트롤러는 URL에 ID 매개변수가 있음을 확인하고 일치하는 계정 레코드를 검색합니다.
  3. 표준 컨트롤러는 레코드를 가져와 페이지에서 사용할 수 있도록 변수에 넣습니다. 변수는 표준 컨트롤러의 sObject: 계정과 동일한 이름을 갖습니다. 이는 개체 변수이며 계정 sObject에서 사용할 수 있는 모든 필드를 포함합니다.
  4. 네 가지 Visualforce 표현식은 모두 계정 변수를 참조합니다. 점 표기법을 사용하여 계정 변수 내의 개별 필드에 액세스합니다. {!Account.Name }은(는) 계정 이름 등을 가져옵니다.

그런데 매출 수치는 어떻나요? 과학적 표기법으로 표시됩니다. 대신 통화로 어떻게 표시할 수 있나요?

숫자가 과학적 표기법에서 "원시" 값으로 표시되는 이유는 숫자가 표현식에 의해 직접 출력되기 때문입니다. 페이지에 원시 값을 직접 넣는 것입니다. 값의 형식을 제어하려면 구성 요소를 사용하고 구성 요소에 처리할 값을 제공해야 합니다. 구성 요소는 원시 값을 가져와 적절하게 형식을 지정한 다음 결과를 페이지에 출력합니다. 다음에 살펴보도록 하겠습니다. 여기서는 레코드 데이터에 액세스하는 데만 관심이 있습니다.

점 표기법을 사용하여 관련 레코드의 데이터를 표시합니다.

예를 들어, 계정에 대한 개체 세부 사항을 보는 동안 계정 개체에 계정 소유자라는 필드가 있고 해당 유형이 조회(사용자)임을 확인할 수 있습니다. 즉, 이 필드는 사용자 레코드와 관계가 있습니다. 계정 소유자 필드 레이블 링크를 클릭하면 해당 필드 이름이 소유자임을 알 수 있습니다.

소유자 관계는 사용자를 나타냅니다. Setup(설정)에서 Object Manager(개체 관리자) | User(사용자) | Fields & Relationships(필드 및 관계)로 이동할 경우 사용자에게 이름 필드가 있음을 알 수 있습니다. 이 정보를 사용하여 표시해 보겠습니다.

계정 이름 전에 페이지 본문에 다음 라인을 추가합니다.

Account owner: {! Account.Owner.Name } <br/>

점 표기법(Account.Owner.Name)은 레코드 간의 관계를 탐색할 수 있다는 점을 나타냅니다. Account.Owner는 계정 레코드의 소유자 필드를 나타냅니다. 끝에 있는 추가 이름은 소유자 필드가 문자열을 나타내는 단순한 필드가 아니라 다른 레코드(이 경우 조회(사용자))에 대한 관계이며 소유자 필드(사용자 레코드)의 값으로 표현되는 레코드를 가져오려는 것을 나타내고 해당 레코드에 이름 필드를 표시합니다.

추가 정보 알아보기

표준 컨트롤러는 매우 강력하며 이제 조금 알아봤습니다. 다른 곳에서 표준 컨트롤러에 대해 더 많이 알아보겠지만 다음과 같이 몇 가지 주요 사항이 있습니다.

여기에 설명된 손쉬운 데이터 액세스 외에도 표준 컨트롤러는 버튼 및 링크와 같은 표준 사용자 인터페이스 요소를 사용하여 페이지에 추가할 수 있는 생성, 편집, 저장 및 삭제와 같은 일련의 표준 작업을 제공합니다. Visualforce 입력 양식에 대해 배우고 변경 사항을 데이터베이스에 다시 저장하면 이러한 표준 작업에 대해 자세히 알아볼 수 있습니다.

개체의 페이지 레이아웃 내에 포함하거나 개체별 사용자 정의 작업으로 사용하거나 Salesforce 앱에서 모바일 카드로 사용하려는 Visualforce 페이지는 관련 개체에 대한 표준 컨트롤러를 사용해야 합니다.

계정과 같은 개체를 사용하는 대신 사용자 정의 개체를 생성하고 필드를 참조하는 방법을 알아보려면 다소 다른 절차를 따라야 합니다. Setup(설정)의 Quick Find(빠른 찾기) 상자에 Object Manager를 입력한 다음 Object Manager(개체 관리자) | <사용자 정의 개체> | Fields & Relationships(필드 및 관계)를 선택합니다. 필드를 찾아 선택합니다. API 이름은 이제 Visualforce 페이지에서 사용해야 하는 필드의 이름을 나타냅니다. 예를 들어 필드 이름이 Foo인 경우 해당 API 이름은 Foo__c이고 {!myobject__c.foo__c}과(와) 같이 해당 이름으로 참조합니다.

표준 컨트롤러만큼 강력하지만 다른 작업을 수행해야 할 경우가 있습니다. Visualforce에서는 문제가 되지 않습니다. Apex 코드를 사용하여 언제든지 교체하거나 확장할 수 있으며 고유한 컨트롤러 또는 내장 컨트롤러에 대한 확장을 작성할 수 있습니다.

리소스

Salesforce 도움말에서 Trailhead 피드백을 공유하세요.

Trailhead에 관한 여러분의 의견에 귀 기울이겠습니다. 이제 Salesforce 도움말 사이트에서 언제든지 새로운 피드백 양식을 작성할 수 있습니다.

자세히 알아보기 의견 공유하기