대상
고친 사람 github-actions[bot]
대상은 어떤 작업이 향하는 쪽을 가리키는 이름입니다. 데이터를 옮기는 일에서는 데이터가 들어가 쌓이는 쪽을 대상이라고 부릅니다. 감시하는 일에서는 값을 재러 가는 쪽을 대상이라고 부릅니다. 가리키는 물건은 일마다 달라지고, 도구는 그 물건을 설정에 이름으로 적어 둡니다.
쉽고 빠른 이해
대상은 작업이 향하는 쪽에 붙이는 이름입니다. 주문 데이터를 밤마다 분석용 저장소로 옮긴다면 그 분석용 저장소가 대상입니다.
상대를 코드에 박아 두면 상대가 늘 때마다 코드를 고쳐야 합니다. 상대를 이름 붙은 설정으로 떼어 두면 같은 절차에 대상만 갈아 끼울 수 있습니다.
도는 모양은 셋입니다.
- 대상마다 이름과 주소와 들어갈 때 쓸 정보를 설정에 적어 둡니다
- 작업은 대상 이름을 받아 그 설정을 찾아 씁니다
- 대상이 늘면 설정에 한 줄을 더합니다
대가가 있습니다. 대상마다 형편이 달라서 한쪽에서만 실패하는 일이 생깁니다. 어디까지 갔는지를 대상마다 따로 기억해 두어야 합니다.
상세
경기 일정표에는 오늘 우리 팀이 어느 팀과 붙는지가 적혀 있습니다. 상대팀이라는 이름은 우리 팀이 정해져야 붙습니다. 공을 그쪽으로 보내든 그쪽에서 오는 공을 받든, 그 팀을 부르는 이름은 내내 상대팀입니다.
대상은 어떤 작업이 향하는 쪽을 가리키는 역할 이름입니다. 작업이 정해지면 그 작업이 다루는 상대가 생기고, 그 상대를 대상이라고 부릅니다. 주문 데이터를 분석용 저장소로 옮기는 작업에서는 그 분석용 저장소가 대상입니다.
대상은 혼자 서지 않습니다. 언제나 반대편 역할과 짝을 이룹니다. 데이터를 옮기는 일에서 데이터를 내주는 쪽은 원천이라고 부르고, 권한을 다루는 일에서 권한을 행사하는 쪽은 주체라고 부릅니다. 대상이라는 말이 무엇을 가리키는지는 그 반대편이 무엇인지를 보면 정해집니다.
이 절은 먼저 대상이 설정에 어떻게 적히는지 봅니다. 이어서 데이터를 옮길 때와 감시할 때와 접근을 막을 때의 대상을 차례로 봅니다. 끝으로 대상이 많아지면 무엇이 어려워지는지 봅니다.
설정에 적어 두는 항목
상대를 코드 안에 박아 두면 상대가 늘 때마다 코드를 고치고 다시 배포해야 합니다. 그래서 대상은 코드가 아니라 설정에 적어 두는 항목으로 둡니다. 대상 하나를 적으려면 대개 넷이 필요합니다.
표의 넷은 대상마다 값이 다르고, 절차 자체는 대상이 바뀌어도 같습니다. 그래서 이 넷을 설정으로 떼어 둡니다. 새 대상이 생기면 설정에 한 줄을 더하고 코드는 손대지 않습니다.
여러 대상을 한 곳에 모아 적은 목록을 대상 목록이라고 부릅니다. 작업은 이 목록을 읽어 한 대상씩 차례로 돌거나 여러 대상을 동시에 처리합니다.
데이터를 옮길 때
파이프라인은 한쪽에서 데이터를 읽어 다른 쪽에 씁니다. 읽는 쪽이 원천이고 쓰는 쪽이 대상입니다. 데이터를 대상에 써 넣는 일을 적재라고 부릅니다.
원천과 대상은 대개 담는 모양이 다릅니다. 주문을 고치기 좋게 나눠 둔 표와 분석을 빨리 하려고 열별로 모아 둔 저장소는 같은 데이터를 다르게 담습니다. 그래서 중간에 모양을 맞추는 변환이 붙습니다.
옮기는 일은 한 번으로 끝나지 않고 되풀이됩니다. 같은 데이터를 두 번 실어 보내면 대상에 같은 행이 두 벌 남습니다. 그래서 대상에 쓰는 일은 여러 번 해도 결과가 같도록 만듭니다. 이 성질을 멱등성이라고 부릅니다.
감시할 때
모니터링 도구는 정해 둔 곳을 돌며 값을 읽습니다. 값을 읽으러 가는 그 곳이 감시 대상입니다. 서버 한 대, 실행 중인 프로그램 하나인 프로세스, 밖에서 불러 보는 주소 하나가 각각 대상이 됩니다.
이 맥락에서 대상은 데이터를 받는 쪽이 아니라 데이터를 내주는 쪽입니다. 같은 낱말인데 데이터가 흐르는 방향이 반대입니다. 두 흐름을 나란히 놓으면 이렇습니다.
flowchart TD
subgraph 옮기기
A[원천] --> B[변환] --> C[대상]
end
subgraph 감시
D[대상] --> E[수집기] --> F[조건과 견줌]
end
위에서는 대상이 흐름의 끝이고 아래에서는 대상이 흐름의 시작입니다. 그래도 대상이 작업이 향하는 상대라는 것은 같습니다. 옮기는 작업은 대상에 쓰러 가고 재는 작업은 대상에 읽으러 갑니다.
감시 대상은 수가 자주 바뀝니다. 서버를 늘리고 줄일 때마다 목록을 손으로 고치면 늦습니다. 그래서 도구가 대상 목록을 다른 곳에서 읽어 와 스스로 채웁니다. 이 방식을 서비스 디스커버리라고 부릅니다.
대상이 응답하지 않는 것 자체도 정보입니다. 값을 못 읽었다는 것은 대상이 죽었거나 가는 길이 끊겼다는 뜻입니다. 알림은 값이 조건을 벗어났을 때만이 아니라 대상이 사라졌을 때도 울립니다.
접근을 막을 때
권한을 적을 때도 대상이라는 말을 씁니다. 이 맥락에서 대상은 권한이 걸리는 자원입니다. 파일 하나, 표 하나, 주소 하나가 대상이 됩니다.
반대편 역할은 주체입니다. 주체는 그 일을 하려는 사람이나 프로그램입니다. 어떤 주체가 어떤 대상에 무엇을 할 수 있는지를 적어 둔 것이 접근 제어 목록입니다.
앞의 두 맥락과 다른 점은 대상이 무엇을 주고받는 쪽이 아니라는 것입니다. 여기서 대상은 지켜야 할 물건이고, 대상 쪽에서는 아무 일도 일어나지 않습니다. 일은 주체 쪽에서 시작합니다.
대상이 많아질 때
대상이 하나일 때는 결과가 성공과 실패 둘뿐입니다. 대상이 여럿이면 일부만 성공한 상태가 생깁니다. 이런 상태를 부분 실패라고 부릅니다.
그래서 어디까지 갔는지를 대상마다 따로 기억합니다. 한 대상이 실패했다고 전체를 처음부터 되돌리면 이미 끝난 대상까지 다시 합니다. 대상별로 진행 상태를 남겨 두면 실패한 대상만 재시도할 수 있습니다.
대상마다 받아들이는 속도도 다릅니다. 한 대상이 받는 속도가 보내는 속도보다 낮으면 그 대상 앞에서 처리가 밀립니다. 밀림이 길어지면 다른 대상으로 갈 몫까지 같이 늦어집니다. 보낼 것을 순서대로 쌓아 두는 큐를 대상마다 따로 두거나, 그 대상에 보내는 양을 줄여 밀림을 막습니다.
역할 이름인지 가려보기
「대상」은 일상어이기도 해서 「무엇을 대상으로 한다」처럼 지나가는 말로도 쓰입니다. 이 글이 다루는 대상은 그 말이 아니라 도구가 설정에 적어 두고 이름으로 부르는 항목입니다.
가르는 시험은 둘입니다. 반대편 역할에 이름이 붙어 있나, 그리고 그 대상이 설정에 항목으로 적히나. 둘 다 예이면 역할 이름으로 쓴 것입니다. 둘 다 아니면 일상어로 쓴 것이고, 이 글이 설명하는 것과 관계가 없습니다.
관련 항목
대상과 맞세워지는 반대편 역할
원천 · 주체 · 생산자 · 소비자 · 클라이언트 · 서버
대상을 이름으로 적어 두는 설정 요소
엔드포인트 · 자격 증명 · 스키마 · 커넥션 문자열 · 서비스 디스커버리 · 인벤토리
대상으로 데이터를 옮기는 처리 단계
수집 · 변환 · 적재 · 복제 · 변경 데이터 캡처 · 이벤트 스트림 · 파이프라인 · 데이터 엔지니어링
대상에서 값을 재는 감시 수단
모니터링 · 알림 · 스크레이핑 · 헬스 체크 · 메트릭 · 수집기
대상에 걸리는 접근 통제 수단
대상이 많아질 때 생기는 문제
다른 이름: target · 타깃 · 타겟