구글앱에 신규로 Gemini가 생겨서 한번 써보았다. 챗GPT를 많이 사용하고 있어 나름 기대하고 있었다. 왜냐하면 챗GPT-4 보다 뛰어나다고 선전을 하기 때문이다. 많이는 사용해보지 않았는데 아주 기본적인 사항에서 무지하게 실망했다.
먼저 제미나이에 대해서 알아보자
- 구글이 개발한 생성형 AI - 2024년 2월 7일 바드(Bard)를 제미나이(Gemini)로 명칭 변경 - 제미나이(Gemini)는 텍스트뿐만 아니라 이미지, 동영상 오디오까지 이해 가능한 구글의 차세대 AI - 멀티모달 모델인 제미나이는 수학, 물리학, 기타 분야의 복잡한 작업을 완료하고 다양한 프로그래밍 언어로 된 고품질 코드를 이해하고 생성할 수 있음
그런데 오늘 정말 아무 생각없이 오늘의 날짜를 물어봤다.
잉? 뭐지? 오늘은 2024년 10월8일이다. 지역까지 넣어봤다.
음, 더 웃긴건 2024년 10월26일은 토요일이라는 사실이다. 엄청 실망했다. 틀린걸 맞다고 우기는건 그렇다쳐도 기본적으로 날짜는 맞아야 하는게 아닐까?
챗GPT를 따라오지 못한다.....공짜라 그런가? 내가 잘못 이해한게 있다면 댓글 달아주시길....
미국 반도체 주가는 물론이고 우리나라의 시총 1위 기업인 삼성전자도 7만원대를 놓치고 말았습니다. 제가 투자를 하고 있어서 투자일기 비스므리한걸 작성하는데 딱 한달 전에 8만원대에서 어제 69,000원으로 곤두박질 치고 말았습니다.
회사의 가치가 변경되었을까요? 아닙니다. 단순히 가격이 내려간 겁니다. 저는 이 바겐세일 기간에 모든 현금을 동원하여 매수하고 있습니다. 이번 주까지는 제발 더 떨어져 주길 바라면서 말이죠.
저는 지금이 시대의 중대한 변화의 기로라고 생각합니다. 요즘 검색 어느 사이트를 이용하세요? 구글? 네이버? 다음?
전 챗GPT를 이용하고 있습니다. 지금 SI 프로젝트하는 곳에서 챗GPT를 이용하지 못해서 굉장히 답답한데요, 챗GPT를 이용하지 못해서 구글을 이용하고 있는데 많이 불편합니다. 그 질문에 대한 답변의 정확도를 AI를 따라갈 수 없더라구요.
제가 2000년에 미국에서 일했었는데 그때 회사가 라이코스에서 투자를 받은 회사였습니다. 완전 생짜 닷컴회사였죠. 그 당시에는 라이코스, 야후 사이트에서 주로 검색을 했던 때였죠. 라때죠..... 이제 AI로 시대가 바뀌고 있는 것을 느낍니다. 단순히 엔비디아의 주가가 떨어졌다고 해서 AI 가치가 변하지 않습니다. 그리고 엔비디아는 단순 장비업체에 불과합니다. 큰 흐름을 봐야 합니다. 예전 시스코의 예를 보면 명확합니다.
아침에 일어났는데 유튜브 뉴스에서 난리가 났네요, AI도 이제 끝이라는 얘기까지 나옵니다. 물론 구독자들에게 빠른(?) 뉴스를 제공해야 살아남는 생태계이지만 너무 흥미위주로만 나오네요, 답답한 마음에 한자 적어봅니다. ㅋ
전자오락실이라는 곳이 있었다. 어릴 적 나는 전자오락에 미쳐있었고 돈만 생기면 가곤 했었다. 그때에도 합법적 전자오락실이 있었고 불법 전자오락실이 있었다. 불법 전자오락실이라고 해서 나쁜 곳은 아니었고 새로운, 더 재미난 게임이 많았던 걸로 기억된다. 그 당시 주로 했었던 것 중의 하나가 벽돌깨기 였다.
챗GPT도 혹시 만들어 줄까 해서 시도해보았고 결과는 대성공, 자 한번 재미삼아 만들어보자, 아니 챗GPT에게 요구사항을 전달해보자.
- 소스
import pygame import random
# 초기화 pygame.init()
# 화면 설정 WIDTH, HEIGHT = 800, 600 WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("벽돌깨기")
# 색깔 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) BLUE = (0, 0, 255)
# 게임 요소 paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT) ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2) bricks = [] for row in range(BRICK_ROWS): for col in range(BRICK_COLS): brick = pygame.Rect(col * (BRICK_WIDTH + 5) + 30, row * (BRICK_HEIGHT + 5) + 50, BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick)
# 공 이동 def move_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.x += BALL_SPEED_X ball.y += BALL_SPEED_Y
# 벽과 충돌 체크 if ball.left <= 0 or ball.right >= WIDTH: BALL_SPEED_X *= -1 if ball.top <= 0: BALL_SPEED_Y *= -1
# 패들과 충돌 체크 if ball.colliderect(paddle): BALL_SPEED_Y *= -1
# 벽돌과 충돌 체크 for brick in bricks: if ball.colliderect(brick): bricks.remove(brick) BALL_SPEED_Y *= -1
# 패들 이동 def move_paddle(keys): if keys[pygame.K_LEFT] and paddle.left > 0: paddle.x -= PADDLE_SPEED if keys[pygame.K_RIGHT] and paddle.right < WIDTH: paddle.x += PADDLE_SPEED
# 게임 루프 def main(): clock = pygame.time.Clock() run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False
# 게임 요소 paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT) ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2) bricks = [] for row in range(BRICK_ROWS): for col in range(BRICK_COLS): brick = pygame.Rect(col * (BRICK_WIDTH + 5) + 30, row * (BRICK_HEIGHT + 5) + 50, BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick)
# 공 이동 def move_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.x += BALL_SPEED_X ball.y += BALL_SPEED_Y
# 벽과 충돌 체크 if ball.left <= 0 or ball.right >= WIDTH: BALL_SPEED_X *= -1 if ball.top <= 0: BALL_SPEED_Y *= -1
# 패들과 충돌 체크 if ball.colliderect(paddle): BALL_SPEED_Y *= -1
# 벽돌과 충돌 체크 for brick in bricks: if ball.colliderect(brick): bricks.remove(brick) BALL_SPEED_Y *= -1
# 공이 화면 아래로 떨어졌을 때 초기 위치로 되돌리기 if ball.top >= HEIGHT: reset_ball()
# 패들 이동 def move_paddle(keys): if keys[pygame.K_LEFT] and paddle.left > 0: paddle.x -= PADDLE_SPEED if keys[pygame.K_RIGHT] and paddle.right < WIDTH: paddle.x += PADDLE_SPEED
# 공 초기 위치로 되돌리기 def reset_ball(): global BALL_SPEED_X, BALL_SPEED_Y ball.center = (WIDTH // 2, HEIGHT // 2) # 속도도 재설정 BALL_SPEED_X = 7 BALL_SPEED_Y = -7
# 게임 루프 def main(): clock = pygame.time.Clock() run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: reset_ball()
이제 챗GPT도 준비되었고 Visual Studio Code를 이용한 Python도 준비가 되었다. 이제 무엇을 만들고 싶은가? 솔직히 Python 코딩은 할 줄 아는가? 사실 챗GPT를 이용하면 Python 잘 몰라도 된다. 챗GPT에게 원하는 프로그램을 잘 설명하기만 해도 멋진 프로그램을 만들 수 있다.
마음에 원하는 프로그램이 생각 났는가? 난 SimpleTextEditor를 만들어보겠다. 조건은 아래와 같다.
- 아래와 같이 챗GPT에 요청을 한다.
TextEditor를 만들건데 위에 메뉴가 있고 새파일, 저장하기, 다른이름으로 저장, 검색 메뉴가 있는 python으로 소스를 만들어줘
- 그러면 아래와 같이 답변이 온다. 처음이라 챗GPT의 답변을 스크린켑쳐로 보여줬으나 다음부터는 소스를 그냥 붙이도록 하겠다.
- 소스
import tkinter as tk from tkinter import filedialog
def new_file(): text.delete(1.0, tk.END)
def save_file(): file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt"), ("All files", "*.*")]) if file_path: with open(file_path, "w") as file: text_content = text.get(1.0, tk.END) file.write(text_content)
def save_as(): file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt"), ("All files", "*.*")]) if file_path: with open(file_path, "w") as file: text_content = text.get(1.0, tk.END) file.write(text_content)
- 위의 소스를 Visual Studio Code에 넣고 실행시키면 아래와 같이 보여진다.
간단하게 SimpleTextEditor를 챗GPT를 통해 작성해보았다. 이제 코딩을 모르는 사람도 아이디어만 있으면 코딩이 가능해졌다. 정말 놀라운 것은 Python으로 만든 이 SimpleTextEditor를 java 코드로 바로 변경이 가능한 것이고 개발자가 각 language를 몰라도 말이다. 참으로 무궁무진한 재미난 세계가 열렸다.
챗GPT 계정을 만들었으니 이제 도구를 설치해보자. Python을 이용할 예정이기 때문에 Visual Studio Code를 설치해보자. 물론 Python을 바로 설치해서 사용할 수도 있다. 가능은 하나 이건 마치 소스코딩을 메모장(text editor)에서 하는 것과 같다. 배운 사람끼리 생코딩하지 말고 유용한 툴을 사용해보자. 이런 툴들을 보통 IDE(Integrated Development Environment)라고 말한다. IDE에는 이클립스, 비주얼 스튜디오 등이 있고 Python은 보통 Visual Studio Code에서 개발한다. 즉 사용하기 편한걸로 하면 되며 필자의 경우 Visual Studio Code를 주로 사용한다.
- Visual Studio Code 설치파일 다운로드
https://code.visualstudio.com/ 으로 이동하여 우측 상단의 Download를 클릭하거나 좌측의 "Download for Windows"를 클릭하여 자신의 PC OS에 해당하는 설치파일을 다운로드 받는다.
- 다운로드가 완료되면 아래 스크린캡쳐와 같이 우측 상단에 다운로드 파일을 확인할 수 있고 이를 통해 설치한다.
- 만일 못 찾겠다면 아래 스크린캡쳐와 같이 "C:\Users\사용자명\Downloads" 로 가면 확인할 수 있다.
- 라이센스 동의, 나머지 설치과정은 별 태클 달지 않는 한, default 값을 따라가자.