728x90

대한민국 최초의 코딩교육은 1980년대 초반에 등장한 컴퓨터학원에서 시작되었습니다. 그 당시에는 주로 BASIC 언어를 가르치는 것이 일반적이었습니다.

하지만 1990년대 중반에는 인터넷의 보급과 함께 컴퓨터가 보급되면서 인터넷 프로그래밍, 웹 디자인 등 새로운 분야가 생겨나게 되었습니다. 이에 따라 컴퓨터학원에서는 다양한 프로그래밍 언어와 웹 디자인, 게임 프로그래밍 등 다양한 분야의 코딩교육을 제공하게 되었습니다.

2010년대 이후로는 초중고 학교에서도 코딩교육이 점차 보급되고 있으며, 정부에서도 코딩교육의 필요성을 인식하고 국가 차원에서 코딩교육을 보다 체계적으로 추진하고 있습니다.

 

==========베이직 언어 설명 =============

"BASIC(Beginners' All-purpose Symbolic Instruction Code)은 컴퓨터 프로그래밍을 처음 배우는 사람들을 위한 간단한 프로그래밍 언어입니다. 1964년에 다트머스 대학에서 개발된 이후, 인기를 얻어 대중적인 프로그래밍 언어로 자리 잡았습니다.

BASIC은 문법이 간단하고 이해하기 쉽기 때문에 초보자들이 쉽게 배울 수 있으며, 컴퓨터와 대화하는 느낌으로 프로그래밍을 할 수 있습니다. 이러한 특징으로 인해 개인용 컴퓨터가 보급되기 전까지는 가장 대중적인 프로그래밍 언어로 여겨졌습니다.

BASIC의 문법은 대부분의 프로그래밍 언어와 유사합니다. 변수와 연산자, 조건문과 반복문, 함수 등의 요소들이 있으며, 프로그램의 실행 순서는 상대적으로 간단합니다. 또한 많은 컴퓨터에서 기본으로 제공되는 인터프리터를 통해 쉽게 실행해 볼 수 있습니다.

하지만 BASIC의 단점도 있습니다. 프로그램의 실행 속도가 느리다는 것과, 대규모 프로그램을 작성하기에는 한계가 있다는 것이 그 예입니다. 이러한 단점으로 인해 BASIC은 이후에 다른 프로그래밍 언어들에게 밀려 대중성을 잃어갔습니다."

 

728x90
728x90

두 명의 플레이어가 가위바위보를 하고, 이긴 플레이어가 승리합니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int player1, player2, result;
    
    // srand() 함수를 이용해 시간 기반의 seed 값으로 설정
    srand(time(NULL)); 
    
    printf("== Rock Paper Scissors Game ==\n");
    printf("Player 1: 1 (Rock), 2 (Paper), 3 (Scissors)\n");
    printf("Player 2: 1 (Rock), 2 (Paper), 3 (Scissors)\n\n");
    
    // 플레이어 1과 2의 입력값을 받아옴
    printf("Player 1, enter your choice: ");
    scanf("%d", &player1);
    printf("Player 2, enter your choice: ");
    scanf("%d", &player2);
    
    // 입력값이 범위를 벗어나면 재입력 받음
    while(player1 < 1 || player1 > 3 || player2 < 1 || player2 > 3) {
        printf("Invalid input. Enter again.\n");
        printf("Player 1, enter your choice: ");
        scanf("%d", &player1);
        printf("Player 2, enter your choice: ");
        scanf("%d", &player2);
    }
    
    // 가위바위보 결과 계산
    result = (player1 - player2 + 3) % 3;
    
    // 결과에 따라 출력값 설정
    if(result == 0) {
        printf("Draw!\n");
    }
    else if(result == 1) {
        printf("Player 1 wins!\n");
    }
    else {
        printf("Player 2 wins!\n");
    }
    
    return 0;
}

위 코드는 srand() 함수를 이용해 난수 생성에 시간 기반의 seed 값을 사용합니다. 이후에는 scanf() 함수를 이용해 두 명의 플레이어가 가위바위보를 입력하도록 합니다. 입력값이 범위를 벗어나면 재입력을 받도록 하고, 이후 결과를 계산하여 출력합니다. 이 코드를 실행하면 콘솔창에서 간단한 가위바위보 게임을 즐길 수 있습니다.

