1. OPcache 정보 보기

<?php
$status = opcache_get_status();
echo json_encode($status, JSON_PRETTY_PRINT);
?>

 

 

2. 항목 설명

The opcache_get_status function in PHP returns an associative array containing information about the current status of the OPcache (Opcode Cache). Each key in the array represents a different aspect of the OPcache status. Here are some common items that you might find in the opcache_get_status results:

  1. opcache_enabled:
    • Description: Indicates whether OPcache is enabled or not.
    • Possible Values: true if enabled, false if disabled.
  2. cache_full:
    • Description: Indicates whether the OPcache shared memory is full.
    • Possible Values: true if the shared memory is full, false otherwise.
  3. restart_pending:
    • Description: Indicates whether a restart of the OPcache is pending.
    • Possible Values: true if a restart is pending, false otherwise.
  4. restart_in_progress:
    • Description: Indicates whether a restart of the OPcache is currently in progress.
    • Possible Values: true if a restart is in progress, false otherwise.
  5. memory_usage:
    • Description: Provides information about memory usage in the OPcache (unit : bytes).
    • Items:
      • used_memory: Amount of memory used by the OPcache.
      • free_memory: Amount of free memory in the OPcache.
      • wasted_memory: Amount of memory wasted by fragmentation.
  6. interned_strings_usage:
    • Description: Information about interned strings, which are unique string values stored in a single memory location to reduce duplication.
    • Items:
      • buffer_size: Size of the interned strings buffer.
      • used_memory: Amount of memory used by interned strings.
      • free_memory: Amount of free memory in the interned strings buffer.
      • number_of_strings: Number of interned strings.
  7. opcache_statistics:
    • Description: Provides statistical information about the OPcache.
    • Items:
      • num_cached_scripts: Number of scripts cached by OPcache.
      • num_cached_keys: Number of cache keys (unique script identifiers).
      • max_cached_keys: Maximum number of cache keys allowed.
      • hits: Number of cache hits.
      • misses: Number of cache misses.
      • blacklist_misses: Number of blacklist misses (scripts excluded from caching).
      • blacklist_miss_ratio: Ratio of blacklist misses to total cache misses.
      • opcache_hit_rate: Ratio of cache hits to total access attempts.

These are some of the common items you might find in the opcache_get_status results. The exact list may vary depending on your PHP version and configuration. Always refer to the PHP documentation for the specific version you are using for the most accurate and up-to-date information.

'개발 > PHP' 카테고리의 다른 글

[PHP] PHP의 철학  (0) 2024.02.22
[PHP] Composer 사용법  (0) 2023.08.08
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

by ChatGPT

1. 실용성

PHP는 실용적이고 접근 가능한 스크립팅 언어로 설계되었습니다. 사용 편의성과 빠른 개발을 우선시하므로 웹 개발에 널리 사용됩니다. 구문은 상대적으로 간단하고 관대하므로 개발자는 복잡성을 최소화하면서 작업을 수행할 수 있습니다.


2. 웹 중심

PHP는 원래 웹 개발용으로 설계되었으며 동적 웹 페이지를 만드는 데 탁월합니다. 주요 사용 사례는 HTML 콘텐츠를 동적으로 생성하는 서버 측 스크립팅이며 웹 서버와 원활하게 통합됩니다.


3. 아무것도 공유하지 않는 아키텍처

앞서 언급했듯이 PHP는 각 요청이 독립적이고 요청 간에 공유 상태가 없는 비공유 아키텍처를 따릅니다. 이 접근 방식은 개발 모델을 단순화하고 더 나은 확장성을 지원합니다.

 

4. 오픈 소스 및 커뮤니티 중심

PHP는 오픈 소스이며 개발은 커뮤니티 기여에 크게 의존합니다. PHP 커뮤니티는 개발자들이 토론, 버그 보고, 확장 기능 및 프레임워크 생성을 통해 언어 성장에 적극적으로 기여하는 협업 정신으로 잘 알려져 있습니다.

 

5. 유연성

PHP는 유연성으로 유명합니다. 절차적 프로그래밍 패러다임과 객체 지향 프로그래밍 패러다임을 모두 지원하므로 개발자는 자신의 요구에 가장 적합한 스타일을 선택할 수 있습니다. 이러한 유연성 덕분에 PHP는 다양한 프로젝트에서 널리 채택되고 사용됩니다.

 

6. 상호 운용성

