<장점>
1. 경제성
클라우드 서비스는 큰 초기 비용 투자 없이 필요한 때에만 추가 자원에 대한 비용을 내고

필요하지 않은 자원에 대해서는 지급을 중지할 수 있어서 경제적으로 쓸 수 있다.

2. 편의성
클라우드 서비스 유형 가운데서도 특히 SaaS(사용자가 필요로 하는 서비스만 이용할 수 있도록 한 소프트웨어)의 경우,

인프라나 운영 서버 등을 사용자가 관리할 필요 없이 단순히 제공되는 서비스를 이용하기만 하면 된다는 점에서

사용자의 편의성이 두드러진다.

3. 가용성
클라우드는 많은 인프라, 운영 서버를 24시간 365일 항시 제공하기 때문에 높은 가용성을 지닌다.

그뿐만 아니라 클라우드에서는 서버의 이중화를 통한 고가용성을 얻을 수 있어서 가용성 면에서 상당한 이점을 가진다.

4. 유연성
사용자는 자신의 필요에 맞게 서비스를 확장, 애플리케이션을 맞춤화할 수 있다. 그리고 인터넷을 통해

언제 어디서든 사용자와 사용자의 기업에 맞춘 클라우드 환경에 접근하여 서비스를 이용할 수 있어서

유연성 역시 클라우드의 장점이 된다.

5. 빠른 구축 속도
기존에는 기업 내에 물리적 서버와 시스템을 구축하는 온 프레미스 방식(소프트웨어를 서버에 직접 설치해 쓰는 방식)이

일반적이었다. 클라우드를 이용하여 서버를 구축할 때, 각종 물리적 서버를 설치할 필요가 없어서 많은 시간이 절약된다.

그뿐만 아니라 클라우드를 통한 서버 그리고 시스템의 구축은 시간 및 비용의 절약이 가능하며 업데이트 역시 쉽게

가능해진다.

 

 

 

<단점>

1. 보안 이슈
최근, 내부 클라우드와 외부 클라우드 서비스 연계 활용하는 하이브리드 방식의 클라우드가 각광받는 이유 중 하나다.
클라우드 서비스를 이용하는 기업의 경우, 기업의 데이터는 기업 외부에 존재하는 클라우드에 보관된다.

기업의 데이터는 핵심 경쟁력의 요소이다. 기업 외부로 노출돼서는 안되는 데이터나 국가나 공공기관의 경우

클라우드 서비스 도입을 신중하게 결정해야 한다.

2. 초과 비용
클라우드 서비스는 경제적으로 효율적인 건 사실이다. 하지만 클라우드 서비스는 이용한 만큼 비용을 지불하기 때문에

이용하는 서비스가 많거나 기업의 규모가 커질 경우 결코 저렴하지 않다. 기존 호스팅 방식이 더 저렴한 경우도 있다.
한편, 학생이 스터디나 테스트를 목적으로 활용하기엔 부담 없이 사용 가능하다. AWS의 경우 일반 계정이 아닌

edu 계정으로 가입하면 크레딧이 주어진다. 그 크레딧을 사용해 서비스를 익히고 일반 계정으로 가입해 보는 것도

하나의 방법이다.

'IT' 카테고리의 다른 글

[IT] 쿠키 & 세션 & 토큰 & 캐시  (0) 2023.07.15
[IT] 서버 이중화  (0) 2023.05.30
[IT] Web Server & WAS  (0) 2023.02.26
[IT] Edge Computing  (0) 2022.12.05
[IT] Cloud  (0) 2022.12.05

ChatGPT의 추가적인 설정을 할 수 있다.

ChatGPT Playground를 활용하자

 

https://platform.openai.com/playground 접속 후 회원가입을 한다.

 

https://platform.openai.com/account/usage 화면으로 이동하면

Free trial usage를 확인할 수 있다.

처음 가입 시  5달러가 제공되며 3개월까지 이용 가능하다. (Upgrade시 매달 20달러 구독 결제)

 

Mode는 4가지가 존재한다.

Edit, Insert, Chat, Complete

 

<Edit Mode>

<Insert Mode>

<Chat Mode>

<Complete Mode>

Complete Mode는 우리가 일반적으로 사용하는 ChatGPT처럼 자유롭게 요청해서 생성할 수 있는 모드이다.

 

다음은 Model 선택인데 Model마다 특징이 있다. 가장 많이 사용하는 Model이 text-davinci-003이다.

문장을 생성하는데 최대 4000 tokens까지 이용 가능하다.

