알리바바 클라우드의 일부 리눅스 배포판에서는 NTP(Network Time Protocol) 서비스의 이름이 ntpd가 아닐 수 있습니다. 대신에 chronyd 서비스를 사용할 수 있습니다. 따라서 ntpd.service를 찾을 수 없다는 오류가 발생하는 것입니다.

chronyd 서비스를 사용하는 경우 다음 명령어를 사용하여 서비스를 재시작할 수 있습니다.

sudo systemctl restart chronyd


또는 Alibaba Cloud의 다른 배포판에서 ntpd 서비스를 사용하는 경우에는 다음 명령어를 사용하여 서비스를 재시작할 수 있습니다.

sudo systemctl restart ntpd


서비스 이름을 확인하려면 다음 명령어를 사용할 수 있습니다.

systemctl list-units --type=service | grep ntp


위의 명령어는 시스템에 설치된 모든 서비스 중에서 NTP와 관련된 서비스를 찾아서 표시합니다. 이를 통해 사용 가능한 NTP 서비스를 확인할 수 있습니다.

 

iTerm2로 동시에 timedatectl 명령 날려서 시간 확인하기

1. Expert 방식

# 키등록
% export OPENAI_API_KEY="sk-mX9fc .... "

# 등록한 키를 확인
% echo $OPENAI_API_KEY

# env 설정 정보 확인
% env | grep OPENAI_API_KEY

# env에서 제거하는 방법
% unset OPENAI_API_KEY

 

 

 

2. .env 파일로 관리

- 실행할 프로젝트의 root에 .env 파일을 만드고 아래와 같이 키를 입력

OPENAI_API_KEY="sk-mX9fc .... "

 

코드에서 .env 파일정보를 읽어오기

import os
from dotenv import load_dotenv, find_dotenv

# .env 파일을 찾기
print(find_dotenv()) 
> /Users/dongsik/workspace/OpenAI/langchain-kr/.env

# 찾은 .env 파일을 load 
print(load_dotenv(find_dotenv()))
> True

# OPENAI_API_KEY를 출력
print(os.environ['OPENAI_API_KEY'])
> sk-mX9fc ...

 

 

SOC2 란?

SOC 2는 "서비스 조직의 제어에 관한 신뢰성 보고서"의 준말로, 서비스 조직이 클라이언트 및 이해관계자에게 제공하는 서비스의 정보 보안, 기밀성, 개인 정보 보호 및 데이터 처리에 대한 신뢰성을 검증하는 데 사용되는 보고서입니다.

 

SOC 2 보고서는 아메리칸 인스티튜트 오브 서비스 사무소(AICPA)가 발행하는 보고서 중 하나로, 클라우드 서비스 제공업체, 데이터 센터, SaaS 제공업체 등과 같이 서비스를 제공하는 기업이 클라이언트에게 제공하는 서비스의 신뢰성을 입증하는 데 사용됩니다.

 

SOC 2는 다섯 가지 신뢰성 요건(Trust Service Criteria)을 기반으로 하며, 이는 다음과 같습니다:

  1. 기밀성(Confidentiality): 정보를 보호하고 기밀성을 유지하는 능력
  2. 무결성(Integrity): 시스템의 무결성을 유지하는 능력
  3. 가용성(Availability): 시스템의 가용성을 보장하는 능력
  4. 개인 정보 보호(Privacy): 개인 정보 보호 및 GDPR(일반 데이터 보호 규정) 등에 관한 요구 사항을 준수하는 능력
  5. 프로세스 및 절차(Processes and Procedures): 기술적 및 운영적 제어 및 프로세스의 효과성을 확인하는 능력

서비스 제공 업체는 SOC 2 보고서를 통해 클라이언트와 이해관계자에게 제공하는 서비스의 신뢰성을 입증하고, 정보 보안 및 개인 정보 보호에 대한 준수 여부를 입증할 수 있습니다.

 

SOC2 획득 방법

