업적
GitLab v19.2Offering: GitLab.com, GitLab Self-Managed
The availability of this feature is controlled by a feature flag. 업적은 GitLab에서의 활동에 대해 사용자에게 보상을 주는 방법입니다. 사용자로서 다양한 프로젝트나 그룹에 대한 기여를 프로필에서 강조 표시하기 위해 업적을 수집할 수 있습니다.
히스토리
- Introduced in GitLab 15.10 with a feature flag named
achievements. Disabled by default. - Enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated in GitLab 19.2.
The availability of this feature is controlled by a feature flag. For more information, see the history.
업적은 GitLab에서의 활동에 대해 사용자에게 보상을 주는 방법입니다. 네임스페이스 유지 관리자 또는 소유자로서 특정 기여에 대한 사용자 정의 업적을 만들 수 있습니다. 정의된 기준에 따라 사용자에게 이 업적을 수여하거나 취소할 수 있습니다.
사용자로서 다양한 프로젝트나 그룹에 대한 기여를 프로필에서 강조 표시하기 위해 업적을 수집할 수 있습니다. 업적은 이름, 설명, 아바타로 구성됩니다.
업적은 사용자 소유로 간주됩니다. 업적을 생성한 네임스페이스의 공개 설정에 관계없이 표시됩니다.
계획된 작업에 대한 자세한 내용은 에픽 9429를 참조하세요. 에픽에 댓글을 남겨 사용 사례를 알려주세요.
업적 유형#
프로그래밍 방식으로는 업적을 생성, 수여, 취소 또는 삭제하는 방법이 하나뿐입니다.
실질적으로는 다음과 같이 수여되는 업적을 구분할 수 있습니다:
-
한 번이고 취소 불가능한 경우. 예를 들어 "첫 번째 기여 병합" 업적.
-
한 번이고 취소 가능한 경우. 예를 들어 "핵심 팀원" 업적.
-
여러 번. 예를 들어 "이달의 기여자" 업적.
그룹 업적 보기#
그룹에서 사용 가능하고 수여된 모든 업적을 보려면:
https://gitlab.com/groups/<group-path>/-/achievements로 이동합니다.
페이지에는 업적 목록과 해당 업적을 받은 구성원이 표시됩니다.
사용자 업적 보기#
사용자의 프로필 페이지에서 해당 사용자의 업적을 볼 수 있습니다.
사전 요구 사항:
- 사용자 프로필이 공개여야 합니다.
사용자의 업적을 보려면:
-
사용자의 프로필 페이지로 이동합니다.
-
사용자의 아바타 아래에서 업적을 확인합니다.
-
업적에 대한 세부 정보를 보려면 해당 업적 위에 마우스를 올립니다. 다음 정보가 표시됩니다:
업적의 이름
-
업적의 설명
-
사용자에게 업적이 수여된 날짜
-
사용자가 네임스페이스의 구성원이거나 네임스페이스가 공개인 경우 업적을 수여한 네임스페이스
-
사용자의 업적 목록을 가져오려면 user GraphQL 유형을 쿼리합니다.
User.userAchievements 필드는 선택적 includeHidden 파라미터를 허용합니다. true로 설정하면
응답에 프로필에서 숨겨진 업적이 포함됩니다. 숨겨진 업적은 다음 경우에만 포함됩니다:
-
요청하는 사용자가 요청된 사용자와 동일한 경우.
-
요청하는 사용자가 업적이 속한 그룹에서 Maintainer 또는 Owner 권한을 가진 경우.
query {
user(username: "<username>") {
userAchievements(includeHidden: true) {
nodes {
achievement {
name
description
avatarUrl
namespace {
fullPath
name
}
}
}
}
}
}
업적 만들기#
특정 기여에 수여할 사용자 정의 업적을 만들 수 있습니다.
사전 요구 사항:
- 네임스페이스에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
업적을 만들려면:
-
UI에서:
업적 페이지에서 New achievement를 선택합니다.
-
업적의 이름을 입력합니다.
-
선택 사항. 설명을 입력하고 업적의 아바타를 업로드합니다.
-
Save changes를 선택합니다.
-
-
GraphQL API를 사용하여
achievementsCreateGraphQL 뮤테이션을 호출합니다:mutation achievementsCreate($file: Upload!) { achievementsCreate( input: { namespaceId: "gid://gitlab/Namespace/<namespace id>", name: "<name>", description: "<description>", avatar: $file} ) { errors achievement { id name description avatarUrl } } }아바타 파일을 제공하려면
curl을 사용하여 뮤테이션을 호출합니다:curl "https://gitlab.com/api/graphql" \ -H "Authorization: Bearer <your-pat-token>" \ -H "Content-Type: multipart/form-data" \ -F operations='{ "query": "mutation ($file: Upload!) { achievementsCreate(input: { namespaceId: \"gid://gitlab/Namespace/<namespace-id>\", name: \"<name>\", description: \"<description>\", avatar: $file }) { achievement { id name description avatarUrl } } }", "variables": { "file": null } }' \ -F map='{ "0": ["variables.file"] }' \ -F 0='@/path/to/your/file.jpg'성공하면 응답에 업적 ID가 반환됩니다:
{"data":{"achievementsCreate":{"achievement":{"id":"gid://gitlab/Achievements::Achievement/1","name":"<name>","description":"<description>","avatarUrl":"https://gitlab.com/uploads/-/system/achievements/achievement/avatar/1/file.jpg"}}}}
업적 업데이트#
언제든지 업적의 이름, 설명, 아바타를 변경할 수 있습니다.
사전 요구 사항:
- 네임스페이스에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
업적을 업데이트하려면 achievementsUpdate GraphQL 뮤테이션을 호출합니다.
mutation achievementsUpdate($file: Upload!) {
achievementsUpdate(
input: {
achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
name: "<new name>",
description: "<new description>",
avatar: $file}
) {
errors
achievement {
id
name
description
avatarUrl
}
}
}
업적 수여#
히스토리
- 수신자 승인 기능이 GitLab 19.0에서 도입됨.
사용자에게 업적을 수여하여 그들의 기여를 인정할 수 있습니다. 사용자에게 업적을 수여하면 해당 사용자는 업적을 수락할 수 있는 링크가 포함된 이메일 알림을 받습니다. 업적은 사용자가 수락할 때까지 프로필에 표시되지 않습니다.
수락 링크는 30일 동안 유효합니다. 그 기간이 지난 후에는
userAchievementsUpdate GraphQL 뮤테이션을 호출하여 업적을 수락할 수 있습니다.
사전 요구 사항:
- 네임스페이스에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
사용자에게 업적을 수여하려면 achievementsAward GraphQL 뮤테이션을 호출합니다.
mutation {
achievementsAward(input: {
achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
userId: "gid://gitlab/User/<user id>" }) {
userAchievement {
id
achievement {
id
name
}
user {
id
username
}
}
errors
}
}
업적 취소#
사용자가 수여 기준을 더 이상 충족하지 않는다고 판단되면 해당 사용자의 업적을 취소할 수 있습니다.
사전 요구 사항:
- 네임스페이스에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
업적을 취소하려면 achievementsRevoke GraphQL 뮤테이션을 호출합니다.
mutation {
achievementsRevoke(input: {
userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
userAchievement {
id
achievement {
id
name
}
user {
id
username
}
revokedAt
}
errors
}
}
수여된 업적 삭제#
실수로 사용자에게 업적을 수여한 경우 삭제할 수 있습니다.
사전 요구 사항:
- 네임스페이스에 대한 Owner 권한이 있어야 합니다.
수여된 업적을 삭제하려면 userAchievementsDelete GraphQL 뮤테이션을 호출합니다.
mutation {
userAchievementsDelete(input: {
userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
userAchievement {
id
achievement {
id
name
}
user {
id
username
}
}
errors
}
}
업적 삭제#
업적이 더 이상 필요하지 않다고 판단되면 삭제할 수 있습니다. 이렇게 하면 업적의 모든 관련 수여 및 취소된 인스턴스가 삭제됩니다.
사전 요구 사항:
- 네임스페이스에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
업적을 삭제하려면 achievementsDelete GraphQL 뮤테이션을 호출합니다.
mutation {
achievementsDelete(input: {
achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>" }) {
achievement {
id
name
}
errors
}
}
업적 숨기기#
프로필에 업적을 표시하지 않으려면 거부할 수 있습니다. 이렇게 하려면:
-
오른쪽 상단에서 아바타를 선택합니다.
-
Edit profile을 선택합니다.
-
Main settings 섹션에서 Display achievements on your profile 체크박스를 선택 취소합니다.
-
Update profile settings를 선택합니다.
특정 업적의 공개 여부 변경#
히스토리
- Introduced in GitLab 17.3.
프로필에 모든 업적을 표시하고 싶지 않은 경우 특정 업적의 공개 여부를 변경할 수 있습니다.
업적 중 하나를 숨기려면 userAchievementsUpdate GraphQL 뮤테이션을 호출합니다.
mutation {
userAchievementsUpdate(input: {
userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>"
showOnProfile: false
}) {
userAchievement {
id
showOnProfile
}
errors
}
}
업적 중 하나를 다시 표시하려면 showOnProfile 인수에 true 값을 사용하여 동일한 뮤테이션을 호출합니다.
업적 순서 변경#
기본적으로 프로필의 업적은 수여 날짜 오름차순으로 표시됩니다.
업적의 순서를 변경하려면 우선순위가 지정된 모든 업적의 정렬된 목록과 함께 userAchievementPrioritiesUpdate GraphQL 뮤테이션을 호출합니다.
mutation {
userAchievementPrioritiesUpdate(input: {
userAchievementIds: ["gid://gitlab/Achievements::UserAchievement/<first user achievement id>", "gid://gitlab/Achievements::UserAchievement/<second user achievement id>"],
}) {
userAchievements {
id
priority
}
errors
}
}