보통 1000 tokens에 750 word를 이용할 수 있다고 하니 3000 word까지 작성이 가능한 것이다.

davinci Model은 1000 tokens에 0.02 달러에 이용할 수 있다. (대략 27원 정도)

 

Temperature는 1에 가까울 수록 크리에이터한 창의적인 문장을 만들고 0에 가까울 수록 딱딱한 기계적인 느낌의 글로

생성된다. 보통 0.6 ~ 0.7 정도에 놓고 사용하는데 필요에 따라 조정하면 된다.

 

Maximun length는 앞서 설명한 Token 길이를 최대 4000까지 사용할 수 있는데 4000을 놓고 사용한다고 해도

ChatGPT가 모두 사용하지는 않는다. 보통 1000 정도를 사용한다고 보면 된다.

 

Top P는 독창성과 조금 다르게 다향성을 나타내는 값인데 다양한 주제를 갖고 작성하느냐인데 0에 가까울 수록

글 하나의 주제로 설명하는 반면, 1에 가까울 수록 다양한 주제로 설명을 한다.

 

Presence penalty는 중복을 제거하는 기능으로 최대 2까지 올릴 수 있는데 수치가 높을수록 반복되는 문장을

줄여주는 역할을 한다.

 

Best of는 결과로 만들 개수를 나타낸다. 만약 5로 설정되면 5개의 결과를 만들어서 1개를 선택해서 주게 된다.

 

기본 설정은 다음과 같다.

이제 API KEY를 발급받자

https://platform.openai.com/account/api-keys 접속해서 Create new secret key 버튼을 클릭한다.

Name에 임의의 값을 입력 후 Create secret key 버튼을 클릭한다.

생성된 KEY를 사용할 것이다. 이 KEY는 꼭 따로 기록하여 보관하도록 한다.

 

API를 이용한 챗봇을 만들려면 가장 잘되어 있는 레퍼런스 문서를 보는 게 답이다.

https://platform.openai.com/docs/api-reference 사이트로 이동 후 하나씩 따라해보자

 

VSCode TERMINAL 창에 pip install openai를 입력하여 openai를 설치한다.

 

ChatGPT의 통신 원리를 간단히 살펴보자

import openai

openai.api_key = "당신의 KEY"

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)
print(completion.choices[0].message.content)

TERMINAL 창에 python 파일명.py 입력 후 실행을 하면

Hello에 대한 user의 답변 Greetings! How Can I assist you today?를 확인할 수 있다.

 

실행 후 원래는 아래와 같이 JSON 형식으로 리턴 값을 받게 된다.

{
   "id":"chatcmpl-abc123",
   "object":"chat.completion",
   "created":1677858242,
   "model":"gpt-3.5-turbo-0301",
   "usage":{
      "prompt_tokens":13,
      "completion_tokens":7,
      "total_tokens":20
   },
   "choices":[
      {
         "message":{
            "role":"assistant",
            "content":"\n\nThis is a test!"
         },
         "finish_reason":"stop",
         "index":0
      }
   ]
}

이번엔 ChatGPT API를 이용한 번역기를 간단히 만들어보자

 

먼저 TERMINAL창에서 pip install gradio를 입력해 gradio를 설치한다.

 

ChatGptCode3.py를 만들고 아래 코드를 입력한다.

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

demo.launch()

TERMINAL창에서 python ChatGptCode3.py를 입력해 실행하면 외부에서 접속할 수 있는 URL 주소가 생성된다.

 

URL 주소로 들어가 보면 아래와 같이 간단한 웹 사이트가 만들어진다.

이번엔 ChatGPT API 챗봇 기능을 gradio에 적용한다.

ChatGptCode3.py의 코드를 아래와 같이 변경해준다.

import openai
import gradio as gr
openai.api_key = "당신의 KEY"

def greet(content):
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo", messages=[{"role": "user", "content": content}]
    )
    return completion.choices[0].message.content

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(share=True)

일단 gradio에서 메세지를 입력 후 '제출하기' 버튼을 클릭하면 greet() 함수를 호출한다.

greet() 함수 호출 시 content 값으로 당신의 입력값을 openai로 보내고 openai로부터 넘겨받은 메세지를

다시 gradio의 output으로 내보내는 코드이다.

 

다시 TERMINAL창에서 python ChatGptCode3.py를 입력해 실행하면 외부에서 접속할 수 있는 URL 주소가 생성된다.

(현재 실행 중인 명령을 종료하려면 Ctrl + c를 눌러준다.)

'안녕'이라고 입력 후 제출을 했을 때, 뒤에 어울릴 메세지를 넘겨준 것을 확인할 수 있다.

 

