HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
장지원 페이지/
몰입 캠프
몰입 캠프
/#17. Making Tab1, 2, Using DataBase and Using AI!/
아침 공부…

아침 공부…

 

[Project / Issue]

YouTubeYouTubeGitHub으로 협업하기 1편 - 깃헙 프로젝트 생성, 이슈 생성, 충돌 해결까지
GitHub으로 협업하기 1편 - 깃헙 프로젝트 생성, 이슈 생성, 충돌 해결까지

GitHub으로 협업하기 1편 - 깃헙 프로젝트 생성, 이슈 생성, 충돌 해결까지

교안은 하단 링크 확인해주세요. 팀 구성 이후에 무엇을 해야 하는지 정리해보았습니다. (컨벤션 설정, 포메터 설정, 브랜치 전략 선택, 오거나이제이션 생성, 이슈 생성, 브랜치 생성, PR, PR merge, 충돌까지 다룹니다.) * 얼마 전 default 브랜치 바꾸는 버튼이 general로 이동하여 겸사겸사 찍은 영상입니다. :) 즐거운 코딩 되십시오. 웹 교안 링크 : https://www.books.weniv.co.kr/github/chapter05/05-1 교안 링크 : https://paullabworkspace.notion.site/GitHub-435ec8074bcf4353afb947f601a030df?pvs=4

YouTubeYouTube
organization: 다른 사람이 깃 레포를 삭제하더라도 문제 되지 않게!??
 
Project
Project란? 레포와 별개의 것, 레포가 다르더라도 같은 프로젝트에 등록할 수 있다.
만드는 방법: new project → add item(이건 보통 issue에서 처리/생성한다)
 
Issue
assignee 선택, label 선택, project 선택
→ Issue의 status는 project에서 드래그 해서 바꿀 수 있다.
Pull request → 코드 reviewd 당하기 위한 용?
상단 탭에서 pull request 클릭
→ description은 굉장히 자세히 적어야 한다.
→ close #”close하고 싶은 issue”
 
Branch
추가하기: git push —set-upstream origin dev
default: setting → general에 가서 바꿀 수 있다.
branch 전략
깃 flow vs 깃 허브 flow
깃
notion image
깃 허브
notion image
Git 브랜치 전략 (feat. Git Flow, Github Flow)
Git 브랜치 전략 (feat. Git Flow, Github Flow)

Git 브랜치 전략 (feat. Git Flow, Github Flow)

우리는 왜 브랜치를 사용할까? 브랜치를 별도로 생성하지 않고 메인 브랜치에서만 작업하면 어떤 일이 벌어질까? 메인 브랜치는 출시되고 배포된 코드를 위한 브랜치이다. 이 곳에 기능을 하나씩 개발하며 커밋을 반영하게 될 것이다. 그런데, 하나의 기능을 개발하기 위해 여러개의 커밋을 했다면? 기능이 완성되기 전 까지 메인 브랜치의 소스코드는 불완전한 상태로 존재할 것이다.

TISTORYTISTORY[설계] Git Branch 전략이란? & Git Branch 전략 알아보기 (Git Flow, GitHub Flow)
[설계] Git Branch 전략이란? & Git Branch 전략 알아보기 (Git Flow, GitHub Flow)

[설계] Git Branch 전략이란? & Git Branch 전략 알아보기 (Git Flow, GitHub Flow)

🙇🏻‍♂️ 0. 들어가기 전 이번 팀바팀 프로젝트에서 협업을 처음 경험하고, Git Branch 전략에 대해 처음 들어보게 되었습니다. 이전까지는 협업을 하지 않고, 해봤자 페어 프로그래밍이 전부였기 때문에 Git Branch에 대해 신경쓰지 않았습니다. 팀원들께 죄송하게도, Git Branch 전략을 정하기 전에는 지식이 많이 없었습니다. 원래 정하기 전에 많은 것을 알아갔어야 하는데 반대로 되어버려서 죄송할 따름이네요,, 🙇🏻‍♂️ 현재 팀바팀의 Git Branch 전략은 정한 상태이지만, 학습 측면에서 어떤 Git Branch 전략이 있는지 자세하게 알아보도록 합시다! 📘 1. Git Branch 전략이란? 다양한 Git Branch 전략을 알아보기 전에, Git Branch 전략이 무엇인지 간략하..