PHP는 다양한 데이터베이스, 웹 서버 및 외부 라이브러리와 쉽게 통합될 수 있습니다. 데이터베이스와의 상호 작용을 광범위하게 지원하므로 데이터베이스 기반 웹 애플리케이션에 대한 일반적인 선택입니다.

 

7. 진화와 적응성

PHP는 초기부터 정기적인 릴리스를 통해 새로운 기능, 개선 사항 및 성능 향상이 도입되면서 크게 발전해 왔습니다. 언어는 변화하는 웹 개발 동향과 표준에 적응해 왔습니다.

 

8. 순수함보다 실용주의

PHP는 프로그래밍 원칙을 엄격히 준수하는 것보다 실용적인 솔루션을 우선시하는 경우가 많습니다. 이러한 실용주의는 신속한 개발과 배포가 중요한 웹 개발 분야에서 인기를 얻는 데 기여했습니다.

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] Composer 사용법  (0) 2023.08.08
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

CentOS 7에 Go를 설치하는 방법은 아래와 같다.

 

01. Go binary tarball 다운로드

wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz

 

02. tarball 검증

다운로드가 끝나면, 아래 sha256sum 명령어를 실행해서, 체크썸이 동일한지 검증한다.

sha256sum go1.13.linux-amd64.tar.gz
// output
68a2297eb099d1a76097905a2ce334e3155004ec08cdea85f24527be3c48e856  go1.13.linux-amd64.tar.gz

 

03. tarball 압축 해제

/usr/local 디렉토리 안에 압축 해제한다.

sudo tar -C /usr/local -xzf go1.13.linux-amd64.tar.gz

 

04. 환경변수 등록

go 명령어를 어디서든 사용할 수 있게 profile 파일에 등록한다.

- 모든 사용자가 사용하게 하려면 /etc/profile 파일에 아래 내용을 추가해주고

- 현재 사용자만 사용하게 하려면 $HOME/.bash_profile 파일에 아래 내용을 추가한다.

예) ~/.bash_profile에 추가하는 경우

export PATH=$PATH:/usr/local/go/bin

변경한 파일을 저장하고, 변경 내용을 shell에 반영하기 위해 아래 명령어를 실행해준다.

source ~/.bash_profile

 

05. Go 실행해보기

go가 제대로 설치되었는지 테스트해본다. (hello 출력)

 

- $HOME/go 폴더를 만들어 기본 워크스페이스로 사용한다.

mkdir ~/go

- 간단한 "Hello World" Go 파일을 만든다.

a. 워크스페이스 안에, src/hello라는 폴더를 만든다.

mkdir -p ~/go/src/hello

b. src/hello 폴더 안에 아래 내용으로 hello.go 라는 파일을 만든다.

// ~/go/src/hello/hello.go
package main

import "fmt"

func main() {
    fmt.Printf("Hello, World\n")
}

c. ~/go/src/hello 디렉토리로 이동해서, go build 명령을 실행한다. hello라는 이름의 실행파일이 생성된다.

cd ~/go/src/hello
go build

d. 생성된 실행파일을 실행한다.

./hello

e. 아래와 같이 출력되면 성공!

Hello, World

 

 

참고

https://linuxize.com/post/how-to-install-go-on-centos-7/

Composer란

Composer(컴포저)란 PHP에서 사용되는 프로젝트 기반 의존성 관리 툴이다. 이는 프로젝트의 의존성 라이브러리들을 기술하고, 관리(설치/업데이트)한다.

 

의존성 관리

컴포저는 Yum이나 Apt같은 패키지 매니저가 아니다. 물론, 컴포저가 '패키지'나 라이브러리들을 다루지만, 이는 프로젝트 기반의 매니징을 하고, 의존성 라이브러리들을 프로젝트 안의 디렉토리에 설치한다. 기본적으로, 컴포저는 어떤 것도 전역 위치에 설치하지 않는다.

 

가정:

  • 여러 라이브러리에 의존성을 가지는 프로젝트가 있고
  • 어떤 라이브러리는 또 다른 라이브러리에 의존성을 가진다

Composer:

  • 의존성을 가지는 라이브러리를 명시할 수 있게 해준다.
  • 어떤 패키지의 어떤 버전이 필요한지 찾아서, 프로젝트 폴더 안에 설치해준다.
  • 모든 의존성 라이브러리들을 하나의 명령으로 업데이트 할 수 있다.

 

최소 요구사양