728x90
728x90

정확한 기간을 예측하기는 어렵지만, 현재 교육부에서는 2025년부터 초중고 전 교과목에 인공지능(AI) 및 코딩 교육을 강화하고자 하는 계획을 발표하였습니다. 또한, 코딩 교육은 이미 국내에서 많은 학교에서 시행되고 있으며, 수능과 같은 대학 입시 시험에서도 코딩과 프로그래밍 기술이 중요한 역할을 할 것으로 예상됩니다. 따라서, 앞으로 수능에서 코딩과 프로그래밍 기술을 검증하는 시험이 추가될 가능성은 높아질 것으로 예상됩니다.

728x90
728x90

C언어는 프로그래밍 언어 중에서도 가장 기본적인 언어 중 하나입니다. 이 언어를 이용하면 컴퓨터 시스템을 제어하고, 프로그램을 작성할 수 있습니다. C언어의 기초문법을 자세히 설명해보겠습니다.

주석

주석은 프로그램에서 설명을 위해 사용되는 부분으로, 컴파일러에 의해 무시됩니다. 주석은 다음과 같은 두 가지 형태로 작성됩니다

// 한 줄 주석


/*
여러 줄 주석
*/

변수

C언어에서는 변수를 사용하여 값을 저장하고, 이를 다른 곳에서 사용할 수 있습니다. 변수는 다음과 같은 형식으로 선언됩니다.

데이터_타입 변수_이름;
ex) int a;

여기서 데이터_타입은 변수에 저장될 값의 타입을 의미하며, 변수_이름은 변수의 이름을 의미합니다. 예를 들어, 다음과 같이 int 타입의 변수 x를 선언할 수 있습니다.

int x;


int x = 10;

또한, 변수를 선언과 동시에 초기화할 수 있습니다. 예를 들어, 다음과 같이 int 타입의 변수 x를 선언과 동시에 10으로 초기화할 수 있습니다.

int x = 10;

연산자

C언어에서는 다양한 연산자를 사용하여 계산을 수행할 수 있습니다. 이 중에서 대표적인 연산자들을 설명하겠습니다.

산술 연산자

산술 연산자는 다음과 같습니다.

연산자설명

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지

대입 연산자

대입 연산자는 다음과 같습니다.

연산자설명

= 대입 연산자
+= 덧셈 후 대입
-= 뺄셈 후 대입
*= 곱셈 후 대입
/= 나눗셈 후 대입
%= 나머지 후 대입

비교 연산자

비교 연산자는 다음과 같습니다.

연산자설명

== 같은지 비교
!= 다른지 비교
> 큰지 비교
>= 크거나 같은지
< 작은지 비

배열

C언어에서는 배열을 사용하여 여러 개의 데이터를 하나의 변수에 저장할 수 있습니다. 배열은 다음과 같이 선언됩니다.

데이터_타입 배열_이름[배열_크기];

여기서 데이터_타입은 배열에 저장될 데이터의 타입을 의미하며, 배열_이름은 배열의 이름을 의미합니다. 또한, 배열_크기는 배열의 크기를 의미합니다. 예를 들어, 다음과 같이 int 타입의 5개의 원소를 가진 배열 arr을 선언할 수 있습니다.

int arr[5];

배열의 각 원소는 다음과 같이 인덱스를 이용하여 접근할 수 있습니다.

arr[0] = 10;
arr[1] = 20;

조건문

C언어에서는 조건문을 사용하여 프로그램의 흐름을 제어할 수 있습니다. 조건문은 다음과 같이 작성됩니다.

if (조건식) {
  // 조건식이 참일 경우 실행될 코드
} else {
  // 조건식이 거짓일 경우 실행될 코드
} 

여기서 조건식은 참 또는 거짓을 판단할 수 있는 식을 의미합니다. 예를 들어, 다음과 같이 x가 10보다 크면 "x is greater than 10"을 출력하고, 그렇지 않으면 "x is less than or equal to 10"을 출력하는 코드를 작성할 수 있습니다.

int x = 15;
if (x > 10) {
  printf("x is greater than 10");
} else {
  printf("x is less than or equal to 10");
}

반복문