SOC 2 인증을 획득하는 과정은 일반적으로 다음과 같은 단계를 따릅니다:

  1. 이해와 평가: 먼저 조직 내부에서 SOC 2에 대한 이해를 높이고, SOC 2 요구 사항을 검토하고 현재 프로세스 및 제어와 비교하여 어떤 추가 작업이 필요한지 평가합니다.
  2. 범위 설정: SOC 2 범위를 결정하고, 어떤 시스템, 서비스 또는 프로세스가 인증의 범위에 포함되는지 결정합니다.
  3. 요구 준비: SOC 2 요구 사항에 대한 조직의 준비 상태를 개선하기 위해 필요한 조치를 식별하고 실행합니다. 이는 보안 정책, 절차, 기술적인 제어 등을 개발하거나 업데이트하는 것을 포함할 수 있습니다.
  4. 외부 평가 준비: SOC 2 인증을 위한 외부 감사 및 평가 기관을 선택하고, 평가 일정을 조정하고, 필요한 문서 및 자료를 준비합니다.
  5. 외부 감사 및 평가: 선택한 감사 기관이 조직의 제어 및 프로세스를 검토하고, SOC 2 요구 사항을 준수하는지 여부를 결정하기 위해 감사를 진행합니다.
  6. 보고서 작성: 외부 감사를 통해 얻은 결과를 바탕으로 SOC 2 보고서를 작성합니다. 이 보고서는 SOC 2 요구 사항을 준수하는지 여부를 입증하고, 클라이언트 및 파트너에게 제공됩니다.
  7. 유지 및 개선: SOC 2 인증을 획득한 후에도 보안 제어 및 프로세스를 유지하고 개선하는 것이 중요합니다. 주기적인 감사와 업데이트를 통해 SOC 2 인증을 유지하고, 변경된 요구 사항이나 위협에 대응하기 위한 조치를 취합니다.

이러한 단계를 따라 조직은 SOC 2 인증을 획득할 수 있으며, 이는 클라이언트와 파트너로부터의 신뢰를 구축하고 보안 및 개인 정보 보호를 강화하는 데 도움이 될 것입니다.

Python에서 파일이 존재하는지 확인

 

Python에서 파일이 존재하는지 확인하려면 os.path.exists() 함수를 사용할 수 있습니다. 이 함수를 사용하여 파일 경로를 전달하고 파일이 존재하는지 여부를 확인할 수 있습니다.

예를 들어, 다음은 주어진 파일 경로가 존재하는지 확인하는 방법입니다:

 

import os

file_path = "/path/to/file.txt"

if os.path.exists(file_path):
    print("File exists.")
else:
    print("File does not exist.")

 

위 코드에서 /path/to/file.txt는 확인하려는 파일 경로를 나타내는 문자열로 대체되어야 합니다. 이 코드는 해당 경로에 파일이 존재하는지 여부를 확인하고 결과를 출력합니다.

 


파일의 절대 경로에서 파일 이름만 추출하는 방법

 

파일의 절대 경로에서 파일 이름만 추출하는 방법은 os.path.basename() 함수를 사용하는 것입니다. 이 함수를 사용하여 파일의 전체 경로에서 파일 이름만 추출할 수 있습니다.

예를 들어, 다음은 주어진 파일의 절대 경로에서 파일 이름만 추출하는 방법입니다:

 

import os

file_path = "/path/to/file.txt"

file_name = os.path.basename(file_path)
print("File name:", file_name)

 

위 코드에서 /path/to/file.txt는 파일의 절대 경로를 나타내는 문자열로 대체됩니다. os.path.basename() 함수를 사용하여 이 경로에서 파일 이름만 추출하고 그것을 출력합니다. 출력 결과는 파일의 이름만 포함하게 됩니다.

 

1. Python 파일에서 직접 로깅을 사용하는 방법 

 

먼저, logging 모듈을 임포트합니다:

import logging

로깅을 설정합니다. 이는 로그 파일의 경로, 로그 레벨, 출력 형식 등을 지정하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다:

