Published on

axum github examples: 공식 예제로 서버 구조 익히기

Authors
  • avatar
    Name
    Indo Yoon
    Twitter

axum github examples를 찾는다면 먼저 공식 저장소의 examples 디렉터리를 보는 것이 가장 빠릅니다. 이곳에는 라우팅, 미들웨어, 상태 공유, 웹소켓, 데이터베이스 연동처럼 실무에서 자주 부딪히는 주제별로 실행 가능한 최소 예제가 정리되어 있어요. 이 글은 예제를 어떤 순서로 읽고 내 프로젝트에 어떻게 옮겨야 하는지, 그리고 예제 코드를 그대로 복사할 때 무엇을 조심해야 하는지를 다룹니다.

한눈에 보기

axum 저장소의 예제는 "문서용 코드 조각"이 아니라 실제로 빌드되고 실행되는 프로젝트입니다. 각 예제는 자기만의 Cargo.toml을 가진 패키지로 존재하고, 저장소 루트의 워크스페이스에 묶여 있어요. 그래서 저장소를 클론한 뒤 루트에서 패키지 이름을 지정하면 해당 예제를 바로 띄워 볼 수 있습니다.

핵심적인 특징은 다음과 같아요.

  • 예제는 주제별로 폴더가 나뉘어 있고, 폴더 이름이 곧 패키지 이름 역할을 합니다.
  • 각 예제는 "이 기능을 어떻게 쓰는가"만 보여 주는 최소 구성이라, 인증이나 설정 관리 같은 부가 요소는 대부분 빠져 있어요.
  • 저장소의 기본 브랜치에 있는 예제는 최신 코드 기준이므로, 운영 중인 프로젝트의 의존성과 세대가 다를 수 있습니다.
  • API 문서 쪽에도 타입별 사용 예시가 따로 있으니, 저장소 예제와 문서 예제를 함께 보는 편이 이해가 빠릅니다.

즉 axum github examples를 활용하는 요령은 "예제를 통째로 가져오기"가 아니라 "예제에서 필요한 부분만 발췌해 내 구조에 맞게 다시 쓰기"예요.

공식 자료 구조 비교

어디에서 무엇을 얻을 수 있는지 먼저 정리하면 탐색 시간이 크게 줄어듭니다.

확인할 곳무엇이 있나적합한 상황주의할 점
저장소의 examples 디렉터리주제별로 실행 가능한 완전한 예제 패키지서버 한 대를 처음부터 조립해 보고 싶을 때최신 브랜치 기준이라 내 의존성과 다를 수 있음
API 문서의 타입별 예시라우터, 추출자, 응답 타입 단위의 짧은 코드특정 타입의 사용법만 확인하고 싶을 때서버 전체 흐름은 보여 주지 않음
저장소 루트의 안내 문서프로젝트 개요와 생태계 링크상위 크레이트 구성과 확장 지점을 파악할 때예제별 세부 설명은 없음
부가 기능 크레이트 저장소쿠키, 세션, 미들웨어 확장 예제기본 기능 밖의 요구가 생겼을 때코어와 버전 정합을 직접 확인해야 함

표에서 알 수 있듯이 예제 저장소는 "동작하는 뼈대", API 문서는 "부품 설명서"에 가깝습니다. 둘을 오가며 읽는 것이 가장 효율적이에요.

단계별로 예제 실행하기

예제를 읽기만 하면 감이 잘 오지 않습니다. 직접 띄워 보고 요청을 던져 보는 과정이 필요해요.

  1. 저장소를 클론합니다. 예제는 저장소 루트 워크스페이스에 포함되어 있으므로 별도 저장소를 찾을 필요가 없습니다.
  2. examples 디렉터리에서 목록을 훑어봅니다. 폴더 이름만 봐도 어떤 주제인지 대체로 알 수 있어요.
  3. 루트에서 예제 패키지를 지정해 실행합니다. cargo run -p 뒤에 예제 패키지 이름을 붙이는 형태예요.
  4. 실행 로그에 찍힌 바인딩 주소로 요청을 보내 응답을 확인합니다. 라우팅 예제라면 경로를 바꿔 가며 상태 코드를 관찰해 보세요.
  5. 코드를 위에서 아래로 읽기보다, 진입점에서 라우터가 만들어지는 부분부터 따라가는 편이 빠릅니다. 핸들러, 추출자, 미들웨어 순으로 확장되는 흐름이 보입니다.
  6. 마음에 드는 예제를 골랐다면 내 프로젝트의 Cargo.toml에 필요한 크레이트만 옮기고, 예제의 워크스페이스 전용 설정은 가져오지 않습니다.

실행 단계에서 자주 막히는 지점은 빌드 시간입니다. 예제 하나를 띄우기 위해 워크스페이스 전체 의존성을 컴파일하는 경우가 있어 첫 빌드가 길게 느껴질 수 있어요. 이때는 패키지를 지정해 실행하면 불필요한 크레이트 컴파일을 줄일 수 있습니다.

상황별로 어떤 예제를 볼까

모든 예제를 다 읽을 필요는 없습니다. 지금 막힌 지점에 맞는 예제만 골라 보세요.

