์ํ ์ฑ ๋๊ตฌ์ ๋ํด ์์๋ณด๊ธฐ
์ด ๋จ๊ณ์์๋ ๋๋ถ๋ถ์ ์ํ ์ฑ์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ค์ํ ๋๊ตฌ์ ๊ตฌ์ฑ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด LWC ๋ ์ํผ ์ํ ์ฑ์ ๋๊ตฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.ย
- ๋ธ๋ผ์ฐ์ ์์ github.com/trailheadapps๋ก ์ด๋ํฉ๋๋ค.
- LWC ๋ ์ํผ ์ฑ ํ์ผ์์ LWC Recipes๋ผ๋ ์ ๋ชฉ์ ํด๋ฆญํ์ฌ lwc-recipes ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
Salesforce ํ๋ก์ ํธ ๊ตฌ์ฑ
๋จผ์ , sfdx-project.json ๊ตฌ์ฑ ํ์ผ์์ Salesforce ํ๋ก์ ํธ ์ค์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.

- ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด
sfdx-project.json์ ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
{
"packageDirectories": [
{
"path": "force-app",
"default": true,
"package": "LWCRecipes",
"versionName": "Summer '23",
"versionNumber": "58.0.0.NEXT"
}
],
"namespace": "",
"sourceApiVersion": "58.0",
"sfdcLoginUrl": "https://login.salesforce.com",
"packageAliases": {
"LWCRecipes": "0Ho3t000000KywNCAS",
"LWCRecipes@57.0.0-2": "04t3t000002wSUgAAM",
"LWCRecipes@58.0.0-5": "04t3t0000037toQAAQ",
"LWCRecipes@58.0.0-6": "04t3t0000037tozAAA",
"LWCRecipes@58.0.0-7": "04t3t0000037tp9AAA",
"LWCRecipes@58.0.0-8": "04t3t0000037tpEAAQ"
}
}
-
packageDirectories๊ตฌ์ฑ์์ ์ด ์ฑ์ ๋ํด ์ ๊ธ ํด์ ๋ ํจํค์ง๋ฅผ ์ค์ ํ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํจํค์ง ์ด๋ฆ, ํจํค์ง ๋ฉํ๋ฐ์ดํฐ์ ํ์ผ ๊ฒฝ๋ก ๋ฐ ๋ฒ์ ์ ๋ณด์ ๋ํ ๊ตฌ์ฑ์ด ํฌํจ๋ฉ๋๋ค. -
sourceApiVersion๊ตฌ์ฑ๋ ์ฐธ๊ณ ํ์ธ์. ์์น์ ์ผ๋ก ์ํ ์ฑ์ ๊ตฌ์ฑ ํ์ผ๊ณผ ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ์ ๊ฑธ์ณ ํ์ฌ ์ฃผ์ ๋ฆด๋ฆฌ์ค์ API ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ฐ๋ผ์sourceApiVersion์๋ ๋ค๋ฅธ ๊ฐ์ด ํ์๋ ์ ์์ต๋๋ค. - ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก ๊ฐ๊ธฐ) ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๋ค์์ผ๋ก ์ฝ๋ ํ์ง ๋๊ตฌ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.ย
์ฝ๋ ํ์ง ๋๊ตฌ ์ค์
Salesforce ๋ช
๋ น์ค์ ํฌํจ๋ ๋๊ตฌ ์ธ์๋ Salesforce๋ npm๊ณผ ํจ๊ป ์คํ๋๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ๋ฐํ์ Salesforce ์ฝ๋์ Node.js๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ package.json์ด ์์ด npm์ผ๋ก ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ย
- ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด
package.json์ ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. - ๊ฐ๋ฐ์ ๋๊ตฌ๋ง ์ฌ์ฉํ๋ฏ๋ก
dependencies(์ข ์์ฑ)์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์. -
devDependencies๊ตฌ์ฑ์ ๋ณด๋ฉด ๋๊ตฌ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๊ณ ์๋ ํจํค์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. - Salesforce์์ ์ฌ์ฉํ๋ ๋์ ์์ค์ ํจํค์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
prettier: ์ฝ๋ ์์ ์ง์ ์ฉ -
eslint: ์ฝ๋ ๋ฆฐํ ์ฉ -
@salesforce/sfdx-lwc-jest: Lightning ์น ๊ตฌ์ฑ ์์ ํ ์คํธ๋ฅผ ์ํ Jest ํ์ฅ ๊ธฐ๋ฅ -
husky: ๋ฒ์ ๊ด๋ฆฌ์ ์ปค๋ฐํ๊ธฐ ์ ์ ์ฝ๋๋ฅผ ํ์ธํ๋ ์์ ์คํ
-
- ๋ํ
scripts๊ตฌ์ฑ์ ํน์ ๊ณตํต ๋ช ๋ น์ด๋ฅผ ์บก์ํํ์ต๋๋ค. ๊ฐ๊ฐ์ ์ฌ๋ก์์ ๋ช ๋ น์npm run์ ์ฌ์ฉํ์ฌ ์คํ๋ฉ๋๋ค. ํ ์๋ก,test:unit์คํฌ๋ฆฝํธ ํค๋ฅผ ํ์ธํด ๋ณด์ธ์. ๋ช ๋ น์ค์์npm run test:unit์ ์คํํ์ฌ Lightning ์น ๊ตฌ์ฑ ์์ ์ ๋ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋ช ๋ น์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

- ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก ๊ฐ๊ธฐ) ๋ฒํผ์ ํด๋ฆญํ์ฌ
package.json๋๋ฌ๋ณด๊ธฐ๋ฅผ ๋ง์นฉ๋๋ค.
์ด๋ฌํ ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ํ๋ก์ ํธ์ ์ค์น๋ ๋ค์ํ ๋๊ตฌ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค.ย
์ ๋ ํ ์คํธ ๊ตฌ์ฑ
๋ช ๊ฐ์ง ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Salesforce๋ Jest ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Lightning ์น ๊ตฌ์ฑ ์์ ์ ๋ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค. ์ด์ ๋ฐ๋ผ sfdx-lwc-jest๋ผ๋ LWC ์ ์ฉ ํ์ฅ ๊ธฐ๋ฅ์ ๋ง๋ค์์ต๋๋ค.ย
- ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด
jest.config.js์ ์ฝํ ์ธ ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. -
moduleNameMapperJavaScript ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ sfdx-lwc-jest์ ํจ๊ป ์ ๊ณต๋๋ ๊ธฐ๋ณธ ๋ชจํ์ ํ์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์ ์ ์๋์ด ์์ต๋๋ค.
moduleNameMapper: {
/* CSS library import fix in test context. See:
https://github.com/salesforce/sfdx-lwc-jest/issues/288) */
'^c/cssLibrary$':
'/force-app/main/default/lwc/cssLibrary/cssLibrary.css',
// Jest mocks
'^@salesforce/apex$': '/force-app/test/jest-mocks/apex',
'^@salesforce/schema$': '/force-app/test/jest-mocks/schema',
'^lightning/navigation$':
'/force-app/test/jest-mocks/lightning/navigation',
'^lightning/platformShowToastEvent$':
'/force-app/test/jest-mocks/lightning/platformShowToastEvent',
'^lightning/uiRecordApi$':
'/force-app/test/jest-mocks/lightning/uiRecordApi',
'^lightning/messageService$':
'/force-app/test/jest-mocks/lightning/messageService',
'^lightning/actions$':
'/force-app/test/jest-mocks/lightning/actions',
'^lightning/alert$':
'/force-app/test/jest-mocks/lightning/alert',
'^lightning/confirm$':
'/force-app/test/jest-mocks/lightning/confirm',
'^lightning/prompt$':
'/force-app/test/jest-mocks/lightning/prompt',
'^lightning/modal*':
'/force-app/test/jest-mocks/lightning/modal'
},
-
^lightning/navigation$ํค๋ ๋ชจํ์ ์์น๋ฅผ<rootDir>/force-app/test/jest-mocks/lightning/navigation์ผ๋ก ์ ์ํ๋ค๋ ์ ์ ์ฃผ๋ชฉํ์ธ์. GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด ๋ชจ์ JS ์ฝ๋๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค. - ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก ๊ฐ๊ธฐ) ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
- Force-app,, test/jest-mocks, lightning ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๋ชจ๋ Lightning ์น ๊ตฌ์ฑ ์์ ์๋น์ค์ ๋ชจํ์ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋งํฌ๋ฅผ ํด๋ฆญํด
navigation.jsํ์ผ ์ฝํ ์ธ ๋ฅผ ์ฝ๋๋ค. - ์ฌ๊ธฐ์์ Lightning
NavigationMixin์์ ์ ๊ณตํ๋ ๋ด๋ณด๋ด๊ธฐ๋ ํจ์ ์ผ๋ถ๊ฐ Jest ํ ์คํธ์์ ์ด๋ป๊ฒ ๋ชจ์๋ก ์ฌ์ฉ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค. - ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก) ๋ฒํผ์ ๋ค ๋ฒ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ๋์๊ฐ๋๋ค.
์๋ํ๋ ์ฝ๋ ์์ ์ง์ ๊ตฌ์ฑ
์ง๊ธ๊น์ง sfdx-lwc-jest ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์๊ณ , ์ด์ Prettier ์ฝ๋ ์์ ์ง์ ๋๊ตฌ์ ๊ตฌ์ฑ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. sfdx-lwc-jest๋ LWC๋ฅผ ํ ์คํธํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉ๋์ง๋ง, Prettier๋ ๋ค์ํ ํ์ผ์์ ์ฝ๋ ์์์ ์ง์ ํ๋ ์์ ์ ์ํํฉ๋๋ค. XML ๋ฐ Apex์ฉ ํ๋ฌ๊ทธ์ธ๋ ์ถ๊ฐํ์ต๋๋ค.ย LWC ์ ์ฉ ์์ ์ง์ ๊ท์น์ Prettier๊ณผ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋ฉ๋๋ค.
package.json์ ๋ค์ ์ดํด๋ณด๋ฉด, ๋ค์ ์ค์์ ๋ค์ํ ํ์ผ ์ ํ์ ๋ํด Prettier ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ๊ตฌ์ฑํ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.ย
"prettier": "prettier --write \"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}\""
Prettier ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ์๋ค. ๊ตฌ์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ Prettier ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.ย
- ๋งํฌ๋ฅผ ํด๋ฆญํด
.prettierrcํ์ผ์ ์ฝ๋๋ค. - ํํ ์ผํ ์ ์ฉ, ์์๋ฐ์ดํ ๋ฐ ํญ ๋๋น ํ์ฉ ๋ฑ ์ฝ๋ ์์์ ์ง์ ํ๋ ๋ฐ ์์ด์ Prettier๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฑ์ ์ ์ํฉ๋๋ค.
- ๋ํ
overrides(์ฌ์ ์) ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ง๋ค ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๊ดํธ๋ก ๋๋ฌ์ธ์ธ HTML ์์ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํดlwcํ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"trailingComma": "none",
"singleQuote": true,
"tabWidth": 4,
"overrides": [
{
"files": "**/lwc/**/*.html",
"options": { "parser": "lwc" }
},
{
"files": "*.{cmp,page,component}",
"options": { "parser": "html" }
}
]
- ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก) ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ๋์๊ฐ๋๋ค.
๋ฌด์ํ๊ธฐ
๋ง์ ๋๊ตฌ์์ ์คํ๋๋ ํ์ผ์ ๋ํ์ฌ ์์ธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Git, Prettier, ESLint ๋ฐ Salesforce CLI ๋ฑ์ ๋ชจ๋ ์ด๋ค ํ์ผ์ ๋ฌด์ํ ์ ์๋์ง ์๊ณ ์์ด์ผ ํฉ๋๋ค. ๊ตฌ์ฑ ํ์ผ ์ค ํ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.ย
Salesforce ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ผ๋ถ ์กฐ์ง(์คํฌ๋์น ์กฐ์ง)์ ์์ค๋ฅผ ์ถ์ ํ๋๋ฐ, ์ด๋ API๊ฐ ๋ก์ปฌ ๋ฐ ์กฐ์ง์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ์ถ์ ํ๋ค๋ ์๋ฏธ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ sf project deploy start ๋๋ sf project retrieve start๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ง๊ณผ ๋ก์ปฌ ํ๋ก์ ํธ ๊ฐ์ ๋๊ธฐํ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์์ ์๋์ผ๋ก ๋๊ธฐํ๋์ง ์๋๋ก ํ๋ ค๋ ๋ถ๋ถ์ .forceignore๋ผ๋ ํ์ผ์ ๊ตฌ์ฑํฉ๋๋ค.ย
-
.forceignore,.gitignore,.prettierignoreํ์ผ์ ์ฃผ๋ชฉํ์ธ์. ์ฌ๊ธฐ์๋ ๋ค์ํ ๋๊ตฌ์ ๋ํ ๋ฌด์ ๊ท์น์ด ์ ์๋์ด ์์ต๋๋ค. -
.forceignore๋ฅผ ํด๋ฆญํ์ฌ ์ปจํ ์ธ ๋ฅผ ํ์ธํฉ๋๋ค. -
.forceignore์ ์ ์๋ ํญ๋ชฉ์ SourceSync API๊ฐ ์ถ์ ํ๊ฑฐ๋ ๋๊ธฐํํ์ง ์์ต๋๋ค. - ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๋ค๋ฅธ ํญ๋ชฉ ์ค์์
settings(์ค์ ) ๋ฉํ๋ฐ์ดํฐ๋ ๋๊ธฐํํ์ง ์์ต๋๋ค. - ๋ธ๋ผ์ฐ์ ์์ Back(๋ค๋ก) ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ๋์๊ฐ๋๋ค.
GitHub ์์
์ข์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด CI/CD ํ๋ก์ธ์ค์์ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ํธ์ถํ ์๋ ์์ต๋๋ค. Salesforce์ ์ํ ์ฑ์์๋ ์ฝ๋๊ฐ ๋ณํฉ๋๊ณ ๋ถ๊ธฐ ๊ฐ์ ์ด๋ํ ๋ GitHub ์์ ์ ์ฌ์ฉํด ์ด๋ฌํ ๋๊ตฌ์ ์ฌ์ฉ์ ์๋ํํฉ๋๋ค. ์ด ํ์ผ๋ค์ด ์ด๋์ ์๋์ง ์ฐพ์๋ณด๊ณ ์์ ์ดํด๋ณธ ๋๊ตฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ๋ํ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด๋ฌํ ์์ ์ ์คํ ์ด๋ ฅ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.ย
GitHub ์์ ์ GitHub์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ผ๋ก, GitHub ๋ด์์ ์ ์ฒด CI/CD ํ๋ก์ธ์ค๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ํ์ง๋ง Salesforce ๊ฐ๋ฐ์ ๋๊ตฌ๋ CI/CD ๋๊ตฌ์ ๋ฌด๊ดํฉ๋๋ค. ์ ํธํ๋ ๋ค๋ฅธ CI/CD ๋๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์์ ํ๋ก์ ํธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด์ธ์.ย
-
.github๋ฐworkflows์ ๋๋ ํฐ๋ฆฌ ๋งํฌ๋ฅผ ํด๋ฆญํด github CI ์ํฌํ๋ก๊ฐ ์๋ YAML ํ์ผ์ ํ์ธํฉ๋๋ค. -
ci-pr.yml๋งํฌ๋ฅผ ํด๋ฆญํด ํ์ผ ์ฝํ ์ธ ๋ฅผ ํ์ธํฉ๋๋ค. - ํ์ผ์ ์ดํด๋ณด๊ณ
run:npm run prettier:verify๋ผ๋ ์ค์ ์ฐพ์ต๋๋ค. - CI ํ๋ก์ธ์ค์์ Prettier๋ ์ฝ๋๊ฐ ์ค์ ์ ์ง์ ๋ ์์ ๊ท์น์ ์ค์ํ๋์ง ํ์ธํฉ๋๋ค.
- GitHub UI ์๋จ์์ Actions(์์ ) ํญ์ ์ ํํฉ๋๋ค.