logging.basicConfig(filename='example.log',
      level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

위 코드는 로그를 파일 example.log에 기록하며, 로그 레벨은 DEBUG부터 표시됩니다. 로그의 포맷은 시간, 로그 레벨, 메시지를 포함합니다.

 

로그 메시지를 출력합니다. 이는 logging 모듈의 다양한 함수를 사용하여 수행할 수 있습니다. 예를 들어

logging.debug('이것은 디버그 메시지입니다.')
logging.info('이것은 정보 메시지입니다.')
logging.warning('이것은 경고 메시지입니다.')
logging.error('이것은 에러 메시지입니다.')
logging.critical('이것은 심각한 에러 메시지입니다.')

 

 

위와 같이 로깅을 설정하고 메시지를 출력하면, 각 메시지는 설정한 로그 레벨에 따라 출력됩니다. 예를 들어, 위 코드에서는 DEBUG 레벨부터 심각한 에러인 CRITICAL 레벨까지 모든 메시지가 출력됩니다.

 

로깅에 대한 더 자세한 정보는 Python 공식 문서를 참조하십시오: https://docs.python.org/3/library/logging.html

 

logging — Logging facility for Python

Source code: Lib/logging/__init__.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutor...

docs.python.org

 

2. logging 을 파일과 콘솔 두군데 동시에 출력하기

logging 모듈을 사용하여 로그를 파일과 콘솔에 동시에 출력하는 방법은 다음과 같습니다:

 

먼저, logging 모듈을 임포트합니다

import logging

 

로깅을 설정합니다. 이는 로그 파일의 경로, 로그 레벨, 출력 형식 등을 지정하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다

# 기본 로거 생성
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

 

이제 로그 메시지를 출력할 수 있습니다. 예를 들어

logger.debug('이것은 디버그 메시지입니다.')
logger.info('이것은 정보 메시지입니다.')
logger.warning('이것은 경고 메시지입니다.')
logger.error('이것은 에러 메시지입니다.')
logger.critical('이것은 심각한 에러 메시지입니다.')

 

 

위 코드에서는 기본 로거를 생성하고, 파일 핸들러와 콘솔 핸들러를 추가하여 로그를 파일과 콘솔에 동시에 출력합니다. 로그 포맷과 로그 레벨은 각 핸들러에서 설정됩니다.

이렇게 하면 로그가 파일과 콘솔에 동시에 출력되어 프로그램의 디버깅 및 모니터링에 도움이 됩니다.

3. 로깅을 설정하는 별도의 모듈을 만들고 전체 프로젝트에서 사용하는 방법

모든 파이썬 파일에 로깅 파일 핸들러와 콘솔 핸들러를 적용하는 가장 효과적인 방법은 로깅을 설정하는 별도의 모듈을 만들고, 이를 모든 파이썬 파일에서 임포트하여 사용하는 것입니다. 이를 위해서는 다음과 같은 단계를 따릅니다:

 

로깅 설정을 포함하는 logger.py와 같은 파일을 생성합니다

import logging

# 기본 로거 생성
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

 

이제 logger.py를 프로젝트의 다른 모든 파이썬 파일에서 임포트하여 사용합니다. 예를 들어, 다른 파이썬 파일에서 로깅을 사용할 때 다음과 같이 logger.py를 임포트합니다

from logger import logger

# 로그 메시지 출력
logger.debug('이것은 디버그 메시지입니다.')
logger.info('이것은 정보 메시지입니다.')
logger.warning('이것은 경고 메시지입니다.')
logger.error('이것은 에러 메시지입니다.')
logger.critical('이것은 심각한 에러 메시지입니다.')

 

이렇게 하면 모든 파이썬 파일에서 같은 로깅 설정을 사용할 수 있으며, 코드의 중복을 피할 수 있습니다. 또한 로깅 설정을 한 곳에서 관리하기 때문에 유지보수가 용이해집니다.

 

logger LEVEL을 외부에서 바꾸기

 

로그 레벨을 외부에서 변경할 수 있도록 하려면 로깅 설정을 변경할 수 있는 함수를 만들어야 합니다. 이 함수를 호출하여 로그 레벨을 변경할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

 

logger.py

import logging

# 기본 로거 생성
logger = logging.getLogger()

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

def set_log_level(level):
    logger.setLevel(level)
    file_handler.setLevel(level)
    console_handler.setLevel(level)

 

이제 set_log_level() 함수를 사용하여 로그 레벨을 변경할 수 있습니다. 예를 들어, 다음과 같이 호출할 수 있습니다.

import logging
from logger import set_log_level, logger

# 로그 레벨을 변경합니다.
set_log_level(logging.INFO)

# 로그 메시지 출력
logger.debug('디버그 메시지는 출력되지 않습니다.')
logger.info('이것은 정보 메시지입니다.')

 

위 코드에서는 로그 레벨을 INFO로 설정하고 있으므로 DEBUG 레벨의 로그는 출력되지 않습니다. set_log_level 함수를 호출하여 로그 레벨을 변경하면 로그 레벨이 변경됩니다.

 

'python > logging' 카테고리의 다른 글

Custom Logger 만들기 2 (일자별로 log 파일 생성)  (0) 2024.03.29
Custom Logger 만들기 1  (0) 2024.03.29

 

1. Streamlit 설치하기

먼저, Streamlit을 설치 합니다. 이를 위해 Python이 설치되어 있어야 하며, Python 3.6 이상 버전을 사용하는 것이 좋습니다. Python이 설치되어 있다면, 다음과 같은 명령어를 통해 Streamlit을 설치할 수 있습니다.

$ python -V
Python 3.6.8
$ pip -V
pip 21.3.1 from <user>.local/lib/python3.6/site-packages/pip (python 3.6)
$ pip install streamlit
Defaulting to user installation because normal site-packages is not writeable
Collecting streamlit
  Downloading streamlit-1.10.0-py2.py3-none-any.whl (9.1 MB)
     |████████████████████████████████| 9.1 MB 24.5 MB/s   

... <생략>
Successfully installed altair-4.1.0 blinker-1.5 commonmark-0.9.1 gitdb-4.0.9 \
gitpython-3.1.18 pyarrow-6.0.1 pydeck-0.6.2 pympler-1.0.1 rich-12.6.0 semver-2.13.0 \
smmap-5.0.0 streamlit-1.10.0 toolz-0.12.0 validators-0.20.0 watchdog-2.3.1

 

2. Streamlit 데모 실행하기

Streamlit이 성공적으로 설치되었다면, Streamlit의 데모를 실행해 볼 수 있습니다. 이는 Streamlit이 제대로 설치되었는지 확인하는 데에도 도움이 됩니다. 다음 명령어를 통해 Streamlit의 Hello World 데모를 실행할 수 있습니다.

 

$ streamlit hello

  Welcome to Streamlit. Check out our demo in your browser.

  Network URL: http://<Private IP>:8501

  Ready to create your own Python apps super quickly?
  Head over to https://docs.streamlit.io

  May you create awesome apps!
 

이 명령어를 실행하면, 기본 웹 브라우저가 자동으로 열리고 Streamlit의 환영 메시지가 담긴 페이지로 이동합니다. 이 페이지에서는 Streamlit의 다양한 기능을 소개하는 예제들을 확인하고 직접 실행해 볼 수 있습니다.

3. 자신만의 Streamlit 앱 만들기

Streamlit으로 자신만의 앱을 만들기 위해서는 간단한 Python 스크립트를 작성해야 합니다. 예를 들어, 다음과 같은 코드를 app.py라는 파일에 작성해 보세요.

 

import streamlit as st

st.title('나의 첫 Streamlit 앱')
st.write('Streamlit은 정말 멋져요!')

 

그리고 나서, 터미널에서 다음과 같이 이 스크립트를 실행합니다.

$ streamlit run app.py
2024-03-13 14:08:43.872 Did not auto detect external IP.
Please go to https://docs.streamlit.io/ for debugging hints.

  You can now view your Streamlit app in your browser.

  Network URL: http://<Private IP>:8501

 

이 명령어를 실행하면, 웹 브라우저가 열리고 당신이 작성한 Streamlit 앱을 볼 수 있습니다. 이제부터는 원하는 대로 코드를 수정하고, 데이터를 시각화하고, 사용자 입력을 받는 등 다양한 기능을 추가하여 앱을 개발할 수 있습니다.

 

마무리

Streamlit을 사용하면 복잡한 웹 프레임워크 없이도 Python만으로 데이터 애플리케이션을 빠르게 구축할 수 있습니다. 이제 기본적인 설치와 데모 실행 방법을 알게 되었으니, 다양한 프로젝트에 활용해 보겠습니다.

 

특정 파일 하나만 SVN 저장소에서 체크아웃하는 것은 기본적으로 SVN에서 지원하지 않습니다. SVN은 주로 전체 디렉토리나 프로젝트를 체크아웃하는 데 사용됩니다.

그러나 필요에 따라 특정 파일을 체크아웃하는 방법이 있습니다. 이를 위해서는 svn export 명령어를 사용할 수 있습니다. 이 명령어는 .svn 디렉토리를 제외한 특정 디렉토리나 파일을 다른 디렉토리로 내보내는 역할을 합니다.

예를 들어, SVN 저장소에서 특정 파일을 체크아웃하려면 다음과 같이 사용할 수 있습니다:

$ svn export URL/파일이름 [대상디렉토리]

여기서 URL/파일이름은 체크아웃하려는 파일의 URL 또는 경로를 나타냅니다. 대상디렉토리는 파일이 내보내질 로컬 디렉토리를 나타냅니다. 만약 대상 디렉토리를 지정하지 않으면 현재 디렉토리에 파일이 내보내집니다.

예를 들어, 파일 example.txt을 체크아웃하고자 할 때:

& svn export https://svn.example.com/repository/trunk/example.txt

 

이렇게 하면 해당 파일이 현재 디렉토리에 내보내집니다. 필요에 따라 대상 디렉토리를 변경하여 내보낼 수 있습니다.

 

좀더 상세하게 export할 디렉토리 지정 및 svn사용자정보를 추가 옵션으로 선택할수도있습니다.

$ svn export --non-interactive --username <username> --password <password> \
      https://svn.example.com/repository/trunk/example.txt --force /path/to/local/directory

'SVN' 카테고리의 다른 글

SVN Import  (0) 2024.03.13
두개의 원격 SVN간에 diff 비교  (0) 2024.03.13

svn import 명령어를 사용하여 새로운 디렉토리나 파일을 SVN 저장소에 강제로 추가할 수 있습니다. 이 명령어는 일반적으로 로컬 파일 시스템의 파일이나 디렉토리를 SVN 저장소에 추가할 때 사용됩니다.

기본적인 사용법은 다음과 같습니다

svn import [로컬 디렉토리 경로] [SVN 저장소 URL] -m "커밋 메시지"

 

여기서 [로컬 디렉토리 경로]는 추가할 로컬 디렉토리의 경로이고, [SVN 저장소 URL]은 추가할 위치의 SVN 저장소 경로입니다. -m 옵션은 커밋 메시지를 지정하는 옵션입니다.

그러나 svn import는 이미 존재하는 디렉토리나 파일을 추가하는 것을 허용하지 않습니다. 따라서 "강제로" 추가하는 것은 기본 기능이 아니며, 일반적으로 필요하지 않습니다.

만약 이미 존재하는 디렉토리나 파일을 추가해야 하는 상황이라면, 먼저 해당 디렉토리나 파일을 삭제한 후 다시 svn add 명령어를 사용하여 추가해야 합니다. 이렇게 하면 SVN에서 강제로 추가하는 것이 아니라 일반적인 방법으로 파일이나 디렉토리를 추가할 수 있습니다.

 

$ svn help import
import: Commit an unversioned file or tree into the repository.
usage: import [PATH] URL

  Recursively commit a copy of PATH to URL.
  If PATH is omitted '.' is assumed.
  Parent directories are created as necessary in the repository.
  If PATH is a directory, the contents of the directory are added
  directly under URL.
  Unversionable items such as device files and pipes are ignored
  if --force is specified.

Valid options:
  -q [--quiet]             : print nothing, or only summary information
  -N [--non-recursive]     : obsolete; try --depth=files or --depth=immediates
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                             'immediates', or 'infinity')
  --auto-props             : enable automatic properties
  --force                  : force operation to run
  --no-auto-props          : disable automatic properties
  -m [--message] ARG       : specify log message ARG
  -F [--file] ARG          : read log message from file ARG
  --force-log              : force validity of log message source
  --editor-cmd ARG         : use ARG as external editor
  --encoding ARG           : treat value as being in charset encoding ARG
  --with-revprop ARG       : set revision property ARG in new revision
                             using the name[=value] format
  --no-ignore              : disregard default and svn:ignore property ignores

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --trust-server-cert      : accept SSL server certificates from unknown
                             certificate authorities without prompting (but only
                             with '--non-interactive')
  --config-dir ARG         : read user configuration files from directory ARG
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf

$

 

파일하나를 Import 할경우

$ svn import file.txt http://svn.example.com/repo/trunk/file.txt

 

쉘에서 사용자와 비밀번호를 지정해야 하는 경우

$ svn import --non-interactive --username <username> --password <password> \
    -m "Comment" /path/to/file path/to/svn/repo/filename

 

 -N 플래그를 사용하여 비재귀적으로 코드를 체크아웃 할경우, 모든 하위 디렉터리를 체크아웃하지는 않으며 파일 하나를 추가하려는 경우 사용할수 있습니다.

$ svn co -N http://svn.example.com/repo/trunk

'SVN' 카테고리의 다른 글

SVN export  (0) 2024.03.13
두개의 원격 SVN간에 diff 비교  (0) 2024.03.13

두 개의 원격 SVN 저장소 간에 변경 사항을 비교하는 것은 SVN 자체에서 직접 지원하지 않습니다. 대신에 두 저장소를 체크아웃한 후 svn diff 명령어를 사용하여 로컬 작업 디렉토리의 변경 사항을 비교해야 합니다.

 

일반적인 단계는 다음과 같습니다

 

1. 첫 번째 SVN 저장소를 체크아웃합니다

svn checkout [첫 번째 저장소 URL] [첫 번째 로컬 디렉토리]

 