C언어에서는 반복문을 사용하여 동일한 코드를 여러 번 실행할 수 있습니다. C언어에서는 for문과 while문이 가장 일반적으로 사용됩니다.

for문

for문은 다음과 같이 작성됩니다.

for (초기화; 조건식; 증감식) {
  // 조건식이 참일 경우 실행될 코드
}

여기서 초기화는 반복문이 시작될 때 한 번만 실행되는 코드를 의미합니다. 조건식은 반복문이 실행될 조건을 의미하며, 이 조건식이 참이면 반복문이 계속해서 실행됩니다. 증감식은 반복문이 실행된 후에 실행되는 코드를 의미합니다.

 

포인터

포인터(pointer)는 C언어에서 가장 중요한 개념 중 하나입니다. 포인터는 메모리 주소를 가리키는 변수로, 포인터를 이용하면 메모리 주소를 직접 조작할 수 있습니다.

포인터는 다음과 같이 선언됩니다.

데이터_타입 *포인터_변수_이름;

예를 들어, int형 포인터 ptr을 선언하려면 다음과 같이 작성합니다.

int *ptr;

포인터 변수에는 다음과 같이 메모리 주소를 할당할 수 있습니다.

int num = 10;
int *ptr = &num; // ptr 변수에 num 변수의 주소를 할당

포인터 변수를 이용하여 해당 메모리 주소에 저장된 값을 가져오거나 변경할 수 있습니다.

int num = 10;
int *ptr = &num; // ptr 변수에 num 변수의 주소를 할당
*ptr = 20; // num 변수의 값을 20으로 변경

구조체

구조체(struct)는 여러 개의 변수를 묶어서 하나의 변수로 만드는 자료형입니다. 구조체는 다음과 같이 정의됩니다.

struct 구조체_이름 {
  데이터_타입 멤버_변수_이름1;
  데이터_타입 멤버_변수_이름2;
  ...
};

예를 들어, 다음과 같이 Person이라는 구조체를 정의할 수 있습니다.

struct Person {
  char name[20];
  int age;
};

위의 구조체를 사용하여 변수를 선언할 수 있습니다.

struct Person p1;

구조체 멤버 변수에 접근할 때는 다음과 같이 작성합니다.

p1.age = 20;

동적 메모리 할당

동적 메모리 할당(dynamic memory allocation)은 프로그램 실행 중에 메모리를 할당하는 방법입니다. 동적 메모리 할당을 사용하면 프로그램의 유연성을 높일 수 있습니다.

동적 메모리 할당은 다음과 같은 함수를 사용하여 수행할 수 있습니다.

void *malloc(size_t size);

위의 함수는 메모리 블록을 할당하고, 할당된 메모리 블록의 주소를 반환합니다. size 매개변수는 할당할 메모리 블록의 크기를 지정합니다.

할당된 메모리 블록을 사용한 후에는 다음과 같은 함수를 사용하여 메모리를 해제해야 합니다.

void free(void *ptr);
728x90
728x90

지금 유지보수 하는 업체의 서버를 이전 해야할 필요가 생겼다.

서버 작업은 자주 하지 않다 보니 매번 새롭다.

게다가 버전을 맞추어 작업을 하다보니 몇 번을 해도 거의 같은 시간이 걸린다 ㅎㅎ

다음에 참조하기 위해 작업한 내용을 기록한다.

이번 작업은 클라우드 서버에 ubuntu, Docker등을 설치할 예정이다

----------------------------------

서버 : ubuntu 20.04

볼륨추가 : 1000Giga Byte

ubuntu@ubuntu1:~$ sudo su
root@ubuntu1:/home/ubuntu# fdisk -l

#파티션을 나눈다
root@ubuntu1:/home/ubuntu# fdisk /dev/vdc

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x452e13e9.

Command (m for help): n
Partition type
p   primary (0 primary, 0 extended, 4 free)
e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151999, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2097151999, default 2097151999):

Created a new partition 1 of type 'Linux' and of size 1000 GiB.

Command (m for help): p
Disk /dev/vdc: 1000 GiB, 1073741824000 bytes, 2097152000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x452e13e9

