728x90

최초의 인공지능은 20세기 초반의 계산 기계들과 로봇들이었습니다. 그러나 이들은 우리가 오늘날에 생각하는 인공지능과는 매우 다릅니다.

인공지능의 개념은 1956년 다트머스 컨퍼런스에서 처음으로 제안되었습니다. 이 컨퍼런스는 조지 다니엘 와이츠(George Daniel Weiss)와 존 매카시(John McCarthy)가 중심 인물로 참석하여 진행되었습니다. 이 컨퍼런스에서 인공지능은 "기계가 인간의 지능적 능력을 시뮬레이션할 수 있는 능력"으로 정의되었습니다.

최초의 인공지능 시스템은 1951년에 제작된 크리스토퍼 스트라치(Cristopher Strachey)의 '오감자(OXO)' 게임입니다. 이 게임은 이전에는 존재하던 틱택토 게임의 전자 버전으로, 컴퓨터가 인간과 경쟁하는 첫 번째 게임이었습니다. 그러나 이 시스템은 단순한 게임 시뮬레이션에 불과했기 때문에 인공지능의 개념 자체는 아니었습니다.

1956년, 존 매카시와 함께 인공지능 연구를 수행하던 앨런 뉴웰(Allen Newell)과 허버트 사이먼(Herbert Simon)은 로봇에게 지능적인 능력을 부여하는 시스템을 제안했습니다. 이 시스템은 로봇이 센서를 사용하여 주변 환경을 감지하고, 그 정보를 사용하여 문제를 해결하는 능력을 가지고 있었습니다.

그러나 이들의 연구는 단순한 모델링 기술에 머물렀고, 이후에도 인공지능 기술은 적극적으로 연구되지 않았습니다. 이유는 기존의 컴퓨터 시스템은 인간의 뇌와는 매우 다르기 때문에, 지능적인 능력을 가진 시스템을 만드는 것이 어렵기 때문이었습니다.

그러나 21세기 초반, 인공지능 기술은 급격한 발전을 이루었습니다. 특히 딥러닝 알고리즘과 GPU 등의 하드웨어 기술의 발전으로 인공지능 기술은 현재의 수준에 이르게 되었습니다.

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

728x90
728x90

MariaDB 설치: 이중화 설정을 위해 MariaDB를 두 대의 서버에 각각 설치합니다.

마스터 서버 설정: 두 대의 서버 중 하나를 마스터 서버로 설정합니다. 마스터 서버의 설정 파일(my.cnf)에서 다음과 같이 설정합니다.

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=database_name

위 설정은 마스터 서버의 server-id를 1로 설정하고, binary logging을 활성화하며, database_name 데이터베이스의 모든 변경 사항을 로깅하도록 설정합니다.

슬레이브 서버 설정: 다른 서버를 슬레이브 서버로 설정합니다. 슬레이브 서버의 설정 파일(my.cnf)에서 다음과 같이 설정합니다.

[mysqld]
server-id=2
log-bin=mysql-bin
binlog-do-db=database_name

마스터 서버와 마찬가지로, 슬레이브 서버의 server-id를 2로 설정하고, binary logging을 활성화하며, database_name 데이터베이스의 모든 변경 사항을 로깅하도록 설정합니다.

마스터와 슬레이브 간의 계정 설정: 마스터와 슬레이브 간에 데이터를 동기화하려면 마스터 서버에서 슬레이브 서버에 대한 계정을 생성해야 합니다. 다음 SQL 문을 사용하여 계정을 생성합니다.

CREATE USER 'replication_user'@'slave_server_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_server_ip';

위 SQL 문에서는 슬레이브 서버의 IP 주소를 slave_server_ip로 대체하고, password를 실제 암호로 대체합니다.

마스터 서버에서 binlog 정보 확인: 마스터 서버에서 다음 명령을 실행하여 binlog 파일 이름과 위치 정보를 확인합니다.

SHOW MASTER STATUS;

위 명령은 마스터 서버의 binlog 파일 이름과 파일 위치를 확인할 수 있습니다.

슬레이브 서버에서 replication 설정: 슬레이브 서버에서 다음 명령을 실행하여 마스터 서버와의 replication을 설정합니다.

CHANGE MASTER TO
MASTER_HOST='master_server_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', -- 마스터 서버에서 확인한 파일 이름으로 대체
MASTER_LOG_POS=4;

위 명령에서는 마스터 서버의 IP 주소, replication_user 계정, 암호 및 마스터 서버에서 확인한 binlog 파일 이름 및 위치를 사용하여 슬레이브 서버의 replication을 설정합니다.

 