TISTORYTISTORY
 
Commit
깃 commit message에 대한 규칙
Git 커밋 메시지 규칙
Git 커밋 메시지 규칙

Git 커밋 메시지 규칙

제목과 본문을 빈 행으로 구분한다.제목은 50글자 이내로 제한한다.제목의 첫 글자는 대문자로 작성한다.제목 끝에는 마침표를 넣지 않는다.제목은 명령문으로 사용하며 과거형을 사용하지 않는다.본문의 각 행은 72글자 내로 제한한다.어떻게 보다는 무엇과 왜를 설명한다.Hea

 

그럼 오늘은!?
setting에서 master 지우기, default
 
코드
코드
import logging from .models import Quest from datetime import timedelta import openai, random openai.api_key = "sk-proj-Mvq2HLSZo0FmHsOP49hcT3BlbkFJulzKwqczqk6uBZ0ID4wW" logger = logging.getLogger(__name__) keywords = { '운동': ['exercise', 'workout', 'run', 'walk', 'weight training', 'stretch'], '사회공헌': ['volunteer', 'donations', 'talent donation', 'mentorship', 'support'], '자기개발': ['learn', 'skill', 'read', 'study', 'research'], '명상': ['meditate', 'relax', 'breathe', 'mindfulness', 'meditation'] } def determine_quest_type(quest_text): for quest_type, words in keywords.items(): if any(word in quest_text.lower() for word in words): return quest_type return random.choice(list(keywords.keys())) # 기타가 아닌 랜덤으로 키워드 중 하나 선택 def determine_complete_time(quest_text): time_keywords = { 'short': ['quick', 'short', 'few minutes', '10 minutes', '15 minutes'], 'medium': ['moderate', 'half an hour', '30 minutes', '45 minutes'], 'long': ['long', 'one hour', '1 hour', 'two hours', '2 hours'] } for duration, words in time_keywords.items(): if any(word in quest_text.lower() for word in words): if duration == 'short': return timedelta(minutes=15) elif duration == 'medium': return timedelta(minutes=45) elif duration == 'long': return timedelta(hours=1, minutes=30) return timedelta(minutes=30) # 기본값을 30분으로 설정 def generate_quests(user, diary): hero_name = user.hero_name diary_contents = diary.contents quest_types = list(keywords.keys()) # 다섯 가지 키워드 중 랜덤으로 하나를 선택 selected_quest_type = random.choice(quest_types) selected_keyword = random.choice(keywords[selected_quest_type]) # 답변 예시 example_responses = { '운동': [ "30분 달리기", "60분 웨이트트레이닝하기", "20분 요가하기", "10분 스트레칭하기" ], '사회공헌': [ "120분 봉사하기", "30분간 재능기부하기", "1시간 동안 음식 나누기", "기부를 위한 1시간 모금 활동" ], '자기개발': [ "60분 파이썬 공부하기", "30분 독서하기", "45분 온라인 강의 듣기", "새로운 기술 1시간 연습하기" ], '명상': [ "15분 명상하기", "30분 심호흡하기", "20분 요가와 명상하기", "10분 마음 챙김 연습하기" ] } example = random.choice(example_responses[selected_quest_type]) prompt = f"Create a quest related to {selected_quest_type} in korean for a hero named {hero_name} based on the following diary entry: {diary_contents}. The quest should realistically include elements such as {selected_keyword}. An example quest could be: '{example}'. Please generate one quest only." response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a quest generator for a hero."}, {"role": "user", "content": prompt} ], max_tokens=500, n=1, # 한 번에 하나의 퀘스트만 생성 temperature=0.7, ) quests = response.choices quest_objects = [] for quest in quests: quest_text = quest['message']['content'].strip().split('\n')[0] quest_type = determine_quest_type(quest_text) complete_time = determine_complete_time(quest_text) quest_object = Quest(contents=quest_text, user=user, type=quest_type, complete_time=complete_time) quest_objects.append(quest_object) # 로그에 생성된 퀘스트 출력 logger.debug(f"Generated quest for user {user.user_name}: {quest_objects}") # 콘솔에 생성된 퀘스트 출력 for quest_object in quest_objects: print(f"의뢰: {quest_object.contents}, 유형형: {quest_object.type}, Time: {quest_object.complete_time}") return quest_objects
import logging from .models import Quest from datetime import timedelta import openai, random openai.api_key = "sk-proj-Mvq2HLSZo0FmHsOP49hcT3BlbkFJulzKwqczqk6uBZ0ID4wW" logger = logging.getLogger(__name__) keywords = { '운동': ['exercise', 'workout', 'run', 'walk', 'weight training', 'stretch'], '사회공헌': ['volunteer', 'donations', 'talent donation', 'mentorship', 'support'], '자기개발': ['learn', 'skill', 'read', 'study', 'research'], '명상': ['meditate', 'relax', 'breathe', 'mindfulness', 'meditation'], '취미': ['your own hobby', 'paint', 'draw', 'music', 'play', 'sports'] } def determine_quest_type(quest_text): for quest_type, words in keywords.items(): if any(word in quest_text.lower() for word in words): return quest_type return '기타' def determine_complete_time(quest_text): time_keywords = { 'short': ['quick', 'short', 'few minutes', '10 minutes', '15 minutes'], 'medium': ['moderate', 'half an hour', '30 minutes', '45 minutes'], 'long': ['long', 'one hour', '1 hour', 'two hours', '2 hours'] } for duration, words in time_keywords.items(): if any(word in quest_text.lower() for word in words): if duration == 'short': return timedelta(minutes=15) elif duration == 'medium': return timedelta(minutes=45) elif duration == 'long': return timedelta(hours=1, minutes=30) return timedelta(minutes=30) # 기본값을 30분으로 설정 def generate_quests(user, diary): hero_name = user.hero_name diary_contents = diary.contents quest_types = list(keywords.keys()) # 다섯 가지 키워드 중 랜덤으로 하나를 선택 selected_quest_type = random.choice(quest_types) selected_keyword = random.choice(keywords[selected_quest_type]) # 답변 예시 example_responses = { '운동': [ "30분 달리기", "60분 웨이트트레이닝하기" ], '사회공헌': [ "120분 봉사하기", "30분간 재능기부하기" ], '자기개발': [ "60분 파이썬 공부하기", "30분 독서하기" ], '명상': [ "15분 명상하기", "30분 심호흡하기" ], '취미': [ "30분 그림 그리기", "60분 나만의 취미하기" ] } example = random.choice(example_responses[selected_quest_type]) prompt = f"Create a quest related to {selected_quest_type} in korean for a hero named {hero_name} based on the following diary entry: {diary_contents}. The quest should realistically include elements such as {selected_keyword}. An example quest could be: '{example}'. Please generate one quest only." response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a quest generator for a hero."}, {"role": "user", "content": prompt} ], max_tokens=500, n=3, temperature=0.7, ) quests = response.choices quest_objects = [] for quest in quests: quest_text = quest.message['content'].strip().split('\n')[0] quest_type = determine_quest_type(quest_text) complete_time = determine_complete_time(quest_text) quest_object = Quest(contents=quest_text, user=user, type=quest_type, complete_time=complete_time) quest_objects.append(quest_object) # 로그에 생성된 퀘스트 출력 logger.debug(f"Generated quest for user {user.user_name}: {quest_object}") # 콘솔에 생성된 퀘스트 출력 print(f"Quest: {quest_object.contents}, Type: {quest_object.type}, Time: {quest_object.complete_time}") return quest_objects