안녕하세요 국비지원을 통해서 스프링이 아닌 jsp까지 배운 취업준비생입니다. 현재 강사님 강의로 스프링을 배우고 있는데요. 현재 스프링 로드맵 중 MVC1 강의를 반정도 들었습니다! 국비 지원을 받을 때 DB관련 연결을 jdbc와 mybatis까지 배웠었고 DB는 오라클과 mysql을 다뤄봤습니다. 작년에 sqld 자격증도 취득한 상태입니다. 혹시 저의 현상황에 MVC2와 DB강의를 같이 듣는게 무리가 되는지 여쭤보고 싶어서 DB강의 결재 전에 먼저 질문 글 올립니다!
공부하다가 의문이 생겼는데요, 낙관적 락 - 충돌 잦으면 락 획득 재시도 로직 때문에 성능 안좋음 비관적 락 - 충돌 잦으면 낙관적 락보다 성능좋음. 분산 락 - 스케일 아웃된 DB 환경에서도 사용 가능 - Redis 라이브러리마다 다른데 Lettuce는 스핀락으로 구현되서 재시도 많으면 불리 Redisson은 pub-sub 기반이라 재시도 많으면 유리 정확하진 않지만 이렇게 알고있습니다. 질문은 1. 잘못 알고 있나요? 2. 제가 공부한게 맞다면, 무조건 비관적 락, 낙관적 락 말고 분산락 + Redis(Lettuce/Redisson) 쓰는게 좋은건가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 보고 있습니다. 여러 아이콘을 저장해놨다가 사용하는 방법도 있는데 스프라이트 이미지를 사용하시는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 시간추출을 했는데 (MemberServiceTest 실행) 강사님과 다르게 이렇게 나옵니다 회원 목록 조회나.. 회원가입을 해도 따로 추가되는 시간측정값이 없어요
최초 로그인 시에 Authentication 객체를 저장하는 이유가 이해되지 않아 질문드립니다.. 로그인 요청을 하면 사용자 인증 정보를 통해 확인 후 응답 헤더에 토큰을 실어서 반환하고 Stateless 설정으로 인해 요청/응답이 끝남과 동시에 세션이 비워지는 걸로 이해했는데, 토큰만 응답헤더에 실어서 보내면 끝인데 세션에 Authentication 객체는 저장 안 해도 상관 없지 않 나 하는 의문이 들었습니다.. 설명해주시면 감사하겠습니다!
코드를 보면 타임리프가 만들어준 CSRF를 meta 태그로 전달하는데 이를 서버쪽에서 만들어주는 html 파일을 통해 브라우저에 전달하는데요. Vue 같은 프런트 엔드 프레임워크를 사용하면 Web Server를 별도로 띄워서 정적파일을 관리하는데 이런 상황에선 타임리프가 정적파일에 CSRF 토큰을 심어줄 수 없는 구조라고 생각이 됩니다. 이런 경우에는 CSRF 공격을 어떻게 막을 수 있나요? 제가 생각나는 건 이 두 가지네요.. Web Server에서 요청 프록시를 해주고(Reverse 프록시) Web Server에서 CSRF 토큰을 관리한다. CSRF 토큰이 필요한 곳은 정적파일을 WAS에서 관리한다. 좋은 방법이 있을까요?
안녕하세요. 선생님. 다름이 아니라 궁금한 사항이 있어서 질문합니다. 선생님처럼 팝업을 프리팹화 하여 로드하고 있습니다. 근데 예를들어 StagePopUp 이라는 팝업내부에 RewardItem 이라는 오브젝트를 가지고있는 스크롤뷰가 있을때 StagePopUp을 불러오면서 Setting해줄때 아래 오브젝트들도 새로 만들어 주는것이 나은가요? 아니면 그냥 StagePopUp 내부에 미리 넣어두는게 나을까요? 스크롤뷰가 가지는 RewardItem의 최대개수는 정해져 있습니다. 3-4개 정도면 그냥 프리팹 RewardItem을 따로 불러오지 않고 StagePopUp에 넣어둘생각인데 만약 한 50개 정도 된다면 어떤 방식이 더 효율적일까요?
안녕하세요 Workmanager챕터의 workmanager+coroutine 부분을 듣다가 의문점이 생겨서 여쭤봅니다. WorkManager와 Coroutine을 결합했을 때로도 순서가 조절이 가능한데 workmanager를 사용하여 순서를 조절하는 이유가 있나요? 단순히 각자의 편의 혹은 취향대로 사용하는 것일까요 아니면 다른 부분이 또 있는 것인가요?
안녕하세요 "SSH+Docker가 설치되어 있는 VM(컨테이너) 사용하기", "Windows환경에서 SSH+Docker 컨테이너 기동 시 발생하는 오류 해결" 강의에서 안되는 부분이있어 문의 드립니다. OS 는 windows 에서 진행하였습니다. 강의 내용을 따라하다 DInd 방식으로 진행하면서 SSH접속 후 docker service 여부를 확인 해보니 docker service 가 기동 되지 않았는데, 이 경우 DooD 방식으로 처리하라고 하여 DooD 방식으로 진행했는데 container가 올라간 후 SSH 접속하려 하니 아래와 같은 오류가 발생하며 접속이 안되고 있습니다. 오류내용 : kex_exchange_identification: Connection closed by remote host Dind 방식으로 한 경우 SSH 접속까지는 되고 docker serivce가 기동되지 않으며 DooD방식으로 한 경우 SSH 접속이 안되고 있습니다. 아래는 진행시 입력한 명령어 입니다. - Dind(Docker in Docker) 방식으로 SSH 서버 기동시 docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr/sbin/init - DooD(Docker Out Of Docker) 방식으로 SSH 서버 기동시 docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init 내용 확인 부탁드립니다.
안녕하세요, GROUP BY 함수 관련 질문입니다. GROUP BY SupplierID GROUP BY SupplierID 를 했을 때 SupplierID는 자동으로 중복이 제거가 된 뒤 평균가격이 반환되는 건가요? GROUP BY SupplierID, CategoryID 는 무슨 뜻인지 모르겠어요 SupplierID별 평균가격과 CategoryID별 평균 가격 이렇게 2개의 결과가 나와야 하는 건가요?
> Task :app:processDebugMainManifest FAILED package="com.zzz.fooddeliveryapp" found in source AndroidManifest.xml: C:\Users\user\fooddeliveryapp\front\android\app\src\main\AndroidManifest.xml. Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated. Please instead set the namespace (or testNamespace) in the module's build.gradle file, as described here: https://developer.android.com/studio/build/configure-app-module#set-namespace This migration can be done automatically using the AGP Upgrade Assistant, please refer to https://developer.android.com/studio/build/agp-upgrade-assistant for more information. error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup. Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081 C:\Users\user\fooddeliveryapp\front\android\app\src\debug\AndroidManifest.xml:30:9-36:20 Error: android:exported needs to be explicitly specified for element <receiver#com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. * What went wrong: Execution failed for task ':app:processDebugMainManifest'. > Manifest merger failed : android:exported needs to be explicitly specified for element <receiver#com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. 똑같이 코드를 붙여주었는데 어디서 잘못된건지 빌드 에러가 납니다... Task :app:processDebugMainManifest FAILED 여기서 에러가 나서 AndroidManifest.xml 코드를 아무리 보아도 찾을 수가 없네요 어디서 잘못 작성한 걸까요?? <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zzz.fooddeliveryapp"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:usesCleartextTraffic="true" android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="false" android:theme="@style/AppTheme"> <meta-data android:name="com.naver.maps.map.CLIENT_ID" android:value="9rrwk2d5lj" /> <meta-data android:name="com.dieam.reactnativepushnotification.notification_foreground" android:value="true"/> <meta-data android:name="com.dieam.reactnativepushnotification.notification_color" android:resource="@color/white"/> <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions" /> <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" /> <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> </intent-filter> </receiver> <service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <queries> <package android:name="com.skt.tmap.ku" /> </queries> </manifest>
2:30초 쯤에 관련된 질문입니다. 많은 질문들과 답변을 본 이후에도 확신이 가지 않는 부분들이 있어 질문드립니다. Q1) 's' = 스페이스바 최초 A's'3's'3's'\n를 입력하게 되면 scanf의 경우 개행문자 즉, 공백을 만나는 순간까지만 변수에 저장하는 것으로 알고 있습니다.(이것 또한 맞는지 잘모르겠네요.) 그렇기 때문에 버퍼에 |A| |3| |3| |\n|가 입력되지만 마지막 3 이후에 's'에 의해 마지막 \n는 버려지고 마지막| |까지만 변수에 저장되는 것이 맞나요?? Q2) Q1이 맞다면 처음 루프가 돌고 현재 버퍼에 | |가 남아 있는 상태에서 두번째 입력 B's'1's'2's'를 받게 되면 버퍼에 | |B| |1| |2| |가 버퍼에 남게 되는 것이 맞나요?? Q3) Q2)가 맞다면 함수로 진입했을 때 cr에 해당하는 문자는 's' 즉, 공백이 되고 그 다음 변수 자리에 또 문자가 들어오기 때문에 새롭게 초기화 되지 않고 기존의 3, 3을 입력하게 되는게 맞는지, 이전의 's' 공백이 해결되고 다시 루프로 진입하여 그 전에 입력된 B 1 2를 처리하는 것인지 궁금합니다. Q4) 추가로 scanf("%c%d%d")와 scanf("%c %d %d")의 차이도 궁금합니다. 또 버퍼에 문자들 사이사이에 's' 즉, 공백의 경우 어떻게 처리되는 건지 궁금합니다. 아직 초보자라 질문의 의도가 정확히 전달되지 않을 수 있을 것 같습니다 이해 안가시는 부분은 다시 한번 알려주시면 감사하겠습니다.