GPT-5 를 무료로 사용하는 방법

이번 Edge 업데이트에서, GPT-5 옵션이 추가되었습니다.

사용해보니, 꽤 좋은 것 같습니다.

최초의 질문에 대한 응답 후, 스스로 그 다음 요구사항을 만들어내고,

그것도 만들어드릴까요?

라는 식으로 답변을 마무리합니다.
그러면, 제 대답은

진행시켜

“진행시켜” 서너 번이면, 라이브러리 수준의 코드를 만들어 주더군요.

참고로, 아래는 제가 코드 도움을 받을 때 사용하는 방법입니다.

요구 사항을 아래와 같이 기술(describe)하는 것보다,

Linq.Where의 predicate 을 직렬화 혹은 DB 에 저장할 수 있는 자료구조로 만들어줘

구체적인 뼈대 코드를 적고, 복잡한 구현을 빈칸으로 두면 매우 정확하고 오류 없는 코드를 생성해 냅니다.

class Filter<T>
{
    public int Id { get; set; } // PK
    public string Name { get; set; }
    [JsonInclude]
    public string? CriteriaString { get; private set; }
    public Func<T, bool> Criteria => ToFilter(CriteriaString);

    [JsonConstructor]
    protected Filter() : this(default!, default!) { } // Ef core

    protected Filter(string name, string criteriaString) =>
        (Name, CriteriaString) = (name, criteriaString);

    public static Filter<T> New(string name, Expression<Func<T, bool>> criteria)
    {
        var criteriaString = ToCriteriaString(criteria);
        return new Filter<T>(name, criteriaString);
    }
    static string ToCriteriaString(Expression<Func<T, bool>> expression)
    {
        throw new NotImplementedException();
    }
    static Func<T, bool> ToFilter(string? criteriaString)
    {
        throw new NotImplementedException();
    }
    public void SetCriteria(Expression<Func<T, bool>> criteria)
    {
        throw new NotImplementedException();
    }
}

코드가 완성되었다면, 추가 기능을 아래와 같이 요구합니다.

static class FilterExtesions
{
    public static IEnumerable<Filter<T>> Collisions<T>(this IEnumerable<Filter<T>> exists, params Filter<T>[] filters)
    {
        throw new NotImplementedException();

        // exam.
        // when exists are:
        // filter1: w => w.Age > 10 
        // filter2: w => w.Grade.Id == 1

        // colliding filters and returns:
        // w => w.Age < 10 => filter1
        // w => w.Age == 0 => filter1
        // w => w.Grade.Id != 10 => filter2
        // w => w.Grade.Id == 4 => filter2
    }
}

뼈대 코드의 식별자를 통해 요구 사항을 유추하고,

  • 요구 사항과 뼈대 코드가 의미론적으로 맞는지?
    • 맞지 않다면, 스스로 컨텍스트를 한정하여 요구 사항 재정의
  • 예제 case 가 있는 경우, 그것을 검증하는 코드 생성

등을 하더군요.

특히, 컨텍스트를 점점 확장해서, "그것도 할 수 있는데, 진행할까요"라면서, 폭주의 시동을 겁니다.

이 폭주는 무한하지 않은 것 같습니다.
컨텍스트의 확장이 특정 단계에 접어 들어 더 이상 고려 사항이 없다고 판단되면, 다른 컨텍스트나 케이스를 건드는 것 같았습니다.

이는 기존의 코파일럿에게는 보이지 않던 특징입니다.
기존에는 뭔가 컨텍스트가 부유하는 듯, 이리 저리 왔다갔다하는 것처럼 느껴졌는데, GPT-5 는 중심 컨텍스트를 잘 부여잡고 있는 듯 보였습니다.

참고로, 깃허브 코파일럿은 어떤 주의 사항을 주더라도, 저도 모르게 혹은 너무 많은 변경으로 제가 놓치는 부분이 있는 것 같아, 다소 위험(?)하다고 생각되어 잘 안쓰게 되었습니다.

이에 반해 Edge 코파일럿은 프로젝트와 격리된 환경이기 때문에 그런 우려가 적고, 더군다나 (언제까지일 지 모르겠지만) 무제한 무료라서 맘편하게 사용하게 되더군요.

5개의 좋아요

윈도우 11이라면 Copilot 앱으로도 설치되어 있을겁니다.

참고로, 별도 기업 요금제를 사용하지 않으면 모델 학습에 사용되니 참고하세요…

5개의 좋아요

윈도우 10도 있습니다.

그런데, 제 컴퓨터 문제인지, 동작이 Edge 보다는 원활하지 않은 것 같아, Edge 를 주로 사용합니다.

Edge 에서 모든 활동 내역은 코파일럿 앱과 공유되기는 하는데, 그것을 불러 오는 것도 한참 걸리더군요.

코파일럿을 사용할 때는 당연히 프로젝트 코드를 제공하지 않아, 학습에 따른 보안 문제를 최소화합니다.

사실, 깃허브나 깃허브 코파일럿을 유료로 사용한다고 해서, 보안 문제가 없을 것이라고 누가 장담을 하겠습니까?

실제로, private repository로 설정된 깃허브 저장소의 제 UI를 흉내낸 UI를 생성한 적도 있습니다. 로컬 저장소의 코드를 참조했는지는 모르겠지만요.

4개의 좋아요

AI에게 만들고자 하는 기능을 프롬프트로 직접 요구하는 것이 아니라 위의 내용 처럼 좀 더 정확한 결과물을 얻을 수 있는 개발에 활용 가능한 활용 지침이 정리된다면 참 유용할 것 같습니다. 좋은 내용 감사합니다.

4개의 좋아요

도움이 되셨다니, 다행입니다.

추가적으로 첨언하자면, 요구 기능은 가급적 순수 함수 혹은, 적어도, static 으로 한정하는 것이 좋은 듯 합니다.

실제로 본문의 예제 코드 중 static 메서드는 모두 확장 클래스(나 별도의 프로젝트)로 옮길 수 있고, AI가 추가하는 로직은 그 확장 클래스 내부에서 성장하는데, 이는 내 코드에 아무런 영향을 주지 않습니다.

내 코드는 AI 코드의 소비자 지위만 유지하게 되어, 코드 관리가 쉬워집니다.

3개의 좋아요