[4] Nginx 서버 셋업 - Drogon 테스트 API 작성



API를 만들어보자 
Drogon 으로 만들거고, 관련 해서 특정 값을 리턴하는 정도로 진행한다

---

## 1. Drogon Test Project 설정
- drogon_ctl 이 설치된 곳에서 아래 명령어를 입력한다
```
drogon_ctl create project testAPI
cd testAPI
```

---

## 2. 빌드
- 전체 경로의 경우 /root/drogon2/drogon/build/drogon_ctl/testAPI/build 가 된다

```
mkdir build
cd build
cmake ..
make
```
---
만약 아래 에러 발생 시 환경변수 선언하고 drogon 재설치하는게 마음편하니 재설치하자

```
CMake Error at /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package):
  By not providing "FindJsoncpp.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Jsoncpp", but
  CMake did not find one.

  Could not find a package configuration file provided by "Jsoncpp" with any
  of the following names:

    JsoncppConfig.cmake
    jsoncpp-config.cmake

  Add the installation prefix of "Jsoncpp" to CMAKE_PREFIX_PATH or set
  "Jsoncpp_DIR" to a directory containing one of the above files.  If
  "Jsoncpp" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  /root/drogon/build/CMakeFiles/DrogonConfig.cmake:39 (find_dependency)
  CMakeLists.txt:31 (find_package)  

```

drogon이 보는 경로와 jsoncpp 설치경로의 문제
아래로 진행하자

```
** 경로는 jsoncpp가 있는곳으로 해야함 **

export Jsoncpp_DIR=/usr/local/lib/cmake/jsoncpp


find / -name "jsoncpp-config.cmake" 2>/dev/null
find / -name "JsoncppConfig.cmake" 2>/dev/null
# 위 둘중에 있는 경로로 지정하면됨

이후 
작업 루트에서 재설치
https://warguss.blogspot.com/2024/11/3-nginx-c.html 

위 페이지 2. 프레임워크 빌드 참고

```


---

## 3. 컨트롤러 생성

```
drogon_ctl create controller testAPIController

아래 경로에 컨트롤러 생긴다
[root@vbox controllers] (master) $ pwd
/root/drogon2/drogon/build/drogon_ctl/testAPI/controllers

```

### 3-1. 소스 작업 
```
testAPIController.cc

#include "testAPIController.h"

void testAPIController::handleRequest(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback)
{
    auto resp = HttpResponse::newHttpResponse();
    resp->setBody("Drogon Test API");
    callback(resp);
}

---
testAPIController.h
#pragma once
#include <drogon/HttpController.h>

using namespace drogon;

class testAPIController : public HttpController<testAPIController>
{
public:
    METHOD_LIST_BEGIN
    // 루트 경로의 GET 요청을 처리
    ADD_METHOD_TO(testAPIController::handleRequest, "/myapi", Get);
    METHOD_LIST_END

    void handleRequest(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback);
};

```
### 3-2. 설정 작업
/root/drogon2/drogon/build/drogon_ctl/testAPI/config.json 
위 파일 수정한다 아래 형태 참고, 뭐가 많은데 port만 수정하자 (nginx proxy port랑 맞추기위함)

```
    "listeners": [
        {
            //address: Ip address,0.0.0.0 by default
            "address": "0.0.0.0",
            //port: Port number
            "port": 8848,
            //https: If true, use https for security,false by default
            "https": false
        }
    ],

```

### 3-3. main 수정
설정 load 할수있도록 수정해야한다
/root/drogon2/drogon/build/drogon_ctl/testAPI/main.cc
```
#include <drogon/drogon.h>
int main() {
    //Set HTTP listener address and port
    //drogon::app().addListener("0.0.0.0", 5555);
    //Load config file
    //
    drogon::app().loadConfigFile("../config.json");

    //drogon::app().loadConfigFile("../config.yaml");
    //Run HTTP framework,the method will block in the internal event loop
    drogon::app().run();
    return 0;
}
```

### 3-4. 재빌드 
```
cd /root/drogon2/drogon/build/drogon_ctl/testAPI/build 
make 

./testAPI # App 실행

```

## 4. 테스트
Web 접근 확인

<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTHUFhr2q2H3wL3Ha1huZvMkjn1rvdydSWXcAmpvZw4Wax43v-TkPVrVtcuZSQa52q5w6nOaDkeFCwXRfH_p3EDUe7mupZkJzQ4c1P-1zR5zyePmimFHvPb9wT3tZ59nekoBrhFTBFkgdydsjIyuri5T-9QqdE6tt6BikMaSQ5uRNbl9KKPVD5r2ZH/s1600/drogon-result.PNG" style="display: block; padding: 1em 0; text-align: center; "><img alt="nginx drogon" border="0" data-original-height="228" data-original-width="699" loading="lazy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTHUFhr2q2H3wL3Ha1huZvMkjn1rvdydSWXcAmpvZw4Wax43v-TkPVrVtcuZSQa52q5w6nOaDkeFCwXRfH_p3EDUe7mupZkJzQ4c1P-1zR5zyePmimFHvPb9wT3tZ59nekoBrhFTBFkgdydsjIyuri5T-9QqdE6tt6BikMaSQ5uRNbl9KKPVD5r2ZH/s1600-rw/drogon-result.PNG"/></a></div>
---



추가로 읽으면 좋을 것

댓글

이 블로그의 인기 게시물

윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석

대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석

키움 OPEN API MFC 개발 (1)