안녕하세요? 끝까지 강의를 들었는데, 알차고 재미있는 강의였습니다. 강의를 보다보니 레디스를 사용해도 성능적인 차이가 많이 안나는 것을 보고 궁금한 점이 있어서 질문드립니다. 사실 주변에서 캐시로 레디스를 무조건적으로 사용을 하시는 경우를 많이 봤는데요, 제가 생각할때는 결국 I/O대기시간이 일반적인 api에서 큰 부분을 차지하고, 결국 레디스라는 것도 IO를 기다려야 하는 것은 동일하지 않나요? 그렇게 따지고 보면 강의에서 보여주신 것처럼 레디스를 사용하더라도 성능적 차이가 많이 안나는 경우가 꽤나 빈번할 것 같은데, 강사님의 의견이 궁금합니다. 레디스 내에서 해시값을 기반으로 데이터를 조회하는 속도야 빠르겠지만, 애초에 요청받았을 때 수행해야하는 [작업] 그 자체의 비중보다 [IO]를 대기하는 시간이 큰 경우가많은, 예를 들면 DB에서 단순히 레코드한줄을 조회한다든지 하는 기능이라고 하면 레디스를 쓰는 건 비용까지 고려했을 때 굳이 할 필요가 없는 선택처럼 느껴집니다. 결국 레디스는 IO보다 요청에 따라 수행해야 하는 작업 그자체의 크기가 조금 클때 그제서야 유의미해 보이는데 어떻게 생각하시는지 의견이 궁금합니다! 추가로 강의 잘들었습니다. 혹시 다음 강의는 언제쯤 출시할 예정이신지 알 수 잇을까요?
11장 팔로잉 기능 구현에서는 팔로잉 하는 목록 페이지 팔로우 하고 있지 않는 목록 페이지 두 가지를 구현하였습니다. 이를 기반으로 인스타그램처럼 프로필을 카드기반으로 꾸미고 10-12 에서 구현한 무한 스크롤을 적용하였습니다. 프로필 페이지에서 구현한 프로필 카드를 목록에서 재활용하여 반복을 줄이고자 했습니다. 대부분의 기능은 구현하였습니다만, 강의의 내용만으로는 스스로 해결하기 힘든 점들이 있어 질문글을 파란색으로 남깁니다. 우선, 팔로잉 목록과 언팔로인 목록을 나눈 경우 언팔로잉 목록에서 내가 팔로잉 한지 모르고 검색한 경우 유저 목록이 검색되지 않는 불편함이 존재할 수 있습니다. 물론 인스타 그램의 경우 강사님께서 구현한 것처럼 탭을 나누어서 구현하였으니 이는 문제가 아닐 수 있습니다. 그러나 하기의 사진은 정확한 예시는 아닐 수 있으나 내 팔로워들 중 내 팔로잉 여부를 확인할 수 있는 페이지를 구현하고 싶습니다. 인스타 팔로워 페이지 인스타 팔로잉 페이지 따라서 팔로우하지 않는 목록 페이지를 유저 목록들이 모두 나열되면서 눈으로 팔로우 여부를 확인할 수 있는 페이지로 구현하고자 합니다. 하기는 현재 구현한 목록 페이지의 일부 입니다. 개인 프로필 페이지에서는 팔로잉 버튼 대신 edit 버튼이 활성화 됩니다. 해당 페이지를 구현하기 위해 11장에서 구현한 두 함수를 generic ListView를 상속받은 class 기반 뷰로 구현하였습니다. # views.py @method_decorator(login_required_hx, name="dispatch") class DiscoverListView(ListView): model = User paginate_by = 12 context_object_name="user_list" def get_queryset(self): qs = User.objects.all() user: User = self.request.user follow_relation = self.kwargs.get("follow_relation", False) # url로 부터 받는 인자 match follow_relation: case "following": qs = user.following_user_set.all() case "followed": qs = user.followed_user_set.all() # qs = User.objects.exclude(id__in=user.following_user_set.all()) qs = qs.exclude(id__in=[user.pk]).select_related("profile").prefetch_related("follower_user_set", "following_user_set") query = self.request.GET.get("query", "").strip() if query: qs = qs.filter( Q(username__icontains=query) | Q(full_name__icontains=query) | Q(email__icontains=query) ) return qs.order_by("username") def get_template_names(self) -> list[str]: # htmx로 요청이 들어오면 검색바 등 불필요한 위 아래 내용 제거 후 내용만 업데이트 if self.request.htmx: template_name = "accounts/_user_list.html" else: template_name = "accounts/user_list.html" return [template_name] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # is_follwer 는 html에서 follow 버튼을 구분하기 위한 인자 # context['is_follower'] = True if self.kwargs.get("follow_relation", False)=="following" else False qs = self.get_queryset() follow_dict = { q.username:self.request.user.is_follower(q) for q in qs } context['follow_dict'] = follow_dict query = self.request.GET.get("query", "").strip() context['query']=query return context 여기서 .prefetch_related("follower_user_set", "following_user_set") 을 통해 모델에서 구현한 팔로워와 팔로잉 유저 수를 불러오는 property를 templates에서 호출할 때 N+1 문제를 해결하고자 하였습니다. <!-- _user_profile_card.html --> {% load static %} <div class="card" style="border-radius: 15px;"> <div class="card-body p-4"> <div class="d-flex"> <div class="flex-shrink-0"> {% if user.profile.avatar %} <img src="{{user.profile.avatar.url}}" alt="{{user}}'s avatar" class="img-fluid" style="width: 180px; border-radius: 10px;"> {% else %} <img src="{% static 'images/profile-icon-design-free-vector.jpg' %}" alt="{{user}}'s avatar" class="img-fluid" style="width: 180px; border-radius: 10px;"> {% endif %} </div> <div class="flex-grow-1 ms-3"> <h5 class="mb-1" style="display:inline">{{ user.full_name }} </h5> {% if user.profile.team %} <h6 class="text-muted" style="display:inline">{{ user.profile.team }}</h6> {% endif %} <p class="mb-1 pb-1">{{ user.email }}</p> <div class="d-flex justify-content-start rounded-3 p-2 mb-2 bg-body-tertiary"> <div> <p class="small text-muted mb-1">Data</p> <p class="mb-0">TDA</p> </div> <div class="px-3"> <p class="small text-muted mb-1">Followers</p> <p class="mb-0">{{user.follower_count}}</p> </div> <div> <p class="small text-muted mb-1">Following</p> <p class="mb-0">{{user.following_count}}</p> </div> </div> <div class="d-flex pt-1"> {% if request.user == user %} <a href="{% url 'accounts:profile_edit' %}" class="btn btn-outline-primary btn-sm"> <i class="bi bi-pencil-square"></i> 프로필 수정 </a> {% else %} {% comment %} {% include "accounts/_user_follow.html" with username=user.username%} {% endcomment %} {% include "accounts/_user_follow.html" with is_follower=follow_dict.user.username username=user.username%} {% endif %} </div> </div> </div> </div> </div> 프로필 카드 내에서 팔로워와 팔로잉 수를 보여주기 위해 접근한 제 방식이 맞는지가 궁금합니다. models.py 에서 구현한 follower_count 또는 following_count 를 template에서 호출하는 방식이 일반적인 접근 방식인가요? 그 다음 제가 위에서 구현하고자 한 유저별 팔로우 여부를 get_context_data 에서 follow_dict 라는 변수명으로 저장하여 하기와 같이 template에 넘겨주었습니다. <!--user_follow.html--> {% include "core/_messages_as_event.html" %} {% load keyvalue %} {% if follow_dict|keyvalue:username %} <a href="#" hx-post="{% url 'accounts:user_unfollow' username %}" hx-swap="outerHTML" class="btn btn-sm btn-primary"> <i class="bi bi-person-check-fill"></i> 팔로잉 중 </a> {% else %} <a href="#" hx-post="{% url 'accounts:user_follow' username %}" hx-swap="outerHTML" class="btn btn-sm btn-secondary"> <i class="bi bi-person-add"></i> 팔로잉 하기 </a> {% endif %} dictionary 키 값으로 변수를 입력하는 것이 django template에서 지원되지 않기 때문에 하기의 함수를 등록하여 활용하였습니다. register = template.Library() @register.filter def keyvalue(dict, key): return dict[key] 결과물은 구현한 페이지처럼 잘 보여지지만, 두 가지 문제가 존재합니다. 확실치 않지만 하기의 코드에서 N+1 오류가 발생하는 것으로 보입니다. follow_dict = { q.username:self.request.user.is_follower(q) for q in qs } 팔로잉 혹은 언팔로잉 요청 시 500 서버 에러가 발생합니다. 아마도 follow_dict가 요청 시에 업데이트 되지 않아 발생하는 오류로 보입니다. 이러한 점 때문에 인스타그램에서도 따로 탭을 두어서 관리하는가 싶기도 합니다만 이를 해결할 방법이 있을까요? 어렵다면 팔로워 목록에서 내가 팔로잉 하는지 여부를 표기하는 인스타그램 페이지는 어떻게 구현해야 할까요?
1) X_train, X_test, y_train, y_test = train_test_split ( df.iloc[:, 1:] , df['survived'], test_size = 0.2, random_state = 42, stratify = df['survived']) 로 되어야 하는거 아닌가요? 연습문제에서 df만 하셨는데, 그렇게 하면 이미 답이 변수에 포함되어있어서 정확도가 1로 나옵니다. 2) 전처리 다 하고나서 저 train_test_split를 수행해도 되나요? 전처리 할 때 X_train, X_test 두번씩 꼭 해줘야 하는게 번거롭고 실수가 날 것 같아서요.
★새로 연 빈 문서의 xml을 불러오는 방법만 알고싶습니다.★ 기존문서는 zip -> sele..?0.xml을 열면 되서 상관없는데, 저장되지않은 새 문서는 어떻게 하는지 궁금하네요 ㅎㅎ -> 이걸로 해결했습니다. hwp.GetTextFile(Format="HWPML2X", option="") # 이외 추가질문입니다. 이번주 목요일 5기 강사로 가시는데, 아쉽게도 신청을 못했네요 ㅠㅠ 역시 다음 기회를 봐야겠죠?
import telegram import asyncio bot = telegram.Bot(token = '~~~') async def main(): updates = await bot.getUpdates() # getUpdates() 앞에 await를 추가 for i in updates: print(i) # asyncio 이벤트 루프에서 비동기 함수 실행 asyncio.run(main()) 이렇게 해야 확인될 겁니다.
안녕하세요 수업자료 관련하여 문의드립니다. 수업자료중 강의에서 문제들만 있고 프로그래밍언어 이론부분은 따로 내용이 없는거 같네요 시간은 촉박한데 필기하면서 하려니 시간이 많이 소모되어 이론부분도 같이 업로드 해주시면 감사하겠습니다. 만들기가 귀찮으시다면 영상에 사용하는 화면을 pdf로 따서 바로 올려주셔도 좋을것 같아요
15분대 문제 초기 설정 a,b=1 sum=0 으로 시작 While문 1~5까지 if 문 b가 짝수이면 sum+b, 아닐시 sum-b 계산 후 a증감 b+2 계산으로 해석했습니다 그래서 a=1 홀수 sum-b 계산 sum=-1, b=3 후에 a증감 a=2 a=2 짝수 sum+b 계산 sum=2, b=5 a=3 홀수 sum=-3 ,b=7 a=4 짝수 sum=4, b=9 a=5 홀수 sum=-5, b=11 계산 후 a=6, b=11로 while문 조건에 맞지않아서 빠져나오게 되면 sum은 -5아닌가요???
2023 2회 20분경 문제 오류 찾기요 kim을 넣어서 public person(string val)으로 간다까진 이해했는데요. 거기로 가면 public person(string val)부터 시작이 아니라 위인 private string name부터 시작인가요? 그래서 private string name은 static string get()을 부르는 함수인가요????ㅠㅠㅠ연결 고리를 모르겟어요 그리고 return 반환에서 오류가 나서 7 정도가 오류 위치라고 하신건가요?
Hard VotingClassifier 을 사용하면 여러 모델이 내놓은 예측값 중에 가장 많이 득표 한 값을 최종 예측값 으로 내놓는다는 것으로 이해하고 있는데요, 2개의 모델로만 했을 때, 두개의 모델이 다른 값을 낼 때는 어떤 값을 최종 예측값으로 내놓는 것인지 2개의 모델로 하는게 의미가 있는것인지 궁금합니다. 제가 이해를 잘못하고 있다면 Hard VotingClassifier 에 대해서 조금만 더 설명해주시면 감사드리겠습니다.
안녕하세요 강의 듣다가 궁금한 점이 생겨서 질문 드립니다. DP 테이블을 생성할 때, N에서 끝나는, N까지 살펴봤을 때 로 보통 접근한다고 하셨는데, 모든 DP풀이에 해봄직한 생각이라고 보면 될까요? 테이블을 세우는게 뭔가 제 멋대로 세우는 것 같아서 어렵게 느껴지는 것 같습니다. 그리고 knapsack 같은 DP세우는게 쉽지 않던데, 어려운 DP문제들은 어떤 부분을 주목해서 DP테이블을 세우려고 집중하면 될까요? 풀면서 느끼는 점이 DP식을 잘못 세우면 완탐처럼 세우게 되는 것 같습니다.
11분 07초 A a = new A(); A b = new B(); 위 두개는 이렇게 생성하겠다 라는 생성만 하는 문장이지 않나요? b.paint(); 는 출력을 하는 문장이므로 실행될때 classA의 기본생성자인 Contruct~와 classB의 기본생성자인 Contruct~가 출력되고 난후 B()내의 paint()가 실행되는건 이해가 갑니다. 근데 b.paint(); 가 실행되기 전에 A a = new A();를 선언함으로서 즉시 classA의 Contructor ~가 출력 되는 것이 이해되지 않습니다ㅠㅠ
강사님, 안녕하세요. 강의 잘 듣고 있습니다. 강의를 듣다 궁금한 점이 생겨 질문 남깁니다. C언어 - 함수 부분(31:18) 홀수인지, 짝수인지 판별하기 문제 [오답] 10는 짝수입니다. 13는 짝수입니다. 01는 홀수입니다. 1는 홀수입니다. (0) [정답] 10는 짝수입니다. 13는 짝수입니다. 1는 홀수입니다. (0) 저는 위에 제시한 오답처럼 풀이를 진행하여 해당 문제를 틀렸습니다. 제 풀이는 함수 정의 부분에 있는 첫 번째 if문에서 retrun 0을 반환(print)하고 그 아래에 있는 if문에 있는 else까지 실행시켜 오답이 되었습니다. 1) if 문 질문 isEven 함수 정의 부분에서 첫 번째 if문만 실행되고, 두 번째 if문은 실행되지 않는지 궁금합니다. 2) return, printf 질문 다른 문제에서도 이러한 식으로 오답을 작성한 적이 있는데, return과 print의 차이에 대해 설명해주시면 좋겠습니다. (혹시 예시를 알려주실 수 있을까요?) 교안 관련 질문 python 변수와 출력 예제 부분 pdf에 '\n'이 빠져있는 것 같습니다. 강의에는 잘 반영되어 있는데 pdf에는 빠져있는 것 같아서요! (이미 수정하셨을 수도 있을 것 같습니다. ㅎㅎ 확인 부탁드려요) 실습 관련 환경 설정 가볍게 실습 코드를 돌려보고 싶은데 어느 환경에서 하는 것이 좋을까요? 코랩으로 시도해보았으나 좀 불편한 것 같아 보통 어느 환경에서 실습을 진행하는지 여쭙고 싶습니다!