- ๋ชจ๋ GitHub ์์ ์ํฌํ๋ก ๋ชฉ๋ก์ ์ผ์ชฝ์ ์์ต๋๋ค. CI๋ฅผ ํด๋ฆญํ์ฌ ํด๋น ์ํฌํ๋ก๊ฐ ์คํ๋ ๋ชจ๋ ์๊ฐ์ ํ์ธํฉ๋๋ค.
์ง๊ธ๊น์ง lwc-recipes GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋๊ตฌ ์ค์ ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด์ ์ํ ์ฑ์์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๋๊ตฌ ๊ตฌ์ฑ์ ์ต๋ํ ๋์ผํ๊ฒ ์ ์งํ์ง๋ง, ๋ค๋ฅธ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ์ฑ๋ ์์ต๋๋ค. ์ด ํธ๋ ์ผ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์๋ฃํ์ฌ ํด๋น ์ฑ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
Salesforce์ ์คํ ์์ค์ ๋ํ ํ๋ง๋
trailheadapps github org์ ์๋ ์ํ์ Salesforce ๊ฐ๋ฐ์ ๊ด๊ณ ํ์์ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ๋ชจ๋ ์ฑ์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ฐ๋ผ ๊ตฌ์ถ๋์์ผ๋ฉฐ, ์ค์ ํ๋ก์ ํธ์์ ๊ธฐ๋ํ ์ ์๋ ์์ค์ ๋๊ตฌ ๊ธฐ๋ฅ์ ์ ๋ณด์ ๋๋ค.
์ด๋ฌํ ์ํ ์ฑ์ ์ดํด๋ณธ ๋ค์ Salesforce ํ์์ ๋ ๋ง์ ์ฝ๋๋ฅผ ์ฐพ์๋ณด๊ณ ๋ ๊น์ด ํ๊ณ ๋ค์ด ๋ณด์๊ธธ ๋ฐ๋๋๋ค. ์ฝ๋ ์ํ ๋ฐ SDK ์น ํ์ด์ง์์ ์คํ ์์ค ์ฝ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋จ๊ณ์์๋ ์ฌ๋ฌ๋ถ์ ์์ ๋ฌผ์ ํ์ธํ์ง ์์ต๋๋ค. Verify step to earn 100 points(๋จ๊ณ๋ฅผ ํ์ธํ๊ณ 100ํฌ์ธํธ ํ๋)๋ฅผ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ๋ฅผ ์๋ฃํ์ธ์.
