라벨이 개발인 게시물 표시

[7] Nginx 서버 셋업 - Drogon 서버 OpenCV를 활용한 Text Detection API 구축

이미지
RHEL 환경에서 Text Detection을 Drogon 서버에 연동하여 API 형태로 추출 및 Client에 보여지는 기능 개발 주의. OCR(Optical Character Recognition, 광학 문자 인식)이 아닌 Text Detection이 목적 Detection 이후 OCR은 추후에 연동 해보는걸로.. ## 0. Text Detection 프레임 워크 서치 | 프레임워크 | 언어 | 장점 | 단점 | |---------------------|-----------------|--------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | Tesseract OCR | C++ (Python 등) | 오픈 소스, 다국어 지원, 커스터마이징 가능 | 전처리 없이는 성능 저하 가능, 텍스트 감지 기능이 따로 없으므로 OpenCV 등과 함께 사용 필요 | | OpenCV + EAST 모델 | C++, Python | 빠른 텍스트 감지, CPU 및 GPU 모두 지원, OpenCV와의 통합 용이 | 텍스트 감지만 지...

ImageMagick과 Vips CLI 성능 비교: 이미지 처리 프레임워크 선택 가이드

### 대형 이미지 처리 - libvips와 ImageMagick의 성능 비교 이미지 처리는 웹 개발에서 데이터 분석까지 다양한 분야에서 중요한 역할을 합니다. 많이 사용되는 툴로는 ImageMagick과 libvips가 있으며, 각각 강력한 기능과 성능을 제공합니다. 이번 포스트에서는 두 라이브러리의 장단점과 벤치마크 결과를 통해 대형 이미지 처리와 썸네일 생성 시 어떤 툴이 더 적합한지 살펴보겠습니다. --- ### 장단점 비교표: libvips vs. ImageMagick - Magick의 장점은 다양한 확장자 (heif/heic/psd/svg/gif/raw 이미지 등으로 library 적재하여 빌드시 무궁무진함) - VIPS의 경우 고해상도 이미지에 대해 추출 시 속도 장점이 존재 | **기능** | **libvips** | **ImageMagick** | |---------------------|--------------------------------------------------------------------|----------------------------------------------------------------| | **추출 속도** | 빠름, 특히 대형 이미지 처리 시 4-8배 빠름 | 다양한 작업에서 안정적인 성능, 대형 이미지 처리 시 속도 저하 가능 | | **메모리 사용량** | 메모리 효율적, 필요한 픽셀만 메모리에 로드 | 전체 이미지를 메모리에 로드하여 더 많은 메모리 소비 가능 | | **기능성** | 이미지 리사이즈 및 변환에 최적화, 다소 복잡한 설정 필요 ...

[6] Nginx 서버 셋업 - Up/Down 구현 + 간단한 업로드 client

이미지
리스팅 까지 진행됫고, 업/다운을 Drogon을 통해 구현한다 --- ## 1. 서버 기능 구현 ### 1-1. Drogon Contoller 구현 Drogon Contoller 등록 진행을 한다 ( 아래 작업을 해야 빌드시 인식이 됨 ) ``` cd /root/drogon2/drogon/build/drogon_ctl drogon_ctl create controller FileController ``` --- ### 1-2. 업/다운 구현 소스 위치할 경로 ( /root/drogon2/drogon/build/drogon_ctl/testAPI/controllers ) FileController.h #pragma once #include using namespace drogon; class FileController : public HttpController { public: std:: string _storagePath = "/root/storage/"; METHOD_LIST_BEGIN // "/upload" 경로의 POST 요청 처리 ADD_METHOD_TO(FileController::handleUpload, "/upload", Post); // "/download/{filename}" 경로의 GET 요청 처리 ADD_METHOD_TO(FileController::handleDownload, "/download/{1}", Get); METHOD_LIST_END // 메서드 선언 void handleUpload(const HttpRequestPtr& req, std::function && callback); void handleDownload(const HttpRequestPtr& req, std::function && ca...