최신버전의 Composer는 PHP 7.2.5를 요구한다.

파일 압축 해제를 위해, 7z(또는 7zz), gzip, tar, untar, unzip, xz을 사용한다.

 

설치

Composer 실행파일 다운로드 페이지 : https://getcomposer.org/download/

(composer.phar 파일을 다운받으면 된다.)

phar 파일이란?
배포를 쉽게 하기 위해 php 파일들과 관련 리소스들을 하나로 묶어 놓은 파일이다.

 

사용

Composer를 프로젝트에 사용하려면, composer.json 파일이 있어야 한다.

 

Composer.json

{
    "require": {
        "monolog/monolog": "2.0.*"
    }
}
  • 이파일에 프로젝트에서 사용하는 의존성과, 다른 메타데이터들을 기술한다. 
  • composer.json은 보통 프로젝트의 최상위 디렉토리 안에 위치해야 한다.
  • "require" 키 : require 키에 의존성 라이브러리들 정보를 기술한다.
    • 패키지 이름 : vendor 이름과 프로젝트 이름의 조합으로 이루어진다. (예: json 라이브러리를 만든 vendor가 둘일 경우, 패키지 이름은 igorw/json 또는 seldaek/json 등이 될 수 있다.)
    • 패키지 버전 제한 : 패키지 버전을 2.0.* 이라고 기술 하는 경우, 2.0 브랜치의 어떤 버전도 사용 가능하다.  (>=2.0 <2.1 사이의 버전을 사용함)

 

의존성 설치

의존성 라이브러리들을 업데이트 하기 위해, 프로젝트 폴더 안에서 update 명령을 사용한다.

 

php composer.phar update

 

  • 위 명령을 수행하면, composer.json 파일 안의 모든 의존성 관련 정보를 파악하여 해당 버전의 composer.lock 파일을 생성한다. (이 composer.lock 파일을 버전관리 시스템에 commit 하는 것을 권장함)
  • 그 후 암시적으로 install 명령을 수행하여 해당 의존성 라이브러리들을 다운받는다.

이미 composer.lock 파일이 존재 하는경우(버전관리 시스템에 커밋된 lock 파일을 받은 경우), install 명령을 해주면 된다.

php composer.phar install

끝. 프로젝트 폴더의 vendor라는 폴더 하위에, 의존성 라이브러리들이 설치된다.

 

 

참고

https://getcomposer.org/doc/00-intro.md

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] PHP의 철학  (0) 2024.02.22
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

Qt의 메타-오브젝트 시스템(meta-object system)객체간 통신을 위한 시그널-슬롯 매커니즘과, 런타임 타입 정보, 동적 속성 시스템을 제공한다.

 

메타-오브젝트 시스템은 아래 세 가지를 기반으로 한다:

1. QObject 클래스 : 객체를 위한 기반 클래스를 제공하여 메타-오브젝트 시스템의 이점을 이용할 수 있게 한다.

2. Q_OBJECT 매크로 : 클래스의 private 섹션 안에 선언되며, 동적 속성과 시그널 슬롯 등의 메타-오브젝트 기능을 사용할 수 있게 한다.

3. Meta-Object Compiler(moc) : QObject의 자식 클래스들에게 필요한 메타-오브젝트 구현 코드를 제공한다.

 

moc 툴은 C++ 헤더, 소스 파일 읽어 Q_OBJECT 매크로가 포함된 클래스를 찾고,

이를 찾으면 각 클래스에 대해 메타-오브젝트 코드를 포함하는 또다른 C++ 소스 파일을 생성해낸다.

이렇게 생성된 소스파일은 인클루드, 컴파일되고 클래스 구현과 링크되어 사용된다.

 

예) 헤더파일에 Q_OBJECT 매크로가 있는 클래스가 있다면,

메타-오브젝트를 이용할 수 있는 코드들을 추가한 새로운 헤더 파일을 만들어내고,

이 헤더 파일을 include한 새로운 C++ 구현 파일이 생겨 빌드시에는 이를 컴파일하고 링크하여 사용한다.

 

 

참고

https://doc.qt.io/qt-6/metaobjects.html

https://coding-chobo.tistory.com/9

QTest로 유닛 테스트를 작성하고, CMake로 빌드파일 만들어 Visual Studio로 빌드하는데 아래와 같은 오류 메시지가 뜨는 경우가 있다.

 

오류메시지

error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)"

 

원인