슬레이브 서버 시작: 슬레이 이중화 설정을 마치고 슬레이브 서버를 시작합니다. 이제 마스터 서버에서 데이터를 변경하면 이 변경 사항이 슬레이브 서버로 전파됩니다.

 

이중화 동기화 확인: 이제 마스터 서버와 슬레이브 서버가 동기화되는지 확인해야 합니다. 슬레이브 서버에서 다음 명령을 실행하여 replication 상태를 확인합니다.

SHOW SLAVE STATUS\G

위 명령은 슬레이브 서버의 replication 상태를 상세히 보여줍니다. Slave_IO_Running과 Slave_SQL_Running 항목이 모두 'Yes'로 설정되어 있어야 마스터 서버와 슬레이브 서버가 동기화되었음을 나타냅니다.

 

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

728x90
728x90

목동코딩:

안드로이드 스튜디오에서 startActivityForResult() 메서드를 사용하여 다른 액티비티를 시작하고 그 결과를 수신하는 방법은 다음과 같습니다:

먼저, 다른 액티비티를 시작할 액티비티에서 startActivityForResult() 메서드를 호출합니다. 이때 호출 시 인텐트 객체와 requestCode를 함께 전달합니다.

requestCode는 나중에 결과를 수신할 때 이를 구별하기 위한 코드입니다.

Intent intent = new Intent(this, OtherActivity.class);
int requestCode = 1;
startActivityForResult(intent, requestCode);

다른 액티비티에서는 setResult() 메서드를 사용하여 결과 데이터와 resultCode를 설정합니다. 이때 resultCode는 이전 액티비티에서 전달한 requestCode와 일치해야 합니다.

Intent resultIntent = new Intent();
resultIntent.putExtra("result", "결과 데이터");
setResult(Activity.RESULT_OK, resultIntent);

이전 액티비티에서는 onActivityResult() 메서드를 오버라이드하여 결과를 수신합니다. 이때 requestCode와 resultCode를 확인하고 결과 데이터를 가져올 수 있습니다.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        String result = data.getStringExtra("result");
        // 결과 데이터 처리
    }
}

위와 같이 startActivityForResult() 메서드를 사용하면 다른 액티비티에서 처리된 결과를 이전 액티비티에서 간편하게 수신할 수 있습니다.

728x90
728x90

목동코딩학원:

안드로이드 스튜디오로 앱을 개발하면서 가변적으로 대기 시간을 변결해야 할 경우가 종종 발생한다

아래는 random과 handler를 사용하여 필요한 기능을 구현했다

minValue, maxValue는 1초가 1000이다.

 

        int minValue = 10000;
        int maxValue = 30000;

        Random random = new Random();
        int randomValue = random.nextInt(maxValue - minValue + 1) + minValue;        
        
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setResult(RESULT_OK);
                finish();
            }
        }, randomValue); //딜레이 타임 조절
728x90
728x90

아마도 내가 대학교 3학년때쯤 테트리스가 나온거 같다.

들린 얘기로는 소련의 과학자가 개발했고 , 그 댓가로는 PC한대를 받았다고 했다.

그 당시 우리학교에 강사로 오시는 카이스트 교수님중에 한 분이 테트리스를 너무 잘했다. 

그래서 나도 한번 해보았다. 

이 테트리스 게임이 무엇이길래 나는 9단계를 넘기기 위해 밤을 세웠던 기억이 난다.

나중에 추측해 보니 우리는 XT에서 게임을 하는데 , 교수님은 AT에서 테트리스를 연습 해서

우리 컴퓨터가 많이 늦었던거 같다  ㅎㅎ.

그때 나도 의지가 별 수 없구나를 알아서 그 후론 게임을 전혀 안한다 ㅎㅎ.

컴퓨터와 종일 살아야 하는 프로그래머로 살고 있지만 , 게임을 전혀 안한다.

길을 가면서도 게임을 하는 사람들을 보면 나도 저럴수 있었겠다 싶다 ㅎㅎ.

여자 들은 드라마를 주로 보고 , 남자들은 게임을 조는것 같다.

 

 

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

