10주차: 실습 - GitHub Copilot에게 문제 정의하고 해결하기
개요
지난 주 복습: 중간 점검과 4대 원리 통합
지난 9주차는 중요한 전환점이었습니다. 1-8주차의 학습 내용을 종합적으로 복습하고, 자신의 강점과 보완할 점을 파악했습니다. 무엇보다 중요했던 것은 4대 원리를 각각 따로가 아니라 함께 사용하는 연습이었습니다.
여행 계획 세우기 예제를 기억하시나요? 문제를 분해하고(교통, 숙소, 관광지), 패턴을 찾고(비슷한 여행 경험), 추상화하고(핵심 일정만), 알고리즘으로 정리하는(단계별 순서) 전 과정을 통합하여 적용했습니다. 이를 통해 4대 원리가 서로 어떻게 연결되어 작동하는지 체감했을 것입니다.
이제 여러분은 문제를 보면 자연스럽게 "이걸 어떻게 나눌까?", "비슷한 게 있었나?", "핵심은 뭔가?", "순서는?"이라고 생각하게 되었을 것입니다. 이것이 바로 컴퓨팅 사고가 내면화된 모습입니다.
이번 주: 사고를 프롬프트로 변환하기
지금까지 여러분은 컴퓨팅 사고의 4대 원리를 배우고, 9주차에서 이를 통합적으로 사용하는 연습을 했습니다. 이제는 그 모든 것을 GitHub Copilot Agent와의 효과적인 대화로 연결하여 더 복잡한 문제를 해결할 차례입니다. 이번 주는 프롬프트 작성의 핵심 패턴과 Agent 모드의 심화 활용을 집중적으로 훈련하는 시간입니다.
좋은 프롬프트는 마치 좋은 질문과 같습니다. 명확하고 구체적인 질문을 하면 명확하고 유용한 답을 얻습니다. 모호하거나 불완전한 질문을 하면 원하는 결과를 얻기 어렵습니다. GitHub Copilot은 강력한 도구이지만, 여러분이 무엇을 원하는지 정확히 알아야 제대로 도와줄 수 있습니다. 특히 Agent 모드(Chat 창 하단의 모드 드롭다운에서 선택)를 활용하면 복잡한 작업을 효과적으로 위임하고, 여러 파일에 걸친 변경을 자율적으로 처리할 수 있습니다.
이번 주에는 네 가지 핵심 영역에 집중합니다. 첫째, 문제를 명확하게 정의하는 방법입니다. 여러분이 해결하고 싶은 것이 무엇인지 Agent가 이해할 수 있도록 설명하는 기술을 배웁니다. 둘째, 예상 결과를 구체적으로 명시하는 방법입니다. 최종 결과물이 어떤 모습이어야 하는지 미리 보여주면 Agent가 훨씬 정확하게 만들어냅니다. 셋째, 제약 조건을 효과적으로 전달하는 방법입니다. 무엇을 해야 하는지만큼, 무엇을 하지 말아야 하는지도 중요합니다. 넷째, Agent 모드를 활용한 복잡한 작업 위임입니다. 단순한 코드 생성을 넘어 프로젝트 수준의 작업을 Agent와 협업하는 방법을 익힙니다.
이번 주 학습 목표
이번 주차가 끝나면 여러분은:
- 문제를 명확하게 정의하여 Copilot Agent에게 전달할 수 있습니다
- 예상 결과를 구체적으로 명시하는 프롬프트를 작성할 수 있습니다
- 제약 조건을 효과적으로 설명할 수 있습니다
- Agent 모드를 활용하여 복잡한 작업을 효과적으로 위임할 수 있습니다
- 여러 파일에 걸친 변경사항을 Agent와 협업하여 처리할 수 있습니다
- Copilot의 응답을 평가하고 개선 요청을 할 수 있습니다
- 다양한 유형의 문제에 적절한 프롬프트 패턴과 Agent 활용 전략을 적용할 수 있습니다
실습의 흐름
오늘 실습은 실전에 가깝게 진행됩니다:
1부: 효과적인 프롬프트 작성 패턴
- 좋은 프롬프트와 나쁜 프롬프트 비교하기
- 문제 정의, 결과 명시, 제약 조건의 3요소 익히기
- 프롬프트 템플릿 활용법
2부: GitHub Copilot Agent 모드 심화
- Agent를 활용한 복잡한 작업 위임 방법
- 여러 파일에 걸친 변경사항 처리하기
- 프로젝트 수준의 컨텍스트 활용하기
- Agent와의 효과적인 대화 패턴 마스터하기
3부: GitHub Copilot 응답 평가 및 개선하기
- Copilot의 응답이 적절한지 판단하는 기준
- 추가 설명으로 결과 개선하기
- 반복적 대화를 통한 완성도 높이기
4부: 다양한 유형의 문제 해결 실습
- 데이터 처리 문제
- 자동화 문제
- 정보 정리 문제
- 각 유형별 프롬프트 작성 전략 및 Agent 활용
실제로 Copilot Agent를 사용하면서 배우는 것이 가장 효과적입니다. 오늘은 많이 시도해보세요!
효과적인 프롬프트 작성 패턴
좋은 프롬프트의 3요소
효과적인 프롬프트는 세 가지 핵심 요소를 포함합니다. 이것만 기억하면 대부분의 상황에서 좋은 결과를 얻을 수 있습니다.
1. 명확한 문제 정의
- 무엇을 하고 싶은가?
- 왜 필요한가?
- 누가 사용할 것인가?
2. 구체적인 결과 명시
- 최종 결과물이 어떻게 보여야 하는가?
- 어떤 형식이어야 하는가?
- 어떤 기능이 있어야 하는가?
3. 명확한 제약 조건
- 무엇을 포함하지 말아야 하는가?
- 어떤 한계가 있는가?
- 우선순위는 무엇인가?
이 세 요소를 갖춘 프롬프트는 Copilot이 정확히 이해하고 적절한 결과를 만들어낼 확률을 크게 높입니다.
나쁜 프롬프트 vs 좋은 프롬프트
실제 예시로 차이를 명확히 이해해봅시다.
예제 1: 계산기 만들기
나쁜 프롬프트:
계산기를 만들어줘
무엇이 문제인가?
- 어떤 종류의 계산기인지 불명확 (사칙연산? 공학용? 급여 계산?)
- 어떻게 보여야 하는지 알 수 없음 (화면 구성?)
- 어떤 기능이 필요한지 모름
좋은 프롬프트:
간단한 사칙연산 계산기를 만들어주세요.
필요한 기능:
- 두 숫자를 입력받기
- 더하기, 빼기, 곱하기, 나누기 중 선택
- 결과 표시하기
- 나누기할 때 0으로 나누면 오류 메시지 표시
화면 구성:
- 첫 번째 숫자 입력란
- 연산 선택 버튼 (+, -, ×, ÷)
- 두 번째 숫자 입력란
- 계산 버튼
- 결과 표시 영역
복잡한 기능(메모리 저장, 이전 계산 기록 등)은 필요 없습니다.
간단하고 사용하기 쉽게 만들어주세요.
무엇이 개선되었나?
- 명확한 범위: "사칙연산 계산기"
- 구체적인 기능: 4가지 연산, 오류 처리
- 화면 구성 명시: 어떤 요소가 필요한지 나열
- 제외 사항 명시: 복잡한 기능은 필요 없음
- 우선순위: "간단하고 사용하기 쉽게"
예제 2: 일정 관리 프로그램
나쁜 프롬프트:
일정 관리 프로그램 만들어줘
좋은 프롬프트:
개인용 간단 일정 관리 프로그램을 만들어주세요.
사용자가 할 수 있어야 하는 것:
1. 일정 추가하기 (제목, 날짜, 시간)
2. 일정 목록 보기 (날짜순으로 정렬)
3. 오늘의 일정만 따로 보기
4. 완료한 일정은 체크 표시하기
5. 일정 삭제하기
화면 예시:
=== 오늘의 일정 === [ ] 09:00 팀 미팅 [✓] 14:00 보고서 작성 [ ] 18:00 저녁 약속
=== 전체 일정 === 2024-01-15 [ ] 09:00 팀 미팅 [✓] 14:00 보고서 작성
필요 없는 기능:
- 다른 사람과 일정 공유
- 알림 기능
- 반복 일정 설정
간단한 저장 방식으로 충분합니다.
왜 이 프롬프트가 효과적인가?
- 사용자 행동 중심: "할 수 있어야 하는 것" 나열
- 결과 예시 제공: 실제로 어떻게 보일지 보여줌
- 제외 사항 명시: 불필요한 복잡한 기능 제거
- 기술 요구사항 완화: "간단한 저장 방식"으로 범위 한정
프롬프트 작성 템플릿
어떤 문제든 다음 템플릿을 사용하면 효과적인 프롬프트를 만들 수 있습니다.
기본 템플릿:
[무엇을] 만들어주세요.
목적: [왜 필요한지, 누가 사용할지]
필요한 기능:
1. [첫 번째 핵심 기능]
2. [두 번째 핵심 기능]
3. [세 번째 핵심 기능]
결과물 예시:
[어떻게 보이거나 작동해야 하는지 예시]
제약 조건:
- [포함하지 말아야 할 것]
- [우선순위나 한계]
[추가 요구사항이나 스타일 가이드]
실제 적용 예시: 가계부 프로그램
간단한 가계부 프로그램을 만들어주세요.
목적: 일상적인 수입과 지출을 쉽게 기록하고 확인하기 위함
필요한 기능:
1. 수입/지출 내역 추가하기 (날짜, 분류, 금액, 메모)
2. 이번 달 총 수입과 지출 보기
3. 분류별로 얼마나 썼는지 보기 (식비, 교통비, 쇼핑 등)
4. 특정 기간의 내역 검색하기
결과물 예시:
=== 2024년 1월 가계부 === 총 수입: 3,000,000원 총 지출: 2,200,000원 잔액: 800,000원
분류별 지출:
- 식비: 600,000원 (27%)
- 교통비: 200,000원 (9%)
- 쇼핑: 400,000원 (18%)
- 기타: 1,000,000원 (46%)
최근 내역: 01/15 [식비] -15,000원 점심 01/14 [교통비] -3,500원 지하철
제약 조건:
- 복잡한 그래프나 통계는 필요 없음
- 여러 명이 함께 쓰는 기능은 제외
- 은행 계좌 연동 같은 고급 기능은 나중에
간단한 입력과 조회만 잘 되면 됩니다.
실습 1: 프롬프트 개선하기
다음 나쁜 프롬프트들을 템플릿을 사용하여 개선해보세요.
과제 1:
날씨 알려주는 거 만들어줘
여러분의 개선안: (스스로 작성해보세요)
과제 2:
운동 기록 프로그램
여러분의 개선안: (스스로 작성해보세요)
과제 3:
할 일 목록 만들기
여러분의 개선안: (스스로 작성해보세요)
잠시 시간을 갖고 직접 작성해보세요. 템플릿을 참고하면서 필요한 기능, 결과 예시, 제약 조건을 생각해봅시다. 다음 페이지에서 예시 답안을 확인하겠습니다.
프롬프트 개선 예시 답안
과제 1 개선안: 날씨 프로그램
현재 날씨 정보를 보여주는 간단한 프로그램을 만들어주세요.
목적: 외출 전에 오늘 날씨를 빠르게 확인하기 위함
필요한 기능:
1. 지역 이름 입력받기 (예: 서울, 부산)
2. 현재 기온 보여주기
3. 날씨 상태 보여주기 (맑음, 흐림, 비, 눈)
4. 오늘 최고/최저 기온 보여주기
결과물 예시:
=== 서울 날씨 === 현재: 15°C (맑음) 오늘: 최저 8°C / 최고 18°C
제약 조건:
- 일주일 예보 같은 건 필요 없음
- 실시간 데이터 연동은 나중에 (일단 예시 데이터로)
- 복잡한 그래픽이나 지도는 제외
텍스트로 간단명료하게 보여주면 됩니다.
과제 2 개선안: 운동 기록 프로그램
개인 운동 기록을 관리하는 프로그램을 만들어주세요.
목적: 운동 습관을 꾸준히 유지하고 진행 상황을 확인하기 위함
필요한 기능:
1. 운동 기록 추가 (날짜, 운동 종류, 시간, 간단한 메모)
2. 이번 주/이번 달 운동 일수 확인
3. 운동별 총 시간 통계 보기
4. 최근 운동 기록 목록 보기
결과물 예시:
=== 이번 주 운동 기록 === 운동 일수: 4일 총 운동 시간: 5시간 30분
운동별 통계:
- 달리기: 3시간 (3회)
- 근력 운동: 2시간 (2회)
- 요가: 30분 (1회)
최근 기록: 01/15 달리기 1시간 - 한강 조깅 01/14 근력 운동 1시간 - 상체 집중 01/12 요가 30분 - 아침 스트레칭
제약 조건:
- 운동 계획 수립 기능은 제외
- 칼로리 계산 같은 복잡한 기능은 나중에
- 여러 사람 비교나 순위는 필요 없음
간단히 기록하고 확인하는 것에 집중해주세요.
과제 3 개선안: 할 일 목록
일상의 할 일을 관리하는 간단한 프로그램을 만들어주세요.
목적: 매일 해야 할 일들을 잊지 않고 체계적으로 관리하기 위함
필요한 기능:
1. 할 일 추가하기 (제목만 간단하게)
2. 완료한 일 체크하기
3. 오늘 할 일 / 전체 할 일 보기
4. 완료한 일 삭제하거나 숨기기
5. 중요한 일은 별표로 표시하기
결과물 예시:
=== 오늘 할 일 === [ ] [중요] 보고서 마감 [ ] 장보기 [✓] 이메일 확인 [ ] 운동하기
=== 전체 할 일 (미완료) === 오늘: [ ] [중요] 보고서 마감 [ ] 장보기 [ ] 운동하기 내일: [ ] 회의 준비 [ ] 병원 예약
제약 조건:
- 복잡한 프로젝트 관리 기능은 제외
- 알림이나 공유 기능은 필요 없음
- 카테고리나 태그 같은 건 나중에
빠르게 추가하고 체크할 수 있는 단순함이 중요합니다.
문제 정의의 기술
프롬프트에서 가장 중요한 부분은 바로 문제 정의입니다. 문제가 명확하지 않으면 아무리 다른 부분을 잘 작성해도 원하는 결과를 얻기 어렵습니다.
좋은 문제 정의의 조건:
1. 구체적이어야 합니다
나쁜 예: "데이터를 정리하는 프로그램"
좋은 예: "엑셀 파일의 중복된 행을 찾아서 제거하는 프로그램"
2. 범위가 명확해야 합니다
나쁜 예: "쇼핑몰 만들기"
좋은 예: "상품 목록을 보고 장바구니에 담을 수 있는 간단한 쇼핑 화면"
3. 맥락을 포함해야 합니다
나쁜 예: "파일 변환"
좋은 예: "사진 촬영 날짜를 파일 이름으로 바꾸기 (예: IMG001.jpg → 2024-01-15.jpg)"
4. 성공 기준이 있어야 합니다
나쁜 예: "빠른 검색"
좋은 예: "책 제목이나 저자로 검색하면 해당 책 정보를 바로 보여주기"
예상 결과를 명시하는 방법
Copilot에게 최종 결과물이 어떤 모습이어야 하는지 보여주면 훨씬 정확한 결과를 얻을 수 있습니다.
방법 1: 텍스트 예시
결과 예시:
이름: 홍길동 나이: 25 직업: 개발자
방법 2: 단계별 설명
프로그램을 실행하면:
1. "이름을 입력하세요:" 라고 물어봄
2. 사용자가 이름 입력
3. "안녕하세요, [이름]님!" 이라고 인사
4. 종료
방법 3: 화면 구성도
화면 구성:
┌─────────────────┐
│ 제목 입력란 │
├─────────────────┤
│ 내용 입력란 │
│ (여러 줄) │
├─────────────────┤
│ [저장] [취소] │
└─────────────────┘
방법 4: 대화 흐름
사용자: 계산기 실행
프로그램: "첫 번째 숫자를 입력하세요"
사용자: 10
프로그램: "연산을 선택하세요 (+, -, *, /)"
사용자: +
프로그램: "두 번째 숫자를 입력하세요"
사용자: 5
프로그램: "결과: 15"
제약 조건을 효과적으로 전달하기
무엇을 하지 말아야 하는지 명시하는 것도 중요합니다. 이것이 없으면 Copilot이 불필요하게 복잡한 결과를 만들 수 있습니다.
제약 조건의 유형:
1. 기능 제한
다음 기능은 필요 없습니다:
- 사용자 로그인
- 데이터 암호화
- 파일 업로드
2. 복잡도 제한
간단하게 만들어주세요:
- 복잡한 설정 화면 없이
- 최소한의 입력만으로
- 초보자도 쉽게 사용할 수 있게
3. 기술 제한
기술 요구사항:
- 데이터베이스는 사용하지 않고 간단한 파일 저장
- 복잡한 라이브러리는 피하기
- 기본 기능만으로 구현
4. 우선순위 명시
우선순위:
1순위: 사용하기 쉬울 것
2순위: 빠르게 결과를 볼 수 있을 것
3순위: 정확성 (나중에 개선 가능)
GitHub Copilot Agent 모드 심화
이제 GitHub Copilot의 가장 강력한 기능인 Agent 모드를 깊이 있게 탐구할 시간입니다. Agent 모드는 단순한 코드 완성을 넘어, 여러분과 함께 생각하고 문제를 해결하는 진정한 협업 파트너입니다.
Agent 모드란 무엇인가 (2025년 최신 기능)
Agent 모드는 GitHub Copilot의 고급 기능으로, 다음과 같은 특징을 가지고 있습니다:
핵심 기능:
- 자율적 작업 수행: 여러분이 작업을 요청하면 Agent가 스스로 계획을 세우고 실행합니다
- 멀티 파일 편집: 한 번의 요청으로 여러 파일을 동시에 수정할 수 있습니다
- 프로젝트 컨텍스트 이해: 전체 프로젝트 구조를 파악하고 맥락에 맞는 제안을 합니다
- 반복적 대화: 대화를 통해 점진적으로 결과를 개선합니다
- 백그라운드 작업: 복잡한 작업을 백그라운드에서 수행하고 완료되면 알려줍니다
2025년 현재 Agent 모드 접근 방법:
- VS Code에서 Chat 창 열기 (Ctrl+Shift+I 또는 Cmd+Shift+I)
- 채팅 입력란에서 '@workspace' 멘션 사용으로 프로젝트 전체 컨텍스트 활용
- 복잡한 요청을 자연어로 입력하면 Agent가 자동으로 활성화됩니다
// 이미지로 교체되어야 함 : VS Code에서 GitHub Copilot Agent 모드 채팅 창 인터페이스 프롬프트: A clean screenshot-style illustration of VS Code interface showing GitHub Copilot Chat panel on the right side. The chat interface shows a conversation where user requests "@workspace create a new feature" and Copilot Agent responds with a plan. Modern IDE theme, professional look, educational style.
Agent에게 복잡한 작업 위임하기
Agent 모드의 진정한 힘은 복잡한 작업을 한 번에 위임할 수 있다는 점입니다.
예제 1: 전체 기능 추가 요청
일반적인 요청:
"로그인 기능을 추가해줘"
Agent 모드 활용:
@workspace
사용자 로그인 기능을 추가하고 싶어요.
필요한 작업:
1. 로그인 폼 화면 만들기
2. 사용자 인증 처리 부분 만들기
3. 세션 관리 기능 추가하기
4. 기존 메인 화면에 로그인 체크 추가하기
관련 파일들을 모두 수정하거나 새로 만들어주세요.
Agent가 하는 일:
- 필요한 파일 목록 파악
- 각 파일별 변경사항 계획
- 순서대로 파일 생성 및 수정
- 전체 작업 완료 후 요약 제공
예제 2: 리팩토링 작업
@workspace
현재 프로젝트의 모든 파일에서 사용자 정보를 다루는 부분을 찾아서
일관된 형식으로 통일해주세요.
현재 문제:
- 어떤 곳은 "user_name", 어떤 곳은 "username" 사용
- 정보를 담는 형태도 각각 다름
통일할 형식:
{
"username": "이름",
"email": "이메일",
"created_at": "날짜"
}
영향받는 모든 파일을 찾아서 수정해주세요.
Agent가 하는 일:
- 프로젝트 전체에서 관련 코드 검색
- 변경이 필요한 모든 파일 식별
- 각 파일의 변경사항 미리보기 제공
- 승인 후 일괄 적용
여러 파일에 걸친 변경사항 처리하기
Agent 모드의 강력한 기능 중 하나는 여러 파일을 동시에 다룰 수 있다는 것입니다.
실습: 새로운 기능 추가하기
상황: 간단한 할 일 관리 프로그램에 "카테고리" 기능을 추가하려고 합니다.
Agent에게 요청:
@workspace
할 일 관리 프로그램에 카테고리 기능을 추가하고 싶어요.
현재 구조:
- main.py: 메인 프로그램
- todo.py: 할 일 처리 부분
- storage.py: 저장 부분
추가할 기능:
1. 할 일에 카테고리 추가 (예: 업무, 개인, 쇼핑)
2. 카테고리별로 필터링해서 보기
3. 저장 형식에 카테고리 포함
관련된 모든 파일을 적절하게 수정해주세요.
Agent의 작업 계획 예시:
다음과 같이 작업하겠습니다:
1. todo.py 수정
- Todo 클래스에 category 필드 추가
- 카테고리 유효성 검사 추가
2. storage.py 수정
- 저장/불러오기 형식에 category 필드 추가
- 기존 데이터 마이그레이션 처리
3. main.py 수정
- 카테고리 입력 받는 부분 추가
- 카테고리별 필터링 메뉴 추가
- 카테고리 목록 보기 기능 추가
각 파일의 변경사항을 확인해주세요.
여러분이 할 일:
- Agent의 계획을 검토합니다
- 각 파일의 변경사항을 미리봅니다
- 적절하다고 판단되면 "좋아요, 진행해주세요"라고 응답합니다
- 완료 후 테스트해봅니다
- 필요한 부분은 추가로 요청합니다
프로젝트 수준의 컨텍스트 활용하기
Agent 모드는 '@workspace' 멘션을 통해 프로젝트 전체를 이해합니다.
컨텍스트 활용 팁:
1. 전체 프로젝트 구조 파악 요청
@workspace
이 프로젝트가 어떻게 구성되어 있는지 설명해주세요.
주요 파일들의 역할과 서로 어떻게 연결되어 있는지 알려주세요.
2. 일관된 스타일 적용
@workspace
기존 코드의 스타일과 패턴을 따라서
새로운 "알림" 기능을 추가해주세요.
다른 기능들과 같은 방식으로 구현해주세요.
3. 관련 코드 자동 발견
@workspace
사용자 정보를 다루는 모든 부분을 찾아서
보안을 강화해주세요.
비밀번호는 항상 암호화되어야 하고,
민감한 정보는 로그에 남으면 안 됩니다.
4. 의존성 파악
@workspace
이 파일을 수정하면 영향받는 다른 파일들을 알려주세요.
함께 수정해야 할 부분이 있으면 모두 수정해주세요.
Agent와의 효과적인 대화 패턴
Agent 모드를 최대한 활용하려면 효과적인 대화 패턴을 익혀야 합니다.
패턴 1: 명확한 목표 + 제약 조건
@workspace
[목표] 데이터 백업 기능을 추가하고 싶어요.
[제약 조건]
- 기존 기능에 영향을 주면 안 됩니다
- 사용자가 직접 백업 파일 위치를 선택할 수 있어야 합니다
- 백업이 실패하면 명확한 오류 메시지를 보여줘야 합니다
[추가 요구사항]
- 자동 백업 기능은 지금은 필요 없어요
- 간단하게 수동 백업만 가능하면 됩니다
패턴 2: 단계적 확인
사용자: "@workspace 먼저 백업 기능의 기본 구조만 만들어주세요"
Agent: [기본 구조 제공]
사용자: "좋아요. 이제 사용자가 파일 위치를 선택하는 부분을 추가해주세요"
Agent: [파일 선택 기능 추가]
사용자: "완벽해요. 마지막으로 오류 처리를 추가해주세요"
Agent: [오류 처리 추가]
패턴 3: 예시 기반 요청
@workspace
기존의 "파일 저장" 기능과 똑같은 방식으로
"파일 불러오기" 기능을 만들어주세요.
참고할 파일: save_file.py
만들어야 할 내용: load_file.py
같은 패턴과 스타일을 유지해주세요.
패턴 4: 피드백 기반 개선
사용자: "@workspace 로그인 화면을 만들어주세요"
Agent: [로그인 화면 생성]
사용자: "좋은데, 비밀번호 입력란에 '표시/숨김' 버튼을 추가해주세요"
Agent: [기능 추가]
사용자: "완벽해요. 그런데 로그인 실패 시 메시지가 더 친절했으면 좋겠어요"
Agent: [메시지 개선]
실습: Agent 모드로 복잡한 기능 추가하기
이제 직접 해볼 시간입니다. Agent 모드를 사용하여 복잡한 기능을 추가해봅시다.
과제: 간단한 메모 앱에 검색 기능 추가하기
현재 상태:
- 메모 추가, 삭제, 목록 보기 기능만 있음
- main.py, memo.py, storage.py 세 파일로 구성
추가할 기능:
- 메모 내용으로 검색
- 검색 결과 강조 표시
- 검색 결과 개수 표시
Agent에게 요청하는 방법:
@workspace
메모 앱에 검색 기능을 추가하고 싶어요.
현재 파일 구조:
- main.py: 메인 프로그램 (메뉴 처리)
- memo.py: 메모 저장 형태와 처리
- storage.py: 파일 저장/불러오기
필요한 기능:
1. 검색어를 입력받기
2. 메모 제목과 내용에서 검색어 찾기
3. 찾은 메모 목록 보여주기
- 검색어가 포함된 부분을 [검색어] 형식으로 강조
- "총 3개의 메모를 찾았습니다" 같은 안내 메시지
4. 메인 메뉴에 "검색" 항목 추가
예상 결과:
검색어를 입력하세요: 회의
=== 검색 결과 (2개) ===
-
팀 [회의] 준비
- 내용: 다음 주 [회의] 안건 정리하기
-
[회의]록 작성
- 내용: 오늘 [회의] 내용 정리
관련 파일들을 모두 적절히 수정해주세요.
기존 기능은 그대로 유지하면서 검색만 추가해주세요.
Agent의 응답 예상:
- 작업 계획 제시
- 각 파일의 변경사항 미리보기
- 승인 후 실행
- 완료 후 테스트 방법 안내
여러분이 할 일:
- Agent의 계획을 읽고 이해하기
- 각 파일의 변경사항이 적절한지 확인하기
- 승인하고 실행하기
- 결과 테스트하기
- 개선사항이 있으면 추가 요청하기
Agent 모드 사용 시 주의사항
좋은 습관:
- ✅ 명확한 목표를 제시하세요
- ✅ 제약 조건을 분명히 하세요
- ✅ Agent의 계획을 검토한 후 승인하세요
- ✅ 단계적으로 진행하고 중간 확인을 하세요
- ✅ '@workspace'를 사용하여 프로젝트 컨텍스트를 활용하세요
피해야 할 것:
- ❌ 너무 모호한 요청 ("프로그램을 개선해줘")
- ❌ 검토 없이 바로 승인
- ❌ 한 번에 너무 많은 변경 요청
- ❌ 에러가 나도 원인 파악 없이 다시 요청
- ❌ 백업 없이 중요한 파일 수정
Agent 모드 활용 레벨업
초급: 단일 기능 추가
@workspace
"저장" 버튼을 추가해주세요.
중급: 여러 파일 수정
@workspace
데이터 저장 방식을 텍스트 파일에서 JSON으로 변경해주세요.
관련된 모든 파일을 수정해주세요.
고급: 복잡한 기능 구현
@workspace
사용자가 설정할 수 있는 테마 기능을 추가해주세요.
요구사항:
1. 밝은 테마와 어두운 테마 지원
2. 사용자 선택을 저장해서 다음에도 유지
3. 모든 화면에 테마 적용
4. 설정 메뉴 추가
영향받는 모든 파일을 찾아서 적절히 수정해주세요.
디자인은 간단하고 깔끔하게 해주세요.
GitHub Copilot 응답 평가 및 개선하기
Copilot 응답을 평가하는 기준
Copilot이 만든 결과물을 어떻게 평가해야 할까요? 다음 질문들로 확인해보세요.
1. 요청한 기능이 모두 있는가?
- 필요한 기능 목록을 다시 확인
- 빠진 기능이 있다면 추가 요청
- 예: "좋아요. 여기에 삭제 기능도 추가해주세요."
2. 결과가 예상과 일치하는가?
- 작동 방식이 생각한 것과 같은지 확인
- 다르다면 구체적으로 설명
- 예: "결과가 표 형식이 아니라 목록으로 나오네요. 표 형식으로 바꿔주세요."
3. 사용하기 쉬운가?
- 직접 사용해보기 (가능하다면)
- 복잡하거나 불편한 부분 찾기
- 예: "입력을 한 번에 받는 게 나을 것 같아요. 여러 번 묻지 말고 한 화면에서 입력하게 해주세요."
4. 불필요한 부분이 있는가?
- 요청하지 않은 기능이 있는지 확인
- 너무 복잡한 부분 제거 요청
- 예: "이 부분은 필요 없으니 더 간단하게 만들어주세요."
반복적 개선의 패턴
한 번에 완벽한 결과를 얻으려 하지 마세요. 대화를 통해 점진적으로 개선하는 것이 효과적입니다.
개선 대화 패턴:
1단계: 기본 기능 요청
"간단한 메모장을 만들어주세요.
- 메모 작성
- 메모 목록 보기
- 메모 저장"
2단계: 결과 확인 후 기능 추가
"좋아요! 여기에 메모 삭제 기능도 추가해주세요."
3단계: 사용성 개선
"메모를 작성하고 바로 저장되게 할 수 있을까요?
지금은 저장 버튼을 눌러야 해서 불편해요."
4단계: 세부 조정
"메모 목록을 최신순으로 정렬해주세요.
그리고 각 메모에 작성 날짜도 보여주세요."
5단계: 마무리
"완벽해요! 이제 메모가 비어있을 때
'메모가 없습니다' 메시지를 보여주세요."
효과적인 추가 요청 표현
Copilot에게 개선을 요청할 때 사용하면 좋은 표현들입니다.
기능 추가
"좋아요. 여기에 ___기능을 추가해주세요."
"___도 할 수 있게 해주세요."
수정 요청
"___부분을 ___로 바꿔주세요."
"___가 아니라 ___처럼 작동했으면 좋겠어요."
단순화 요청
"이 부분을 더 간단하게 만들어주세요."
"___기능은 빼고 더 심플하게 해주세요."
명확화 요청
"___가 어떻게 작동하는지 설명해주세요."
"이 부분이 잘 이해가 안 되는데, 다르게 설명해주실 수 있나요?"
문제 해결
"___오류가 나는데, 고쳐주세요."
"___이 작동하지 않아요. 확인해주실 수 있나요?"
실제 대화 흐름 예시
실제로 Copilot과 어떻게 대화하며 개선하는지 전체 과정을 살펴봅시다.
예제: 비밀번호 생성기 만들기
첫 번째 요청:
무작위 비밀번호를 만들어주는 프로그램을 만들어주세요.
기능:
- 비밀번호 길이 입력받기 (8~20자)
- 무작위 비밀번호 생성하기
- 생성된 비밀번호 보여주기
비밀번호는 영문자와 숫자를 섞어서 만들어주세요.
Copilot의 응답 확인 후: 여기서 Copilot이 만든 결과를 사용해봅니다. 그리고 개선이 필요한 부분을 발견합니다.
두 번째 요청 (기능 추가):
좋아요! 여기에 특수문자(!@#$%^&*)도 포함시켜주세요.
그리고 대문자와 소문자를 섞어서 만들어주세요.
세 번째 요청 (안전성 강화):
비밀번호 강도도 표시해주세요.
- 8자 이하: 약함
- 8~12자: 보통
- 12자 이상: 강함
네 번째 요청 (사용성 개선):
생성된 비밀번호를 클립보드에 복사하는 기능도 추가해주세요.
"복사되었습니다!" 메시지도 보여주면 좋겠어요.
다섯 번째 요청 (추가 옵션):
마지막으로, 여러 개의 비밀번호를 한 번에 만들 수 있게 해주세요.
"몇 개를 만들까요?" 물어보고, 입력한 개수만큼 생성해주세요.
최종 결과: 단계적인 개선을 통해 처음보다 훨씬 완성도 높은 프로그램이 만들어졌습니다. 이것이 바로 반복적 개선의 힘입니다.
대화 중 자주 발생하는 상황과 대처법
상황 1: Copilot이 너무 복잡하게 만들었을 때
사용자: "이건 너무 복잡해요. 좀 더 간단하게 만들어주세요.
초보자도 쉽게 쓸 수 있게 핵심 기능만 남겨주세요."
상황 2: Copilot이 요청을 잘못 이해했을 때
사용자: "제가 원한 건 이게 아니에요. 다시 설명할게요.
저는 ___를 하고 싶은 거예요. 예를 들면 ___처럼요."
상황 3: 결과는 좋은데 작은 부분만 바꾸고 싶을 때
사용자: "거의 완벽해요! ___부분만 ___로 바꿔주세요.
나머지는 그대로 두고요."
상황 4: 어떻게 작동하는지 이해가 안 될 때
사용자: "이 결과물이 어떻게 작동하는지 간단히 설명해주세요.
특히 ___부분이 궁금해요."
상황 5: 예상과 다른 결과가 나왔을 때
사용자: "결과가 조금 다르네요. 제가 원한 건:
- 입력: ___
- 출력: ___
이렇게 작동했으면 좋겠어요."
프롬프트 개선 훈련
같은 요청을 여러 방식으로 표현해보며 어떤 것이 더 효과적인지 비교해봅시다.
과제: 영어 단어장 프로그램
버전 1 (너무 짧음):
영어 단어 외우는 프로그램
버전 2 (조금 나음):
영어 단어를 추가하고 퀴즈로 테스트하는 프로그램을 만들어주세요.
버전 3 (구체적):
영어 단어 암기 프로그램을 만들어주세요.
기능:
1. 단어 추가 (영어, 한글 뜻)
2. 무작위로 퀴즈 출제 (영어 보고 한글 뜻 맞추기)
3. 정답/오답 표시
4. 전체 단어 목록 보기
버전 4 (더욱 구체적, 가장 효과적):
영어 단어 암기를 도와주는 프로그램을 만들어주세요.
목적: 일상적으로 영어 단어를 추가하고 반복 학습하기 위함
필요한 기능:
1. 단어 추가하기
- 영어 단어 입력
- 한글 뜻 입력
- "추가 완료!" 메시지
2. 퀴즈 모드
- 저장된 단어 중 무작위로 출제
- 영어 단어를 보여주고 한글 뜻 입력받기
- 정답이면 "정답!", 오답이면 "틀렸어요. 정답: ___"
- 다음 문제 또는 종료 선택
3. 단어 목록 보기
- 저장된 모든 단어 표시
- 영어 - 한글 형식
결과 예시:
=== 영어 단어장 ===
- 단어 추가
- 퀴즈
- 단어 목록 보기
- 종료 선택: 2
[퀴즈 모드] 문제: apple 답: 사과 정답!
계속하시겠습니까? (y/n)
제약 조건:
- 복잡한 통계나 성적 추적은 필요 없음
- 발음 기호나 예문은 나중에
- 간단한 입력과 퀴즈만 잘 작동하면 됨
왜 버전 4가 가장 좋은가?
- 목적이 명확함: "일상적으로 반복 학습"
- 각 기능의 세부 동작 설명: 어떤 입력을 받고 어떤 출력을 하는지
- 사용자 경험 예시: 실제 사용 흐름을 보여줌
- 제외 사항 명시: 불필요한 복잡한 기능 제거
- 우선순위 명확: "간단한 입력과 퀴즈만"
실습 2: Copilot과 대화하며 개선하기
이제 실제로 GitHub Copilot을 열고 다음 과제를 시도해보세요.
과제: 독서 목표 추적 프로그램
1단계: 첫 프롬프트 작성하기
올해 독서 목표를 추적하는 프로그램을 만들어주세요.
기능:
- 올해 목표 권수 설정 (예: 50권)
- 읽은 책 기록 추가 (제목, 완독 날짜)
- 현재까지 읽은 책 수와 목표까지 남은 권수 표시
결과 예시:
=== 2024년 독서 목표 === 목표: 50권 완료: 12권 (24%) 남은 권수: 38권
최근 읽은 책:
- 클린 코드 (2024-01-15)
- 이펙티브 자바 (2024-01-10)
2단계: Copilot의 응답 확인
- Copilot이 만든 결과를 확인해보세요
- 요청한 기능이 모두 있는지 체크하세요
3단계: 개선 요청하기 다음 중 필요한 것을 추가로 요청해보세요:
"월별로 몇 권 읽었는지도 보여주세요."
"목표 달성률을 백분율로 표시해주세요."
"책 목록을 날짜순으로 정렬해주세요."
4단계: 세부 조정 사용해보면서 불편한 점을 개선 요청하세요:
"책 제목이 너무 길면 줄여서 보여주세요."
"목표를 달성하면 축하 메시지를 보여주세요."
"책이 없을 때 안내 메시지를 추가해주세요."
직접 해보세요! 완벽하지 않아도 괜찮습니다. 대화를 통해 개선하는 과정 자체가 학습입니다.
실습 심화: 피드백 루프 훈련
Copilot과의 효과적인 대화는 피드백 루프로 이루어집니다. 요청 → 확인 → 피드백 → 개선 → 다시 확인의 순환입니다.
피드백 루프 훈련 과제:
주제: 환율 변환기
1단계: 기본 요청
환율 변환기를 만들어주세요.
달러를 원화로, 원화를 달러로 변환할 수 있어야 합니다.
이 프롬프트로 시작해서 Copilot의 결과를 확인하세요.
2단계: 결과 평가 및 피드백 다음을 확인하고 부족한 부분을 요청하세요:
- 환율을 입력받는가?
- 변환 방향을 선택할 수 있는가?
- 결과가 명확하게 표시되는가?
- 잘못된 입력을 처리하는가?
3단계: 기능 확장 다음 기능들을 하나씩 추가 요청해보세요:
"여러 통화(달러, 엔화, 유로)를 지원해주세요."
"최근 환율 정보를 표시해주세요." (예시 데이터로)
"변환 기록을 볼 수 있게 해주세요."
4단계: 사용성 개선
"소수점 둘째 자리까지만 표시해주세요."
"천 단위마다 쉼표를 넣어주세요."
"0이나 음수를 입력하면 오류 메시지를 보여주세요."
5단계: 최종 다듬기
"화면 구성을 좀 더 깔끔하게 정리해주세요."
"각 섹션에 제목을 추가해주세요."
"사용 설명을 간단히 보여주세요."
이 과정을 통해 단순한 프로그램이 점점 완성도 높은 결과물로 발전합니다.
효과적인 피드백을 위한 체크리스트
Copilot의 결과를 평가할 때 다음 항목들을 확인하세요:
기능 체크:
- 요청한 모든 기능이 포함되었는가?
- 각 기능이 의도한 대로 작동하는가?
- 빠진 기능이 있는가?
- 불필요한 기능이 추가되었는가?
사용성 체크:
- 사용 방법이 직관적인가?
- 입력과 출력이 명확한가?
- 오류 메시지가 이해하기 쉬운가?
- 추가 설명이 필요한 부분이 있는가?
완성도 체크:
- 예외 상황을 처리하는가?
- 결과가 일관성 있게 표시되는가?
- 개선이 필요한 세부사항이 있는가?
복잡도 체크:
- 필요 이상으로 복잡하지 않은가?
- 단순화할 수 있는 부분이 있는가?
- 핵심 기능에 집중하고 있는가?
다양한 유형의 문제 해결 실습
문제 유형별 프롬프트 전략
문제의 종류에 따라 프롬프트를 작성하는 전략이 조금씩 다릅니다. 주요 유형별로 효과적인 접근 방법을 알아봅시다.
유형 1: 데이터 처리 문제
데이터를 정리하거나 변환하는 작업입니다.
특징:
- 입력 데이터 형식이 명확함
- 원하는 출력 형식이 구체적임
- 변환 규칙이 중요함
프롬프트 전략:
- 입력 데이터 예시 보여주기
- 원하는 출력 결과 보여주기
- 변환 규칙 명확히 설명하기
실습 3: 연락처 정리
연락처 데이터를 정리하는 프로그램을 만들어주세요.
입력 데이터 예시:
홍길동,010-1234-5678,friend 김철수,010-9876-5432,work 이영희,01012345678,family 박민수,010 1111 2222,work
해야 할 일:
1. 전화번호를 통일된 형식으로 변환 (010-XXXX-XXXX)
2. 분류별로 그룹화 (친구, 회사, 가족)
3. 이름순으로 정렬
출력 결과 예시:
=== 회사 === 김철수: 010-9876-5432 박민수: 010-1111-2222
=== 친구 === 홍길동: 010-1234-5678
=== 가족 === 이영희: 010-1234-5678
잘못된 형식의 전화번호가 있으면 "형식 오류" 표시해주세요.
왜 이 프롬프트가 효과적인가?
- 입력과 출력을 명확히 보여줌
- 변환 규칙을 구체적으로 설명함
- 예외 상황(오류)도 언급함
유형 2: 자동화 문제
반복적인 작업을 자동으로 처리하는 것입니다.
특징:
- 반복되는 패턴이 있음
- 단계가 명확함
- 조건에 따라 다른 행동을 함
프롬프트 전략:
- 반복되는 작업 설명하기
- 각 단계를 순서대로 나열하기
- 조건과 예외 상황 명시하기
실습 4: 파일 이름 일괄 변경
사진 파일 이름을 일괄 변경하는 프로그램을 만들어주세요.
현재 상황:
여행 사진들의 이름이 IMG001.jpg, IMG002.jpg, ... 형식입니다.
원하는 것:
파일 이름을 "제주여행_001.jpg", "제주여행_002.jpg" 형식으로 바꾸기
프로그램이 해야 할 일:
1. 여행 이름 입력받기 (예: "제주여행")
2. 현재 폴더의 IMG로 시작하는 jpg 파일 찾기
3. 각 파일을 "[여행이름]_[번호].jpg" 형식으로 변경
4. 변경된 파일 목록 보여주기
안전 장치:
- 변경 전에 "15개 파일을 변경합니다. 계속하시겠습니까?" 확인
- 같은 이름의 파일이 이미 있으면 경고하고 건너뛰기
결과 예시:
=== 파일 이름 변경 완료 === IMG001.jpg → 제주여행_001.jpg IMG002.jpg → 제주여행_002.jpg IMG003.jpg → 제주여행_003.jpg ... 총 15개 파일 변경됨
이 프롬프트의 장점:
- 현재 상황과 원하는 결과를 대조하여 보여줌
- 단계를 명확히 나열함
- 안전 장치(확인, 경고)를 포함함
유형 3: 정보 정리 문제
흩어진 정보를 체계적으로 정리하는 작업입니다.
특징:
- 정보가 비구조화되어 있음
- 분류 기준이 필요함
- 요약이나 집계가 필요함
프롬프트 전략:
- 원본 정보의 형태 보여주기
- 분류 기준 명확히 하기
- 정리된 결과 형식 예시 제공하기
실습 5: 회의록 정리
회의 내용을 정리하는 프로그램을 만들어주세요.
입력 예시 (자유로운 메모 형식):
김과장: 다음 주까지 보고서 완성 필요 TODO 이메일 보내기 박대리: 예산 확인 후 회신 회의일: 2024-01-15 참석자: 김과장, 박대리, 이사원 결정사항: 프로젝트 일정 2주 연장
해야 할 일:
1. 회의 기본 정보 추출 (날짜, 참석자)
2. 결정사항 찾기
3. TODO 항목 찾기 (누가 무엇을 해야 하는지)
정리된 결과:
=== 회의록 === 날짜: 2024-01-15 참석자: 김과장, 박대리, 이사원
[결정사항]
- 프로젝트 일정 2주 연장
[TODO]
- [김과장] 다음 주까지 보고서 완성
- [미지정] 이메일 보내기
- [박대리] 예산 확인 후 회신
규칙:
- "TODO" 또는 "~필요", "~하기"가 있으면 할 일로 분류
- 이름: 형태를 찾아서 담당자로 지정
- "결정", "합의"가 있으면 결정사항으로 분류
왜 효과적인가?
- 비구조화된 입력을 구조화된 출력으로 변환
- 분류 규칙을 명확히 제시
- 예외 처리(미지정 담당자) 포함
실습 6: 여러분의 문제 해결하기
이제 실생활에서 여러분이 겪는 문제를 하나 선택해서 해결해보세요.
단계별 가이드:
1단계: 문제 선택 다음 중 하나를 선택하거나 직접 만들어보세요:
- 매일 반복하는 귀찮은 일
- 정리가 필요한 데이터나 정보
- 확인하고 싶은 통계나 추이
- 기억해야 할 것들의 관리
2단계: 문제 정의
무엇을: [구체적으로 무엇을 하고 싶은가?]
왜: [왜 필요한가?]
현재 상황: [지금은 어떻게 하고 있는가?]
3단계: 프롬프트 작성 템플릿을 사용하여 프롬프트를 작성하세요:
[무엇을] 만들어주세요.
현재 상황:
[지금 어떤 문제가 있는지]
필요한 기능:
1. [첫 번째 기능]
2. [두 번째 기능]
3. [세 번째 기능]
결과 예시:
[어떻게 보이면 좋을지]
제약 조건:
- [필요 없는 기능]
- [우선순위]
4단계: GitHub Copilot과 대화
- 작성한 프롬프트로 시작하기
- 결과 확인하고 개선 요청하기
- 만족할 때까지 반복하기
5단계: 결과 평가
- 원하는 기능이 모두 있는가?
- 사용하기 편한가?
- 개선할 점은 무엇인가?
시간을 갖고 실제로 해보세요. 완벽하지 않아도 괜찮습니다. 중요한 것은 시도하는 것입니다.
고급 프롬프트 패턴
기본을 넘어서 더 효과적인 프롬프트를 작성하는 고급 패턴들입니다.
패턴 1: 단계적 접근 복잡한 문제는 단계로 나누어 요청하세요.
"먼저 기본 기능만 만들어주세요:
1단계: 데이터 입력과 저장
2단계: 데이터 검색
나중에 통계 기능을 추가할 거예요."
이렇게 하면 Copilot이 단계에 집중하여 더 정확한 결과를 만듭니다.
패턴 2: 비교를 통한 설명 원하는 것을 다른 것과 비교하여 설명하세요.
"엑셀의 필터 기능처럼, 조건에 맞는 항목만 보여주세요."
"구글 검색처럼, 입력하는 동안 자동완성을 보여주세요."
익숙한 것과 비교하면 Copilot이 더 잘 이해합니다.
패턴 3: 시나리오 제시 실제 사용 시나리오를 보여주세요.
사용 시나리오:
1. 사용자가 프로그램을 실행한다
2. "오늘의 날씨" 버튼을 클릭한다
3. 현재 위치의 날씨가 표시된다
4. "상세 정보" 버튼을 클릭하면 습도, 바람 등을 볼 수 있다
패턴 4: 예외 상황 명시 예상되는 문제와 대처 방법을 알려주세요.
예외 처리:
- 파일이 없을 때: "파일을 찾을 수 없습니다" 메시지
- 잘못된 형식일 때: "올바른 형식으로 입력해주세요" 메시지
- 연결 실패: "나중에 다시 시도해주세요" 메시지
패턴 5: 우선순위 표시 무엇이 더 중요한지 명시하세요.
우선순위:
1순위: 사용하기 쉬울 것 (가장 중요)
2순위: 빠르게 작동할 것
3순위: 화려한 디자인 (덜 중요)
프롬프트 작성 실전 연습
다음 상황들에 대해 효과적인 프롬프트를 작성해보세요.
연습 1: 식단 기록 앱
요구사항:
- 매일 먹은 음식을 기록하고 싶음
- 아침, 점심, 저녁으로 구분
- 날짜별로 확인하고 싶음
- 칼로리 계산 같은 복잡한 건 필요 없음
여러분의 프롬프트: (직접 작성해보세요)
연습 2: 영화 추천 시스템
요구사항:
- 본 영화를 기록하고 평점 매기기
- 장르별로 분류
- 평점 높은 영화 추천받기
- 친구와 공유하는 기능은 나중에
여러분의 프롬프트: (직접 작성해보세요)
연습 3: 공부 시간 추적
요구사항:
- 과목별로 공부 시간 기록
- 하루/주간/월간 통계 보기
- 목표 시간 설정하고 달성률 확인
- 알림 기능은 제외
여러분의 프롬프트: (직접 작성해보세요)
종이에 실제로 작성해보세요. 템플릿을 참고하되, 여러분만의 표현을 사용해보세요.
프롬프트 작성 예시 답안
연습 1 답안: 식단 기록 앱
매일 먹은 음식을 기록하는 간단한 프로그램을 만들어주세요.
목적: 건강한 식습관을 위해 하루 식사 내용을 간단히 기록하고 확인
필요한 기능:
1. 식사 기록 추가
- 날짜 선택 (기본값: 오늘)
- 식사 시간 선택 (아침/점심/저녁/간식)
- 먹은 음식 입력 (예: "김치찌개, 밥, 샐러드")
2. 기록 보기
- 오늘의 식단 보기
- 특정 날짜의 식단 보기
- 최근 7일 기록 목록
3. 간단한 통계
- 이번 주 며칠 기록했는지
- 가장 자주 먹은 음식 (선택사항)
결과 예시:
=== 2024년 1월 15일 식단 === 아침: 토스트, 우유, 바나나 점심: 김치찌개, 밥, 샐러드 저녁: 아직 기록 없음
=== 이번 주 기록 === 월: ✓ 화: ✓ 수: ✓ 목: (오늘) 금: 토: 일:
제약 조건:
- 칼로리 계산 기능은 필요 없음
- 영양소 분석 같은 복잡한 기능 제외
- 사진 첨부 기능은 나중에
- 간단히 입력하고 확인하는 것에 집중
연습 2 답안: 영화 추천 시스템
본 영화를 기록하고 추천받는 프로그램을 만들어주세요.
목적: 본 영화를 관리하고 취향에 맞는 영화를 찾기 위함
필요한 기능:
1. 영화 기록 추가
- 영화 제목
- 장르 선택 (액션, 드라마, 코미디, SF, 스릴러 등)
- 별점 (1~5점)
- 간단한 한 줄 평 (선택)
2. 영화 목록 보기
- 전체 영화 목록
- 장르별 필터링
- 별점순 정렬
3. 추천 기능
- 별점 4점 이상인 영화만 보기
- 특정 장르에서 높은 평점 영화 찾기
- 예: "액션 장르에서 별점 높은 영화 추천"
결과 예시:
=== 내가 본 영화 (별점순) === [5점] 인셉션 [SF] "정말 멋진 영화!"
[4점] 어벤져스 [액션] "재미있었어요"
[3점] 코미디 영화 [코미디]
=== 추천 (별점 4점 이상) ===
- 인셉션 [SF]
- 어벤져스 [액션]
제약 조건:
- 친구와 공유 기능은 나중에
- 온라인 데이터베이스 연동 제외
- 개인적인 기록과 추천에만 집중
연습 3 답안: 공부 시간 추적
과목별 공부 시간을 기록하고 추적하는 프로그램을 만들어주세요.
목적: 꾸준한 학습 습관을 위해 공부 시간을 체계적으로 관리
필요한 기능:
1. 공부 기록 추가
- 날짜 (기본값: 오늘)
- 과목 선택 또는 입력 (예: 수학, 영어, 과학)
- 공부 시간 (분 단위)
2. 통계 보기
- 오늘 총 공부 시간
- 이번 주 과목별 공부 시간
- 이번 달 총 공부 시간
3. 목표 관리
- 주간 목표 시간 설정 (예: 주당 20시간)
- 현재 달성률 표시
- "목표까지 ___시간 남았습니다" 안내
결과 예시:
=== 오늘 공부 기록 === 수학: 90분 영어: 60분 총: 150분 (2시간 30분)
=== 이번 주 통계 === 목표: 20시간 현재: 12시간 30분 (62%) 남은 시간: 7시간 30분
과목별:
- 수학: 5시간
- 영어: 4시간
- 과학: 3시간 30분
제약 조건:
- 알림 기능은 제외
- 학습 내용 상세 기록은 나중에
- 시간 측정 타이머는 선택사항
- 간단한 입력과 통계에 집중
문제 유형별 체크리스트
각 유형별로 프롬프트 작성 시 확인할 사항입니다.
데이터 처리 문제 체크리스트:
- 입력 데이터 형식을 예시로 보여줬는가?
- 출력 결과를 구체적으로 보여줬는가?
- 변환 규칙을 명확히 설명했는가?
- 예외 상황을 고려했는가?
자동화 문제 체크리스트:
- 반복되는 작업을 명확히 설명했는가?
- 각 단계를 순서대로 나열했는가?
- 조건 분기를 명시했는가?
- 안전 장치(확인, 경고)를 포함했는가?
정보 정리 문제 체크리스트:
- 원본 정보의 형태를 보여줬는가?
- 분류 기준을 명확히 했는가?
- 정리된 결과 형식을 제시했는가?
- 애매한 경우 처리 방법을 설명했는가?
실습 결과 요약
이번 주에 배운 핵심
이번 주는 GitHub Copilot과 효과적으로 소통하는 방법을 집중적으로 훈련했습니다. 가장 중요한 것은 명확한 프롬프트 작성이었습니다.
효과적인 프롬프트의 3요소:
- 명확한 문제 정의: 무엇을, 왜, 누가 사용할지
- 구체적인 결과 명시: 어떻게 보이고 작동해야 하는지
- 명확한 제약 조건: 무엇을 포함하지 말고, 우선순위는 무엇인지
프롬프트 작성 템플릿:
[무엇을] 만들어주세요.
목적: [왜 필요한지]
필요한 기능: [핵심 기능 나열]
결과물 예시: [구체적인 예시]
제약 조건: [제외할 것, 우선순위]
반복적 개선의 중요성:
- 한 번에 완벽을 추구하지 않기
- 기본 기능부터 시작하기
- 대화를 통해 점진적으로 개선하기
- "좋아요, 여기에 ___도 추가해주세요" 패턴 활용
문제 유형별 전략:
- 데이터 처리: 입력/출력 예시 명확히
- 자동화: 단계와 조건 명확히
- 정보 정리: 분류 기준 명확히
실습에서 중요했던 포인트
1. 구체성의 힘 모호한 프롬프트보다 구체적인 프롬프트가 훨씬 좋은 결과를 만듭니다. "간단한 계산기"보다 "두 숫자를 입력받아 사칙연산 결과를 보여주는 계산기"가 명확합니다.
2. 예시의 중요성 말로 설명하기 어려운 것은 예시로 보여주세요. "이렇게 보였으면 좋겠어요"라고 실제 결과 형식을 보여주는 것이 효과적입니다.
3. 제약의 가치 무엇을 하지 말아야 하는지 알려주면 불필요한 복잡함을 피할 수 있습니다. "복잡한 기능은 필요 없어요"라는 한 마디가 결과를 크게 단순화합니다.
4. 대화의 자연스러움 Copilot은 대화 상대입니다. 너무 형식적이거나 기술적일 필요 없습니다. "이 부분을 좀 더 간단하게 해주세요" 같은 자연스러운 표현이 잘 통합니다.
자주 하는 실수와 해결책
실수 1: 너무 짧은 프롬프트
나쁜 예: "계산기 만들어줘"
해결책: 어떤 계산기인지, 무슨 기능이 필요한지 구체적으로 설명하기
실수 2: 결과를 명시하지 않음
나쁜 예: "데이터를 정리해줘"
해결책: 정리 후 어떤 모습이어야 하는지 예시 보여주기
실수 3: 한 번에 너무 많이 요구
나쁜 예: 처음부터 모든 기능을 다 요청
해결책: 핵심 기능부터 시작하고 점진적으로 추가하기
실수 4: 제약 조건을 명시하지 않음
나쁜 예: 필요한 것만 말하고 불필요한 것은 언급 안 함
해결책: "___기능은 필요 없어요"라고 명확히 하기
실수 5: 애매한 표현 사용
나쁜 예: "적당히", "알아서", "대충"
해결책: 구체적인 기준이나 예시 제시하기
계속 연습하는 방법
일상 속 연습:
- 하루에 한 번, 작은 문제를 GitHub Copilot과 해결해보기
- 처음에는 간단한 것부터 (할 일 관리, 간단한 계산 등)
- 점점 복잡한 문제로 확장하기
프롬프트 작성 연습:
- 다른 사람의 요구사항을 듣고 프롬프트로 만들어보기
- 뉴스 기사나 블로그 글을 읽고 "이것을 프로그램으로 만든다면?" 생각해보기
- 같은 문제를 여러 방식으로 프롬프트 작성해보고 비교하기
피드백 활용:
- Copilot의 결과가 기대와 다르면 왜 그런지 생각해보기
- 프롬프트의 어느 부분이 명확하지 않았는지 찾기
- 다시 작성할 때 개선하기
패턴 수집:
- 잘 작동한 프롬프트를 메모해두기
- 자주 사용하는 패턴을 템플릿으로 만들기
- 상황별로 효과적인 표현 정리하기
다음 주 준비
다음 주는 실생활 문제 해결입니다. 여러분이 직접 선택한 문제를 바이브 코딩으로 해결하는 종합 실습입니다.
Agent 모드 활용 팁: 복잡한 데이터 처리나 자동화 작업은 Agent 모드가 강력합니다:
- 데이터 형식이 복잡하거나 여러 단계의 변환이 필요할 때
- 오류 처리와 예외 상황을 자동으로 고려해야 할 때
@workspace로 프로젝트 전체 구조를 이해시키면 더 정확한 결과를 얻을 수 있습니다
준비할 것:
- 해결하고 싶은 실생활 문제 하나 생각해오기
- 그 문제를 왜 해결하고 싶은지 정리하기
- 어떤 결과를 원하는지 간단히 스케치하기
좋은 문제 선택 기준:
- 너무 크지 않은 것 (2-3시간 안에 해결 가능)
- 실제로 사용할 수 있는 것
- 명확한 입력과 출력이 있는 것
- 여러분의 일상에 도움이 되는 것
문제 예시:
- 매일 확인하는 정보를 한 곳에서 보기
- 반복적인 계산이나 변환 자동화하기
- 흩어진 정보를 체계적으로 정리하기
- 간단한 기록이나 추적 시스템
스스로 점검하기
다음 질문에 답해보세요. 편안하게 답할 수 있다면 이번 주 학습 목표를 달성한 것입니다.
프롬프트 작성 체크:
- 문제를 명확하게 정의하여 설명할 수 있나요?
- 원하는 결과를 구체적인 예시로 보여줄 수 있나요?
- 제약 조건을 명확히 말할 수 있나요?
- 프롬프트 템플릿을 활용할 수 있나요?
Copilot과의 대화 체크:
- Copilot의 결과를 평가할 수 있나요?
- 개선이 필요한 부분을 구체적으로 요청할 수 있나요?
- 반복적 대화를 통해 결과를 개선할 수 있나요?
문제 해결 체크:
- 데이터 처리 문제의 프롬프트를 작성할 수 있나요?
- 자동화 문제의 단계를 명확히 설명할 수 있나요?
- 정보 정리 문제의 분류 기준을 제시할 수 있나요?
마무리하며
효과적인 프롬프트 작성은 바이브 코딩의 핵심 기술입니다. 여러분의 생각을 GitHub Copilot이 이해할 수 있는 방식으로 전달하는 것, 그것이 바로 새로운 시대의 프로그래밍입니다.
처음에는 어떻게 설명해야 할지 막막할 수 있습니다. "이 정도면 충분한가?", "너무 자세한 건 아닐까?" 고민될 수 있습니다. 하지만 연습하면서 점점 감을 잡게 됩니다. 어떤 표현이 효과적인지, 어떤 순서로 설명하는 것이 좋은지 자연스럽게 알게 됩니다.
기억하세요. 좋은 프롬프트의 핵심은 명확함입니다. 여러분이 원하는 것을 Copilot이 오해 없이 이해할 수 있도록 구체적으로 설명하세요. 그리고 완벽을 추구하지 마세요. 대화를 통해 점진적으로 개선하는 것이 더 효과적입니다.
다음 주 예고: 바이브 코딩으로 실생활 문제 해결
11주차는 완전히 실습 중심입니다:
- 여러분이 직접 선택한 실제 문제 해결
- 처음부터 끝까지 스스로 진행하는 프로젝트
- 다양한 유형의 문제 해결 사례 학습
이번 주 과제: 해결하고 싶은 실생활 문제를 하나 선택해오세요:
- 너무 크지 않은 것 (2-3시간 안에 해결 가능)
- 실제로 사용할 수 있는 것
- 명확한 입력과 출력이 있는 것
다음 주에는 여러분이 직접 선택한 실제 문제를 해결하며 지금까지 배운 모든 것을 종합하게 됩니다. 기대하세요!
// 이미지로 교체되어야 함 : 효과적인 프롬프트의 3요소(문제 정의, 결과 명시, 제약 조건)를 보여주는 다이어그램 프롬프트: Create an infographic showing the three key elements of effective prompts: 1) Clear Problem Definition (with a target icon), 2) Specific Result Description (with a document/preview icon), 3) Clear Constraints (with a boundary/filter icon). Arrange them in a triangle formation with GitHub Copilot logo at the center. Use warm, friendly colors like soft blues, greens, and oranges. The style should be modern, simple, and educational, suitable for a beginner's textbook. Add simple examples next to each element showing good vs bad prompt snippets.