oat++ 서버. 설치. CmakeLists.txt
많은 주제를 처음 접하는 것처럼 "Farm-fellows"(농장 식품 구독 서비스)를 위한 CRUD api 제작에 대한 일련의 기사를 작성해 보겠습니다. 우선 머릿속에서 얻은 지식을 정리하기 위해 이 글을 쓰는데, 서버용으로 C++을 사용하기로 마음먹는 데 도움이 된다면 정말 기쁠 것 같습니다.
서버를 만들기 위해 oat++ 프레임워크를 사용하겠습니다. 내 운영 체제로 우분투 리눅스를 사용할 것입니다. 데이터를 저장하기 위해 먼저 sqlite를 사용하겠습니다. 나중에 나는 또한 mongo와 postgres를 사용하려고 노력할 것입니다.
빌드 시스템으로 Cmake를 사용하겠습니다. 또한 oat++ 및 해당 모듈을 복제하려면 git을 설치해야 합니다.
그럼 시작하겠습니다.
우선 oat++ 자체와 두 개의 oat++ 모듈 oatpp-sqlite 및 oatpp-swagger가 필요합니다(미래의 CRUD api를 보기 좋게 표현하기 위해).
cd "some/temp/path/for/repositories"
git clone https://github.com/oatpp/oatpp.git
cd oatpp
mkdir build && cd build
cmake ..
(sudo) make install
cd ../../ (back to repository root folder)
git clone https://github.com/oatpp/oatpp-sqlite.git
cd oatpp
mkdir build && cd build
cmake ..
(sudo) make install
참고: -DOATPP_SQLITE_AMALGAMATION=ON을 사용하여 SQLite 통합과 함께 oatpp-sqlite를 설치할 수도 있습니다. 이 경우 SQLite를 설치할 필요가 없습니다.
cd ../../ (back to repository root folder)
git clone https://github.com/oatpp/oatpp-swagger.git
cd oatpp
mkdir build && cd build
cmake ..
(sudo) make install
Oat++ 및 해당 모듈은 이제 oatpp, oatpp-swagger, oatpp-sqlite가 포함하는/usr/local/oatpp-1.3.1/폴더에 추가됩니다.oatpp-sqlite 모듈을 만들 때 amalgamation sqlite 파일을 사용하지 않았다면 sqlite도 추가해야 하므로 설치하자.
sudo apt update
sudo apt install sqlite3
sqlite3 --version
sudo apt install sqlitebrowser
이제 프로젝트 코딩을 시작할 준비가 되었습니다.
cd /some/path/for/projects/root
mkdir farm-fellows
cd farm-fellows
touch CMakeLists.txt
mkdir src
cd src
touch App.cpp
mkdir component
cd component
touch AppComponent.hpp
cd ../../
따라서 처음에는 최소한 두 개의 소스 파일이 필요합니다. 하나는 main() 함수가 포함된 App.cpp이고, http 서버를 실행하는 데 필요한 여러 oatpp 구성 요소가 포함된 AppComponent.hpp입니다.
먼저 AppComponent.hpp를 편집합시다.
#ifndef AppComponent_hpp
#define AppComponent_hpp
#include "oatpp/core/macro/component.hpp"
#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
#include "oatpp/parser/json/mapping/ObjectMapper.hpp"
class AppComponent {
public:
/**
* Create ObjectMapper component to serialize/deserialize DTOs in Contoller's API
*/
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::data::mapping::ObjectMapper>, apiObjectMapper)([] {
return oatpp::parser::json::mapping::ObjectMapper::createShared();
}());
/**
* Create ConnectionProvider component which listens on the port
*/
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)([] {
return oatpp::network::tcp::server::ConnectionProvider::createShared({SERVER_HOST, SERVER_PORT, oatpp::network::Address::IP_4});
}());
/**
* Create Router component
*/
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, httpRouter)([] {
return oatpp::web::server::HttpRouter::createShared();
}());
/**
* Create ConnectionHandler component which uses Router component to route requests
*/
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, serverConnectionHandler)([] {
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router); // get Router component
return oatpp::web::server::HttpConnectionHandler::createShared(router);
}());
};
#endif
매크로 OATPP_CREATE_COMPONENT를 구성 요소 인스턴스의 shared_ptr과 함께 사용하는 Oat++에서는 oatpp가 구성 요소의 새 인스턴스를 선언하기로 결정할 때 콜백 인수로 람다를 사용합니다.
이제 구성 요소를 App(src/App.cpp)에 추가할 수 있습니다.
#include <iostream>
#include "./component/AppComponent.hpp"
#include "oatpp/network/Server.hpp"
void run() {
AppComponent components; // Create scope Environment components
/* Get connection handler component */
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, connectionHandler);
/* Get connection provider component */
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, connectionProvider);
/* create server */
oatpp::network::Server server(connectionProvider,
connectionHandler);
OATPP_LOGD("Server", "Running on port %s...", connectionProvider->getProperty("port").toString()->c_str());
server.run();
}
/**
* main
*/
int main(int argc, const char * argv[]) {
oatpp::base::Environment::init();
run();
oatpp::base::Environment::destroy();
return 0;
}
이제 CMakeLists.txt를 편집할 수 있습니다.
cmake_minimum_required(VERSION 3.1)
project(farm-fellows)
set(CMAKE_CXX_STANDARD 17)
add_library(farm-fellows-lib
src/component/AppComponent.hpp)
## include directories
target_include_directories(farm-fellows-lib PUBLIC src)
## link libs
## Oat++
find_package(oatpp 1.3.0 REQUIRED)
find_package(oatpp-swagger 1.3.0 REQUIRED)
find_package(oatpp-sqlite 1.3.0 REQUIRED)
target_link_libraries(farm-fellows-lib
PUBLIC oatpp::oatpp
PUBLIC oatpp::oatpp-swagger
PUBLIC oatpp::oatpp-sqlite
)
## Sqlite3
find_package(SQLite3 REQUIRED)
target_link_libraries(farm-fellows-lib
PUBLIC SQLite::SQLite3
)
if(CMAKE_SYSTEM_NAME MATCHES Linux)
find_package(Threads REQUIRED)
target_link_libraries(farm-fellows-lib INTERFACE Threads::Threads ${CMAKE_DL_LIBS})
endif()
add_definitions(
# define host
-DSERVER_HOST="127.0.0.0"
# define port
-DSERVER_PORT=8000
)
## add executables
add_executable(farm-fellows-exe src/App.cpp)
target_link_libraries(farm-fellows-exe farm-fellows-lib)
add_definitions에서 ConnectionProvider 인스턴스 초기화에 사용되는 두 개의 상수를 추가했습니다.
이제 매우 기본적인 서버를 만들 수 있습니다.
(프로젝트 루트 경로/farm-fellows에 있어야 함)
mkdir build && cd build
cmake ..
make
./farm-fellows-exe
브라우저에서 127.0.0.0:8000을 엽니다. 아직 응답과 일치하는 컨트롤러가 없기 때문에 응답으로 보아야 합니다.
server=oatpp/1.3.0
code=404
description=Not Found
message=No mapping for HTTP-method: 'GET', URL: '/'
Reference
이 문제에 관하여(oat++ 서버. 설치. CmakeLists.txt), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/seemstechies/server-with-oat-installation-cmakeliststxt-4gl3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)