[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
한동안 바빠서... 간만에 플러터 공부하러 다시 왔습니다. 그런데... 안드로이드 스튜디오에서 Run을 시키니까 Xcode가 뜨면서 앱이 Xcode에서 실행이 되네요.(실제기기) 콘솔창 메시지 보니까 이상한 건 아닌데... 반드시 이런 건 아닌 것 같기도 하고(You may be prompted to...) 혹시 xcode 바이패스 하고 안드로이드 스튜디오에서 직접 실행시키는 방법이 있을까요? 알려주시면 감사하겠습니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
동영상 플레이어 강의 진행 중입니다. ImagePicker 사용해보기를 진행하고 실행하였는데 위와 같이 초록 창이 뜹니다. 코드는 에러 없이 실행되나 D/CCodecBuffers( 6275): int32_t channel-mask = 12 D/CCodecBuffers( 6275): int32_t max-output-channel-count = 8 D/CCodecBuffers( 6275): string mime = "audio/raw" D/CCodecBuffers( 6275): int32_t sample-rate = 48000 D/CCodecBuffers( 6275): int32_t android._config-pcm-encoding = 2 D/CCodecBuffers( 6275): } 위와 같은 메시지가 길게 콘솔에 출력됩니다. 강의를 더 진행하여 플레이 버튼을 만들고 영상을 플레이 하니 영상은 정상 출력됩니다. 미리보기 화면만 저렇게 출력되는 거 같아요. 호환성 문제로 생각되어지는데 해결 방법을 찾지 못해서 문의 드립니다. 사용하고 있는 에뮬레이터는 Pixel XL API TiramisuPrivacySandbox 입니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 스튜디오에서 위치설정을 해주고 싶은데 기기를 변경해도 api 버전을 바꿔도 안스 지웠다 다시 깔아도 Location에 지도 영역이 계속 흰색화면으로만 뜹니다. 왜 이러는건지 모르겠어요 ㅠㅠ 안드로이드 스튜디오에서 에뮬레이터 돌리고 있고 에뮬레이터 버전은 Pixel4에 API 버전 30입니다
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
shared_preferences보다는 FlutterSecureStorage를 사용하는 것이 안전하다는 글을 많이 찾게 되었습니다. 그런데 Hive를 사용하지 않는 이유도 같은가요? 저장하는 데이터 형태가 key: value 형태로 nosql 형태인데 hive도 가능할 것 같아서 질문드립니다.
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요, 코드팩토리님 강의 기반으로 RefreshIndicator를 구현하였는데, fetchMore가 true로 가고, forceRefetch가 false로 가서 제대로 새로고침이 동작하지 않는 문제가 있습니다. 디버그모드로 돌려보니 refresh_indicator.dart를 통할 때 fetchMore와 forceRefetch 값을 바꿔버리던데.. 이거는 플러터에 있는 자체 코드라 수정이 어려운 것 같아요. 코드 캡쳐는 아래를 참고 부탁드립니다. [pagination_list_view.dart] [pagination_provider.dart] 참고로 dart 버전은 2.19.6이고, flutter 버전은 3.7.12입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 간단한 내용이지만 조금 고민이 있어서 질문드립니다. 요청을 통해서 받은 데이터를 통해서나 로직상에서 연관관계에 필요한 Entity의 id값을 알고 있는 경우 필요한 Entity를 DB에서 조회하는 과정 없이 id값만 초기화된 Entity를 생성하여 주입하는 방식이 가능한 것으로 알고 있습니다. 이 때, 그렇게 주입된 Entity는 persist된 상태가 아니라는 점인데요. ( cascade 옵션이 적용 안 되었다는 가정 ) 이런 경우에 두 가지 경우의 수를 고려하였습니다. 첫 번째는 연관관계 Entity가 연관관계 설정 외에는 사용될 일이 없는 로직의 경우이고 두 번째는 연관관계에 필요한 Entity가 이후에도 여러 로직에서 사용되는 경우입니다. 두 번째의 경우에는 사실 고민할 것 없이 ID를 이용해 Entity를 생성하는 것이 아닌 SELECT를 통해서 Entity를 조회하여 사용하는 것이 좋은 방법이고 EntityGraph를 맞추는 면에서도 당연히 해주어야 하는 것으로 사료됩니다. 하지만 첫 번째의 경우 굳이 Entity를 ID값을 통해 조회하는 과정이 필요한 지에 대한 의문입니다. 저런 단순한 로직의 경우 굳이 DB와의 정합성을 위해 조회 및 연관관계 편의메소드 등을 이용해서 EntityGraph를 맞춰줄 필요가 있나 싶었습니다. 이런 경우에서 실제 현업에서는 어떤식으로 처리하는 지 궁금합니다. 저렇게 각 상황에 따라 효율을 따져서 다르게 처리하는 지 아니면 ID를 통해 데이터를 조회하는 것은 크게 성능상 문제가 되지 않으니 불필요하더라도 로직의 통일성이나 혹시 모를 사이드 이펙트를 대비해서 조회한 뒤 연관관계 편의 메소드를 통해 EntityGraph까지 맞춰 주는 지 궁금합니다..! 저는 불필요하다고 생각하여 굳이 Entity그래프를 맞춰줄 필요가 없는 경우는 그런 과정을 생략하며 프로젝트를 하고 있었는데, 완성하고 보니 EntityGraph를 맞춰 주는 로직이 단 하나도 없는 걸 알게 되었습니다. 아무래도 복잡한 비즈니스 로직이 없어서 그럴 수도 있겠다는 생각은 들었지만 너무 심한 것 같아 제가 JPA를 제대로 쓰고 있는 게 맞나 싶어 질문드립니다..ㅠㅠ
Cookie 값을 삭제 하며 여러 동작을 해보던 도중, 로그인을 하기 전부터 JSSESSIONID 값이 cookie 에 들어가 있는 것을 확인하였습니다. 처음에는 오류인가 싶어 값을 삭제하고 로그인하였더니, 로그인이 동작하지 않고 그냥 페이지가 reload 된 다음 임의의 JSSESSIONID 값을 가져왔습니다. 왜 reload 할 때마다 JSSESSIONID 값을 가져오는 걸까요? 그리고 왜 JSSESSIONID 값 없이는 로그인 동작 자체가 안 되는 걸까요?
선생님, 안녕하세요. 너무 기초적인 질문일 수 있지만, 갑자기 궁금해져서 질문드립니다. 서버사이드 렌더링의 경우, 서버에서 pre-render된 코드를 만들어서 보내주고, 클라이언트에서 hydrate를 해서 페이지를 만든다고 알고 있습니다. 클라이언트 사이드 렌더링의 경우는 html코드와 js코드를 함께 보내서, 클라이언트에서 페이지를 만들구요. 서버사이드 렌더링을 할 때, pre-render된 코드를 만드는 서버는 각 클라이언트들의 컴퓨팅 자원을 사용하는 건지(클라이언트의 컴퓨터에서 만드는 건지), 아니면 배포하는 중앙(?)서버(aws ec2 또는 이 강의에서 처럼 vercel)의 컴퓨팅 자원을 사용하는 건지(서버에서 만드는 건지) 궁금합니다. 클라이언트 측에서 다 계산을 한다고 하면, 중앙(?)서버의 부담이 적을테지만, 중앙(?)서버에서 한다고 하면, 부담이 갈 수 있을 것 같아서요. 최근 next.js 14버전이 되면서 디비와 직접 통신하는 등 기능이 많이 생겼는데, 이 통신하는 등의 역할은 client side가 아닌 server side에서만 가능하더라구요. 그래서 server side라는 게 중앙서버 하나에만 있다면, 계산이 오래걸린다거나 트래픽이 늘어나거나 한다면 다른 사용자들에게도 영향을 끼치지 않을까 궁금했습니다.(자동 확장이 되지 않을때) 또, 이런식으로 간다면 따로 백엔드 서버가 필요없게 될 수도 있겠다라고도 생각해봤는데, 어떻게 보고계시는지도 궁금합니다.
[코드팩토리] [초급] 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. 서버 에러