묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[7일완성]생각하는 데이터베이스모델링
12_논리적인 모델링(독립형,상속형PK)에서 질문드립니다.
안녕하세요!강의에서 수강취소의 경우 수강번호(AK)를 WHERE절로 삭제한다고 말씀하신 부분에 추가적으로 궁금한게 있어서 질문드립니다. 예를들어 수강취소를 한다고 할 때 수강 테이블에 DEL_YN이라는 컬럼이 있고 삭제의 경우 delete가 아닌 DEL_YN을 N에서 Y로 update한다면, 학생코드/과목코드/DEL_YN이 1/1/Y인 레코드가 여러개 있을 수 있고 1/1/N인 레코드는 하나만 존재해야할 것 같습니다. 제가 생각하는 방법이 정상적인 방법인지도 궁금하고, 또 이 경우에는 학생코드, 과목코드, DEL_YN=N 이렇게 3개를 묶어서 PK를 해야하는지 그리고 수강취소 예시에서 delete가 아닌 DEL_YN같은 값을 update해야한다면 보통 어떤식으로 제약조건을 추가하는지 말씀 부탁드립니다.감사합니다.
-
해결됨Strapi로 코딩없이 나만의 API 서버 만들기
Strapi v5 버전의 프로젝트 실행이 안되네요.
안녕하세요. 열심히 따라하고있습니다 ^^ 질문 : 로컬 pc 에서 v5 로 프로젝트 생성해서 처음 실행하려는데 에러가 나면서 실행이 안되네요.Strapi v5 훑어보기v4 버전할때는 강의 따라해도 문제없이 잘 됐었습니다. 실행 결과를 보니 db 에는 테이블까지는 생성이 됐었네요. 에러 내용 :C:\dev\strapi5_test> npm run develop> strapi-5-test@0.1.0 develop> strapi develop⠋ Loading Strapi⠋ Building build context[INFO] Including the following ENV variables as part of the JS bundle: - ADMIN_PATH - STRAPI_ADMIN_BACKEND_URL - STRAPI_TELEMETRY_DISABLED✔ Building build context (73ms)✔ Creating admin (489ms)✔ Loading Strapi (1826ms)✔ Generating types (315ms)node:events:497 throw er; // Unhandled 'error' event ^Error: bind EACCES null:5173 at listenOnPrimaryHandle (node:net:1985:18) at rr (node:internal/cluster/child:163:12) at Worker.<anonymous> (node:internal/cluster/child:113:7) at process.onInternalMessage (node:internal/cluster/utils:49:5) at process.emit (node:events:531:35) at process.processEmit [as emit] (C:\dev\strapi5_test\node_modules\signal-exit\index.js:199:34) at emit (node:internal/child_process:951:14) at process.processTicksAndRejections (node:internal/process/task_queues:83:21)Emitted 'error' event on Server instance at: at listenOnPrimaryHandle (node:net:1986:21) at rr (node:internal/cluster/child:163:12) [... lines matching original stack trace ...] at process.processTicksAndRejections (node:internal/process/task_queues:83:21) { errno: -4092, code: 'EACCES', syscall: 'bind', address: null, port: 5173}Node.js v20.18.0C:\dev\strapi5_test> 바쁘시겠지만 시간 괜찮으실때 한번 봐주세요~감사합니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
controller에서 async를 안하고 바로 promis객체를 리턴하는 이유가 몬가요?
controller에서 async를 안하고 바로 promis객체를 리턴하는 이유가 몬가요? 그런데 이상하게도 값이 잘 나오네요? 제 생각에는 Promise<model>하고 await 후에 나오는 model값을 반환하는게 차이가 있어야 한다고 생각이 나는데 차이가 없네요? 그럼 보통 controller에는 async 키워드없이 로직을 처리하나요? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
yarn start:dev 명령어 입력시 발생하는 에러
위와 같은 에러가 납니다. ㅠㅠ GPT도 사용하고 이것저것 찾아봐도 해결 방안을 못찾아서 질문 올립니다...
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
pdf 14_async_sqlalchemy 데이터 검색(읽기) github 링크
pdf 14_async_sqlalchemy 데이터 검색(읽기) github 링크가 잘못 연결되어있습니다.https://gist.github.com/DaveLee-fun/3ff74108d3b58f8ffb731c1ec106691e연결되어 있는 페이지에 코드는 async 비동기 실행 코드가 아닌 그냥 sqlalchemy 코드입니다.
-
해결됨처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
섹션 12 SQLAlchemy 검색 기본 문법 질문
섹션 12 SQLAlchemy 검색 기본 문법7분 54초@app.get("/users/{user_id}") def read_user(user_id: int, db: Session = Depends(get_db)): db_users = db.query(User.username, User.email).all() if db_users == []: return {"error": "User not found"} return {"db_users": db_users}강의 내용과 동일하게 작성하여 실행 했는데,아래와 같은 오류가 났습니다.구글 검색 해 봐도... 잘 모르겠어서 질문 남겨봅니다... ValueError: [ValueError('dictionary update sequence element #0 has length 6; 2 is required'), TypeError('vars() argument must have __dict__ attribute')]
-
미해결견고한 결제 시스템 구축
멱등키에 request를 넘기는 것
uuid만을 사용해도 충분히 유니크할 것 같은데 request 자체를 넘겨서 어떻게 사용하는 건가요?
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
Fast API 개발환경설정 자료
강의 자료 다운로드 받고 압축 풀고 확인 해 봤는데,Fast API 개발환경설정 강의에서 보여주시는 00_FASTAPI_START 설명 파일(ppt자료?)이 없습니다.혹시 파일 누락된것이 아닐까요?확인 부탁드립니다.!
-
해결됨하루만에 배우는 AWS OpenSearch
강의 업데이트
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : 강의 업데이트질문내용 : 올해 7월부터 CloudSearch 서비스가 종료되고 OpenSearch로 통합한거 같습니다. 그로 인해 AWS의 GUI도 많이 달라져서 실제와 강의 내용이 다른 부분들이 많아 업데이트가 필요할 것으로 보입니다.
-
해결됨Real MySQL 시즌 1 - Part 1
12강 FULL GROUP BY
안녕하세요.8:01에서 FULL GROUP BY 형태에 대해 설명해 주시고 있습니다. 그 중 오른쪽의 FULL GROUP BY의 쿼리에 질문이 있습니다. GROUP BY로 fd1을 명시했으니 적절한 쿼리는SELECT fd1, SUM(fd1), COUNT(*) FROM tab GROUP BY fd1이 되어야 하지 않을까요?*변경 부분: SUM(fd2) -> SUM(fd1)
-
해결됨하루만에 배우는 AWS OpenSearch
과금 질문드립니다.
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : 제가 open search가 계속 과금되는지 모르고 과금이 되었습니다. 질문내용 : 청구서를 보고 아래와 같이 확인하여 , 서울 리전의 오픈서치 도메인을 모두 삭제하였는데, 아직 삭제되지 않은 측면이 있을지 확인 한번 부탁드립니다 ㅜㅜ
-
해결됨하루만에 배우는 AWS OpenSearch
강의에서 사용학신 블로그 url 질문 드립니다
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : 강의 자료에서 찾을 수 없음질문내용 : 강의에서 사용하신 블로그 url을 요청 드립니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
타 사이트 강의 관련 문의 입니다.
패x트x퍼x에 Nest 강의가 새로 출시 되었더라구요~ class1 class2 묶음 강의에 지금 현재[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core이 강의랑 중복되는 부분이 얼마나 될까요?? 답변이 곤란할까요??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
만일 변조된 AccessToken을 요청했을때 사후처리가 궁금합니다.
안녕하세요 강의 너무 잘보고있어요!! 근데 궁금점이 생겼네요강의에서는 AccessToken이 만료되거나 변조되었다면 에러메세지를 전달하고있는데 만약에 변조된 AccessToken을 캐치하고 에러를 프론트로 전달한다면 통상적인 프로세스로는 Refresh토큰을 가지고 Access를 재 발급하지 않나요 ? 그렇다면 만일 공격자가 새로 발급된 AccessToken을 탈취할 수 있는 거 아닌가 라는 생각이 들어서요.. 그렇다면 통상적으로 변조된 AccessToken을 캐치한다면 이를 클라로 에러코드와 같이 전달하고 아예 refresh와 access를 초기화 시키고 재 로그인을 요구하는 것이 옳은 프로세스일지요?
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
curl -X POST http://127.0.0.1:8000/set/ -i -c cookies.txt 에러
세션을 실행하고 있어 curl로 실행하려고 하는데 아래와 같은 에러 메세지가 뜨네요.Invoke-WebRequest : 매개 변수 이름 'c'이(가) 모호하므로 매개 변수를 처리할 수 없습니다. 일치하는 항목은 다음과 같습니다. -Credential -CertificateThumbprint -Certificate -ContentType.위치 줄:1 문자:45+ curl -X POST http://127.0.0.1:8000/set/ -i -c cookies.txt+ ~~실행하면 위와 같은 에러메시지가 나오는데 어떻게 해결할 수 있나요? from fastapi import FastAPI,Request from fastapi.security import HTTPBasic from starlette.middleware.sessions import SessionMiddleware app=FastAPI() app.add_middleware(SessionMiddleware,secret_key="your-secret-key") @app.post("/set/") async def set_session(request:Request): request.session["username"]='smith' return {"message":"Session value"} @app.get("/get/") async def get_session(request:Request): username=request.session.get("username","Guest") return {"username":username}
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
연동된 강의안과 수업에서 하는 강의안이 달라요
인강에서 보여주는 강의안과 드라이브에서 받아보는 강의안에 다른데.. 갱신된 강의안은 어디서 얻을 수 있나요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
cascade 자식이 부모삭제가 맞는건가요??
안녕하세요. 지금 typeORM에서 cascade를 보고있는데fk를 삭제하면 pk가 삭제하는게 일반적인 동작인지가 궁금합니다. User 엔티티에서 onDelete : "cascade"로 설정해두었고삭제는 부모에서 > 자식으로 연결되는 것으로 알고 있습니다. 근데 ProfileModel의 레코드가 삭제되도 Join한 레코드도 삭제되는데자식 > 부모로 삭제가 전파되는게 맞는건지 혼란이옵니다.강의에서도 profile을삭제하니 User레코드가 날아가버리는데 이 현상이 이해 되질않습니다. 부모>자식 cascade를 인한 연쇄 삭제 or update자삭>부모 cascade를 인한 삭제 불가 이게 기존 제 개념인데 제가 잘못알고있던건가 찾아보아도 정보가 좀 엉켜있네요.. typeORM만의 기능인지 SET NULL로 방지해야 하는건지 궁금합니다.
-
해결됨Real MySQL 시즌 1 - Part 1
ep11) Prepared Statement에서 질문
안녕하세요 강사님Client Side PreparedStatement 는 어떻게 SQL Injection을 막을 수 있다는게? 에 set하기전에 application에서 체크해서 막는다는의미인가요?
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
mySQL과 fastAPI가 연동이 안됨
mysql 과 mysql workbench를 설치하고 접속하려는데 안돼서 고생하고 있습니다.코드는 아래와 같고'code'from fastapi import FastAPI, Dependsfrom sqlalchemy.orm import Sessionfrom sqlalchemy import Column, Integer, String, create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom pydantic import BaseModelDATABASE_URL = "mysql+pymysql://newjeans:@gaius2127@localhost:3306/db_name"engine = create_engine(DATABASE_URL)Base = declarative_base()class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, index=True) username = Column(String(50), unique=True, index=True) email = Column(String(120))class UserCreate(BaseModel): username: str email: strdef get_db(): db = Session(bind=engine) try: yield db finally: db.close()Base.metadata.create_all(bind=engine)app = FastAPI()@app.get("/")def read_root(): return {"message": "Now, tackle with mySQL"}@app.post("/users/")def create_user(user: UserCreate, db: Session = Depends(get_db)): new_user = User(username=user.username, email=user.email) db.add(new_user) db.commit() db.refresh(new_user) return {"id": new_user.id, "username": new_user.username, "email": new_user.email} 터미널에 메세지는 PS C:\wonnho\fastapi> python -m uvicorn main:app --reloadINFO: Will watch for changes in these directories: ['C:\\wonnho\\fastapi']INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)INFO: Started reloader process [20636] using StatReloadProcess SpawnProcess-1:Traceback (most recent call last): File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 644, in connect sock = socket.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\socket.py", line 828, in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\socket.py", line 963, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^socket.gaierror: [Errno 11003] getaddrinfo failedDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 3280, in wrappool_connect return fn() ^^^^ 중간 생략..... File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 358, in init self.connect() File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 711, in connect raise excsqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'gaius2127@localhost' ([Errno 11003] getaddrinfo failed)")(Background on this error at: https://sqlalche.me/e/14/e3q8)아이디와 패스워드가 문제인거 같은데 뭐가 문제인지 모르겠네요. 륀튼에게 물어보고 제미나이도 물어봤는데 해결이 안되어 힌트라도 얻을려고 질문합니다.위에 newjeans라는 아이디가 있음.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
스웨거 문서에 Basic, Bearer를 적용하는 방법에 대해 질문 드립니다.
AccessToken, RefreshToken 강의 내용을 모두 마친 후에 스웨거 문서 작성 방법에 대해 궁금한 점이 있어 질문 드립니다. @Headers()를 사용하여 rawToken 값을 전달하는 경우 스웨거 문서에서는 다음과 같이 @ApiBasicAuth('basic'), @ApiBearerAuth('bearer') 형식을 작성을 해야하는지 질문 드립니다. import { Body, Controller, Headers, Post, UseGuards } from '@nestjs/common'; import { AuthFacade } from '@root/resource/auth/auth.facade'; import { BasicTokenGuard } from '@root/common/guard/basic-token.guard'; import { RefreshTokenGuard } from '@root/common/guard/bearer-token.guard'; import { IsPublic } from '@root/common/decorator/is-public.decorator'; import { ApiBasicAuth, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { AccessAndRefreshTokenResponse, AccessTokenResponse, RefreshTokenResponse, } from '@root/resource/auth/dto/response/token-response.dto'; @ApiTags('Auth API') @Controller('v1/auth') export class AuthController { constructor(private readonly authFacade: AuthFacade) {} @ApiOperation({ summary: '로그인', description: 'Authorization Basic 이메일:비밀번호 방식으로 로그인합니다.' }) @ApiBasicAuth('basic') @ApiOkResponse({ type: AccessAndRefreshTokenResponse }) @IsPublic() @UseGuards(BasicTokenGuard) @Post('login') async login(@Headers('authorization') rawToken: string) { return await this.authFacade.loginWithEmail(rawToken); } @ApiOperation({ summary: '회원가입', description: '이메일, 비밀번호로 회원가입을 진행합니다.' }) @ApiOkResponse({ type: AccessAndRefreshTokenResponse }) @IsPublic() @Post('register') async register(@Body('email') email: string, @Body('password') password: string) { return await this.authFacade.registerWithEmail(email, password); } @ApiOperation({ summary: 'AccessToken 갱신', description: 'RefreshToken으로 AccessToken을 갱신합니다.' }) @ApiBearerAuth('bearer') @ApiOkResponse({ type: AccessTokenResponse }) @IsPublic() @UseGuards(RefreshTokenGuard) @Post('token/access') generateAccessToken(@Headers('authorization') rawToken: string) { return this.authFacade.generateAccessToken(rawToken); } @ApiOperation({ summary: 'RefreshToken 갱신', description: 'RefreshToken으로 RefreshToken을 갱신합니다.' }) @ApiBearerAuth('bearer') @ApiOkResponse({ type: RefreshTokenResponse }) @IsPublic() @UseGuards(RefreshTokenGuard) @Post('token/refresh') generateRefreshToken(@Headers('authorization') rawToken: string) { return this.authFacade.generateRefreshToken(rawToken); } }