묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축
[강의 요청] 간단한 2D RPG + UGS 활용 강의를 요청드려도 괜찮을까요?
목표가 '카피바라 Go' 정도의 2D RPG 게임을 만드는 건데, 혹시 괜찮으시다면 UGS를 활용한 2D RPG 게임 강의를 부탁드려도 될까요?유니티 관련 강의를 여러 개 들어봤지만 대부분 아쉬움이 컸던 반면, 강사님의 강의 스타일과 내용이 매우 만족스러워 이렇게 요청드리게 되었습니다.강의 내용으로 전투 시스템, 인벤토리 시스템, 퀘스트 시스템과 함께 UGS를 활용한 능력치 테이블 로드, 유저 데이터 저장, CCD 패치 시스템 등 실제 게임 개발에 적용할 수 있는 내용들을 포함해 주시면 큰 도움이 될 것 같습니다.꼭 UGS가 아니더라도 다른 서버를 활용하는 방식도 괜찮습니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
tap() 안에서 async/await 쓸 때 트랜잭션 커밋이 제대로 안 되는 이유가 궁금합니다.
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. QueryRunner 커스텀 데코레이터 만들기 듣고 있는데 강의대로 return next.handle().pipe( catchError(async (e) => { await qr.rollbackTransaction(); await qr.release(); throw new InternalServerErrorException(e.message); }), tap(async () => { await qr.commitTransaction(); await qr.release(); }), );이렇게 코드를 짜면 포스트맨에서 응답으로 { "message": "QueryRunner Decorator를 사용할려면 TransactionInterceptor를 적용해야 합니다.", "error": "Internal Server Error", "statusCode": 500}이렇게 나옵니다. 그래서 tap 대신에 mergeMap(async (value) => { await qr.commitTransaction(); await qr.release(); return value; }), merge맵을 사용하면 문제가 해결되는데 강의에서는 tap을 써도 트랜잭션 커밋이 잘 되는 것처럼 보였는데, 설명 부탁드립니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
ConfigService.get<string>() 반환값이 string | undefined로 처리되어 TS 오류가 발생합니다
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 환경변수 적용하기 -1 듣고 있는데async registerWithEmail(user: RegisterUserDto) { const hash = await bcrypt.hash( user.password, parseInt(this.configService.get<string>(ENV_HASH_ROUNDS_KEY)), ); const newUser = await this.usersService.createUser({ ...user, password: hash, }); return this.loginUser(newUser); }this.configService.get<string>(ENV_HASH_ROUNDS_KEY 에서 string| undefined 형식의 인수는 string 형식의 매개 변수에 할당될 수 없습니다라는 에러가 뜹니다.강의에서는 위 코드에서 타입 에러가 발생하지 않던데, NestJS 버전 차이로 인해 타입 정의가 바뀐 걸까요? 해결방법이 궁금합니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
jwtService.verify() 사용 시 ESLint 관련 경고가 발생합니다
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 rotateToken(token: string, isRefreshToken: boolean) { const decoded = this.jwtService.verify(token, { secret: JWT_SECRET, });여기를 비롯해서 다양한곳에서 Unsafe assignment of an any value라는 오류가 뜨는데 강사님 영상에서는 따로 이런 에러가 발생하지 않더라고요. 혹시 강의에서 ESLint 설정을 약하게 해두신 건가요? 아니면 verify 결과에 타입을 명시해줘야 하는 건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
decodeBasicToken() 사용 시 'void 타입 에러' 발생 원인 질문드립니다
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의에서 알려주신 decodeBasicToken() 함수를 그대로 구현했는데요,다음과 같이 리턴을 명확히 하고 있음에도 불구하고,decodeBasicToken(base64String: string){ // 그냥 공식으로 외우면 됨 const decoded = Buffer.from(base64String, 'base64').toString('utf8'); const split = decoded.split(':'); if (split.length !== 2) { throw new UnauthorizedException('잘못된 유형의 토큰입니다.'); } const email = split[0]; const password = split[1]; return { // email: email, // password: password, email, password, }; }에서 이 함수를 사용하면 TypeScript가 다음과 같은 에러를 표시합니다:Argument of type 'void' is not assignable to parameter of type ...혹시 이 부분은 TypeScript의 일시적인 추론 문제일까요?리턴 타입을 명시하니까 에러가 사라지긴 했는데,강의에서는 따로 리턴 타입 없이도 문제없이 작동하던 것 같아서요!혹시 제가 놓친 부분이 있는지,아니면 단순히 타입스크립트 인텔리센스의 문제인지 궁금합니다 감사합니다!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
bcrypt.compare에서 에러가 나옵니다.
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이부분에서 Unsafe assignment of an error typed value.라는 에러가 나옵니다. /** * 파라미터 * * 1) 입력된 비밀번호 * 2) 기존 해시(hash) -> 사용자 정보에 저장돼 있는 hash */ const passOk = await bcrypt.compare(user.password, existingUser.password); if (!passOk) { throw new UnauthorizedException('비밀번호가 틀렸습니다.'); } return existingUser; } }
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
프로젝트가 CF_SNS로 진행하나요?
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://inf.run/54jjz 제가 중간에 놓친건지 진행 프로젝트가 프로젝트가 Inflearn_actual에서 CF_SNS로 바뀐거 같은데 맞나요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@Column({unique: true})와 @PrimaryColumn()의 차이
3:23 (nickname에 unique: true 적용)다름이 아니라 중복을 허용하지 않을 때 @Column({ unique: true })를 해도 되지만 @PrimaryColumn()을 해도 되지 않나해서 여쭤봅니다! 혼자 리서치해본 바로는 PrimaryColumn은 식별자로써 쓰일 수 있으면 쓰고 @Column({ unique: true})는 식별자로 쓰진 않아도 될 때 적용한다는 얘기를 들었습니다. 그런데 식별자가 많아서 나쁠건 없지 않나? 싶기도 하고 nickname을 식별자로 쓸 가능성도 있으면 좋을거 같기도 해서 PrimaryColumn으로 해도 괜찮을거 같다는 생각이 들었습니다.PrimaryColumn이 한 테이블에 너무 여러개 존재하면 안 좋다거나 그런 컨벤션이 있는 것일까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
PUT 요청 시 @Body()에 ?를 붙이면 서비스 함수 인자도 optional이어야 하나요?
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님, PUT 요청에서 컨트롤러에서는 @Body()를 optional (?)로 받았는데,서비스 함수에서는 인자를 필수(string)로 선언하면 TypeScript 에러가 납니다.이럴 땐 서비스 함수의 author, title, content를 string? 또는 string | undefined로 바꿔줘야 하는 게 맞을까요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
pagination Frontend
안녕하세요!pagination 강의를 듣고 서버에서 front로 보내는 방법은 정확히 이해했습니다.감사합니다. 그런데 frontend에서 어떠한 방식으로 처리해야 하는지 감이 안 옵니다. 대략적으로 front에서 20개씩 요청하는 방식을 어떻게 해야 하는지 설명 부탁 드립니다. 그리고 혹시, 강사님이 해주시는 frontend pagination 강의가 있으면 추천 부탁 드립니다.
-
해결됨절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축
구글 연동
강의 덕에 쉽게 ugs 사용할 수 있게 됐습니다 감사합니다. 강의 보고 난 후 구글, 구글게임즈 연동도 시도해보고 있는데 잘 안되네요. 혹시 이와 관련된 강의 계획은 예정에 없으실까요?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@IsPublic( )
37강 (모든 Route 기본 Private로 만들고 IsPublic Annotation 작업하기) 강의 에서8분 50초에 아래의 코드에 @IsPublic을 해줘도 아래 가드를 통과해야 해서 괜찮다고 말씀해주셨는데요. //access 토큰 재발급 @Post('token/access') @IsPublic() // 여기가 퍼블릭이여도 밑에서 가드를 통과해야하기 때문에 괜찮다. @UseGuards(RefreshTokenGuard) postTokenAccess(@Headers('authorization') rawToken: string) { // 여기서 받는 rawToken은 Bearer 이다. const token = this.authService.extractTokenFromHeader(rawToken, true); // token은 refresh 토큰이다. false를 같이 던져줘서 acess 토큰이 나온다. const newToken = this.authService.rotateToken(token, false); /** * {accessToken: {token}} 이러한 형태로 리턴 */ return { accessToken: newToken }; } //refresh 토큰 재발급 @Post('token/refresh') @IsPublic() @UseGuards(RefreshTokenGuard) postTokenRefresh(@Headers('authorization') rawToken: string) { // 여기서 받는 rawToken은 Bearer 이다. const token = this.authService.extractTokenFromHeader(rawToken, true); // token은 refresh 토큰이다. true를 같이 던져줘서 acess 토큰이 나온다. const newToken = this.authService.rotateToken(token, true); /** * {refreshToken: {token}} 이러한 형태로 리턴 */ return { refreshToken: newToken }; } AccessTokenGuard, RefreshTokenGuard 모두 BearerTokenGuard를 먼저 수행하기 때문에 req에 IsRoutePublic가 true로 되어 있어서 AccessTokenGuard, RefreshTokenGuard 이 두 개 모두 바로 통과하는 것으로 알고 있습니다.이렇게 되면 IsPublic 어노테이션을 사용한 상황에서는 전역으로 설정된 AccessTokenGuard는 통과하게 됩니다. 그리고 "token/access" API에 설정된 RefreshTokenGuard도 물론 통과하게 됩니다. 이렇게 되면 RefreshTokenGuard는 어디에서도 사용할 수 없는 게 아닐까요??///////////////정리////////////////////////////////% 토큰 재 발급하는 상황이라고 가정 %IsPublic 어노테이션 설정됨 -> AccessToken 통과, RefreshTokenGuard 통과 BearerTokenGuard 통과RefreshTokenGuard도 통과즉, refreshToken 인지 검증 불가능 IsPublic 어노테이션 설정됨 -> AccessToken 검증 재검증 로직이므로 refresh 토큰을 보냈으므로 AccessToken 검증에서 accessToken이 아니라고 걸림 즉, RefreshTokenGuard는 사용할 수 없게 되는게 아닌가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
회원가입
안녕하세요 @Post('register/email') @IsPublic() // 여기가 퍼블릭이여도 밑에서 가드를 통과해야하기 때문에 괜찮다. postRegisterEmail(@Body() body: RegisterUserDto) { return this.authService.registerWithEmail(body); }위 코드처럼 회원가입을 할 때, 클라이언트에서 email, password를 보내주게 됩니다.로그인할 때는 basic 토큰으로 email, password를 base64해서 암호화하여 보내는데 회원가입할 때는 클라이언트측에서 그냥 Body에 email, password를 노출시켜서 보내도 상관없는 건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@VersionColumn() save 관련 질문
@VersionColumn() 관련하여'save()함수가 몇번 불렸는지 기억한다' 라고 하셔서 save함수가 불린 횟수에 따라 1씩 증가하는 것으로 처음에 이해를 했었는데, 강의 영상과 조금 다르게 service & controller 나눠 작성하는 연습을 하다가 아래와 같이 title을 동일한 값으로 수정하는 코드를 작성했었습니다async PatchUsers(id: string) { const user = await this.userRepository.findOne({ where: { id, }, }); if (!user) { throw new NotFoundException(); } console.log('Before save - Version:', user.version); if (user) { user.title = '수정하기'; } const newUser = await this.userRepository.save(user); console.log('After save - Version:', user.version); return newUser; }이때 title이 이전과 동일하면 실제로 save함수는 실행이 되지만 DB상에 변화가 없기 때문에 @VersionColumn() 으로 정의한 version에는 변화가 없는 것 같은데 save함수의 실행횟수보다 db의 변화가 있는지에 초점을 맞춰서 생각하면 될까요 ?
-
해결됨절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축
AddListener와 async 사용
안녕하세요.버튼 AddListener 사용할 때 질문이 있습니다. loginButton.onClick.AddListener(async () => await Login());이렇게 사용하셨는데요. AddListener 함수가 콜백을 await 해주지 않기때문에, 이렇게 사용하는게 낫지 않나요?loginButton.onClick.AddListener(Login); private async void Login() { try { await AuthenticationService.Instance.SignInAnonymouslyAsync(); string playerName = await AuthenticationService.Instance.GetPlayerNameAsync(); playerNameIF.text = playerName.Split('#')[0]; } catch (Exception e) { print(e.Message); } }
-
미해결Real MySQL 시즌 1 - Part 1
GAP 락에 대한 질문 드립니닷..!
해당 강의와 직접적으로 연관있지는 않으나, Lock 관련하여 공부하던 중 성욱님의 MySQL GAP Lock (두번째 이야기) 글을 보게 되었습니다.우선 정말 많은 도움이 되었음에 감사드리며, 해당 글 관련하여 질문을 드리고 싶습니다. (SELECT FOR UPDATE와도 관련있는 내용이라, 이곳 게시판을 통해 질문 드립니다.)위 글의'왜 supremum 레코드를 잠그나요 ?' 단락에서, 8, 9 번째 과정을 보면 다음과 같습니다.8. 다음 페이지에서 id=137 보다 큰 (첫번째) 레코드인 id=138 읽기9. WHERE 조건에 일치하지 않으므로 잠금 걸지 않음그런데 그 아래에서 다음과 같은 내용을 말씀해 주십니다.'REPEATABLE-READ 격리 수준을 사용하는 MySQL 서버에서는 검색하고 스캔했던 인덱스 레코드를 잠근다는 아주 기본적인 규칙 때문에 잠금이 발생하고 있었던 것이죠. 사용자 데이터가 아닌 시스템 레코드(supremum)까지도 말이죠.'그러나 이 설명에 따르면, '왜 supremum 레코드를 잠그나요 ?' 에서 언급한 동작에 모순이 발생하는 것 같습니다.5,6,7 번 과정에서는 supremum record를 읽었기에 잠갔음에도 불구하고,8, 9번의 과정에서는 id=138 읽었지만 잠그지 않고 종료했기 때문입니다.위 내용이 모순된 것이라 가정하고,왜 supremum record에 Lock이 걸리도록 동작했는지에 대한 이유를 개인적으로 찾아보고 공부한 내용들에 기반하여 추측해 보았습니다. (아직 내용을 완벽히 공부하지 못해 틀린 내용이 있을 수 있습니다. 혹시 틀린 부분이 있다면 지적해주시면 감사하겠습니다!)MySQL 의 공식 문서의 내용에 따르면, Gap Lock은 Gap Lock 의 기준이 되는 index record 이전의 간격을 잠급니다.A next-key lock on an index record also affects the “gap” before that index record- MySQL 공식문서 - Next Key Lock그러나 Gap락이 특정 index record 이전의 간격을 잠근다는 위 설명에 따르면, 어떤 index의 가장 마지막 record 이후의 간격을 잠글 수 있는 방법이 없어집니다. (Gap Lock 은 이전 간격을 잠그는 것이므로)따라서, 마지막 record 이후의 값을 잠글 수 있기 위해 supremum pseudo record 를 두었을 것이라 예상합니다.supremum pseudo record(인덱스가 가질 수 있는 가상의 가장 큰 값) 에 대한 GAP Lock은 supremum pseudo record 이전의 간격들을 잠그기 때문입니다.이는 공식 문서의 다음과 같은 내용을 통해 뒷받침할 수 있을 것 같습니다.'Suppose that an index contains the values 10, 11, 13, and 20. The possible next-key locks for this index cover the following intervals, where a round bracket denotes exclusion of the interval endpoint and a square bracket denotes inclusion of the endpoint:'(negative infinity, 10] (10, 11] (11, 13] (13, 20] (20, positive infinity)For the last interval, the next-key lock locks the gap above the largest value in the index and the “supremum” pseudo-record having a value higher than any value actually in the index. The supremum is not a real index record, so, in effect, this next-key lock locks only the gap following the largest index value.- MySQL 공식문서 - Next Key Lock이를 바탕으로 '왜 supremum 레코드를 잠그나요 ?' 의 원인을 분석해보면 다음과 같습니다.- 우선 3,4 번 과정에서 id=137 인 index record를 읽습니다. - 이때 id는 PK 이므로 값이 유니크하기에, BETWEEN 136 AND 137 조건을 통해 137이라는 값을 찾았으면, 해당 값이 조건을 만족하는 가장 마지막 값이라는 것을 알 수 있습니다.- 따라서 id=138 을 더 이상 탐색하지 않고 종료하게 되는데, 이때 id=137은 해당 PK 인덱스(리프노드 페이지) 의 가장 마지막 값이므로, supremum 레코드를 이용하여 추가적인 간격을 잠구는 것이지 않을까 하는 생각이 들었습니다.위 부분에 대한 성욱님의 의견을 듣고 싶어 질문드렸습니다.---이와 별개로, 추가 궁금증이 있습니다.1. MySQL 공식 문서에서도 언급되었던 InnoDB performs row-level locking in such a way that when it searches or scans a table index, it sets shared or exclusive locks on the index records it encounters. 라는 문장에서 검색되거나 스캔된 의 의미가 잘 이해되지 않습니다.예를 들어, id를 PK로 갖는 어떤 테이블에서, id = 3 인 row 를 탐색하기 위해서는,B-tree의 root 부터 시작 ~ leaf 노드로 이동 후, leaf node의 페이지의 전체 데이터를 스캔해야 하지 않나요?예를 들어 id=3 인 record 가 들어있는 leaf 노드의 페이지에 id가 1 ~ 5 까지 있다고 하면,leaf 노드의 페이지로 진입하여 1부터 순차 탐색을 진행할 것 같은데, 그렇게 되면 1~5 까지의 index 값 사이에서 3을 탐색하는 데 1과 2를 먼저 찾을 것이므로, id가 1, 2, 3인 row가 모두 잠겨야 하지 않나 하는 생각이 들었습니다. 혹시 공식문서에서 언급한 검색 혹은 스캔된의 의미가, 조건에 사용된 인덱스가 걸린 필드 값만 확인하는 것은 포함하지 않는 것일까요?(ex - 위 예시에서 id가 1인 인덱스 확인조건에 부합되지 않으므로 넘어감. (스캔되었다고 보지 않음)id가 2인 인덱스 확인조건이 부합되지 않으므로 넘어감id가 3인 인덱스 확인조건에 부합되므로 나머지 값 읽어옴.)위 내용들에서, 제가 어떤 부분을 잘못 생각하고 있는지 알 수 있을까요?정말 좋은 강의와 글 공유해 주셔서 감사합니다.
-
해결됨절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축
Run시 에러가 발생합니다.
const { DataApi } = require("@unity-Services/cloud-save-1.4")module.exports = async ({ params, context, logger }) => { const { projectId } = context; const serverInfo = { apiEndpoint: "https://mygame.server.com", connectId: 123456 } const cloudSaveApi = new DataApi(context); try{ await cloudSaveApi.setCustomItem(projectId, "SeverConfig", { key:"serverInfo", value: serverInfo }); logger.info("Save ServerInfo Success"); return { success: true, message: "Save Success ServerInfo"}; }catch(err){ logger.info("Error", {"error:", err.message}); return {success : false, message : "Failed Save ServerInfo"}; }};Compilation Error------------------------------SyntaxError: Unexpected token ','GameData.js:22:34
-
해결됨절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축
[질문] ID 와 Password 방식으로 가입하는 방식 관련 질문이 있습니다.
안녕하세요.ID 와 Password 방식 관련 강의를 보고 있습니다. 강의 영상에서 보면가입을 zack 이란 아이디로 가입을 하였는데,대쉬보드에서 보니 Unity 가 자체적으로 생성한 PlayerID 인 : UmpicBxVKu~~~~ 로만 등록되어 있어서요. 그럼 사용자가 자신의 아이디를 밝히면서 관련해서 무언가를 요구할때 서로 의사소통하기가 어렵지 않나요?사용자가 명시적으로 입력한 id 값으로 찾아볼 수 있는 곳이 있을까요? (현재 강의만 보고 있어서, 직접 대쉬보드를 열어보지 않아서 드리는 질문일 수도 있겠네요 ^^; )
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
'강의 준비를 위한 VSCode'에서 질문
이렇게 되어있고, 아나콘다가 설정이 안되어 있으면 제가 바꿔도 되는건가요?
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
deprecated 경고는 어디서 확인할 수 있나요?
docs나 redoc에서 확인하는 것은 숙지하였는데, api 개발자가 deprecated를 경고받으려면 문서뿐 아니라 response 자체에도 deprecated 되었다는 정보가 포함되어야 할 것 같습니다. header에 포함되어 있나요?