inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

세션 타임아웃과 refresh token

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 기존에 JWT의 access token과 refresh token 플로우를 알고 있는 상태에서 세션관련 강의를 듣다보니까 의문점이 생겼습니다. 강의에서 세션은 세션 타임아웃 설정을 통해 예를 들어 접속할때마다 세션 유효 기간을 30분씩 늘리는 방식으로 사용하여 세션 탈취로부터 보안을 강화하고 사용자의 빈번한 재로그인을 방지합니다. 그렇다면 여기서 JWT도 세션과 유사하게 refresh token을 사용하지 말고 accesstoken을 통해 서버에 접근할때마다 유효시간을 30분씩 늘리는 방식으로 동작하면 더 효율적일거 같은데 굳이 refresh token을 활용하는 이유가 있을까요??

  • spring
  • mvc
소니소니 댓글 1 좋아요 0 조회수 396

pushNamedAndRemoveUntil 의 작동원리와 오류나는 이유가 궁금합니다.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

안녕하세요! 강의 잘 듣고 있습니다. Q1. pushNamedAndRemoveUntil 의 작동순서? 원리가 제가 생각한게 맞는지 확신이 들지 않아서 여쭤봅니다. 명명된 라우트가 푸시된다. 라우트 스택 중 가장 최근부터 순차적으로 조건문에 따라 false가 반환되는 라우트는 스택에서 삭제된다. 따라서 push됐던 라우트에서 pop을 하게 되면 라우트 스택에 남아있던 라우트로 이동한다. 이게 맞나요? Q2. 라우트 스택의 가장 최근부터 순차적으로 삭제되는게 맞다면 RemoveUntil 이라는 이름을 보고 삭제되지 않는 페이지가 있다면 거기서 끝나는건가? 라는 생각에 HomeScreen이 아닌 route_one_screen이 삭제되지 않는 조건문을 작성했습니다. route.settings.name == '/'; 로 하셨던 것을 route.settings.name == '/one' 으로 바꿔봤는데 push됐던 route_three_screen이 pop되면 route_one_screen이 나올줄 알았는데 그냥 검은 화면만 나옵니다. 무엇이 문제였던 걸까요..? 그리고 home_screen도 삭제가 되었을까요? import 'package:flutter/material.dart'; import 'package:navigation/layout/default_layout.dart'; import 'package:navigation/screen/route_three_screen.dart'; class RouteTwoScreen extends StatelessWidget { const RouteTwoScreen({super.key}); @override Widget build(BuildContext context) { final arguments = ModalRoute.of(context)?.settings.arguments; return DefaultLayout( title: 'RouteTwoScreen', children: [ Text( arguments.toString(), textAlign: TextAlign.center, ), OutlinedButton( onPressed: () { Navigator.of(context).pop(); }, child: Text('Pop'), ), OutlinedButton( onPressed: () { Navigator.of(context).pushNamed( '/three', arguments: 111111, ); }, child: Text('Push Route Three'), ), OutlinedButton( onPressed: () { /// [HomeScreen, RouteOneScreen, RouteTwoScreen] /// push - [HomeScreen, RouteOneScreen, RouteTwoScreen, RouteThreeScreen] /// pushR - [HomeScreen, RouteOneScreen, RouteThreeScreen] Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (BuildContext context) { return RouteThreeScreen(); }, settings: RouteSettings( arguments: 999, ), ), ); }, child: Text('Push Replacement'), ), OutlinedButton( onPressed: () { Navigator.of(context).pushReplacementNamed( '/three', arguments: 999, ); }, child: Text('Push Replacement Named'), ), OutlinedButton( onPressed: () { Navigator.of(context).pushNamedAndRemoveUntil( '/three', (route){ /// 만약에 삭제 할거면 (Route Stack) false 반환 /// 만약에 삭제를 안할거면 true 반환 return route.settings.name == '/one'; }, arguments: 999, ); }, child: Text('Push Named And Remove Until'), ), ], ); } }

  • flutter
  • 클론코딩
kut7728 댓글 1 좋아요 0 조회수 141

ExternalProject_Add 관련 질문

해결됨

삼각형의 실전! CMake 초급

안녕하세요? 이번 강의에 외부 라이브러리를 사용하기 위해 1. vcpkg+find_package를 이용해 vcpkg로 설치한 라이브러리를 사용한다 2. fetchContent 를 이용해 vcpkg-find_package 없이 직접 package를 다운 받아서 사용한다. 를 배웠습니다. CMakeLists.txt에서 target_link_libraries를 이용하면 간단하게 라이브러리를 이용할 수 있구요. github에서 외부 라이브러리 사용법 안내(readme)를 읽다보면 종종 ExternalProject_Add와 add_dependencies, target_include_directories, target_link_directories, target_link_library 등도 사용하는 게 보입니다. 이 기술들은 사장된 기술들인가요? 강의 예제에서는 target_include_directories, target_link_directories, add_dependencies 를 사용하지 않는 이유가 궁금합니다. compile 후 linking을 위해서 이 명령어를 이용해 경로도 설정해줘야할 것 같은데요, 강의대로 따라하면 include directory, link directory를 굳이 설정할 필요 없이 link library로만으로도 빌드가 잘 되네요(?)

  • c++
  • cmake
  • vcpkg
김종수 댓글 2 좋아요 0 조회수 321

2.1 강의 질문있습니다.

미해결

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

!e.nativeEvent.isComposing 해당 코드가 이해가 되지 않아 찾아보았지만(아래 설명..), 정확히 어떻게 쓰이는지 잘 모르겠습니다. 설명 좀 부탁합니다. ev.nativeEvent.isComposing 은 복잡한 문자 입력 도중 발생하는 이벤트를 처리하기 위한 속성으로, IME를 통한 입력이 완료되지 않았을 때 특정 키 이벤트를 무시하는 데 사용됩니다. 이를 통해 불완전한 입력에 대한 처리를 방지할 수 있습니다

  • javascript
  • react
  • 소프트웨어-테스트
  • vitest
거누 댓글 1 좋아요 0 조회수 173

강의 내용 중복

해결됨

[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!

아래 두 강의 내용이 동일합니다. [인앱결제] 10. 플러터플로우-RevenueCat 연결 및 구현 [인앱결제] 11. iOS에서 인앱결제 테스트하기

  • flutter
  • no-code
  • supabase
  • flutterflow
SUNGSOON CHOI 댓글 1 좋아요 0 조회수 182

ㅎㅎ 재밌네요

미해결

인프콘 2024 다시보기

좋은 강의 감사함니다

  • infcon
태규 김 댓글 1 좋아요 0 조회수 318

intellij JVM설정 질문

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 인텔리제이의 설정화면 두곳이 있습니다. 하나는 settings > build, Execution, Deployment > build Tools > Gradle > 맨 하단 Gradle JVM 다른 하나는 project Structure > project settings > project > sdk 위 두 곳은 어떤 차이점이 있는 것인지 알고싶습니다. 둘다 JDK경로를 지정하는 것처럼 보이는데 Dependency requires at least JVM runtime version 17 에러를 마주했을 때 후자에서 해결을 해보려고 해도 해결이 안됐었습니다.

  • java
  • spring
  • mvc
  • spring-boot
창신동 장첸 댓글 1 좋아요 0 조회수 477

강의자료 다운로드 문제

미해결

엑셀 매크로와 VBA 기초부터 실무활용까지 완전 정복

강의자료 다운로드가 안됩니다. 메일로 전달 부탁드립니다. ver37kk@gmail.com

  • excel
  • VBA
  • 업무-생산성
댓글 1 좋아요 0 조회수 272

구글시트 권한 요청

미해결

구글태그매니저로 데이터 설계&수집하기

안녕하세요. 수업자료와 데이터 설계서 작성 연습 구글시트 권한 요청 드립니다. 그 외 수강하면서 봐야할 시트가 있다면 같이 요청 드립니다. kennc9587@gmail.com

  • 디지털-마케팅
  • Google-Ads
  • facebook-ads
  • Google-Tag-Manager
  • GA4
gdm 댓글 1 좋아요 0 조회수 240

JTAG을 따로 구입해야 하나요?

해결됨

Verilog FPGA Program 5 (Serdes)

보통 개발 보드에 JTAG이 따로 내장되어서 USB로 모든 것을 해결하는 경우도 많던데, 이 보드에는 JTAG도 따로 구입을 해야 실습이 가능한가요?

  • fpga
  • verilog
  • jtag
tpxelect 댓글 1 좋아요 0 조회수 184

Application Load Balancer를 통한 이중화 네트워크 구성(1)

미해결

스스로 구축하는 AWS 클라우드 인프라 - 기본편

Application Load Balancer를 통한 이중화 네트워크 구성(1) 강의를 듣고 진행하여 결과를 잘 나왔습니다. 그런데, 서버 1을 임의적으로 정지시키면 서버 2에서 서비스가 잘 되는지 테스트 해봤는데요 새로고침 하면 , Load Balancer 서버1 과 서버2 한번씩 번갈아가면서 서비스를 해주는것 같습니다. 서버1로 Load Balancer가 넘기면 "504 Gateway Time-out " 가 화면에 나오고, 다시한번 새로고침 하면, Load Balancer가 서버2로 넘기면서 정상적으로 화면이 나오는 식으로 번갈아가면서 되고 있는데요.. 서버1이 죽었을때 서버2로 계속해서 넘겨주고 싶은데.. 그 과정은 따로 없을까요 ? 참고로, 아직 뒤에 과정은 듣지 않은 상태에서 글을 작성하고 있습니다.

  • aws
  • 서버리스
kyd_2012 댓글 2 좋아요 0 조회수 247

build.gradle에 queryDSL 설정이 잘되지 않습니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

plugins { id 'java' id 'org.springframework.boot' version '3.3.1' id 'io.spring.dependency-management' version '1.1.5' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } //롬복 셋팅 configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'junit:junit:4.13.1' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.1' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5' implementation 'javax.persistence:javax.persistence-api:2.2' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' //test 롬복 testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() jvmArgs '-Xshare:off' // JVM 아규먼트 설정 } clean { delete file('src/main/generated') } 이렇게 설정해둔 상태인데 gradle을 다시로드했음에도 other에 compilequerydsl 설정이 생기지 않는 상황이고, 다른방식으로 설정도 했었는데, 그때는 또 우측 gradle의 other에 compileQeurydsl 설정이 보여서 설정을 진행했고 프로젝트 generated 디렉토리가 생성되긴 했지만, generated 디렉토리 하위 파일들이 보이지 않습니다. 어떻게 해결할 수 있을까요? 커뮤니티의 내용들을 다 참고했지만 되지 않네요..

  • java
  • spring
  • spring-boot
  • jpa
  • querydsl
lib32 댓글 2 좋아요 1 조회수 997

docker compose up 실행 시 오류

해결됨

실리콘밸리 엔지니어와 함께하는 리눅스 실전

안녕하세요. 강사님! 첨부 파일 자료를 통해서 docker compose up을 하게 되면 아래와 같은 메시지가 표시되고 있습니다. Dockerfile에서 문제되는 부분을 주석 처리하고 진행하면 정상적으로 진행이 되긴합니다... 실습 시 주석 처리 후 진행하면 될까요? 감사합니다.

  • linux
  • 운영체제
  • sre
  • operating-systems
이성민 댓글 1 좋아요 0 조회수 344

세션 10번 완성 소스가 잘못올라온거 같아요

미해결

코드로 배우는 React 19 with 스프링부트 API서버

세션 10번 강의 보면서 따라가고 있는데 org.springframework.dao.DataIntegrityViolationException: could not execute statement [(conn=335) Cannot add or update a child row: a foreign key constraint fails (`apidb`.`tbl_cart_item`, CONSTRAINT FKs7vg62w3nq7igdxgssq1u0biw FOREIGN KEY (`product_pno`) REFERENCES tbl_product (`pno`))] [insert into tbl_cart_item (cart_cno,product_pno,qty) values (?,?,?) returning cino]; SQL [insert into tbl_cart_item (cart_cno,product_pno,qty) values (?,?,?) returning cino]; constraint [null] 에러가 나오더라구요.. 그래서 제가 세션 10 완성 소스 보면서 잘못된 곳을 찾아 보려는데 ... 올라건 소스가 잘못된거 같아요... 세션 10의 소스가 아닙니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
just kim 댓글 2 좋아요 0 조회수 199

세션 저장 위치

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 세션은 쿠키에 저장하는데 로컬 스토리지나 세션 스토리지에 저장하지 않는 이유가 있을까요??

  • spring
  • mvc
소니소니 댓글 1 좋아요 0 조회수 193

클라이언트 에러 관련 질문입니다.

해결됨

워드프레스 자동 포스팅 프로그램 개발 강의 (ChatGPT API)

안녕하세요 강사님, 저는 Client 부분 부터 에러가 발생합니다 패키지들은 잘 설치 했는데, 어떤 문제인지 모르겠습니다. (전 Mac 사용 중이고, 파이썬 버젼은 3.11 씁니다) 파이썬 실행하면, 아래와 같은 에러메시지가 나옵니다. Traceback (most recent call last): File "/Users/ mati/coding /wp_auto/3.upload.py", line 14, in <module> client = Client(site_url, username, password) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/mati/coding/wp_auto/coding/wp_auto/lib/python3.11/site- package s/wordpress_xmlrpc/base.py", line 24, in ini t self.suppor ted_methods = self.server.mt.supportedMethods() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Vers ions/3.11 /lib/python3.11/xmlrpc/client.py", line 1122, in call return self.__send(self.__name, args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framewor k/Version s/3.11/lib/python3.11/xmlrpc/client.py", line 1464, in __request response = self.__transport.request( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.fr amework/V ersions/3.11/lib/python3.11/xmlrpc/client.py", line 1166, in request return self.single_request(host, handler, request_body, verbose) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Pyt hon.frame work/Versions/3.11/lib/python3.11/xmlrpc/client.py", line 1179, in single_request resp = http_conn.getresponse() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Framew orks/Pyth on.framework/Versions/3.11/lib/python3.11/http/client.py", line 1378, in getresponse response.begin() File "/Library/Fr ameworks/ Python.framework/Versions/3.11/lib/python3.11/http/client.py", line 318, in begin version, status, reason = self._read_status() ^^^^^^^^^^^^^^^^^^^ File "/Libr ary/Frame works/Python.framework/Versions/3.11/lib/python3.11/http/client.py", line 287, in read status raise RemoteDisconnected("Remote end closed connection without" http.client.RemoteDisconnected: Remote end closed connection without response 답글 달기 수정 삭제

  • python
  • wordpress
  • openai
  • xmlrpcclient
  • chatgpt
Jason Choi 댓글 1 좋아요 0 조회수 232

ACM 인증서 검증 대기 중

미해결

AWS 전 직원이 알려주는 AWS 아키텍처

계속 검증 대기 입니다 ㅠ

  • aws
mirai975 댓글 1 좋아요 0 조회수 526

2-A: 맞왜틀 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님. #2178 문제 중, 질문이 있습니다. 사실 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 를 습관처럼 사용했습니다. 코드 실행 성능을 늘릴 수 있다는 생각 하에 아무생각없이 넣었었는데요. #2178 문제의 경우 이 코드 라인 존재 유무에 따라 정답 오답 차이가 발생하게 되었습니다. 정답코드: http://boj.kr/a38836f77c014af59c41c4d52b8416bc 오답코드: http://boj.kr/b698e25e27b84232901cd3ee8f0dc037 정답/오답의 판별이 아래 코드의 존재 유무에 기인한 것인지, 아니면 다른 부분에 있는 것인지 질문 드립니다. int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ... }

  • c++
  • 코딩-테스트
Gitae Kim 댓글 1 좋아요 0 조회수 152

제 학습방법이 맞는지 궁금합니다..

해결됨

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

만약 강의보기전에 알고리즘 문제 풀 때, 아무것도 쓰지 못할 경우에는 일단 어떻게 접근할지 생각해본다 (한 자라도 쓸 수 없더라도) 강의를 본다. 모르는 개념이 나왔을때, 따로 공부하고 코드를 계속 외울때까지 써본다. 이런 방식으로 해도 괜찮을까요??

  • python
  • 코딩-테스트
  • 알고리즘
  • 학습방법
내꿈은프로틴부자 댓글 1 좋아요 0 조회수 283

[기본형과 참조형 문제풀이] 코드에 관한 질문이 있습니다.

해결됨

김영한의 실전 자바 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요! 항상 선생님께서 진행하시는 문제 풀이를 수강한 이후에, 혼자 좀 더 나은 방식으로 만들 수는 없을까 고민을 하는데요, Method를 배우고 난 이후로, 코드를 대부분 Method로 넘겨서 작성하다 보니 '기능을 전부 Method로 넘겨서 작성하는 것이 진짜 잘 작성한 코드가 맞을까?' 하는 의문이 들었습니다. 아래는 마지막 문제를 제가 코딩한 내용인데요, 두 가지 질문이 있습니다. 실무적인 관점과 비교해서 아래의 코드처럼 작성하는 방식(모든 기능을 Method에 집약한 방식)이 괜찮은 방식인가요? 코드의 개선점이 있다면 어떤 점을 개선하면 좋을까요? 항상 좋은 강의 해주셔서 감사합니다! package ref.ex; import java.util.Scanner; public class ProductOrderMain2 { public static void main(String[] args) { int num = orderCount(); ProductOrder[] orders = new ProductOrder[num]; createOrder(orders); orderPrint(orders); } static int orderCount() { Scanner scan = new Scanner(System.in); System.out.println("-----------------------------------"); System.out.println(" 상품 등록 시스템 "); System.out.println("-----------------------------------"); System.out.print("입력할 주문의 개수를 입력하세요: "); int num = scan.nextInt(); System.out.println(); return num; } static void createOrder(ProductOrder[] orders) { Scanner scan = new Scanner(System.in); for(int i = 0; i < orders.length; i++) { orders[i] = new ProductOrder(); System.out.println((i+1) + "번째 주문 정보를 입력하세요"); System.out.print("상품명: "); orders[i].productName = scan.nextLine(); System.out.print("가격: "); orders[i].price = scan.nextInt(); System.out.print("수량: "); orders[i].quantity = scan.nextInt(); scan.nextLine(); System.out.println(); } } static void orderPrint(ProductOrder[] orders) { int total = 0; for(ProductOrder P : orders) { System.out.println("상품명: " + P.productName + ", 가격: " + P.price + ", 수량: " + P.quantity); total += (P.price * P.quantity); } System.out.println("총 결제금액: " + total); } }

  • java
  • 객체지향
jonghyeok097 댓글 1 좋아요 1 조회수 166

인기 태그

인프런 TOP Writers

주간 인기글