라우팅과 경로 파라미터가 헷갈린다면 가장 단순한 hello world 계열 예제에서 시작하는 것이 좋습니다. 중첩 라우터나 경로 파라미터, 쿼리 추출자는 그다음 단계에서 확인하면 흐름이 자연스러워요.

애플리케이션 상태를 여러 핸들러에서 공유해야 한다면 상태 공유 예제를 보세요. 상태를 라우터에 붙이는 방식과 추출자로 꺼내 쓰는 방식이 함께 나오기 때문에, 커넥션 풀이나 설정 객체를 다루는 감각을 잡기에 적합합니다.

인증, 로깅, 요청 제한처럼 공통 처리가 필요하다면 미들웨어 예제를 봅니다. axum은 tower 생태계의 레이어를 그대로 쓸 수 있어서, 예제를 보면 "핸들러 앞뒤에 무엇을 끼우는가"라는 관점이 잡혀요.

에러 응답을 일관되게 만들고 싶다면 에러 처리 예제가 도움이 됩니다. 핸들러에서 반환하는 결과 타입을 어떻게 정의하고, 어떤 형태로 상태 코드와 본문을 매핑하는지 확인할 수 있습니다.

데이터베이스 연동은 sqlx를 사용하는 예제를 참고하세요. 마이그레이션과 커넥션 풀을 앱 상태에 붙이는 전형적인 구성을 볼 수 있습니다.

실시간 통신이 필요하면 웹소켓이나 서버 전송 이벤트 예제를, 정적 파일이나 템플릿 렌더링이 필요하면 해당 예제를 보면 됩니다. 배포 직전이라면 우아한 종료 예제를 꼭 확인하세요. 종료 신호를 받아 처리 중인 요청을 정리하는 패턴은 운영에서 차이가 큽니다.

예제를 내 프로젝트에 옮길 때 주의할 점

예제는 학습용으로 압축된 코드입니다. 그대로 운영에 넣기 전에 다음을 점검해야 해요.

  • 의존성 세대를 맞추세요. 예제는 최신 브랜치 기준이고 내 프로젝트는 고정된 버전을 쓰고 있을 수 있습니다. 미들웨어 관련 크레이트는 특히 버전이 어긋나면 타입이 맞지 않아 컴파일이 깨집니다.
  • 에러 처리를 그대로 쓰지 마세요. 예제는 이해를 돕기 위해 단순한 에러 타입을 쓰는 경우가 많습니다. 운영에서는 도메인 에러를 정의하고 상태 코드 매핑을 한곳에 모으는 편이 좋아요.
  • 타임아웃과 바디 크기 제한을 추가하세요. 예제에는 대개 빠져 있지만 실제 트래픽에서는 필수입니다.
  • 종료 절차를 넣으세요. 배포 중 요청이 끊기지 않도록 종료 신호 처리와 정리 로직을 함께 구성해야 합니다.
  • 관측성을 붙이세요. 요청 로그와 추적은 예제 범위 밖인 경우가 많으니 미들웨어로 직접 감싸는 것을 전제로 설계하세요.
  • 테스트를 함께 옮기세요. 예제의 라우터를 그대로 테스트에서 재사용하면 통합 테스트 작성이 쉬워집니다.

정리하면, 예제는 "구조의 출처"로 쓰고 세부 정책은 내 서비스 기준으로 다시 채우는 것이 안전합니다.

자주 묻는 질문

axum github examples는 어디에서 확인하나요?

공식 저장소의 examples 디렉터리에서 확인할 수 있습니다. 저장소 주소 뒤에 examples 경로를 붙이면 주제별 폴더 목록이 나오고, 각 폴더 안에 실행 가능한 패키지가 들어 있어요. 타입 단위 사용법은 API 문서에서 함께 확인하는 것이 좋습니다.

예제 코드를 그대로 복사해도 되나요?

동작을 이해하는 목적이라면 문제없지만, 운영 코드로 쓰기에는 부족한 부분이 많습니다. 에러 처리, 타임아웃, 종료 절차, 관측성 같은 요소가 빠져 있는 경우가 흔하므로 구조만 참고하고 정책은 직접 설계하세요.

예제 실행 시 빌드가 오래 걸리는 이유는 무엇인가요?

예제가 워크스페이스에 묶여 있어 관련 의존성을 함께 컴파일하기 때문입니다. 실행할 패키지를 명시하면 불필요한 컴파일을 줄일 수 있고, 한 번 빌드한 뒤에는 캐시가 재사용됩니다.

예제와 API 문서의 코드가 다르게 보이는 이유는 무엇인가요?

두 자료의 갱신 시점과 목적이 다르기 때문입니다. 저장소 예제는 서버 전체 흐름을, 문서 예제는 특정 타입의 사용법을 보여 주므로 표현이 달라질 수 있어요. 차이가 보이면 내 프로젝트의 의존성 버전을 기준으로 다시 확인하는 것이 안전합니다.

출처

예제를 실제 서비스로 옮길 때 함께 확인하면 좋은 내용은 axum 서버 배포 체크리스트에서 종료 처리, 헬스 체크, 로그 구성 순서로 정리해 두었습니다.