Device     Boot Start        End    Sectors  Size Id Type
/dev/vdc1        2048 2097151999 2097149952 1000G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@ubuntu1:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           394M 1004K  393M   1% /run
/dev/vda1        97G  1.8G   95G   2% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/loop0       62M   62M     0 100% /snap/core20/1270
/dev/loop1       68M   68M     0 100% /snap/lxd/21835
/dev/vda15      105M  5.2M  100M   5% /boot/efi
tmpfs           394M     0  394M   0% /run/user/1000
/dev/loop3       50M   50M     0 100% /snap/snapd/18357
/dev/loop4       64M   64M     0 100% /snap/core20/1822
/dev/loop5       92M   92M     0 100% /snap/lxd/24061

#파티션을 포맷한다
root@ubuntu1:/home/ubuntu# mkfs.ext4 /dev/vdc1

#UUID를 확보한다
root@ubuntu1:/home/ubuntu# blkid

#디랙토리를 만든다
root@ubuntu1:/home/ubuntu# mkdir -p /home/ubuntu/storage

#재부팅시 자동 연결하기 위해서 파일에 설정한다
root@ubuntu1:/home/ubuntu# vi /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 1
LABEL=UEFI      /boot/efi       vfat    umask=0077      0 1
/dev/vdb        none    swap    sw,comment=cloudconfig  0       0
UUID=0a76a959-85d1-4e8c-8fe6-6e8d036017f7 /home/ubuntu/storage ext4 defaults 0 0

root@ubuntu1:/home/ubuntu# mount -a
root@ubuntu1:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           394M  992K  393M   1% /run
/dev/vda1        97G  1.9G   95G   2% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/loop0       62M   62M     0 100% /snap/core20/1270
/dev/loop1       68M   68M     0 100% /snap/lxd/21835
/dev/vda15      105M  5.2M  100M   5% /boot/efi
tmpfs           394M     0  394M   0% /run/user/1000
/dev/loop3       50M   50M     0 100% /snap/snapd/18357
/dev/loop4       64M   64M     0 100% /snap/core20/1822
/dev/loop5       92M   92M     0 100% /snap/lxd/24061
/dev/vdc1       984G   77M  934G   1% /home/ubuntu/storage

#볼륨을 해제하고 다시 사용할때 사용한다
umount /home/ubuntu/storage << 마운트 해제시

Mysql  설치 및 원격접속 허용

apt-get install mariadb-server
mysql -uroot

> use mysql;
update user set authentication_string=password('password') where user='root';
flush priviledges ;
grant all privileges on . to 'root'@'%' identified by 'password';
> 

root@ubuntu1:/home/ubuntu/storage# cd /etc
root@ubuntu1:/etc# cd mysql

root@ubuntu1:/etc/mysql# ls
conf.d  debian-start  debian.cnf  mariadb.cnf  mariadb.conf.d  my.cnf  my.cnf.fallback

root@ubuntu1:/etc/mysql# cd mariadb.conf.d

root@ubuntu1:/etc/mysql/mariadb.conf.d# ls
50-client.cnf  50-mysql-clients.cnf  50-mysqld_safe.cnf  50-server.cnf

root@ubuntu1:/etc/mysql/mariadb.conf.d# vi 50-server.cnf
127.0.0.1  >> 0.0.0.1 로변경
root@ubuntu1:/etc/mysql/mariadb.conf.d# systemctl restart mysql

>> sql 파일로  DB를 생성함

asp.net core 3.1설치

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
 -O packages-microsoft-prod.deb

nginx proxy 설정

server {
listen        80;
server_name   example.com *.example.com;

		location / {
		    proxy_pass         <http://localhost:5000>;
		    proxy_http_version 1.1;
		    proxy_set_header   Upgrade $http_upgrade;
		    proxy_set_header   Connection keep-alive;
		    proxy_set_header   Host $host;
		    proxy_cache_bypass $http_upgrade;
		    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_set_header   X-Forwarded-Proto $scheme;
		}
		location /downloads {
		    alias /var/downloads/;
		    autoindex on;
		    limit_rate_after 10M;
		    limit_rate 5M;
		    access_log /var/log/nginx/down.access.log;
		    error_log  /var/log/nginx/down.error.log;
		    charset utf-8;
		}

}

Docker 설치

오래된 버전 삭제하기

혹시나 기존의 오래된 버전이 있는지 확실히 할 수 있으며, 있다면 최신 버전 설치를 위해 삭제 해줍니다.