2. 두 번째 SVN 저장소를 체크아웃합니다

svn checkout [두 번째 저장소 URL] [두 번째 로컬 디렉토리]

 

3.두 로컬 디렉토리 간에 변경 사항을 비교합니다

svn diff [첫 번째 로컬 디렉토리] [두 번째 로컬 디렉토리]

 

위와 같은 단계를 따르면 두 개의 원격 SVN 저장소 간에 변경 사항을 비교할 수 있습니다. 하지만 이 방법은 로컬 저장소를 사용하여 변경 사항을 비교하기 때문에 두 저장소가 크다면 시간과 저장 공간이 많이 필요할 수 있습니다.

'SVN' 카테고리의 다른 글

SVN export  (0) 2024.03.13
SVN Import  (0) 2024.03.13

 

작년 이맘때쯤 같은 질문을 날려봤었는데 그때 엉뚱한 띠를 말해주길래 음~~ 했다.

그때는 Askup과 ChatGPT를 했는데 둘다..잘못된..

언제쯤 내 태어난해의 띠를 맞출려나..

 

그런데 ChatGPT 4에서는 된다고하네요. 지금유료가 아니라 확인은 못해보지만 ㅠㅠ

 

그리고 뤼튼에서 GPT4로 잘찾아주네요. 결국 돈이들어야 하나봅니다.

 

 

ChatGPT 3.5
Upstage solar mini chat

 

 

+ Recent posts