[5] Nginx 서버 셋업 - Web에서 서버 폴더 리스팅

이미지
업/다운로드를 구현 하기 전 우선 장비 local 저장소를 만들고 해당 저장소를 web에서 볼수있게 먼저 정의한다 --- ## 1. 저장소 생성 및 권한 부여 - 저장소 생성 ``` mkdir /root/storage cd /root/storage vi test.txt ( 적당히 아무값 넣고 저장 종료 ) ``` - nginx가 뜬 user권한을 폴더에 부여 ``` ps aux | grep nginx --- # 제 경우는 nobody 이므로 해당 폴더 소유주 변환 [root@vbox build] (master) $ ps aux | grep nginx root 52636 0.0 0.0 4544 2412 ? Ss 01:26 0:00 nginx: master process ./nginx root 59772 0.0 0.1 13064 9600 pts/1 T 06:04 0:00 /usr/bin/vim nginx.conf nobody 60676 0.0 0.0 13168 5484 ? S 06:23 0:00 nginx: worker process nobody 60677 0.0 0.0 13168 5612 ? S 06:23 0:00 nginx: worker process --- # 권한 및 소유주 변환 sudo chmod -R 755 /root/storage sudo chown -R nobody:nobody /root/storage # SELinux 보안 컨텍스트 수정 sudo chcon -R -t httpd_sys_content_t /root/storage ``` 위 작업들을 수행하지 않으면, 403 Fobbiden을 맞게된다 --- ## 2. Nginx 설정 적용 - alias 통해, list api 가 들어오면 /root/storage의 경로를 보여준다 ``` user nobody; worker_proce...