bash

$ sudo apt-get update

$ sudo apt-get -y install \ apt-transport-https \ ca-certificates \ curl \ gnupg 
\ lsb-release 

curl -fsSL
[https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg)

| sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \

"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]

[https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu)

\

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker Engine 설치하기

아래 명령어를 입력하면 자동으로 최신 버전이 설치 됩니다.

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli

[containerd.io](http://containerd.io/)

설치 완료

설치가 완료된 후에는

bash

$docker --version

$apt install docker-compose

$cd /home/ubuntu/appnet
$docker-compose up -d

vi Dockerfile
FROM ubuntu:20.04

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apt-get update
RUN apt-get install -y tzdata

RUN apt-get update && apt-get -y install apache2 software-properties-common
RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y libapache2-mod-php7.3 php7.3 php7.3-cli php7.3-mysql
RUN a2enmod rewrite
EXPOSE 80
CMD apachectl -D FOREGROUND

RUN apt install vim -y
RUN apt install net-tools -y
RUN apt install iputils-ping -y

RUN apt update -y
RUN apt install language-pack-ko -y
RUN apt install fonts-nanum -y
RUN apt install fonts-nanum-coding -y
RUN apt install fonts-noto-cjk -y
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

WORKDIR /
===================================
vi docker-compose.yml
version: '2'

services:
    ubuntu2004:
        hostname: a
        container_name: a_container
        build:
            context: .
            dockerfile: ./Dockerfile
        ports:
            - "8100:80"
        stdin_open: true
        tty: true
        environment:
            - TZ:"Asia/Seoul"
        volumes:
            - ./html:/var/www/html
========================
cd /etc/nginx/sites-available
vi default
server {
    listen        80;
    server_name   example.com *.example.com;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    location /downloads {
        alias /var/downloads/;
        autoindex on;
        limit_rate_after 10M;
        limit_rate 5M;
        access_log /var/log/nginx/down.access.log;
        error_log  /var/log/nginx/down.error.log;
        charset utf-8;
    }
}
server {
    listen        80;
    server_name   example.com *.example.com;

    location / {
        proxy_pass         http://localhost:8100;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    location /downloads {
        alias /var/downloads/;
        autoindex on;
        limit_rate_after 10M;
        limit_rate 5M;
        access_log /var/log/nginx/down.access.log;
        error_log  /var/log/nginx/down.error.log;
        charset utf-8;
    }
}

service nginx restart

http://localhost:8100 은 실행됨

DNS변경 작업

 

- 이상 -

 

 

 

목동코딩학원 : 유니티, 로블록스 게임개발 교육

 

728x90
728x90

Docker container에서 curl을 사용하려면 다음과 같은 방법 중 하나를 선택하여 진행할 수 있습니다.

  1. curl이 이미 설치된 Docker 이미지를 사용하기
    • curl이 이미 설치된 Docker 이미지를 사용하면 curl 명령어를 사용할 수 있습니다. 예를 들어, ubuntu 이미지를 사용하여 Docker 컨테이너를 실행하면 curl을 사용할 수 있습니다.
docker run -it ubuntu
  1. 컨테이너 내부에서 curl 명령어를 실행하면, 컨테이너 내부에 설치된 curl을 사용할 수 있습니다.
  2. Docker 컨테이너 내부에 curl 설치하기
    • Docker 컨테이너 내부에 curl을 설치하여 사용할 수도 있습니다. 이를 위해서는 Dockerfile에서 curl을 설치하고 이미지를 빌드해야 합니다. 예를 들어, 다음과 같은 Dockerfile을 작성하여 curl을 설치한 이미지를 빌드할 수 있습니다.
FROM ubuntu:latest

RUN apt-get update && apt-get install -y curl

이후, 다음과 같이 Docker 이미지를 빌드하여 컨테이너를 실행할 수 있습니다

docker build -t myimage .
docker run -it myimage
  1. 컨테이너 내부에서 curl 명령어를 실행하면, 컨테이너 내부에 설치된 curl을 사용할 수 있습니다.
  2. Docker 컨테이너 외부에서 curl 사용하기
    • Docker 컨테이너 외부에서 curl 명령어를 실행할 수 있습니다. 이를 위해서는 docker exec 명령어를 사용하여 컨테이너 내부에서 curl 명령어를 실행해야 합니다. 예를 들어, 다음과 같이 컨테이너를 실행하고 docker exec 명령어를 사용하여 컨테이너 내부에서 curl 명령어를 실행할 수 있습니다.
docker run -it myimage
# 컨테이너 내부에서 실행
curl https://www.google.com
# 컨테이너 외부에서 실행
docker exec <container_id> curl https://www.google.com

위와 같이 curl을 사용하여 Docker 컨테이너 내부와 외부에서 데이터를 송수신할 수 있습니다

728x90
728x90

ChatGPT와 같은 대화형 인공지능 API를 Python에서 사용하려면 다음과 같은 단계를 수행해야 합니다.

  1. ChatGPT API를 사용하기 위해 API 키를 발급받습니다. API 키는 OpenAI 사이트에서 발급받을 수 있습니다.
  2. Python에서 requests 모듈을 사용하여 ChatGPT API를 호출합니다.
import requests
import json

prompt = "Hello, how are you?"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"
}

