[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요. stat_repository.dart 파일 내부에서 API를 불러오는 과정에 이슈가 있어 질문 드립니다. import 'package:dio/dio.dart'; import 'package:dusty_dust/const/data.dart'; import 'package:dusty_dust/model/stat_model.dart'; class StatRepository { static Future<List<StatModel>> fetchData() async { // final response = await Dio().get( // 'http://apis.data.go.kr/B552584/ArpltnStatsSvc/getCtprvnMesureLIst', // queryParameters: { // 'serviceKey': serviceKey, // 'returnType': 'json', // 'numOfRows': 30, // 'pageNo': 1, // 'itemCode': 'PM10', // 'dataGubun': 'HOUR', // 'searchCondition': 'WEEK', // }, // ); final response = await Dio().get( 'http://apis.data.go.kr/B552584/ArpltnStatsSvc/getCtprvnMesureLIst' '?serviceKey=$serviceKey' '&returnType=json' '&numOfRows=30' '&pageNo=1' '&itemCode=PM10' '&dataGubun=HOUR' '&searchCondition=WEEK', ); return response.data['response']['body']['items'] .map<StatModel>( (item) => StatModel.fromJson(json: item), ) .toList(); } } 위 코드에서 주석을 처리한 부분대로 API를 호출하면(기존 강의 내용) 다음과 같은 에러가(서비스키가 등록되지 않았다는 내용) 나오고 <OpenAPI_ServiceResponse> <cmmMsgHeader> <errMsg>SERVICE ERROR</errMsg> <returnAuthMsg>SERVICE_KEY_IS_NOT_REGISTERED_ERROR</returnAuthMsg> <returnReasonCode>30</returnReasonCode> </cmmMsgHeader> </OpenAPI_ServiceResponse> 위 코드에서 엔드포인트 부분에 직접 파라미터를 적으면 정상적으로 데이터가 출력됩니다. 관련 이슈들을 구글링 해보니 serviceKey 를 받아오는 과정에서 인코딩 과정이 별도로 필요하다는데 만약 내부 설정을 변경 한다면 어떻게 해야 할까요?
안녕하세요 강사님 강의를 보고 토이 프로젝트에서 주문 시 재고 감소 및 메뉴 주문량 증가 로직에서 낙관적락 기법을 적용해 보았는데요, 강의에서 해주신 내용 그대로 파사드 패턴 까지 적용을 해보면서 시도했는데 무한 루프가 돌았습니다. hikariCP pool을 40으로 설정해주니 그제서야 해결이 되었는데요, 강의에선 네임드락에서 커넥션풀을 지정해주었는데요 저는 낙관적락인데도 해당 설정을 해서 해결된 이유가 있을까요? @Service @RequiredArgsConstructor public class OrderService { @Transactional public Order orderWithOptimisticLock(Long memberId, LocalDateTime now) { Cart cart = cartRepository.findByMember(memberId); List<CartItem> cartItems = cart.getCartItems(); cartItems.stream() .map(CartItem::getMenu) .forEach(menu -> { decreaseStockWithOptimisticLock(menu.getId(), 1); increaseMenuOrderCountWithOptimisticLock(menu.getId(), 1); }); Money money = calculator.calculateMenus(cart.getMember(), cart.convertToMenus()); Order order = Order.createOrder(cart, money, now); return orderRepository.save(order); } public void decreaseStockWithOptimisticLock(Long menuId, int quantity) { Menu menu = menuRepository.findByIdForOptimisticLock(menuId); menu.decrease(quantity); } public void increaseMenuOrderCountWithOptimisticLock(Long menuId, int quantity) { Menu menu = menuRepository.findByIdForOptimisticLock(menuId); menu.increaseOrderCount(quantity); } } ``` @Component @RequiredArgsConstructor public class OptimisticLockStockFacade { private final OrderService orderService; public Order order(Long memberId, LocalDateTime localDateTime) throws InterruptedException { while (true) { try { return orderService.orderWithOptimisticLock(memberId, localDateTime); } catch (Exception e) { Thread.sleep(50); } } } } ``` public interface JpaMenuRepository extends JpaRepository<Menu, Long> { @NotNull @Lock(LockModeType.OPTIMISTIC) @Query("select m from Menu m where m.id = :id") Optional<Menu> findByIdForOptimisticLock(@NotNull @Param("id") Long id); }
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
- 안드로이드 스튜디오 설치 했으나 not install cocoapads 또한 영상대로 진행했고 java는 자체적으로 설치한건 없으나 안드로이드 스튜디오에 내장된걸로 알고있습니다 개인적으로 안드로이드 스튜디오가 설치가 안되있는걸로 나오니 java도 인지를 못하는가 싶기도하고 xcode 시뮬레이터는 안켜지네요 ㅜ 삽질을 계속 하고있는거같아 사진찍어 문의드립니다 사진상 보시면 뒤에 어두운 계열로 켜져있는데 그게 안드로이드 스튜디오로 이미 설치가 되어있습니다 해결책좀 부탁드림다 ㅜ
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요. 섹션 16 -> Postman API 테스트 부분을 듣고 있는 수강생입니다. 하나씩 강의 영상대로 따라하면서 공부하고있습니다. 로그인 요청을 보내서 로그인 토큰을 받고 GET / restaurant 으로 레스토랑 리스트 받아오고 받아온 레스토랑 id를 기반으로 restaurant/:rid 에 rid 키로 상세 페이지를 요청하였습니다. 그 후 user/me/basket의 productId 상세페이지에서 나온 id를 입력했는데 서버에서 아래와 같은 오류가 나옵니다. 강사님의 빠른 답변 기다리겠습니다. 좋은 강의 감사합니다. ==== 포스트맨 에러 { "statusCode": 500, "message": "Internal server error" } ==== NextJS 에러 {} PatchMeBasketDto {} [Nest] 6648 - 2023. 11. 21. 오후 4:21:06 ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'map') TypeError: Cannot read properties of undefined (reading 'map') at UserService._mapBasketDtoToProduct (D:\FlutterProject\restapi\src\user\user.service.ts:74:21) at UserService.addToBasket (D:\FlutterProject\restapi\src\user\user.service.ts:66:24) at UserController.patchMeBasket (D:\FlutterProject\restapi\src\user\user.controller.ts:87:29) at D:\FlutterProject\restapi\node_modules\@nestjs\core\router\router-execution-context.js:38:29 ==== 단계별 스크린샷 1. 레스토랑 리스트 요청 2. 상세 레스토랑 정보 요청 3. PATCH 장바구니 요청 4. 서버 에러
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
코드는 전혀 문제가 없는 것 같은데, 결제창으로 넘어가지를 않습니다. 코드를 보면 만약 resp 일때 OrderDoneScreen으로 넘어가도록 되어있는데, 그 resp 는 await ref.read (orderProvider.notifier).postOrder(); 이라고 했습니다. 그렇다면 이 resp가 이 상태가 아니라는 건데, 이걸 어떻게 확인을 하면 좋을까요? 에러의 이유로는 'type 'Null' is not a subtype of type 'String' in type cast' 라고 나옵니다. 저번에는 재설치 하면 넘어갔었는데, 이번에는 아무리 모든 코드를 검사해봐도 이유를 모르겠습니다 ㅠ SizedBox( width: double.infinity, child: ElevatedButton( onPressed: () async { final resp = await ref.read(orderProvider.notifier).postOrder(); if (resp) { context.goNamed(OrderDoneScreen.routeName); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( '결제 실패!', ), ), ); }
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
List<GoRoute> 를 go_router.dart가 아닌 auth_provider.dart에 넣은 이유가 있을까요? 작동은 잘 되지만 코드가 헷갈릴 때가 있어 질문드립니다. 라우터 관련 코드들은 go_router에 넣으면 가독성이 더 편해질 것 같은데 auth_provider에 넣은 이유가 있을까요??
[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
안녕하세요 . 섹션7의 검색 라우터를 진행하다가 우연히 바탕화면에 들어갔다가 앱마크를 재생버튼이 아닌 앱 마크를 클릭을 했더니 splash 화면에서 로딩중으로만 계속 되어있고 print를 찍었더니 아예 App()에 있는 Gorouter 자체를 타지를 않는 현상이 생기고 있습니다. 혹시 바탕화면 갔다가 다시 홈페이지 화면으로 들어가려고 하는데 방법이 있을까 해서 글을 작성드렸습니다. 감사합니다 ㅠㅠ
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
좋은 강의 올려주셔서 감사합니다! 다름이 아니라 스케쥴 생성 및 수정하는 과정에서 startTime 이 endTime 보다 클 경우 create나 update를 방지하는 기능을 추가 하고 싶습니다. 클라이언트에서는( schedule_bottom_sheet.dart ) onSavePressed 에서 검증처리를 추가하면 될거 같은데, 만약 서버에서도( drift_database.dart ) 이중으로 create나 update가 되는걸 방지할려면은 createSchedule 및 updateScheduleById 내부 로직에서 검증 처리를 별도로 하면 되는지 궁금합니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 강의영상이나 책에는 아래 설치하는 내용은 없는것 같은데.. 안해도 무방한건지요? (아래 링크에는 yaml에 버전 추가하는 것은 없던데 혹시 그걸로 대체되는 것인지..) 제가 google_maps_cluster_manager: ^3.0.0+1 를 이용하려고 하는데 혹시 영향이 있을까봐 여쭙니다 :) https://developers.google.com/maps/flutter-package/config?hl=ko#android 이 작업을 간소화하려면 Android용 Secrets Gradle 플러그인 을 사용하는 것이 좋습니다. 플러그인을 설치하여 API 키를 저장하는 방법은 다음과 같습니다. Android 스튜디오에서 프로젝트 수준 build.gradle 파일을 열고 다음 코드를 buildscript 아래 dependencies 요소에 추가합니다. plugins { // ... id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false } 그런 다음 모듈 수준 build.gradle 파일을 열고 plugins 요소에 다음 코드를 추가합니다. id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' 파일을 저장하고 프로젝트를 Gradle과 동기화 합니다. 프로젝트 수준 디렉터리에서 local.properties 를 열고 다음 코드를 추가합니다. YOUR_API_KEY 를 API 키로 변경합니다. MAPS_API_KEY= YOUR_API_KEY
안녕하세요. 강의 잘 듣고 있습니다. 접속중인 사용자의 정보 가져오기 강의 관련 질문 있습니다. 아래와 같이 영상과 같이 코딩했는데 빨간 줄이 지워지지 않습니다. Future<UserModel> 로 함수 정의를 했는데 빨간 줄이 지워지지 않습니다. 무슨 문제인지 모르겠습니다. 바쁘신데 질문 읽어주셔서 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 1. 스프링 데이터 JPA 가 지원하는 save를 호출하면 flush()가 나가는건가요 아니면 save를 하고 bulkAgePlus()를 호출하면서 bulkAgePlus() 에 있는 JQPL이 실행되서 flush() 가 나가는건가요 ? bulkAgePlus()를 실행하면 JPQL 실행이되고, JPQL 이 실행이 되면 flush() 가 호출이 되는데 이때 SQL쿼리문이 DB에 전송이대서 DB에는 업데이트가 되어있지만 영속성 컨텍스트는 업데이트가 안되기 때문에 clear()를 해주는게 맞는건가요 ?