int main() {
    int user, computer;
    int win = 0, lose = 0, draw = 0;
    char *rps[3] = {"가위", "바위", "보"};

    srand(time(NULL));

    while (1) {
        printf("가위(0), 바위(1), 보(2) 중 하나를 선택하세요: ");
        scanf("%d", &user);

        if (user < 0 || user > 2) {
            printf("잘못된 입력입니다. 다시 입력하세요.\n");
            continue;
        }

        computer = rand() % 3;

        printf("사용자: %s, 컴퓨터: %s\n", rps[user], rps[computer]);

        if (user == computer) {
            printf("비겼습니다.\n");
            draw++;
        }
        else if (user == (computer + 1) % 3) {
            printf("이겼습니다!\n");
            win++;
        }
        else {
            printf("졌습니다.ㅠㅠ\n");
            lose++;
        }

        printf("현재 %d승 %d패 %d무 입니다.\n", win, lose, draw);

        printf("게임을 계속 하시겠습니까? (예:1, 아니오:0) ");
        scanf("%d", &user);

        if (!user) {
            printf("게임 종료.\n");
            break;
        }
    }

    return 0;
}

위 코드는 사용자와 컴퓨터가 가위바위보 게임을 하는 코드입니다.

사용자는 0, 1, 2 중에서 하나를 선택하여 가위, 바위, 보 중 하나를 내고, 컴퓨터도 랜덤으로 가위, 바위, 보 중 하나를 내게 됩니다.

이후에 승패를 판정하고, 사용자가 게임을 계속 할 것인지를 묻습니다. 사용자가 종료를 선택할 때까지 게임은 계속됩니다.

728x90
728x90

목동코딩학원 비지니스플랫폼구축 프로젝트수업

이번에 한국서비스산업진흥원과 추진하는 교육은 단순한 코딩 언어를 익히는 수업이 아닙니다.

현재 구현된 다양한 플랫폼을 직접 구축하면서 창업 아이디어를 얻고 , 이를 통해 스스로 플랫폼 비지니스를 구축 하도록 

지원하는 프로젝트 강좌입니다.

서버구축부터 하나 하나 스스로 만들어 가면서 배우는 과정입니다.

즉, 프론트엔드에서 백엔드까지 직접 구추하는 수업입니다

728x90
728x90

목동코딩학원:

 

서버이전 작업을 했다.

하나는 이전 작업이고, 하나는 신규 설치 작업이다.

자체 서버에서만 작업을 하다가 , 이번에 Cloud Server에 작업 하다보니 조금 답답함도 있었다.

 

이 작업은 그냥 나들이 가듯이 하기에는 부담이 많은 작업이다.

예를 들면 우리가 이사를 하는 경우를 들 수 있다. 그냥 이사라기 보다는 해외이사의 경우가

조금 더 어울린다.

 

잘 쓰던 전자 제품이 전압이 안 맞아서 트랜스를 구해야 한다던지, 엘리베이터가 없어서 사람의 힘으로 

가구를 옮긴다 던지 아니면 문이 작아서 대형 냉장고가 안들어 가는 문제로 냉장고 문을 분해해서 억지고 

옮기는 경우이다. 가스가 안들어 오거나 , 전기가 안들어 올때 해법을 찾아야 한다던지 ...

 

이렇게 힘들여 한 이사를 또 한다고 생각해 보면 "으이그~~" 스럽다 ㅎㅎ.

알고리즘으로 프로그래밍을 하는 것과는 또다른 영역이다.

 

작업을 마치면 운영 테스트를 해야 하는데 생각 하지 못한 문제가 발생되곤 한다.

이번에 발생한 소소한 에러중에 날자 timezone을 설정하지 않은 부분도 있었다 ㅎㅎ.

물론 DB도 같이 설정 해줘야 한다.

 

그냥 서버만 설치한다면 작업할게 많지 않다.

ununtu 설치, mysql 설치, web서버 설치, Frame 설치, 응용프로그램 설치 정도이다.

이것도 쉬운일은 아니다 ㅎㅎ.

ubutu 버전, php 버전, mysql 버전, web서버( apcahe, nginx ....)등 여러가지를 설치해야 한다.

 

하지만 지금 상황을 보면,

다른  서버에서는 실제 업무가 돌아가고 있다. 적당한 싯점에 데이타를 옮겨 오기도 해야 한다.

혹시나 서버에 문제가 생길까봐서 서버 이중화도 해야 하고, Load Balacinf도 해야 한다.

저녁 늦게나 아침 일찍 전화가 오는 날에는 긴장이 된다 . "혹시...?" 하고 .

프랜차이즈 시스템이다 보니 신경이 더 많이 쓰인다.

 

그리고 서버이전 작업 과정이 길고 자주 하지는 않다 보니, 아무리 꼼꼼하게 메모해도 다음에 다시하려면 큰맘을 먹어야 한다 ㅎㅎ.

 

이런 프랜차이즈 시스템을 또 하나 준비중이다.

이번 작업은 24시간 운영되는 시스템이라 더 많이 신경이 쓰인다.....

 

 

728x90

+ Recent posts