data = {
    "prompt": prompt,
    "temperature": 0.5,
    "max_tokens": 60,
    "top_p": 1,
    "frequency_penalty": 0,
    "presence_penalty": 0
}

response = requests.post("https://api.openai.com/v1/engines/davinci-codex/completions", headers=headers, json=data)

response_data = json.loads(response.text)
print(response_data['choices'][0]['text'])

 

위 코드는 requests 모듈을 사용하여 ChatGPT API를 호출하는 예시입니다. API 호출 시 https://api.openai.com/v1/engines/davinci-codex/completions URL을 사용하며, headers 변수를 통해 API 키를 인증합니다. 그리고 data 변수를 통해 인공지능 모델에 전달할 문장과 다양한 옵션을 설정합니다.

  1. API 호출 결과는 response 변수에 저장됩니다. 이 값을 json.loads 함수를 사용하여 JSON 형태로 디코딩한 뒤, 필요한 정보를 추출하여 사용할 수 있습니다. 위 코드에서는 response_data['choices'][0]['text']를 통해 반환된 답변을 출력하고 있습니다.
  2. 이제 ChatGPT API를 사용하여 Python 애플리케이션에서 인공지능 대화 시스템을 구현할 수 있습니다.

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90
728x90

ChatGPT와 같은 대화형 인공지능 API를 PHP에서 사용하려면 다음과 같은 단계를 수행해야 합니다.

  1. ChatGPT API를 사용하기 위해 API 키를 발급받습니다. API 키는 OpenAI 사이트에서 발급받을 수 있습니다.
  2. PHP에서 HTTP 클라이언트를 사용하여 ChatGPT API를 호출합니다.
$prompt = "Hello, how are you?";

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.openai.com/v1/engines/davinci-codex/completions",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode([
        "prompt" => $prompt,
        "temperature" => 0.5,
        "max_tokens" => 60,
        "top_p" => 1,
        "frequency_penalty" => 0,
        "presence_penalty" => 0
    ]),
    CURLOPT_HTTPHEADER => [
        "content-type: application/json",
        "Authorization: Bearer YOUR_API_KEY"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $response_data = json_decode($response, true);
    echo $response_data['choices'][0]['text'];
}

위 코드는 curl 함수를 사용하여 ChatGPT API를 호출하는 예시입니다. API 호출 시 https://api.openai.com/v1/engines/davinci-codex/completions URL을 사용하며, prompt 속성을 통해 인공지능 모델에 전달할 문장을 지정합니다. 그리고 다양한 옵션들을 설정하고, CURLOPT_HTTPHEADER를 통해 API 키를 인증합니다.

  1. API 호출 결과는 curl_exec 함수의 반환값인 $response 변수에 저장됩니다. 이 값을 json_decode 함수를 사용하여 JSON 형태로 디코딩한 뒤, 필요한 정보를 추출하여 사용할 수 있습니다. 위 코드에서는 $response_data['choices'][0]['text']를 통해 반환된 답변을 출력하고 있습니다.
  2. 이제 ChatGPT API를 사용하여 PHP 애플리케이션에서 인공지능 대화 시스템을 구현할 수 있습니다.

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업
 

 

 
728x90

+ Recent posts