[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...

[3] Nginx 서버 셋업 - C++ 웹 프레임워크 연결

이미지
C++ 서버로 만들어 보는게 목표이기에 프레임워크 서치를 우선 진행 ## 0. C++ 웹 프레임워크 조사 | 프레임워크 | 장점 | 단점 | |------------|------|------| | **Drogon** | - 최신 C++14/17 지원 - 비동기 프로그래밍 및 다중 스레드 지원 - HTTP2, WebSocket 지원 - 높은 성능 및 사용자 친화적 API - 활발한 커뮤니티 및 지원 | - 초기 설정이 복잡할 수 있음 | | **Pistache** | - 경량 설계로 빠른 웹 서버 구현 - RESTful API 개발에 적합 - 간단한 코드와 쉬운 학습 | - 개발 및 업데이트 속도가 느림 - 제한된 기능성 | | **Crow** | - Flask와 유사한 직관적인 사용법 - JSON 지원 및 라우팅 기능 포함 - 경량 설계 | - 기능이 제한적이며 대규모 애플리케이션에는 부적합 - 유지보수가 부족할 수 있음 | | **CppCMS** | - 고성능 웹 애플리케이션 구축 가능 - 세션 관리 및 국제화 지원 | - 설정이 복잡하고 높은 학습 곡선 - 문서가 부족하고 사용법이 어렵다 | | **Restbed** | - RESTful API 개발에 적합 - 비동기 및 확장 가능한 설계 | - 제한된 기능으로 대규모 프로젝트에는 부적합 - 커뮤니티 지원이 활발하지 않음 | - GPT 피셜 인기 좋은 Drogon으로 우선 진행해보기로한다. --- ## 1. 프레임워크 의존성 설치 ``` sudo yum install -y git cmake gcc-c++ libuuid-devel openssl-devel zlib-devel brotli-devel jsoncpp-devel libuuid libuuid-devel ``` jsoncpp-devel 없다면 별개 설치필요 --- ### jsoncpp는 별개 설치 ``` # jsoncpp 소스 코드 다운로드 git clone https://github.com/open-source-parsers/jso...

[2] Nginx 서버 셋업 - 특정버전 nginx 다운로드하여 셋업

이미지
시스템 경로에 셋업하여 실행하는 법이 있지만, 다운로드 및 빌드하여 셋업하는 방법으로 진행하겠습니다. ## 구축환경 - Red Hat Enterprise Linux release 9.4 (Plow) ## 1. NGINX 다운로드 및 압축 해제 ``` wget http://nginx.org/download/nginx-1.21.6.tar.gz tar -xvf nginx-1.21.6.tar.gz ``` --- ## 2. 필요 Library 설치 ``` sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel ``` - gcc: C 컴파일러로, NGINX 소스 코드를 컴파일하여 실행 가능한 프로그램으로 만드는데 필요합니다. - pcre: Perl Compatible Regular Expressions 라이브러리로, NGINX에서 정규 표현식을 처리할 수 있도록 지원합니다. - pcre-devel: PCRE 라이브러리의 개발 헤더 파일을 포함하며, NGINX를 컴파일할 때 필요합니다. - zlib: 데이터 압축을 위한 라이브러리로, NGINX의 Gzip 압축 기능을 사용하기 위해 필요합니다. - zlib-devel: zlib의 개발 파일을 포함하며, 소스 컴파일 시 필요한 헤더 파일과 라이브러리를 제공합니다. - openssl: SSL/TLS 암호화를 위한 라이브러리로, HTTPS 및 보안 연결을 처리하기 위해 NGINX에 필요합니다. - openssl-devel: OpenSSL 라이브러리의 개발 헤더 파일을 포함하며, NGINX의 SSL/TLS 지원을 컴파일할 때 필요합니다. --- 만약 설치시 아래 에러가 발생한다면 ``` Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs) 0.0 B/s | ...

[1] Nginx 서버 셋업 - Virtualbox 설치 및 Putty 연결

이미지
테스트용 Linux 셋업을 위해 가상환경 설치 진행 VMWare를 쓸려햇는데 가입이 귀찮게 되어있어 VirtualBox로 선회 ### 셋업 환경 - window10 ### 설치 ## 1. VirtualBox - Download - https://www.virtualbox.org/wiki/Downloads - 위 경로에서 다운로드 진행 ( OS에 맞게 설치, widnows hosts 로 진행 ) --- - 다운로드 이후 설치 진행 --- ## 2. RHEL(RedHat Enterprise Linux) OS 다운로드 CentOS를 주로썼지만 EOL (End of Line) 으로 이제는 RHEL쓰기를 권장 - https://developers.redhat.com/products/rhel/download (24.11.02 기준 9.4 version) - RHEL을 무료로 사용하려면 Individual Developer Subscription에 등록해야 하고 등록 비용은 발생하지 않는다. --- ## 3. VirtualBox - RHEL 가상머신 만들기 1. 머신 > 새로 만들기 ㄴ 저장소 경로 설정 --- 2. VM 비밀번호 셋업 --- 3. 가상머신 리소스 할당 ㄴ 사용 컴퓨터에 따라 동적으로 변함. 저는 4core / 8GB 할당함 (20GB) --- 4. 소프트웨어 확인 (GUI 시스템은 필요없어서 제거) --- 5. 접속 확인 --- ## 4. Putty 연결 아래 사항 확인 ### 4-1.VM 설정에서 확인 사항 ``` 1. VirtualBox를 실행하고 연결할 가상 머신을 선택한 후 설정 2. 네트워크 탭 이동 > 어댑터 1을 NAT로 설정한 후 고급 옵션 3. 포트 포워딩 규칙 설정 이름: 원하는 이름 입력 (예: SSH) 호스트 포트: 9999 (또는 사용하지 않는 포트) 게스트 포트: 22 (기본 SSH 포트, 고정) ex) putty -(9999...

대용량 데이터 처리에 적합한 MySQL 배치 프레임워크 비교: Spring Batch, Spark, Flink 등

대용량 데이터를 가진 MySQL 데이터베이스를 효율적으로 핸들링할 수 있는 배치 프레임워크에는 여러 가지 옵션이 있습니다. 각 프레임워크는 고유한 특징과 장점을 가지고 있으며, 프로젝트의 요구 사항에 따라 적절한 도구를 선택하는 것이 중요합니다. 이번 포스팅에서는 대표적인 배치 프레임워크의 특징, 장단점, 활용할 수 있는 환경을 정리해보겠습니다. ## 1. Spring Batch **Spring Batch**는 Java 기반의 배치 처리 프레임워크로, 안정적이고 신뢰성 있는 배치 처리가 필요한 경우에 적합합니다. - **장점** - Spring Ecosystem과 통합이 잘 되어 있어 Spring 기반 애플리케이션에서 쉽게 사용할 수 있습니다. - 트랜잭션 관리, 청크 기반의 배치 처리, 리트라이 및 리스타트 기능을 제공하여 안정적인 대용량 데이터 처리에 적합합니다. - **단점** - JVM 환경에 종속적이므로 Java가 아닌 환경에서는 활용하기 어렵습니다. - 초기 설정이 복잡하고, 세부적인 구성이 다소 시간이 걸릴 수 있습니다. --- ## 2. Apache Spark **Apache Spark**는 대규모 데이터 처리를 위한 분산 처리 시스템으로, 클러스터 환경에서 병렬 처리가 가능합니다. - **장점** - Spark는 대용량 데이터를 빠르게 처리할 수 있도록 설계되었으며, MySQL과 같은 RDBMS와 연동이 용이합니다. - 배치와 스트림 처리를 모두 지원해, 데이터 파이프라인을 유연하게 구성할 수 있습니다. - **단점** - 설정이 복잡하고 많은 리소스를 소비하므로, 작은 규모의 프로젝트에는 적합하지 않을 수 있습니다. - 분산 환경에 대한 추가적인 인프라 관리가 필요합니다. --- ## 3. Apache Flink **Apache Flink**는 실시간 스트리밍 데이터 처리에 강점을 가지며, 배치 처리도 지원하는 프레임워크입니다. - **장점** - 실시간 분석과 배치를 함께 처리해...

CLI 환경 CURL 사용 예제 모음 (GET/POST/DELETE/PUT/HEAD)

### HEAD 요청 ``` // 요청 예시 curl -I https://www.example.com -- // 서버가 받았을 때 전문 HEAD / HTTP/1.1 Host: www.example.com ``` ### DELETE 요청 ``` // 요청 예시 curl -X DELETE https://www.example.com/resource -- // 서버가 받았을 때 전문 DELETE /resource HTTP/1.1 Host: www.example.com ``` ### POST 요청 ( plain-text body ) ``` // 요청 예시 curl -X POST -d "data=Hello, World!" https://www.example.com/resource -- // 서버가 받았을 때 전문 POST /resource HTTP/1.1 Host: www.example.com Content-Length: 18 Content-Type: application/x-www-form-urlencoded data=Hello, World! ``` ### POST JSON 요청 ( plain-text body ) ``` // 요청 예시 curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://www.example.com/resource -- // 서버가 받았을 때 전문 POST /resource HTTP/1.1 Host: www.example.com Content-Type: application/json Content-Length: 15 {"key": "value"} ``` ### POST 파일 업로드 ``` // 요청 예시 curl -X POST -F "file=@path/to/file" https://www.exampl...

RHEL에서 PDF 첫 페이지의 텍스트와 이미지 포함 여부 확인하기

# RHEL 환경에서 PDF의 첫 페이지에 텍스트와 이미지가 모두 포함되어 있는지 확인하는 방법 - PDF 파일이 단순한 텍스트로만 구성된 문서인지, 아니면 이미지나 혼합된 요소들로 구성된 파일인지를 확인해야 할 때가 있습니다. - 특히 첫 페이지에 텍스트와 이미지가 동시에 포함되어 있는지 확인하는 작업이 필요한 경우가 많습니다. RHEL 환경에서 이 작업을 `pdfimages`, `pdftotext`, 그리고 `pdfgrep`을 통해 쉽게 수행할 수 있습니다. ## 사전 준비: 필수 패키지 설치 - 먼저, RHEL 환경에서 `pdfimages`, `pdftotext`, `pdfgrep`을 설치해야 합니다. - 일반적으로 RHEL에서는 **Poppler**와 **PDFgrep** 패키지를 통해 이 도구들을 제공합니다. `poppler` ``` sudo yum install poppler-utils ``` `pdfgrep` ``` sudo yum install pdfgrep ``` ## 1. 첫 페이지에 이미지가 포함되어 있는지 확인하기 - `pdfimages` 명령어는 PDF 파일에서 이미지를 추출하는 데 유용한 도구로, Poppler 패키지에 포함되어 있습니다. 이를 통해 첫 번째 페이지에 이미지가 있는지 확인할 수 있습니다. ``` pdfimages -f 1 -l 1 yourfile.pdf output_prefix ``` - 설명: -f 1과 -l 1 옵션은 첫 번째 페이지만 추출하도록 지정합니다. output_prefix는 출력 이미지 파일의 접두어로 사용됩니다. - 결과 확인: 첫 번째 페이지에 이미지가 있다면 output_prefix-000.ppm 또는 output_prefix-000.jpg와 같은 파일이 생성됩니다. 파일이 생성되지 않는다면, 첫 번째 페이지에 이미지가 없다는 의미입니다. ## 2. 첫 페이지에 텍스트가 포함되어 있는지 확인하기 - 텍스트가 포함되어 있는지 확인하려면 pdftotext나 pdfgrep...

C++11에서 문자열의 알파벳 여부 확인하기: std::regex 예제

### C++11에서 문자열의 알파벳 여부 판단하기 C++11에서는 문자열이 알파벳(A-Z, a-z) 문자로만 이루어졌는지 확인하기 위해 'std::regex'를 사용할 수 있습니다. 이 방법을 통해 문자열이 특정 조건을 만족하는지 쉽게 검사할 수 있습니다. #### 코드 예시 ``` #include #include #include int main() { std::string str = "HelloWorld"; // 알파벳 문자만으로 이루어진 문자열 검사 (A-Z, a-z) std::regex alphaRegex("^[A-Za-z]+$"); if (std::regex_match(str, alphaRegex)) { std::cout 추가로 읽으면 좋을 것

Kotlin 서버 코딩: '!!'와 '?' 널 안정성 연산자 사용법

# Kotlin 서버 환경에서 '!!' vs '?' 연산자 사용 가이드 Kotlin에서 '!!'와 '?' 연산자는 널(null) 안정성을 위해 자주 사용됩니다. 서버 환경에서는 특히 안정적인 코드가 중요하기 때문에, '!!'와 '?'를 상황에 맞게 올바르게 사용하는 것이 필수적입니다. 이 글에서는 두 연산자의 차이와 서버 환경에서 안전한 코드 작성을 위한 사용 가이드를 예시와 함께 정리합니다. --- ## '!!' 연산자: 널 강제 해제 - '!!' 연산자는 **널이 아님을 확신**할 때 사용하는 연산자로, 객체가 `null`일 경우 `NullPointerException`을 발생시킵니다. - 잘못 사용하면 서버의 예기치 않은 종료를 유발할 수 있기 때문에 서버 환경에서는 주의가 필요합니다. ### '!!'예제 ``` fun processData(data: String?) { val length = data!!.length // data가 null이면 예외 발생 println("Data length: $length") } fun main() { processData("Hello") // 정상 작동 processData(null) // NullPointerException 발생 } ``` 위 예제에서 data가 null인 경우 NullPointerException이 발생하며 서버가 중단될 위험이 있습니다. ## 서버에서 !! 사용 시 주의사항 - nullable 값의 null 가능성을 충분히 확인 후 사용해야 합니다. - 서버와 같이 예기치 않은 데이터가 유입될 수 있는 환경에서는 !! 사용을 최소화하는 것이 좋습니다. ## ? 연산자: 안전 호출 (Safe Call) - ? 연산자는 안전 호출 연산자로, 객체가 null일 수 있을 때 예외를 방...

이 블로그의 인기 게시물

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

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

키움 OPEN API MFC 개발 (1)