묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
components 들은 jsx 로 만드신 이유
제목과 같이 componets 들에 Sidebar , Header 등은 tsx 로 하지않고 jsx 로 하신 이유가 있나요 ?? ㅎ
-
미해결Airflow 마스터 클래스
.env 파일 변수를 PythonOperator에 적용할 경우 질문드립니다!
안녕하세요! 강사님서울시 공공데이터 API를 이용해 데이터를 추출하는 것을 보고저도 넥슨 오픈 API를 가지고 데이터를 출력해보려고 DAG과 PythonOperator를 만들어봤는데요, 보통 민감정보는 .env파일에다 적어놓고 가져와서 사용하기에 이렇게 짰는데,.env파일은 gitignore에 들어가니 dag실행시 읽어올 수가 없는데이런 경우는 어떻게 할까요...? 강의에서 보여주신 것처럼 서울시 공공 api에서 simplehttpoperator를 사용하고, airflow웹에서 variable 변수를 사용했듯이 이것도 이렇게 해야할까요..?!
-
미해결실전! Redis 활용
Hash - Login Session(로그인 세션)에 대해 질문 드립니다.
해당 클래스의 주된 내용은 동시 로그인 제한으로 이해를 했습니다.그런데 설명을 해주시는 부분에 있어서 set-cookie 부분에서 부터 이해가 잘 되지 않네요.먼저 설명 부분에 있어서set-cookie로 session id를 보내고갑자기 결제가 필요한 유료 api에 접근을 요청하고redis의 캐시에서 해당 유저가 프리미엄 등급임을 확인하고유료 api 요청을 처리한다 하셨는데동시 로그인 제한이라면 pc나 모바일 등 여러 장비에서 접속하는 session의 처리를 의미하는거라 생각이 됩니다.그리고 redis의 캐시로 프리미엄 등급을 확인한다는것도 이해가 되지 않는게 해당 데이터는 캐시로 다뤄질 데이터가 아니지 않나요?초반 설명하셨던 동시 로그인 제한이란 소주제의 목적이다이어그램을 통해 설명한 내용과 다른것 같습니다.혹시 제가 이해한게 잘못된 것인지 알고 싶습니다.n(로그인 세션)
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
과제 완료
직접 짜보니 어렵습니다.완성하고 보니 뿌듯한데 지저분하게 짠 것 같네요..html<!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8" /> <title>회원가입</title> <link rel="stylesheet" href="./reset.css" /> <link rel="stylesheet" href="./02-signup.css" /> </head> <body> <form class="box-form-signup" action="" autocomplete="off" > <h2>회원 가입을 위해<br />정보를 입력해주세요</h2> <label for="user-email" class="text-form-signup" >* 이메일</label > <input type="email" id="user-email" class="input-form-signup" autofocus required /> <label for="user-name" class="text-form-signup" >* 이름</label > <input type="text" id="user-name" class="input-form-signup" required /> <label for="user-password" class="text-form-signup" >* 비밀번호</label > <input type="password" id="user-password" class="input-form-signup" required /> <label for="user-password-check" class="text-form-signup" >* 비밀번호 확인</label > <input type="password" id="user-password-check" class="input-form-signup" required /> <div class="box-form-signup-gender"> <input type="radio" name="gender" id="female" /><label for="female">여성</label> <input type="radio" name="gender" id="male" /><label for="male">남성</label> </div> <div class="box-form-signup-agree"> <input type="checkbox" class="checkbox" id="agree" /><label for="agree" class="agree" >이용약관 개인정보 수집 및 이용, 마케팅 활용에 동의합니다.</label > </div> <div class="line"></div> <button type="submit">가입하기</button> </form> </body> </html>css@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap'); * { box-sizing: border-box; padding: 0px; margin: 0px; } body { font-family: 'Noto Sans KR', sans-serif; } .box-form-signup { width: 670px; height: 960px; padding: 71px 100px; margin: 60px auto; border: 1px solid #aacdff; border-radius: 20px; box-shadow: 7px 7px 39px #0068ff40; display: flex; flex-direction: column; justify-content: center; } h2 { font-size: 32px; font-weight: 700; line-height: 47.36px; color: #0068ff; margin-bottom: 48px; } .text-form-signup { font-size: 16px; font-weight: 400; color: #797979; line-height: 23.68px; } .input-form-signup { font-size: 24px; width: 466px; height: 56.35px; font-weight: 700; border-width: 0 0 1px; border-color: #cfcfcf; margin-bottom: 24px; } .input-form-signup:hover, .input-form-signup:active, .input-form-signup:focus { outline: none; border-color: #0068ff; border-width: 0 0 1.5px; } input[type='radio'] { transform: scale(1.5); margin-right: 10px; } input[type='checkbox'] { transform: scale(1.2); position: relative; bottom: -1px; } .box-form-signup-gender { align-self: center; margin: 20px auto; } .box-form-signup-gender > label { font-weight: 400; font-size: 16px; padding-right: 20px; padding-left: 5px; } .box-form-signup-agree { height: 24px; align-self: center; margin: 40px auto; } .box-form-signup-agree label { font-weight: 400; padding-left: 10px; } button { width: 100%; height: 75px; font-size: 18px; line-height: 26.64px; color: #0068ff; background-color: white; border: 1px solid #0068ff; border-radius: 10px; transition: all ease-in-out 300ms; } button:hover { color: white; background-color: #0068ff; }
-
해결됨코딩테스트 [ ALL IN ONE ]
시간복잡도 질문 드립니다.
list의 시간복잡도를 설명하실 때 visited = [True, True, False, True, False, True, False]# if visited[3] == True:if visited[3]: print("room number 3 visited")이 코드에서 입력값 n에 따라 visited의 길이가 n으로 바뀌는 거면 visited 리스트를 n개의 원소로 초기화하는데에 걸리는 시간은 O(n)이므로 , if visited[3]: 이부분에서의 시간복잡도가 O(1)이여도 코드의 총 시간 복잡도는 O(n) 아닌가요 ??
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
itmeView, converView 가 궁금합니다.
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bindItem(item : ContentModel) { val rv_img = itemView.findViewById<ImageView>(R.id.rvImageArea) val rv_text = itemView.findViewById<TextView>(R.id.rvTextArea) rv_text.text = item.titleText Glide.with(context).load(item.titleImageUrl).into(rv_img) }override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? { var convertView = convertView if (convertView == null) { convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item, parent, false) } val date = convertView?.findViewById<TextView>(R.id.ListViewDateArea) val memo = convertView?.findViewById<TextView>(R.id.ListViewMemoArea) date!!.text = List[position].date memo!!.text = List[position].memo return convertView }안녕하세요 개발자님. 개발자님 좋은 강의 덕분에 많이 배우고, 강의 완강했습니다. 감사합니다. 공부 하면서 매번 궁금한 점이 있어서 질문 남깁니다.첫번째 코드는 리사이클러뷰 어뎁터 코드이고, 두번째 코드는 리스트뷰 어뎁터 코드입니다. 리사이클러뷰 어뎁터에서는 itemView, 리스트뷰에서는 convertView를 사용하셨는데, 단순히 리사이클러뷰-itmeView 사용, 리스트뷰-converView 사용이라고 생각하면 될까요?혹시 차이가 있다면 itmeView와 converView의 차이점도 알고싶습니다. 감사합니다.
-
해결됨Next + React Query로 SNS 서비스 만들기
팔로우 게시글 불러올 때 내 게시글이 가져와지는 문제
getFollowingPosts 호출 시 내 게시글들이 불러와집니다.credentials: 'include' 제대로 넣어줬는데 원인을 모르겠습니다.무한스크롤은 적용했고 팔로잉은 아직 없는 상태입니다.getFollowingPoststype Props = { pageParam?: number; }; export async function getFollowingPosts({ pageParam }: Props) { const response = await fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/posts/followings?cursor=${pageParam}`, { next: { tags: ['posts', 'followings'], }, credentials: 'include', cache: 'no-store', }, ); if (!response.ok) { throw new Error('Failed to fetch data'); } return response.json(); } FollowingPosts'use client'; import { InfiniteData, useInfiniteQuery } from '@tanstack/react-query'; import { getFollowingPosts } from '../_lib/getFollowingPosts'; import Post from '../../_components/post'; import type { Post as IPost } from '@/model/post'; import { useInView } from 'react-intersection-observer'; import { Fragment, useEffect } from 'react'; export default function FollowingPosts() { const { data, fetchNextPage, hasNextPage, isFetching } = useInfiniteQuery< IPost[], Object, InfiniteData<IPost[]>, [_1: string, _2: string], number >({ queryKey: ['posts', 'followings'], queryFn: getFollowingPosts, initialPageParam: 0, // required getNextPageParam: (lastPage) => lastPage.at(-1)?.postId, // required staleTime: 60 * 1000, gcTime: 300 * 1000, }); const { ref, inView } = useInView({ threshold: 0, delay: 0, }); useEffect(() => { //. inView: ref가 화면에 보일 때 //. !isFetching: 패칭상태 아닐때 (중복 패칭 방지) //. hasNextPage: 다음 페이지가 있을 때 console.log('useEffect', { inView, isFetching, hasNextPage }); if (inView && !isFetching && hasNextPage) { fetchNextPage(); } }, [inView, isFetching, hasNextPage, fetchNextPage]); return data?.pages.map((page, index) => ( <Fragment key={`posts-followings-page-${index}`}> {page.map((post) => ( <Post key={post.postId} post={post} /> ))} {!isFetching && <div ref={ref} style={{ height: 50 }}></div>} {isFetching && <div style={{ height: 50 }}></div>} </Fragment> )); } response에는 내 게시글들이 담겨옵니다서버쪽 PostsService findAll 콘솔 찍어보면 유저정보 제대로 받아옵니다{ cursor: 0, type: 'followings', user: { id: 'asdf', nickname: '슈퍼맨', image: '/upload/dummy1719568724038.png' } }
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
8회 빅데이터분석기사 합격이요! 좋은 강의 감사합니다.
덕분에 실기 잘 준비할 수 있었습니다. 감사합니다 ^^ 잘 배웠습니다 ㅎㅎ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ControllerAdvice HTTP 405 처리
@ControllerAdvice("com.test.controller") 이렇게 패키지명을 명시하고전역 @ControllerAdivce가 없는 경우405가 발생하면 핸들러 어댑터에서 처리해야 할 핸들러를 찾지 못해서 ( handler = null )예외 처리가 안되더라구요.405라고 인식한거 자체가 handler 의 정보는 가지고 있을 줄 알고 @ControllerAdvice("com.test.controller") 에서 처리가 될 줄 알았는데 말이죠이 문제 해결할려면 무조건 @ControllerAdvice 전역처리기나 아니면 /error 로 포워딩되는곳에서 처리를 해줘야 할까요?
-
미해결데이터 분석 SQL Fundamentals
제가 작성한 코드에 왜 오류가 생기는지 잘 모르겠습니다.
with temp_01 as ( select b.product_id, b.category_id , sum(amount) as sum_by_prod from order_items a join products b on a.product_id = b.product_id group by b.product_id, b.category_id ) , temp_02 as ( select product_id, category_id, sum_by_prod , sum(sum_by_prod) over (partition by category_id) as sum_by_cate , row_number() over(partition by category_id order by sum_by_prod) top_prod_ranking from temp_01 ) select * from temp_02 where sum_by_prod >= sum_by_cate*0.05 and top_prod_ranking <= 3 ;안녕하세요. 위의 코드로 실행시킨 결과, 다음과 같이 출력되었습니다.12 4 12257.66 234507.26 322 5 7122.36 95744.59 355 6 17426.40 163022.37 314 7 7991.48 99984.57 27 7 22044.30 99984.57 3위의 코드에서 선생님께서 작성하신 코드와 다른 점은 temp_01 생성할 때 group by를 product._id와 category_id, 총 2개로 놓은 것인데요. 선생님이 작성하신 temp_01과 제가 작성한 temp_01를 전체 쿼리에서 떼어와서 각각 실행했을 때 결과는 같았는데, 전체 쿼리에서는 왜 결과가 달라졌는지 궁금합니다. 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
5.12 강의 관련 질문있습니다
void draw(int n) 의 while 문에서 감소연산자를 안쓰고 같은 결과가 나오게하려면 어떻게 해야하나요?
-
미해결스프링 배치
chunk 처리 기반에서 cursor 방식과 메모리 사용
안녕하세요. 비전공자로 배치 프로그램에 관심이 많아서 해당 강의를 듣다가 커서 방식과 페이징 방식을 스프링 배치에서 사용할 때 고려사항과 관련하여 질문이 있습니다. 커서가 페이징 방법에 비해 데이터 일관성이 보장이 쉽고 속도도 더 빠른 것으로 알고 있습니다. 그리고 청크 기반 배치 처리 로직으로 구현한다면, 커서 기법을 사용하는 경우에도 페이징 방법처럼 트랜잭션 단위를 청크 크기만큼 나눌 수 있을 텐데요.(페이징에서 chunk와 paging 단위를 같이 하는 것처럼 커서에서도 chunk와 fetchsize를 같게 해주면 될 것으로 고려합니다.)그리고 멀티 스레드를 고려한다면,SynchronizedItemStreamReader로 reader 영역을 감싸서 처리할 수도 있는 걸로 알고 있습니다. 그렇다면, 이러한 상황 속에서 커서와 페이징을 사용함에 고려해야할 트레이프 오프가 커넥션 타임 뿐인 걸까요??이런 상황에서도 커서가 메모리 할당 방식으로 인해서 메모리 사용량이 커진다는 단점이 있는 건가요??( 더 정확하게 말하자면 결과를 메모리에 할당한다는 점이 명확히 와닿지 않습니다.제 나름 추론하자면,커서가 fetch size나 chunk로 전체 데이터를 분할하여 메모리에 올리고 읽고나서도 모든 결과값이 메모리에 쌓여 한번에 write(ex- db에 저장) 되기 때문에 메모리 사용량이 많아 진다는 것인가여??반면에, 페이징은 기반 처리는 페이징 단위로 데이터를 읽고 읽은 데이터 크기를 처리 후 메모리에 올리고 write한 후에 다시 정해진 크기 만큼 읽는 방식인건가요??즉, 이것이 커넥션을 맺고 끊는 것 방식과 관련이 깊은 것인지 궁금합니다.)이상 cs적인 지식이 부족한 비전공자의 긴 질문을 읽어주셔서 감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2번은 LinearReggression으로는 풀 수 없는건가요?
randomforest로도 해보고 Linear으로도 했는데 최종 제출은 Linear로 제출 했더니 10점이 나왔네요...
-
미해결[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편
엑셀 파일 제목 중복되면 (1),(2) 씩 늘어나게 해서 생성하게 하기
파일이 중복되면 다시 지웠다가 파이썬을 실행시켜야 하는데 그걸 막기 위해 코드 추가했습니다.import openpyxl import random import os from datetime import datetime, timedelta wb = openpyxl.Workbook() ws = wb.active base_path = '파일이 있는 폴더 경로 ex)c://user' base_filename = '파일명.xlsx' full_path = os.path.join(base_path, base_filename) # 파일명이 겹치면 숫자를 붙여가며 저장 if os.path.exists(full_path): version = 1 while os.path.exists(full_path): name, ext = os.path.splitext(base_filename) full_path = os.path.join(base_path, f"{name} ({version}){ext}") version += 1 ws.title = 'automation' item = [['32인치 모니터', 350000], ['마우스 패드', 20000],['게이밍 마우스', 40000], ['기계식 키보드',120000]] # ws['A1'] = '순번' # ws['B1'] = '제품명' # ws['C1'] = '가격' # ws['D1'] = '수량' # ws['E1'] = '합계' # ws['F1'] = '날짜' ws.append(['순번','제품명','가격','수량','합계','날짜']) first_date = datetime(2024, 3, 1) for i in range(2, 12): current_date = first_date + timedelta(i) rand_ind = random.randint(0,3) selected_item = item[rand_ind] ws.append([i-1, selected_item[0], selected_item[1], random.randint(1,8), f'=C{i}*D{i}', current_date.strftime('%Y-%m-%d')]) # strftime으로 나타내야 엑셀에서 날짜형식으로 뜬다. wb.save(full_path)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
단일 모듈 다중 프로젝트 질문
아직 완강은 하지 않았지만 궁금한 점이 생겨 질문드립니다강의에서 단일모듈 다중 프로젝트로 진행을 하시는데, 이렇게 되면 CI/CD 관리는 어떻게 하는 지 궁금합니다 서비스 마다 Github Repository를 하나씩 만드는 건가요?단일 프로젝트 멀티모듈은 권장하지 않으시나요?현업에서는 주로 어떤 방법을 사용하는지 궁금합니다
-
미해결
8회 실기합격^^
8회 실기시험에 덕분에 합격했습니다7회때 0점 실기총점 75점 선생님 강의가 8회 실기때 많이 도움되었습니다감사합니다^^
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
파라미터 로깅 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Hibernate: drop table if exists memberHibernate: create table member ( id bigint not null auto_increment, username varchar(255), primary key (id) ) engine=InnoDBHibernate: insert into member (username) values (?)insert시에 id 값이 보이지 않는 이유가 무엇일까요 ㅠㅠ파라미터는 id, username 2개가 나와야 하는데 1개만 나와서 질문 드립니다.spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.type=trace p6spy도 똑같이 하나만 나오더라구요
-
해결됨실무에 바로 적용하는 AWS 배포
강의 1.2, 1.3 영상이 보이지 않습니다.
강의 1.2, 1.3 영상이 보이지 않습니다처음에 주의사항이라 하셔서, 음성 강의로 들으려했으나, 스크립트를 확인해보니, 여기 확대, 화면의 대한 언급을 하셔서, 영상이 필요한 강의라고 확신하여 질문을 올렸습니다.. 이거 어떻게 해결이 안될까요??.
-
미해결[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편
엑셀 다루기 기초에서 날짜 1일씩 늘어나게 하기
from datetime import datetime, timedelta import openpyxl # 날짜 시작 start_date = datetime(2030, 1, 1) # 데이터 추가(2) ws.cell(row=2, column=1, value= start_date.strftime('%Y-%m-%d')) ws.cell(row=2, column=2, value = 20000) ws.cell(row=2, column=3, value='삼성tv') ws.cell(row=2, column=4, value = 4) ws.cell(row=2, column=5, value='=B2*D2') for i in range(3,7): current_date = start_date + timedelta(days=i-2) ws.cell(row = i, column = 1, value = current_date.strftime('%Y-%m-%d')) 엑셀 다루기 기초 - openpyxl 수업에서 데이터 추가할 때,3번재 행 셀부터 날짜가 1일씩 늘어나게 작성해 보았습니다.
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 2 - 랭체인(LangChain)으로 나만의 ChatGPT 만들기
ConversationSummaryBufferMemory의 max_token_limit
ConversationSummaryBufferMemory 설명 중max_token_limit 관련 문의 있습니다토큰 제한하신 경우:max_token_limit=5대화 요약된 경우: {'history': 'System: \nThe human greets the AI and the AI responds asking how the human is doing. The human responds that they are not doing well and the AI responds similarly.'}이렇게 지정한 토큰 수를 넘어서 대화 요약이 되는 이유가 있을까요?