main 함수가 없어 entry point가 제대로 설정되지 않았기 때문이다

 

해결책

테스트 케이스가 작성된 cpp 파일 하단에, 아래의 내용을 넣어주면 된다.

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

tst_myfirsttest.cpp 전체 소스

#include <QObject>
#include <QTest>
#include <qDebug>


class MyFirstTest : public QObject
{
    Q_OBJECT

private:
    bool myCondition()
    {
        return true;
    }

private slots:
    void initTestCase()
    {
        qDebug("Called before everything else.");
    }

    void myFirstTest()
    {
        QVERIFY(true);  // check that a condition is satisfied
        QCOMPARE(1, 1); // compare two values
    }

    void mySecondTest()
    {
        QVERIFY(myCondition());
        QVERIFY(1 != 2);
    }

    void cleanupTestCase()
    {
        qDebug("Called after myFirstTest and mySecondTest.");
    }
};

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

CMakeLists.txt

set(_components
    Core
    Test)

foreach(_component ${_components})
    find_package(Qt5${_component})
    list(APPEND QT_LIBRARIES ${Qt5${_component}_LIBRARIES})
    list(APPEND QT_INCLUDES ${Qt5${_component}_INCLUDE_DIRS})
    add_definitions(${Qt5${_component}_DEFINITIONS})
endforeach()

include_directories(${QT_INCLUDES})

find_program(QT_QMAKE_EXECUTABLE qmake)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

enable_testing(true)

add_executable(mytest tst_myfirsttest.cpp)
add_test(NAME mytest COMMAND mytest)
target_link_libraries(mytest PRIVATE ${QT_LIBRARIES})
qt_generate_moc(tst_myfirsttest.cpp tst_myfirsttest.moc TARGET mytest)

Electron이란

Electron(이전의 Atom Shell)은 OpenJS Foundation에서 개발 및 유지 관리하는 무료 오픈 소스 소프트웨어 프레임워크입니다. 이 프레임워크는 Chromium 브라우저 엔진 버전을 사용하여 렌더링되는 웹 기술(주로 HTML, CSS 및 JavaScript, 프런트엔드 프레임워크 및 웹 어셈블리와 같은 다른 기술도 가능함)을 사용하여 데스크톱 애플리케이션을 생성하도록 설계되었으며 백엔드는 Node.js 런타임 환경을 사용합니다. 또한 다양한 API를 사용하여 Node.js 서비스 및 프로세스 간 통신 모듈과의 기본 통합과 같은 기능을 활성화합니다.

Electron은 원래 Atom용으로 제작되었으며 Atom, GitHub Desktop, Light Table, Visual Studio Code, WordPress Desktop 및 Eclipse Theia를 포함한 여러 오픈 소스 프로젝트의 기본 GUI 프레임워크입니다.

 

참고

https://www.electronjs.org/

https://en.wikipedia.org/wiki/Electron_(software_framework)

QSQLITE DB에서 regexp를 사용하려면,

커넥션 열 때 setConnectOptions("QSQLITE_ENABLE_REGEXP=1"); 을 설정해 주어야 한다.

bool DB::connectDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "connName");
    db.setConnectOptions("ISC_DPB_LC_CTYPE=UTF-8");
    db.setConnectOptions("QSQLITE_ENABLE_REGEXP=1");
    db.setDatabaseName(":memory:");
    if (!db.isValid())
    {
        qDebug() << "addDatabase failed.(db is not valid)";
        return false;
    }
    if (!db.isOpen())
    {
        if (!db.open())
        {
            qDebug() << QString("DB Open Failed - connName : %1, dbname : %2").arg("connName").arg(":memory:");
            QSqlDatabase::removeDatabase("connName");
            return false;
        }
    }
    return true;
}

 

데이터를 조회할 때는, 아래와 같이 사용한다.

한글로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[ㄱ-ㅎ가-힣]';

영어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[a-zA-Z]';

숫자로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[0-9]';

일본어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[ぁ-んァ-ヶー一-龠]' ;

중국어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[一-龥]';

샘플 코드

void DB::select() {
    QSqlDatabase DB = QSqlDatabase::database("connName");    

    QSqlQuery sql(DB);
    QString query = "SELECT * FROM tablename WHERE `subject` REGEXP '^[ㄱ-ㅎ가-힣]'";
    bool re = sql.exec(query);
    while (sql.next()) {
        qDebug() << sql.value(0).toString();
    }    
}

+ Recent posts