묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
Mac Book import 문제 해결완료!! (*window 동일하게 해결가능)
흠... 많은 분들이 module 파일을 가져오실 때, 에러가 발생하는 듯 한데 그 누구도 뭔가 속시원하게 말씀해주지 않으시는 듯하여 아래와 같이 제가 해결한 내용 공유드립니다.1.우선, 다음과 같은 사전지식이 필요합니다.- vscode에서 python 코드를 실행하면, vscode 내 python 전용서버인 Pylance가 실행되며, 해당 서버는 모듈을 찾을 때 기본적으로 특정한 경로만 확인합니다. 그 특정 경로라는 것이 바로 sys.path 안에 포함되어 있는 경로라고 보시면 됩니다.그래서 vscode에서 다음과 같이 코드 입력 후 터미널에서 실행보면 이 때에는 math 폴더가 포함되어 있지 않다는 것을 알 수 있습니다.import sys print(sys.path) print(type(sys.path))따라서 sys.path.append()와 import test_module을 입력하셔도 해당 모듈을 찾아올 수 없었던 것 입니다!! 2.python 전용서버인 Pylance에 sys.path 경로 탐색 외 vscode를 통해 별도 경로도 탐색할 수 있도록 해주세요.- 현재 작업중인 루트폴더 (*수업으로 생각해보면, 파이썬 입문과정)에 .vscode라는 폴더 생성- 만약 현재 작업중인 폴더만 띄어놓고 하고 싶다면, Chapter06 이라는 폴더에다가 생성해줘도 됩니다!- 해당 폴더에 Pylance가 참조할 수 있는 경로 추가 설정- 경로 추가 설정하는 방법 : settings.json 파일 생성 후 아래 코드 입력{ "python.analysis.extraPaths": ["/Users/admin/Documents/파이썬 입문과정/math"] }위 처럼 설정하시면, 이제 Pylance는 import 예약어를 통해 특정 모듈을 가져오고자 할 때, 기본 경로인 sys.path 뿐만 아니라, 개발자가 추가 설정해준 위 경로에서도 값을 참조해 올 수 있게 됩니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
내장 메서드와 슬라이싱의 출력 형태 (따옴표의 차이)
안녕하세요 선생님, 수업 잘 듣고 있습니다. 내장 타입과 메서드 강의 자료와 문자열 슬라이싱 마스터하기 강의 자료에 대한 질문입니다. (1) 내장 메서드를 이용한 출력의 경우s = "Hello, World!"에 대한 print(s.lower()) 이 'hello, world!'그리고 print(s.upper()) 이 'HELLO, WORLD!'이런 식으로 작은 따옴표가 붙어서 출력되는데 (2) 사전 형태의 메서드의 경우에서는 왜 my_dict = {"name" : "WeekendCode" (이하 생략)} 의 print(my_dict.get("job", "Not Found")) 가 그냥 Not Found 이렇게 따옴표가 없이 출력되는지 궁금합니다. (3) 반면 문자열 슬라이싱에서는 기본 예제에서는 주석으로 출력형이 'Hello' 이런식으로 달려있습니다만, 음수 인덱스의 출력값에는 World 이런식으로 쓰여있는데 따옴표가 있는 형태와 없는 형태 둘 중 어느 것이 정답인지 궁금합니다. 시험에 나온다고 생각했을때 내장 메서드를 이용한 출력은 출력값에 따옴표를 붙이고사전 형태의 메서드에서 내장 메서드를 사용해 키 또는 값등을 불러올때는 출력값에 따옴표를 붙이지 않으며문자열 슬라이싱을 하는 경우에는 출력값에 따옴표를 붙이지 않는다 이렇게 생각하면 될까요?늘 좋은 강의에 감사드립니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
8:39 파이썬 문제 문의
안녕하세요! 제가 풀어봤는데 도저히 정답이 이해가지 않아서 틀린부분을 알려주시면 감사하겠습니다.제가 푼 방식은 아래와 같습니다. b는 a의 처음부터 3번째 까지의 문자이므로, "eng"c는 a의 4번째부터 6번째 까지의 문자인데 첫 문자를 0부터 세므로 4번째 문자는 n이된다. 즉, "nee"d는 a의 28번째부터 끝까지의 문자이므로, "ing" b+c+d 는 "engneeing" 정답은 "engneeing" 일 것 같은데, 왜 "engneing" 일까요?
-
해결됨실전! FastAPI 활용(비동기)
비동기 서버 구성하다 알 수 없는 에러에 빠졌는데...
안녕하세요. 좋은 강의 감사합니다.강의를 기반으로 제 방식대로 서버를 구성하다가 알 수 없는 에러에 빠졌습니다.서버는 정상 구동은 되고, postman으로 root url인 localhost:8000/ 에 request를 날리면 정상적으로 결과값을 반환 받는데localhost:8000/api/recommend?userId=1 만 호출하면 바로 에러메세지 없이 500만 응답으로 받고 있습니다.print(1) 도 서버 로그에 찍히지 않고 서버 로그는 아예 나오질 않네요.localhost:8000/ 에서도 동일하게 서버 로그는 찍히지 않습니다우선 의도는 BaseRepository 클래스를 만들어서 find_by_id 같은 중복 코드를 하나로 관리해보려고 했습니다.의존성 주입 부분은 지피티의 도움을 받아서 위치를 조정했습니다.도저히 어디서 문제가 난건지 알 수 없어서 도움 요청 드립니다 ㅜㅜ# main.py from typing import Dict from dotenv import load_dotenv from fastapi import FastAPI from src.app.app import create_app load_dotenv() app: FastAPI = create_app() @app.get("/") async def health_check_handler() -> Dict[str, str]: return {"statusMsg": "good"} # app.py from contextlib import asynccontextmanager from typing import AsyncGenerator import anyio from fastapi import FastAPI from src.app.endpoints.recommend import router @asynccontextmanager async def lifespan(app: FastAPI) -> AsyncGenerator: limiter = anyio.to_thread.current_default_thread_limiter() limiter.total_tokens = 200 yield def create_app() -> FastAPI: app = FastAPI(lifespan=lifespan) app.include_router(router, prefix="/api") # 다른 설정들(예: 미들웨어, 이벤트 핸들러 등)을 추가할 수 있습니다. return app# connection.py import os import urllib from typing import AsyncGenerator from dotenv import load_dotenv from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine load_dotenv() DB_USERNAME: str = os.getenv("DB_USERNAME", "root") DB_PASSWORD: str = os.getenv("DB_PASSWORD", "root") DB_HOST: str = os.getenv("DB_HOST", "127.0.0.1") DB_NAME: str = os.getenv("DB_NAME", "") DB_PORT: str = os.getenv("DB_PORT", "3306") DB_ECHO: bool = os.getenv("DB_ECHO", "true").lower() == "true" if not DB_NAME: raise ValueError("DB_NAME 환경변수가 설정되지 않았습니다.") # 비밀번호 특수문자 허용 encoded_password = urllib.parse.quote_plus(DB_PASSWORD) DATABASE_URL: str = f"mysql+asyncmy://{DB_USERNAME}:{encoded_password}@{DB_HOST}:{DB_PORT}/{DB_NAME}" engine: AsyncEngine = create_async_engine( DATABASE_URL, echo=DB_ECHO, pool_size=10, max_overflow=0, pool_timeout=30, # second pool_recycle=60, # second pool_pre_ping=True, ) SessionFactory = async_sessionmaker(autocommit=False, autoflush=False, bind=engine) async def get_db() -> AsyncGenerator[AsyncSession, None]: session = SessionFactory() try: yield session finally: await session.close()# user_route.py from typing import Dict from fastapi import APIRouter, Depends, status from src.app.dependency.query_param_denpendency import snake_case_query from src.core.common_type import V from src.core.exception.not_found_exceptions import UserNotFoundExceiption from src.db.connection import get_db from src.entity.user import UserEntity from src.repository.user import UserRepository, get_user_repository from src.dto.response.user_response import UserResponse router = APIRouter(prefix="/recommend") @router.get(path="", status_code=status.HTTP_200_OK, response_model=UserResponse) async def get_recommend_schedule( params: Dict[str, V]=Depends(snake_case_query), user_repo: UserRepository=Depends(get_user_repository) ): print(1) user_id: int = int(params.get("user_id", None)) user: UserEntity | None = await user_repo.get_user_by_id(user_id) if not user: raise UserNotFoundExceiption() user = UserResponse.model_validate(user) return user# base_repository.py from typing import Type from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from src.core.common_type import E class BaseRepository: def __init__(self, db: AsyncSession): self.db = db async def get_entity_by_id(self, model: Type[E], entity_id: int) -> E | None: print(2) entity: E | None = await self.db.execute(select(model).where(model.id==entity_id)) return entity.scalars().first() # user_repo.py from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from src.db.connection import get_db from src.entity.user import UserEntity from src.repository.base_repository import BaseRepository def get_user_repository(db: AsyncSession = Depends(get_db)) -> "UserRepository": return UserRepository(db) class UserRepository(BaseRepository): async def get_user_by_id(self, user_id: int) -> UserEntity | None: print(3) return await self.get_entity_by_id(UserEntity, user_id) # user_response.py from datetime import datetime from typing import Optional from pydantic import BaseModel class UserResponse(BaseModel): id: int name: str nickname: str email: str phone: str join_date: datetime updated_at: Optional[datetime] = None deleted_at: Optional[datetime] = None class Config: from_attributes = True 도대체 어디서 문제가 생긴걸까요...
-
미해결FastAPI 완벽 가이드
머신러닝 백엔드 강좌 언제나오나요?
머신러닝 강좌는 언제 오픈하나요? 빨리듣고 싶습니다. ㅎㅎ 일 때문에 빨리 듣고싶은데 프리뷰 필요하시면 연락부탁드립니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
구조체 변수, 구조체 포인터와 malloc에 관한 질문
안녕하세요. typedef 강의를 수강하다 처음 보는 내용들이 너무 많은 와중, typedef 기출 문제(약 3분 15초 즘)에 대해 질문을 남깁니다. 구조체 형태의 Data라는 타입명을 가진 변수 Data를 커스텀으로 정의 후, 해당 타입을 활용하기 위해 main 함수 내부에서 Data 타입(구조체) 변수 d1과 Data 포인터 타입(구조체 포인터) 변수 d2를 선언했습니다. 이 문제에서 핵심은구조체 타입의 포인터 변수를 선언할 경우, 해당 변수의 멤버 변수에 .(dot)을 통해 직접 접근 할 수 없다.우리는 멤버 변수에 할당된 메모리 주소에 접근할 수 있기 때문에, ->(arrow)를 통해 접근하여 해당 주소에 저장된 값을 불러오는 방법을 활용해야 한다.라고 생각했습니다. 즉, d1의 numPtr에 값을 저장 및 접근 할 때와 d2에서 할 때의 차이를 배우기 위한 문제라고 생각이 들었습니다. 그런데, 갑자기 stdlib.h의 내장 함수인 malloc에 대한 코드가 나왔습니다.malloc은 동적으로 메모리 주소를 할당하기 위한 함수라는 것을 알게 되었습니다.,malloc(sizeof(type명))을 통해 포인터 변수에 메모리 영역을 할당하고, 이후 main 함수를 빠져나가기 전 free를 통해 할당했던 메모리 영역을 해제시켜 줬는데요. 왜 해당 방식으로 문제가 출제되었는지 이해가 되지 않아서 질문을 남깁니다.독립적인 Data 타입의 구조체 인스턴스(?)를 만들고 싶은데, 이를 d1 처럼 생성하고 싶지 않을 경우에는 반드시 저 방법을 활용해야 하는 것인가요???malloc을 통해 선언 하는 방식과 아래의 방식에 차이가 있나요?Data d2; // 구조체 변수 선언 Data *d2Ptr = &d2; // 구조체 변수의 메모리 주소에 접근하기 위한 포인터 변수 선언부족한 지식으로 인해 아직은 어렵지만, 차근차근 배워나가는 재미가 있습니다. 항상 좋은 강의 감사드립니다!
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
너무 어려워요....이해가 너무안되네요.
너무 어려워서 이해가 너무안되요 누구나 할수 있다고 하셧는데 누구나는 아닌것 같네요....
-
미해결실전! FastAPI 입문
섹션 2, 3의 PATCH API의 차이점
안녕하세요 강의를 듣던 도중 궁금한 것이 생겨 질문드립니다섹션 2에서의 PATCH API는 else문으로 is_done=True를 is_done=False로 바꾸는 처리를 따로 하지않아 True 상태를 False로 못바꾸는 반면에섹션 3에서의 PATCH API는 Ture를 False로 바꿀수 있다고 이해했는데 혹시 맞을까요??웹 개발을 처음 공부하다 보니 이해를 잘 못했나 해서 질문드렸습니다
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
RISS사이트 링크 에러
RISS사이트 크롤링 연습중입니다.링크 관련 부분 가져와서 클릭시 다음의 에러가 나오는데 원인이 어떻게 될까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
강의: 배열과 문자열(9:29)
안녕하세요, 오늘도 주말코딩(!) 강의 애청모드로 강의 듣는 중에 문자열 자체로 쓰기 부분에서 궁금한게 있어서요: #include <stdio.h>int main() { char *str = "Hello"; printf("%s|n", str); return 0;} 이렇게 컴파일러를 실행하면 결과로 이렇게 나옵니다: Hello|n Hello 뒤에 이부분: |n 왜 나오는지 궁금해서요
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
구조체 5: 37 name, model 등은 for 문이나 strcpy를 항상 사용해야 하나요?
year나 price 등은 그냥 숫자를 적었는데, model은 strcpy를 사용하고, 앞의 예제에 있는 name은 for문을 사용하여 나타내고 있는데, 문자를 읽어오는 방법은 이렇게 하는 것인가요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
함수와 재귀함수(v2) 30:19 더하기 계산이 이상해요.
30:19 (100+22+34+55+70) = 291. 291/5 = 58.2 로 56.2는 58.20이 아닌가요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
strlen에 대한 질문
안녕하세요. 강의 도중 strlen과 sizeof을 비교하는 부분(18분 경)에서 strlen에 대한 질문이 생겨서 글을 작성하게 되었습니다. 직접 3가지 str을 정의하였고, 각 str에 대해 strlen()값을 출력하였더니, 다음과 같았습니다. // 문자열 배열 (NULL 문자 포함 X) char str1[5] = {'H', 'e', 'l', 'l', 'o'}; // 문자열 (NULL 문자 포함 O) char str2[] = "Hello"; // {'H', 'e', 'l', 'l', 'o', '\0'}; char str3[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("strlen(str1) : %d\n", strlen(str1)); printf("strlen(str2) : %d\n", strlen(str2)); printf("strlen(str3) : %d\n", strlen(str3)); 출력되는 결과는 각각 10, 5, 5로 실제 문자형 배열의 크기를 지정한 5를 훨씬 넘어가는 결과가 나왔습니다.이 결과는 아무래도 마지막 원소로 NULL문자를 넣지 않아서 발생 한 듯 싶은데, 왜 하필 10이 나왔는지 이유가 궁금합니다.또한, 이럴 경우까지도 고려하여 sizeof를 사용하는 것이 더 바람직한 방법인지 궁금합니다. 마지막으로, 구글링 결과 sizeof의 반환 타입이 size_t이기 때문에 %zu라는 형식 변환자를 사용해야 한다고 하는데, %lu의 경우 보다 자유롭게 대략 long int로 판별될 경우 사용하면 되는 것인지도 궁금합니다. C언어에서 타입을 지정하는 것이 굉장히 중요한 것 같은데, %lu로 퉁쳐도(??) 되는 것인지, 그 판단은 어떻게 하는지 등이 궁금합니다!긴 글 읽어주셔서 감사합니다.
-
미해결[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편
전자는 보안때매 안되나요?
전자 사업장입니다. 커널선택에서 안되는데 보안때매 안되는건가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
종자와 비료의 p밸류값
8:42에서 종자의 p밸류값은 7.254117e-10비료의 p밸류값은 1.835039e-03으로 나오는데요.둘다 귀무가설을 기각하여 '토마토수'에 영향을 준다는 사실은 이해를 했습니다. 궁금한 점은 p밸류값이 종자가 비료보다 훨씬 수치가 작은데 그렇다면 '종자'가 '비료'보다 토마토수에 더 영향을 끼친다고 해석해도 괜찮은가요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
strcat
11:35strcat는 함수 이름으로 안변하는 건가요?cat이 연결시키는 느낌이고 문자 변수 이름이 str이어서 strcat인건지, 변수이름에 상관없이 strcat이 되는건지 궁금합니다.a="hello"; acat(a, "world")라고는 쓸 수 없는거겠죠...?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
조건문에는 교육자료 pdf파일이 없는건가요?
강의자료 다운로드가 없는것은자료가 없이 영상내용만 들으면 된다고이해하면 되나요?
-
해결됨실전! FastAPI 입문
ORM 테이블 생성
안녕하세요nest로 개발을 진행하다가 fast API로 전향하려는 개발자 입니다.저와 같은 경우는, TypeORM을 사용하고 있었습니다.TypeORM은 아래 코드와 같이 DB와 연결해 놓고 @Entity 어노테이션을 사용하면 테이블이 자동 생성됩니다.강의를 보면 테이블을 생성하는 쿼리를 console로 만들어서 DB SQL에 직접 작성하는 것으로 확인됩니다.FAST API는 NEST처럼 테이블이 자동 생성되는 기능이 없는 걸까요??또한 @ManyToMany @ManyToOne과 같은 어노테이션을 사용하면 연관관계가 쉽게 맵핑되어별도의 join 쿼리 없이도 조회,수정,삭제가 가능합니다.이러한 부분 또한 FAST API는 지원하는 기능이 없는 걸까요?? import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class PostsModel { @PrimaryGeneratedColumn() //알아서 값을 1씩 증가하는 것을 만들어 준다. id: number; @Column() author: string; @Column() title: string; @Column() content: string; @Column() likeCount: number; @Column() commentCount: number; } import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { PostsModule } from './posts/posts.module'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ PostsModule, TypeOrmModule.forRoot({ //forRoot -> typeOrm과 nestJs을 연결할 수 있는 연결고리를 만드는 것 type: 'postgres', host: '127.0.0.1', port: 5432, username: 'postgres', password: 'postgres', database: 'postgres', entities: [], //데이터베이스와 연동될 모델들 synchronize: true, //nestJS에서 작성하는 typeOrm 코드와 데이터베이스싱크를 자동으로 맞출 것이냐(개발에서는 true, 프로덕션에서는 false) }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
switch - case문 예제 질문
안녕하세요. 3분 40초대에 나오는 switch - case에 관련된 예제를 푸는 과정에서 질문이 생겨서 글을 작성하게 되었습니다.제가 기존에 알던 switch - case는 if - else를 조금 더 편리하게 사용하기 위해 도입된 조건문이었습니다.그런데, 해당 강의에서 배운 내용은 조금 달랐습니다. 여기 나온 예제를 들어 설명한다면, 변수 len에 저장된 값은 5이다.switch문의 기준은 len(=5)가 된다.각 case에 대하여 len과 값을 비교했을 때의 결과를 기준으로 다음과 같이 실행한다.3-1. case의 값이 참일 경우, (case의 값 == len) 해당 case를 기준으로 하여 break를 만날 때 까지 하위에 위치한 case들에 있는 statement들을 모두 실핸한다.3-2. case의 값이 거짓일 경우, 다음 case로 넘어간다(처음으로 case의 값이 참일 경우를 만날 때 까지) 실행하는 statement에 break가 포함될 경우, 해당 switch문을 종료하고 빠져나온다.끝까지 break를 만나지 못했을 경우, default의 statement를 실행 후 해당 switch문을 종료하고 빠져나온다.이러한 논리 구조에 따라case 3, 4는 건너뛰고case 5에서 true이기 때문에 statement를 실행(len -= 1 -> len = 4)처음으로 true인 case를 만났기 때문에, 해당 case 기준 아래에 위치한 모든 case를 실행--> case 6 실행(len에 저장된 값은 6이 아님에도 불구하고) (len += 3 -> len = 7)--> case 6에서 break를 만남 -> 종료 결과 : len = 7이런 식으로 진행 되는 것 맞는 건가요?그렇다면, case 5의 statement가 len+=2;일 경우에도 case 7을 찾아가는 것이 아닌, case 6을 찾아가서 실행 후 break가 되는 것인가요??마지막으로, default 키워드는 switch에서 모든 case가 false가 나왔을 때 실행되는 것이 아닌, break를 한 번도 만나지 못했을 경우 가장 마지막에 실행되는 것인가요??긴 질문 읽어주셔서 감사합니다!
-
해결됨고성능 실시간 분산 시스템 RabbitMQ + Kafka + Redis 실전 프로젝트
Celery worker 튜닝을 통한 성능 개선 부분 질문
부족한 식견으로 이해를 못했습니다. 강의에서 worker를 10개 -> 15개 -> 9개로 늘리고 줄이셨는데 8~9초에서 유의미한 개선이 안되는 이유가 궁금합니다!