//JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; } JdbcTemplate을 사용하도록 스프링 설정 변경하는 부분인데 이전에 객체를 생성해서 직접 주입하면 안좋다고 하셨었는데 jdbc템플릿을 적용하시는 부분에서는 직접 dataSource를 JdbcTemplate를 생성해서 넣으셨습니다. public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; }대신에 JdbcTemplate를 빈에 등록해서 이렇게 사용하는게 이전에 배운내용에 따르면 의존성, 결합성 면에서 나은 코드라 생각했습니다. (@autowired를 사용하게끔 수정해본 코드) //JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; @Autowired public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } 이렇게 수정해서 사용하라고 설명해주시다가 이 JdbcTemplate강의에서는 직접 주입하시면서 설명해주셨는데, JdbcTemplate빈을 정의해서 주입하는 방식이 아닌 Datasource를 직접 사용한 이유가 있을까요? 뭔가 데이터접근할때는 다른부분이 있어서 이런 방법이 사용된건지 궁금합니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
출첵 어플리케이션의 위치권한 확인하는 함수 작성과정에서, 어플 실행시 isLocationEnabled가 false임에 따라 '위치 기능을 활성화 해주세요'의 exception까지 반환되는것은 확인했습니다. 그러나 Geolocator.requestPermission() 함수 실행에 따라 위치 권한을 확인하는 팝업이 떠야하는데 아무런 일도 일어나지 않습니다. 지금 시뮬레이터는 iPhone 15, iOS 17.4 사용중입니다. 위 이슈에 대해 찾아보았을때, iOS 시뮬레이터는 gps 꺼져있을 시 해당 메소드가 실행되지 않는다던데 gps 설정을 어떻게 하는지 모르겠어서 해당 방법 시도도 못해봤습니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Sqlite를 백업과 복원하는 방법 좀 강의해 주세요. 구글에 계정이 있으면 구글에 백업이 되고 나중에 다시 복원할 수 있는 방법이 필요합니다. 아니면, 자신의 다른(네이버, 다음...)의 이메일 계정이 있으면 백업해 두었다가 나중에 복원하는 방법이 필요합니다. 아니면 다른 방법이 있으면 그것도 괜찮습니다. 아시다시피 휴대폰을 변경한다든지, 초기화를 하고 다시 앱을 설치하면 데이터가 다 사라짐으로... 다시 복원이 필요합니다. 여기 강의에 안되면 님의 유튜브에 올려주시면 감사하겠습니다. Drift로 Sqlite 앱을 만들었는데, 백업과 복원이 문제입니다. 감사합니다.
안녕하세요, 궁금한 내용이 생겨 기존에 질문들을 살펴보고 제가 이해한 것이 맞는지 확인차 질문드립니다. redis의 싱글스레드 특성으로 100개 발급에 대한 race condition 해결 --> 그러나 insert 시 DB 처리량에 부하가 발생할 수 있음 kafka 미들웨어를 통해 100개의 쿠폰 저장 이벤트를 보관해두었다가 컨슈머에서 원할때 꺼내어 처리할 수 있는 여지를 주어 처리량 부하를 분산시킬 수 있음 ex) 쿠폰 발급은 당장 안해도 되니, kafka에 이벤트만 잘 발행되어 있다면 DB 작업량이 적은 새벽에 꺼내서 저장해도 됨 이렇게 이해했는데, 맞을까요?
안녕하세요 건축도면을 화면에 표시하며 각 객체(계단,문 등)를 누르면 사양이 표시되게끔 앱을 만들 계획중입니다. 강의를 보고 화면 내에서 쓸 수 있는 작은 크기의 이미지는 문제가 없지만 도면처럼 큰 이미지는 어떻게 넣어야 할 지 모르겠습니다. 보라색 창이 화면이라고 보고 이처럼 큰 이미지를 손으로 드래그, 스와이프 해서 보려고 합니다. 정리하자면 1. 화면 사이즈보다 큰 이미지를 넣으면 화면에서 잘린 상태로 움직이지 않는 문제 2. 화면 밖으로 나간 이미지에 버튼을 넣는 방법 어떻게 해결해야 할까요?
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
장바구니가 현재 프로바이더를 통해서 불러오는 방식을 사용중인데, 이렇게 하는 경우 처음 유저가 로그아웃 하고, 다음 유저가 들어왔을 시에 프로바이더 값이 그대로 유지되어서 이전 유저의 장바구니를 열람할 수 있는 문제가 생기는데, 이런 경우를 대비해서 로그인 시에 모든 프로바이더 값들을 초기화시키고 싶은데, providerscope 안에 있는 모든 프로바이더들을 쉽게 초기화시킬 수 있는 방법이 있을까요? 감사합니다
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드를 따라 진행을 하시거나, 앱을 삭제하고 다시 실행하면 아래 코드위치에서 final stat = double.parse(item[regionStr]); 예외가 발생했습니다. _TypeError (type 'Null' is not a subtype of type 'String') 라는 에러가 뜨면서 흰색화면이 나타나고 좌측상단에 로딩 인디게이터만 돌아 가신다면 final stat = double.parse(item[regionStr] ?? '0'); 로 변경해주시면 앱이 정상적으로 작동 하는것을 확인했습니다. 참고하세요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] join을 하면 4개가 나오는데 id가 같지만 orderItems는 서로 다르게 나옵니다. 근데 왜 json에서는 orderItems 중복되서 왜 똑같이 나오는건가요? 그리고 값이 왜 orderItems는 여러개씩 출력이 되는거죠? 사실상 sql시 하나씩 setter로 들어가서 출력되지않나요? 예) "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 }, { "itemName": "JPA2 BOOK", "orderPrice": 20000, "count": 2 } ] 위와 같이 orderItems가 두개가 나옵니다. 근데 sql은 하나씩 출력이 되는데 그러면 "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 } ] 위와 같이 하나만 출력이 되어야하는거 아닌가요? setter로 매핑 되면 그렇지않나요?
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Error: The plugin "google_maps_flutter_ios" requires a higher minimum iOS deployment version than your application is targeting. To build, increase your application's deployment target to at least 14.0 as described at https://docs.flutter.dev/deployment/ios Error running pod install Error launching application on iPhone 15 Pro. \ IOS에뮬 띄우는데 위와같은 에러나와요.. 구글링해봐도 뭔가 xcode에서 셋팅을하라하는거같은데 엑스코드가 익숙치않아서 힘드네요 혹시 방법이 있을까요?
안녕하세요 강의 보면서 게시판 성격의 서비스를 만들던 중에 궁금증이 생겼습니다. 두 가지 방법이 있는데, 제가 취준생이라 실제 서비스 코드들을 본 적이 없어서 어떤 방법이 조금 더 현명한 방법인지 궁금합니다! Jpa 사용법처럼 게시글과 댓글을 맵핑하는 방법입니다. 댓글에 게시글의 키만 가지는 방법입니다. 1번 코드는 대략적으로 이런 형태일 것 같습니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; @ManyToOne(fetch = FetchType.LAZY) Article article; } 1번 코드의 경우에는 배울 때는 맵핑도 깔끔하게 잘 되고 좋았는데, 실제 개발을 하다 보니 댓글만 사용하는 경우에 있어서 Article의 내용은 전혀 필요가 없는 경우도 많을 것 같습니다. 또한 게시글의 댓글들을 조회 할 때, 같은 Article 내용들이 반복해서 들어 있다는 점이 마음에 걸립니다.(Lazy 하게 가져와서 문제가 없을것 같기도 하고 이 부분은 확실하지 않습니다.) 2번 코드는 게시글의 키만 가지는 경우입니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; long articleId; } 2번의 경우에는 불필요한 정보를 담지 않고 필요한 경우에는 Id값으로 찾아서 가져올 수 있습니다. 하지만 article 과 Comment를 각각 따로 관리하는 형태가 됩니다.(사실 1번 코드도 따로 관리는 가능할 것 같습니다) 간단한 경우에는 1번이 좋은 것 같은데 컴포지션 되는 객체들이 많은 경우에는 그 자체로 정말 생각해야 되는 경우가 많아 지는 것 같습니다.(Comment 안에 Article, User, 첨부 파일 Entity 등등이 복잡하게 들어갈 수 있을 것 같습니다 ) 네이버 카페와 같은 사이트들의 경우에서는 게시글과 댓글을 따로 관리하는 것 같기도 하고(작성 글 보기를 누르면 삭제된 게시글 이지만 댓글 내용은 볼 수 있는 경우입니다) 실제로는 어떤 방식으로 풀어 가는지 궁금합니다!
구글로그인도 손쉽게 만들기강의에서 " 하나 이상의 Android 앱에서 SHA-1 디지털 지문과 패키지 이름 조합을 이미 사용 중입니다. 라는 오류가 뜨는데요... https://support.google.com/firebase/answer/6401008#zippy=%2C%EC%B6%A9%EB%8F%8C%ED%95%98%EB%8A%94-oauth-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-id%EA%B0%80-%EC%96%B4%EB%8A%90-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-%EB%93%A4%EC%96%B4-%EC%9E%88%EB%8A%94%EC%A7%80-%EB%AA%A8%EB%A6%85%EB%8B%88%EB%8B%A4 일단 구글쪽 고객센터쪽에 나온 설명보고 파이어베이스와 플러터플로우에서 해당프로젝트를 제외한 나머지 프로젝트들을 모두 삭제해봤는데도 해결되지 않고 있는데 혹시 어떤문제인지 그리고 해결방법을 알수있을까요??
[!] Network resources X A cryptographic error occurred while checking "https://cocoapods.org/": Handshake error in client You may be experiencing a man-in-the-middle attack, your network may be compromised, or you may have malware installed on your computer. 플러터 설치중 flutter doctor 을 치고 이 오류를 만났는데 window defencer 도꺼보고 다양한 보안프로그램 도 꺼봣는데 안되는데 이 문제에대해 도움이 필요합니다 검색해도 관련 오류가 없더라고요