이번에는 content 뒤에 "영어로 번역해줘" 라는 문자열을 추가한 후 다시 실행해보자

import openai
import gradio as gr
openai.api_key = "당신의 KEY"

def greet(content):
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo", messages=[{"role": "user", "content": content + "영어로 번역해줘"}]
    )
    return completion.choices[0].message.content

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(share=True)

'안녕 나의 블로그를 방문해줘서 고마워'를 입력 후 제출했을 때

'Hello, thank you for visiting my blog!'라는 결과를 넘겨준다.

'AI > ChatGPT' 카테고리의 다른 글

[AI] ChatGPT API 기초 [파인튜닝]  (0) 2023.05.30
[AI] ChatGPT 기초  (0) 2023.05.05

ChatGPT는 OpenAI가 개발한 프로토타입 대화형 인공지능 챗봇이다.

 

GPT에 대해 알아보자

Generative (생성 모델)

Pre-Trained (사전 훈련)

Transformer (Transformer AI 모델)

 

ChatGPT의 장점

1. 간단한 정보(특정 주제 / 개념)에 대해 알 수 있다.

2. 질문의 의도와 맥락을 파악하여 사람과 같은 글쓰기와 대화 능력으로 사용자 맞춤형 정보를 제공한다.

3. 사용자가 대화에서 말한 것을 기억하고 해당 답변에 대한 추가 질문을 통해 대화를 이어갈 수 있다.

   - 사용자가 대화에서 말한 것을 기억한다.

   - 답변을 보고 사용자가 내용 수정을 요청할 수 있다.

4. 단순 검색 결과보다 사람과 같은 표현을 사용하여 편하고 생동감이 있다.

5. 잘못된 전제를 짚어내고 부적절한 요청을 거부할 수 있다.

   - 사회통념상 논란이 될 수 있는 답변은 거부하거나, 윤리적인 규범에 맞춰 답변한다.

6. 간단한 회원가입으로 18세 이상이라면 누구나 무료로 사용이 가능하다.

   - 유료 버전도 출시되었다.

 

ChatGPT의 단점

1. 다양한 윤리적 역기능 예방 교육이 필요하다.

   - 표절 논란, 데이터 편향성, 저작권, 정보 도용 등

2. 잘못된 답변 제공으로 인한 신뢰성 논란이 있다.

   - 답변의 출처를 알 수 없다. (출처가 있는 답변을 요청하면 됨)

3. 2021년까지의 정보만 학습되어 있어 최신성이 부족하고 현재를 기준으로 정확한 답변을 받을 수 없다.

4. 영어 기반 모델이므로, 한글로 질문할 경우 다소 속도가 느리고 답변이 짧거나 중간에 끊기는 경우가 있다.

    또한 잘못된 번역을 답하기도 한다.

   - 영어로 질문할 경우 더 빠르고 정교한 답변을 제공한다.

5. 텍스트 기반이므로 이미지, 음성은 사용할 수 없다.

6. 유료 버전(월 20달러)의 서비스 질이 더 높다.

 

ChatGPT에 대해 알아보기 전에 https://chat.openai.com/auth/login 접속 후 회원 가입을 하자

질문에 다음과 같은 답변을 받았다.

 

이번에는 계산기 프로그램을 만드는 파이썬 코드를 생성해달라고 요청해봤다.

 

파이썬 설치가 되어있지 않은 경우 https://www.python.org/ 파이썬 사이트에 접속해서 Downloads 메뉴에

최신 버전을 다운 받아서 실행한다.

설치 화면에서 Add python.exe to PATH 체크를 꼭 해주도록 한다.

IDE(통합 개발 환경)는 VSCode를 사용했다. https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

VSCode 실행 후 좌측 큐브 모양의 메뉴를 클릭 후 python 검색 후 첫 번째 Python 패키지를 설치한다.

좌측 종이 모양 메뉴 클릭 후 Open Folder 클릭 후 작업할 폴더를 지정한다.

파일명은 뒤에 .py를 붙여준다.

 

ChatGPT에게 계산기 프로그램을 만드는 파이썬 코드를 생성해달라고 요청한 화면이다.

ChatGPT가 생성해준 파이썬 코드는 다음과 같다.

# 덧셈 함수
def add(x, y):
    return x + y

# 뺄셈 함수
def subtract(x, y):
    return x - y

# 곱셈 함수
def multiply(x, y):
    return x * y

# 나눗셈 함수
def divide(x, y):
    return x / y

