본문 바로가기

백앤드

Vapor - 프로젝트 기본 구성

직전 글에서 hello 프로젝트를 생성 및 실행하여 http://127.0.0.1:8080에 접속하여 작성한 적 없는 "It works!" 문구가 출력된 것을 보았다. 

실제 프로젝트를 통한 작업에 들어 기기 전 프로젝트가 어떻게 구성되어 있는지를 먼저 살펴보자

 

Xcode로 본 첫 프로젝트 디렉토리 구조

일단 Public, Sources, Tests 그리고 docker파일 해결된 패키지 등으로 구성되어 있다. 정확히 각 디렉터리의 파일들이 어떤 역할을 수행하는지 모르니 공식 문서를 살펴보도록 하자.

Public

퍼블릭 디렉토리는 프로젝트에서 FileMiddleware가 활성화되어있을 때 앱 내에서 제공될 수 있는 파일들이 위치한다고 한다. 일반적으로 이미지, 스타일 시트, 브라우저 스크립트 등 웹페이지에서 표시되어야 할 스크립트 및 리소스들이 이 폴더에 포함되는 거로 이해하면 될 것 같다.

FileMiddleware를 활성화하기 위해서는 프로젝트의 configure.swift에서 아래와 같이 FileMiddleware를 활성화해주어야한다고 한다.

원래는 try routes(app)만 있었음.

위와 같이 파일 미들웨어를 구성하고 앱에서 사용하게 해준 뒤 routes메서드를 실행해 주면 되는 것 같다.

일단 app.directory.publicDirectory는 또 어디에 있나 보니.. 

Vapor패키지 내의 DirectoryConfiguration 파일

Vapor Package 내의 DirectoryConfiguration 구조체에 별도로 디렉토리에 대한 정보가 구성되어 있다(. 일반적으로 수정은 안 되는 것 같다.)

App

어플리케이션 즉 서버에서 사용되는 모든 로직 코드가 여기에 들어간다고 보면 된다.

Controllers

앱에서 사용되는 로직들이 Controller에서 그룹핑되어 사용된다고 한다. 일반적으로 요청(Request)를 받고 적절한 응답(Response)를 반환하기 위한 다양한 메서드가 여기에 들어가나 보다.

Migration

만약 Fluent(아마 데이터베이스를 사용하기 위해 필요한 것 같음)를 사용할 경우 데이터베이스의 마이그레이션을 위해 사용한다고 한다. 

당장은 사용할 일이 없을 것 같다.

Models

Content구조체 및 Fluent의 모델을 여기에다가 정의한다고 한다. Content구조체가.... 클라이언트에 반환하는 모델 같은 걸까..?

configure.swift

이 파일에서는 configure(_:)메소드가 있는데, 이 메소드는 entrypoint.swift에서 새 Application를 구성하기 위해 불린다고 한다. routes, databases, providers와 같은 서비스들을 여기에서 등록하면 된다고 한다.

entrypoint.swift

이 파일에는 Swift의 @main을 포함하고 있다. 즉 앱의 엔트리포인트(시작지점)를 담당하고 있다고 보면 된다. 위에서 configure를 호출한 것과 같이 앱을 구성하고 세팅을 완료해서 실행하는 곳이 여기라고 보면 된다.

entrypoint.swift

간단하게 살펴보면 main이라는 static method 내에서 환경변수 및 로깅 시스템을 세팅하고, 앱 초기화, 구성 에러 발생 시 로그로 출력하도록 하고 앱을 실행하도록 하고 있다. 마지막으로 앱을 shutdown(종료)하는 것 같다.

routes.swift

이 파일은 routes(_:) 메소드를 포함하고 있다. 이 메소드는 configure메소드의 거의 마지막에 호출된다. 위에서 try routes(app) 코드를 보면 가장 마지막에 호출되는 것을 알 수 있다. route를 app에 등록하기 위해 사용한다고 하는데... 아마도 클라이언트에서 다양하게 호출되는 endpoint (ex: /app/login, /app/signIn ... 등)가 호출되었을 때 이를 앱에서 적절하게 처리하도록 하기 위해 사용되는 것 같다.

 

그리고 마지막으로 Tests

Sources폴더에 대응되는 폴더로 Tests폴더가 있다고 한다. 패키지의 코드를 테스트하기 위해 XCTest를 사용한다고 하며, 커맨드라인의 swift test 또는 Xcode의 command+u 단축키로 실행 가능하다고 한다.

iOS 개발할 때도 테스트 코드를 많이 작성하는 편이 아니었지만... 아마 여기서는 어떨지 모르겠다.(하려나..)

 

진짜 진짜 마지막으로 SwiftNIO

이전 글에서 SwiftNIO르 잠깐 언급했었는데, 사용하지 않을 거라고 판단했지만, 서버를 구동하기 위해 이 위에서 구동이 되는 것 같다(추측)

설치된 Package목록

설치된 패키지 목록에 swift-nio관련된 게 5개나 있고 http2, ssl 등등을 지원한다고 한다.(나중에 https적용 시 세팅을 여기서 지원하나 보다.)

프로젝트 빌드 로그

빌드 로그에서도 NIO를 먼저 빌드하는 걸 보면... 확실한 것 같다..... (아마도)

'백앤드' 카테고리의 다른 글

Vapor - 로그인 구현하기  (0) 2024.02.03
Vapor - Routing + JSON Response  (1) 2024.01.29
Vapor - 시작하기(기본 프로젝트 생성)  (1) 2024.01.22