묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결견고한 결제 시스템 구축
주문, 결제 로직에 대해서 질문이 있습니다.
이커머스를 기반으로 가정하고 사용자의 결제가 진행되는 과정을 정리했을 때 다음과 같이 고려해볼 수 있을 것 같습니다. 단일 구매 혹은 장바구니를 통해 결제 페이지로 이동결제 페이지에서 사용자가 필요한 데이터를 작성한 후 결제하기 버튼을 클릭백엔드 서버는 해당 결제 요청으로부터 PSP에게 결제 진행을 요구하기 위해서 요청을 보내고 토큰과 같은 형태로 받아옴토큰을 사용자에게 반환한 후 사용자가 결제를 진행결제가 성공적으로 진행되었을 경우 백엔드 서버는 결제 승인 요청을 PSP로 전송결제 승인 응답이 돌아오면 결제 완료이커머스는 상품의 유효성 검증은 2번과 3번 모두 검증한다고 해도 재고 감소와 같은 로직 및 주문 번호를 생성하는 로직은 어느 시점에 두어야 될 지 고민이 됩니다.재고 수량의 감소를 3번에서 진행하는 것으로 고려하고 있는데 이와 같은 경우 결제 페이지로 사용자가 결제에 필요한 데이터를 입력하고 재고가 부족하다는 입력을 받을 수 있어서 사용자 경험 측면에서 안좋을 수 있다고 생각이 되긴 합니다. 하지만 2번에서 진행할 경우 재고를 결제 페이지로 이동할 때 감소시켜야 하기 때문에 실제로 결제가 이루어지지 않을 수 있는 많은 상황이 있을 수 있기 때문에 이 또한 고려해야 되는 부분이라고 생각합니다. 어떤 시점에 재고를 감소시키는 것이 좋을지 의견을 듣고 싶습니다. 추가적인 질문으로 현재 강의에서 진행하고 있는 결제 이벤트를 DB에 반영하는 시점이 정확히 어떤 시점인지 헷갈립니다. NOT_STARTED 상태로 저장되는 시점이 결제 페이지로 이동하는 시점인지 아니면 결제 구매 버튼을 누른 시점인지 알려주시면 감사하겠습니다!
-
미해결견고한 결제 시스템 구축
주문 번호 생성 방식 관련 질문 있습니다
현재 주문 번호를 생성하는 방식은 결제 페이지로부터 들어오는 데이터들을 이용해서 그것을 String 형태로 변형해줌으로써 모든 요청들이 같은 형태의 String Key값을 가지게 되고 그것을 주문 번호로 사용하는 것으로 이해했습니다!주문 번호의 경우 쿠팡이나 다른 이커머스사들을 확인해보면 숫자 혹은 거기에 문자정도로 생성되어 있고 결제 완료시 주문 번호를 확인해볼 수 있습니다.이와 같은 방식으로 주문 번호를 생성하려면 위와 같은 방식이 아닌 별도의 로직을 통해서 주문 번호를 생성해야되며, 요청이 1번만 처리되기 위해서 Unique한 값으로 생성되어야 됩니다.현재 제가 진행하고 있는 프로젝트에서는 결제 페이지로 사용자가 진입했을 때 주문 번호를 특정 로직을 통해 Unique한 값으로 생성해주고 DB를 확인하고 Redis에 기록하는 절차를 진행하여 멱등성을 보장하고 있습니다. 이와 같이 진행하다 보니 주문 번호를 생성하기 위해서 DB에 쿼리를 1회 이상 날리는 상황이 발생하게 되는데 이와 같이 진행하는 것은 안좋은 형태일까요?
-
해결됨Real MySQL 시즌 1 - Part 1
JPA 사용시 테이블수정에 궁금한점이있습니다
안녕하세요. 현재 JPA를 사용하고있는데 말씀해주신대로 varchar(255)를 기본 string 값으로 잡고있더라고요 이부분을 필요한만큼 테이블수정을 기하는것이 좋은 설계인것인가요? 아니면 jpa 기본권장스펙대로 가는게좋은건가요?
-
해결됨Real MySQL 시즌 1 - Part 1
복합인덱스 정렬
안녕하세요. 강의를 잘 듣고 있는 수강생입니다.강의를 듣다가 좀 다른 결일 수도 있는 궁금증이 있습니다.범위기반 데이터 조회에 아래 예시에서 order by finished_at, id 부분에서 finished_at이 범위검색 쿼리로 들어가는데 이런 경우 뒤에 있는 id는 인덱스를 타지 않는 것으로 알고 있습니다. 그럼 id로 범위 검색하려고 하면 finished_at으로 검색된 범위 안 전체 데이터를 전부 스캔하게 되나요?select * from payments where finished_at ≥ ‘시작날짜’ and finished_at < ‘종료날짜’ and id > 8 order by finished_at, id limit 30
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Horizontal Scaling 이란?
백엔드를 이 강의로 처음 알아가고 있는데 .Horizontal Scaling 가 정확히 뭔지모르겠어요 설명해주시는 것중에서 Redis , in-memory 등 서버들이 같은정보를 바라보고서 사용자 정보를 우리가 판단 한다.. 이게 무슨말인지 아예 와닿질않아요 설명 해주실 수 있을까요
-
미해결견고한 결제 시스템 구축
R2DBC 관련해서 질문 드립니다.
안녕하세요.강의 잘 듣고 있습니다.R2DBC로 실습 환경을 구축해주셨는데요. R2DBC 이용하면서 DatabaseClient 를 이용해주셨는데요.혹시 Jooq 를 이용안하신 이유가 있을까요?그리고 실무에서도 DatabaseClient 를 이용하시는지 궁금합니다. 추가로 DatabaseClient 를 사용시에 동적 쿼리를 어떻게 작성을 해야 하는지 팁 주시면 감사하겠습니다! (where 절 고정이 아닌 특정값이 있을 경우에만 where절 생성 이라던지 ㅎ ) 감사합니다!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
강의 계획이 궁금합니다
어디선가 next js강의도 준비 한다고 들었던거 같아서요. 맞나요!? 맞다면 언제 정도 출시되나요그리고 nest js는 part2 는 언제 출시되는지 궁금합니다.
-
해결됨Real MySQL 시즌 1 - Part 1
LATERAL 키워드는 mysql8 에서 잘 지원 되나요?
제목 그대로 입니다.저는 지금 11.4.2-MariaDB-ubu2404 버전을 사용 하고 있는데요.. lateral 키워드를 인식을 못합니다.검색 해서 알아보니 마리아디비 및 mysql 에서는 lateral 키워드를 완벽히 지원 못한다는 내용이 있던데요..원래 PostgreSQL 에서 지원하는 기능 이었다고 하던데요.. mysql 8 강의에서 소개를 하고 있다면 사용 가능한 것 일텐데..저의 데이터베이스 세팅 등이 이상한 걸까요?mysql 8 버전으로 테스트를 해봐야 할까요?lateral 설명을 보니 많은 도움이 될 것 같아 꼭 사용 하고 싶은 기능인데.. 왜 안되는지 알 수가 없네요.. 왜 그럴까요??SELECT e.emp_id, e.emp_name, l.recent_salary, l.salary_dateFROM employees eLEFT JOIN LATERAL ( SELECT salary AS recent_salary, date AS salary_date FROM salary_history sh WHERE sh.emp_id = e.emp_id ORDER BY date DESC LIMIT 1) AS l ON TRUE;하면SQL Error [1064] [42000]: (conn=9) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(이런 에러가 생깁니다.LATERAL 을 인식 못하는 것 같습니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
로그인 페이지(프론트엔드) 작성하면서 OPTIONS 문제
코드팩토리님 안녕하세요.강의를 보면서 만들었던 서버를 기반으로 로그인 인증페이지를 Next js를 통해 만들어보고 있습니다. const basicAuth = "Basic " + btoa(id + ":" + password); console.log(basicAuth); const response = await fetch("http://localhost:3000/auth/login/email", { method: "POST", headers: { Authorization: basicAuth, // Authorization 헤더에 인코딩된 정보를 추가합니다 }, }); const data = await response.json(); // 서버의 응답을 JSON 형식으로 받습니다 console.log(data); // 콘솔에 출력합니다 router.replace("/home"); } catch (err) { console.error(err); setMessage("아이디와 비밀번호가 일치하지 않습니다."); } 이렇게 코드를 만들어서 요청을 보냈더니 [REQ] OPTIONS /auth/login/email 8/23/2024, 10:39:20 PM요렇게 요청이 POST 가 아니라 OPTIONS 로 뜨면서 동작이 안되더군요. 혹시 어떻게 처리해야할지 힌트를 주실수 있을까요
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
패키지 관련 질문 입니다.
Nest js 패키지들은 어디서 설치하고 어디서 찾아 볼 수 있나요? Express 개발시에는 npm 사이트 검색 설치 및 사용 Nest도 npm에서 가능할까요?? @nestjs/ <<< 붙은 친구들은 사용 가능한건가요?? 주로 Nest에서 개발하면서 필요한 패키지들을 찾는 루트가 있을까요??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
DB data 재활용 관련 질문
데이터 베이스를 사용하면서 궁금한점이postgres-data폴더에 db관련 정보들이 저장되는것 같은데entity의 변경과 같은 이유로 초기화를 해야 할때 초기화 후 기존에 저장했던 부분을 살릴 수 있는 방법이없을까요??(ex postgres-data폴더의 어떤 파일을 살려라 등)
-
미해결견고한 결제 시스템 구축
payment 상태 업데이트 변경 메서드를 3개나 두는 이유가 궁금합니다.
강의 30분 40초에 보시면 success, failure, unknown 이렇게 상태를 변경하면서 메서드를 3개나 두시는데 이유가 궁금합니다. 만약 jpa나 querydsl을 사용한다면 코드가 달라질까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
이미지 강좌를 듣고 생긴 궁금중입니다.
강사님이 알려주신 방식을 듣고 다양한 이미지 처리 방식을 공부하기 위하여 Presigned URL 방식을 구현중에 있습니다. 백엔드에 요청을 통해 발급받은 S3 url 주소에 PUT 요청으로 이미지를 업로드하고 있습니다. 이 떄, 일반적인 form-data 형식은 들어가지지 않는 것 같은데, binary 형태는 매우 잘 들어가집니다.현업에서도 presigned-url을 활용할 떄 binary 형태로만 전달을 해야하나요, 아니면 다른 방식이 있는지 알고 싶어 식견을 구하고자, 질문드립니다!!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
deprecated exist
exist 메서드 deprecated 됐다고 exists 써야한다고 하네요 ㅎ
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
섹션10 Column Property 정리하기에서 update
update 항목에서 true false 가 반대로 설명된 게 아닌지요?(화면 소스코드 코멘트)update 가 true 일 때 값을 변경 가능한 게 아닌지...
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
reailations property 코드 타입 에러 관련 질문
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM안녕하세요 강의 감사히 듣고 있습니다.다름이 아니라 릴레이션 설정을 할 때 객체 방식으로 선언시postman 결과는 잘 나오는데 IDE 에서 타입에러가 발생해서요 IDE 의 차이일까요? IDE 는 웹스톰을 사용 중 이고typeORM 0.3.17 버전입니다.찾아보니 TypeORM 0.3.x 이상 버전에서 제공되는 확장된 기능입니다 라는데 두 개의 방식 모두 사용해도 괜찮은지 궁금해서 글 남깁니다Argument type {relations: {profile: boolean}} is not assignable to parameter type FindManyOptions<UserModel> | undefined
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@VersionColumn() 질문
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 질문 ;엔티티의 버전 번호를 업데이트한다는 이해했는데.어떤필드가 업데이트되었는지 로그가 궁금할땐 어떻게 처리해야하나요 ? 변경사항을 로깅할 땐 보통 어떻게 작업하는지 궁금합니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
socket io database
안녕하세요 🙂 강의를 다 듣고 나서 ,ManyToMany 로 하지않고ManyToOne , OneToMany 로 중간테이블 생성을 했는데요그렇게해서 중간 테이블에 사용자가 언제 방에 들어왔는지 나갔는지를 체크하려고 했거든요만약 이렇게 할때 chats.gateway.ts 파일에 socket.join(data.chatIds.map((x) => x.toString()));이렇게해서 enter_chat 하는거 뿐만아니라데이터베이스에도 따로 save 를 해줘야하는거죠 ??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
AccessToken을 매번 검증할때의 문제
부분에서 const user = await this.userService.getUserByEmail(payload.email); console.log("user->", user);데이터를 출력해보니까 user 에 password 가 포함되어 있더라고요 @Column('varchar', { name: 'password', length: 200, nullable: true }) @Exclude({ toPlainOnly: true }) password: string; 처럼했는데 password 가 같이 출력되는게 맞을까요 ??delete user.password;해도 되지만 의도한것과 다를것 같아서요 ㅎㅎ 감사합니다 !
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
안녕하세요 !! enter_room
chat.gateway.ts 에서 enter_chat 에 대한 메서드는 생성했지만,enter_room 은 생성하지 않았었는데요.어떻게 가능한건가요 ?? time: 19.59