# 사용자로부터 입력 받기
print("계산할 두 수를 입력하세요.")
num1 = float(input("첫 번째 숫자: "))
num2 = float(input("두 번째 숫자: "))

print("사용할 연산자를 선택하세요.")
print("1. 덧셈")
print("2. 뺄셈")
print("3. 곱셈")
print("4. 나눗셈")

# 사용자로부터 연산자 입력 받기
choice = input("선택한 연산자(1/2/3/4): ")

# 입력된 연산자에 따라 연산 수행
if choice == '1':
    print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
    print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
    print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
    print(num1, "/", num2, "=", divide(num1, num2))
else:
    print("잘못된 입력입니다.")

실행하면 계산할 두 수를 물어보고 숫자 입력 시 연산자를 선택할 수 있다.

연산자까지 입력을 마치면 결과를 보여준다.

 

나는 한글로 질문, 요청을 했지만 영어를 사용하는 것이 좋다.

'AI > ChatGPT' 카테고리의 다른 글

[AI] ChatGPT API 기초 [파인튜닝]  (0) 2023.05.30
[AI] ChatGPT API 기초 [번역기 만들기]  (1) 2023.05.05

1. [SMULE] 적재 - 별 보러 가자

2. [녹음기] 윤현상 - 언제쯤이면

3. [SMULE] 지킬 앤 하이드 - 지금 이 순간

4. [SMULE] 수지 & 백현 - Dream (with miaou7777)

5. [SMULE] 성시경 & 박정현 - 우리 참 좋았는데 (with loveme)

6. [SMULE] 폴킴 - 칵테일 사랑 (with me)

7. [노래방] 서인국 & 정은지 - 우리 사랑 이대로 (with psk)

 

'LSY' 카테고리의 다른 글

[LSY] 사진  (0) 2024.09.03
[LSY] 사진  (0) 2022.12.03
# 주석1
'''주석2'''

a = 10
b = 5
c = 'Hi My Name is \'Seungyub Lee\'\nNice to meet you!'
d = "Hava a nice day"
e = "abcdefghijklmnop"

print(a/b) # 2.0
print(a//b) # 2
print(type(a)) # <class 'int'>
print(c + d) # Hi My Name is 'Seungyub Lee'
             # Nice to meet you!Hava a nice day
print(type(c)) # <class 'str'>
print(c[0:7]) # Hi My N
print(e[0:5:2]) # ace
print(c[:8]) # Hi My Na
print(e[::-1]) # ponmlkjihgfedcba

f = "I ate %d apples. %s" % (a, d)

print(f) # I ate 10 apples. Hava a nice day

g = "Hi {name} How old are you? I'm {age} years old" .format(name="Roy", age=30)

print(g) # Hi Roy How old are you? I'm 30 years old

h = "Roy"
i = f"My name is {h}"

print(i) # My name is Roy

j = "%0.4f" % 3.141592

print(j) # 3.1416

k = "hobby"

print(k.count('b')) # 2
print(k.find('b')) # 2
print(k.find('x')) # -1

l = ','

print(l.join('abcd')) # a,b,c,d

m = "Lionel Messi"

print(m.upper()) # LIONEL MESSI
print(m.lower()) # lionel messi

n = "  Hi   "

print(n.strip()) # Hi

o = "Life is too short"

print(o.replace("Life", "Your hair")) # Your hair is too short
print(o.split()) # ['Life', 'is', 'too', 'short']

p = ["ABC", "DEF", "GHI", "JKL"]

print(p) # ['ABC', 'DEF', 'GHI', 'JKL']
print(p[1]) # DEF
print(p[3]) # JKL
print(p[-1]) # JKL

p[0] = "CBA"

print(p) # ['CBA', 'DEF', 'GHI', 'JKL']

p[0:2] = ["DEF", "ABC"]

print(p) # ['DEF', 'ABC', 'GHI', 'JKL']

q = ["ABC", "DEF", "GHI", ["JKL","MNO"]]

print(q) # ['ABC', 'DEF', 'GHI', ['JKL', 'MNO']]
print(q[3]) # ['JKL', 'MNO']
print(q[3][0]) # JKL
print(q[0:2]) # ['ABC', 'DEF']
print(p + q) # ['DEF', 'ABC', 'GHI', 'JKL', 'ABC', 'DEF', 'GHI', ['JKL', 'MNO']]

q[2:4] = []

print(q) # ['ABC', 'DEF']

del q[0]

print(q) # ['DEF']

q.append('GHI')

print(q) # ['DEF', 'GHI']

q.reverse()

print(q) # ['GHI', 'DEF']

q.sort()

print(q) # ['DEF', 'GHI']

q.insert(0, 'ABC')

print(q) # ['ABC', 'DEF', 'GHI']

q.remove('DEF')

print(q) # ['ABC', 'GHI']

r = [1, 2, 1, 3, 5, 2, 1]

r.remove(1)

print(r) # [2, 1, 3, 5, 2, 1]

print(r.pop()) # 1

print(r) # [2, 1, 3, 5, 2]

print(r.count(2)) # 2

r.extend([6, 7])

print(r) # [2, 1, 3, 5, 2, 6, 7]

'Python > 참고자료' 카테고리의 다른 글

[Python] 2024 IDE 순위 & AI 개발을 위한 IDE 추천  (1) 2024.12.18

 

Web Server의 개념 (하드웨어와 소프트웨어로 구분)

1) 하드웨어 : Web Server가 설치되어 있는 컴퓨터

