프로그래밍/운영체제

systemd network.target과 network-online.target 기준 정리

포도알77 2026. 8. 2. 15:34

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.

systemd에서 네트워크 대기 기준을 잡을 때 가장 많이 헷갈리는 지점은 network.targetnetwork-online.target의 의미 차이입니다. 둘 다 네트워크 관련 target이지만, 하나는 네트워크 관리 스택의 시작과 종료 순서를 맞추는 용도이고, 다른 하나는 실제로 네트워크가 올라올 때까지 기다리는 용도입니다.

결론부터 말하면 대부분의 서비스는 After=network.target만으로 충분합니다. 원격 파일 시스템, 부팅 직후 바로 외부 서버에 연결해야 하는 클라이언트처럼 네트워크가 준비되지 않으면 시작 자체가 무의미한 경우에만 After=network-online.targetWants=network-online.target 조합을 검토하는 편이 안전합니다.

핵심 차이 먼저 보기

network.target은 부팅 시점에 네트워크 인터페이스가 모두 설정됐다는 뜻이 아닙니다. systemd 공식 문서는 이 target이 네트워크 기능의 가용성을 가리키지만, 시작 시점 의미는 약하게 정의돼 있다고 설명합니다. 반면 network-online.target은 네트워크 관리 소프트웨어가 판단한 “네트워크가 올라온 상태”까지 기다리는 적극적 target입니다.

  • network.target: 네트워크 관리 스택이 시작됐음을 기준으로 순서를 맞추는 passive target
  • network-online.target: 서비스가 직접 끌어와 네트워크 준비 완료까지 기다리는 active target
  • network-pre.target: 방화벽처럼 네트워크 설정보다 먼저 실행돼야 하는 작업용 target

network.target은 언제 써야 할까

이 target의 핵심 가치는 시작보다 종료 쪽에 있습니다. systemd는 종료 순서를 시작 순서의 역순으로 적용하므로, 어떤 서비스가 After=network.target으로 정렬돼 있으면 종료 시에는 네트워크가 내려가기 전에 그 서비스가 먼저 멈춥니다. 그래서 연결 정리나 세션 종료가 필요한 네트워크 서비스에서 의미가 큽니다.

중요한 점은 After=network.target만으로는 “IP 할당 완료 후 시작”을 보장하지 않는다는 점입니다. 공식 문서도 하드웨어 기반 인터페이스가 이 target 시점까지 나타나거나 IP 설정을 마친다는 보장은 없다고 분명히 적고 있습니다.

[Unit]
After=network.target

[Service]
ExecStart=/usr/local/bin/example-server

이 패턴은 네트워크 서버, 에이전트, 백그라운드 데몬처럼 부팅 직후에 바로 외부 연결이 완전하지 않아도 나중에 재시도하거나 동적으로 반응할 수 있는 서비스에 잘 맞습니다.

network-online.target은 언제 필요할까

network-online.target은 네트워크가 “up” 상태라고 네트워크 관리 소프트웨어가 판단할 때까지 부팅을 지연할 수 있습니다. systemd 공식 가이드는 이 target을 너무 넓게 쓰지 말라고 권장합니다. 네트워크 서버 소프트웨어는 일반적으로 로컬 주소에서 먼저 뜰 수 있으므로, 굳이 이 target을 요구할 필요가 없기 때문입니다.

대신 다음처럼 네트워크 없이는 시작 의미가 거의 없는 소비자 쪽 서비스에서 적합합니다.

  • 부팅 직후 반드시 원격 API에 접속해야 하는 클라이언트
  • 원격 스토리지나 네트워크 파일 시스템에 의존하는 작업
  • DNS, 라우팅, IP 할당이 끝난 뒤에만 정상 동작하는 초기화 작업

 

 

[Unit]
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/example-client

이 조합에서 중요한 점은 After=network-online.target만 적는 것으로는 충분하지 않을 수 있다는 것입니다. 순서만 지정하면 target이 트랜잭션에 포함되지 않을 수 있으므로, systemd 공식 FAQ 예시처럼 보통 Wants=network-online.target을 함께 둡니다.

부팅 지연과 wait-online 서비스도 함께 봐야 한다

network-online.target은 단순한 이름만으로 동작하지 않습니다. 실제 대기는 NetworkManager-wait-online.servicesystemd-networkd-wait-online.service 같은 wait 서비스가 담당합니다. 무엇을 “온라인”으로 볼지는 이 서비스와 로컬 네트워크 설정에 따라 달라집니다.

systemd 공식 가이드는 이 target이 기본적으로 최대 90초까지 대기할 수 있으며, 필요하지 않은 서비스에 적용하면 부팅을 눈에 띄게 늦출 수 있다고 설명합니다. 그래서 “네트워크가 준비되면 더 좋다” 수준이면 대기 대신 재시도 로직을 갖춘 서비스 설계가 더 낫습니다.

어떤 선택이 무난할까

대부분의 경우 선택 기준은 세 가지입니다. 서비스가 서버인지 클라이언트인지, 부팅 직후 외부 연결이 필수인지, 연결 실패를 나중에 재시도할 수 있는지입니다.

  • 서버형 서비스: 보통 After=network.target 또는 아예 네트워크 target 없이도 가능
  • 클라이언트형 서비스: 초기 연결이 필수면 Wants=network-online.targetAfter=network-online.target 검토
  • 방화벽/선행 제어: Before=network-pre.targetWants=network-pre.target 패턴 검토

자주 묻는 질문

After=network.target이면 DHCP까지 끝난 뒤 시작할까

아닙니다. 공식 문서 기준으로는 그렇지 않습니다. 인터페이스 등장이나 IP 설정 완료는 network.target만으로 보장되지 않습니다.

network-online.target을 모든 네트워크 서비스에 붙이면 안전할까

대체로 권장되지 않습니다. systemd 공식 가이드는 서버 소프트웨어에 이 target을 남용하지 말라고 설명합니다. 불필요한 부팅 지연이 생기고, 일시적 네트워크 변화에 약한 설계를 고착시킬 수 있기 때문입니다.

원격 마운트는 직접 설정하지 않아도 될까

공식 문서 기준으로 원격 파일 시스템 마운트 유닛은 기본적으로 network-online.target을 끌어오고 그 뒤에 정렬됩니다. 그래서 원격 마운트 의존성은 별도 수동 설정 없이도 이미 이 target의 영향을 받는 경우가 많습니다.

정리

network.target은 네트워크 관리 스택과의 순서 관계를 맞추는 기준이고, 특히 종료 순서 보장에 유용합니다. network-online.target은 실제 네트워크 준비를 기다리는 기준이며, 꼭 필요한 소비자 서비스에만 제한적으로 쓰는 편이 좋습니다.

부팅 안정성과 속도를 함께 보려면 먼저 서비스가 동적 네트워크 변화를 견딜 수 있는지부터 판단하고, 정말 초기 연결이 필수일 때만 network-online.target을 추가하는 것이 가장 무난합니다.

반응형
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사