2) 소프트웨어 : 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html, .jpeg, .css등)를 제공하는

                         컴퓨터 프로그램

 

WAS(Web Application Server)

DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

HTTP를 통해 컴퓨터나 장치에 Application을 수행해 주는 미들웨어(소프트웨어 엔진)

웹 컨테이너 혹은 서블릿 컨테이너라고도 불림

Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말함 즉, WAS는 JSP, Servlet 구동 환경을 제공

WAS = Web Server + Web Container

 

 

'IT' 카테고리의 다른 글

[IT] 서버 이중화  (0) 2023.05.30
[IT] Cloud Service 장단점  (0) 2023.05.30
[IT] Edge Computing  (0) 2022.12.05
[IT] Cloud  (0) 2022.12.05
[IT] Server  (0) 2022.12.05
public class Solution {
	
	// 네트워크
	
	static boolean[] visited = {};
	
	public static void dfs(int i, int[][] computers) {
		visited[i] = true;
		
		for(int j = 0; j < computers[i].length; j++) {
			
			if(!visited[j] && computers[i][j] == 1) {
				dfs(j, computers);
			}
		}
	}
	
	public static int solution(int n, int[][] computers) {
		int answer = 0;
		
		visited = new boolean[n];
		
		for(int i = 0; i < n; i++) {
        	
			if(!visited[i]) {
				answer++;
				dfs(i, computers);
			}
		}
        
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 3; // 3대의 컴퓨터
		int[][] computers = {{1, 1, 0}, {1, 1, 0}, {0, 0, 1}}; // 연결된 네트워크
		
		System.out.println(solution(n, computers)); // 2
	}
}

프로그래머스 네트워크 문제 풀이 Java

public class Solution {
	
	// 단어 변환
	
	static boolean[] visited = {};
	static int gDepth = 0;
	
	public static boolean strCompare(String str1, String str2) { // str1과 str2의 길이가 같다는 조건 하에
		int strLength = str1.length();
		int cnt = 0;
		
		for(int i = 0; i < strLength; i++) {
			
			if(str1.charAt(i) != str2.charAt(i)) {
				cnt++;
			}
		}
		
		if(cnt == 1) { // 변형 조건에서 1글자만 바꿀 수 있는데 1글자만 다를 경우
			return true;
		} else {
			return false;
		}
	}
	
	public static int dfs(String begin, String target, String[] words, int depth) { // hit // cog // {"hot", "dot", "dog", "lot", "log", "cog"}
		
		int mDepth = 0;
		
		for(int i = 0; i < words.length; i++) {
			
			mDepth = depth;
			
			if(visited[i]) {
				continue;
			}
			
			if(strCompare(begin, words[i])) { // 1글자만 다른 경우, 즉 변경 가능한 경우
				begin = words[i]; // 바꿀 단어를 비교 대상으로 변경
				mDepth++;
				visited[i] = true; // 사용한 단어 방문 처리
				
				dfs(begin, target, words, mDepth);
				
				if(begin.equals(target)) {
					System.out.println(mDepth + "번 변경으로 가능");
					gDepth = mDepth;
					break;
				}
			} else {
				continue;
			}
		}
		return gDepth;
	}
	
	public static int solution(String begin, String target, String[] words) {
		int answer = 0;
		
		visited = new boolean[words.length];
		
		answer = dfs(begin, target, words, 0);
		
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String begin = "hit";
		String target = "cog";
		String[] words = {"hot", "dot", "dog", "lot", "log", "cog"}; // hot -> dot -> dog -> cog
		
		System.out.println(solution(begin, target, words)); // 4
	}
}

프로그래머스 단어 변환 문제 풀이 Java

+ Recent posts