묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
에러가 나서 진행이 안됩니다 ㅠㅠ
안녕하세요? Flutter 강의 잘 듣고 있습니다.프로그래밍을 접한지 얼마 안된 사람인데요...보고 따라하는 중에 한 곳에서 정체되어 더 이상 진행이 안 됩니다.고민하다가 쪽지를 드립니다.firebase google 로그인 연동하는 단계에서 오류가 났습니다.일단 실행하면 LoginPage가 에뮬레이터에 뜨고 logcat에는2019-03-02 22:04:54.161 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.164 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.199 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.200 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.209 5054-5082/com.blome.binstagramflutter E/FA: App is missing ACCESS_NETWORK_STATE permission2019-03-02 22:04:54.210 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.214 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementReceiver not registered/enabled2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementService not registered/enabled2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: Uploading is not possible. App measurement disabled2019-03-02 22:04:54.226 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.230 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.250 5054-5082/com.blome.binstagramflutter E/FA: Task exception on worker thread: java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />: com.google.android.gms.measurement.internal.zzfx.zzs(Unknown Source:593)이런 에러 메시지가 뜨네요.구글로그인 버튼을 누르면 앱이 종료되고2019-03-02 22:09:24.125 5054-5054/com.blome.binstagramflutter E/MethodChannel#plugins.flutter.io/google_sign_in: Failed to handle method calljava.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)at com.google.android.gms.auth.api.signin.GoogleSignInClient.zze(Unknown Source:9)at com.google.android.gms.auth.api.signin.GoogleSignInClient.getSignInIntent(Unknown Source:18)at io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate.signIn(GoogleSignInPlugin.java:291)at io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(GoogleSignInPlugin.java:77)at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)at android.os.MessageQueue.nativePollOnce(Native Method)at android.os.MessageQueue.next(MessageQueue.java:326)at android.os.Looper.loop(Looper.java:160)at android.app.ActivityThread.main(ActivityThread.java:6669)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)2019-03-02 22:09:24.149 5054-5240/com.blome.binstagramflutter E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandlerProcess: com.blome.binstagramflutter, PID: 5054java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)at com.google.android.gms.common.internal.GoogleApiAvailabilityCache.getClientAvailability(Unknown Source:23)at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.connect(Unknown Source:216)at com.google.android.gms.common.api.internal.GoogleApiManager.zab(Unknown Source:47)at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(Unknown Source:173)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:193)at android.os.HandlerThread.run(HandlerThread.java:65)--------- beginning of system2019-03-02 22:09:24.160 5054-5072/com.blome.binstagramflutter E/flutter: [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:NoSuchMethodError: The getter 'authentication' was called on null.Receiver: nullTried calling: authentication0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)#1 LoginPage._handleSignIn (package:binstagram_flutter/login_page.dart:52:62)<asynchronous suspension>#2 LoginPage.build.<anonymous closure> (package:binstagram_flutter/login_page.dart:26:17)#3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)#4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)#6 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)#7 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)#8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)#9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)#10 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)#11 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)#12 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)#13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)#14 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)#15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)#16 _invoke1 (dart:ui/hooks.dart:168:13)#17 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)이렇게 뜹니다..--------------------------------------------- -----------------------------------------------------apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"apply plugin: 'com.google.gms.google-services'android {compileSdkVersion 28sourceSets { main.java.srcDirs += 'src/main/kotlin'}lintOptions { disable 'InvalidPackage'}defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.blome.binstagramflutter" minSdkVersion 21 targetSdkVersion 28 multiDexEnabled true versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug }}}flutter {source '../..'}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'implementation 'com.google.firebase:firebase-core:16.0.7'}--------------------------------------------- --------------------------------------------------buildscript {ext.kotlin_version = '1.3.21'repositories {google()jcenter()}dependencies { classpath 'com.android.tools.build:gradle:3.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.2.0'}}allprojects {repositories {google()jcenter()}}rootProject.buildDir = '../build'subprojects {project.buildDir = "${rootProject.buildDir}/${project.name}"}subprojects {project.evaluationDependsOn(':app')}task clean(type: Delete) {delete rootProject.buildDir}----------------------------------------- ----------------------------------------------org.gradle.jvmargs=-Xmx1536Mandroid.useAndroidX=trueandroid.enableJetifier=true----------------------------------------------- < 매니페스트 > ---------------------------------------------------<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.blome.binstagramflutter"><!-- The INTERNET permission is required for development. Specifically, flutter needs it to communicate with the running application to allow setting breakpoints, to provide hot reload, etc.--><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- io.flutter.app.FlutterApplication is an android.app.Application that calls FlutterMain.startInitialization(this); in its onCreate method. In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --><application android:name="io.flutter.app.FlutterApplication" android:label="binstagram_flutter" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- This keeps the window background of the activity showing until Flutter renders its first frame. It can be removed if there is no splash screen (such as the default splash screen defined in @style/LaunchTheme). --> <meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity></application>뭐가 잘못된걸까요?
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
예제로 보여주신 컨트롤드 컴포넌트에서 input이 여러개 존재할경우에는..
value라는 props와 input이라는 이벤트가 여러개의 input요소를 가지고 있을 경우에는어떻게 구분을 할 수 있을까요? ㅜㅜ
-
미해결블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편
MyContract.sol compile 에러
위 질문과 같은 내용이지만 MyContract.sol 이 compile 되지 않습니다.pragma ^0.4.24;위 부분과 function 에 parameter 로 받는 string 에 대해빨간 밑줄이 그어지며 에러 내용으로는Source file requires different compiler version (current compiler is 0.5.0+commit.1d4f565a.Emscripten.clang - note that nightly builds are considered to be strictly less than the released versionpragma solidity ^0.4.24;이 나오며 function 의 parameter 에러내용은Data location must be "memory" for parameter in function, but none was given.이 나옵니다.
-
미해결홍정모의 따라하며 배우는 C++
숙제 질문입니다
안녕하세요 교수님 오랜만에 질문글 올리네요.강의가 점점 어려워져서 내주신 숙제를 매번 많은 생각을 하게 해서 정말 좋습니다.이번에 내주신 숙제 중 구구단 만들기는 했는데 1~10까지 더하는것이 조금 쉬운 거 같아서 조금 변형했습니다. 숫자 입력 두개를 받고 두 숫자 사이의 값들을 더하게 하는건데요. 제가 짠 코드가 돌아가긴 하는데 영 마음에 안들어서 뭔가 조언을 얻고 싶습니다.아래는 제가 짠 코드 입니다.include using namespace std;int main(){ cout << "Enter TWO numbers and the numbers between them will be added." << endl;tryAgain: cout << "The second input must be greater than the first one" << endl; int first, second; cin >> first; cin >> second; cout << "Your inputs are : " << first << " " << second << endl; if (first >= second) { goto tryAgain; } for (int sum = 0; first <= second; ++first) { sum = sum + first; if (first == second) { cout << sum << endl; } // 이부분이 깔끔하지 못한 것 같아요. } return 0;}
-
미해결스프링 프레임워크 핵심 기술
예제 코드같은거요
깃헙이나 이런데 올려도 괜찮은건가요 ?저작권 뭐 이런거 걸릴까봐서용...아 그리고 얼마전 부트강의도 거의 다 들었는데얼마전 컴터 밀면서 예제들까지 같이 다 밀어버렸어요..그 예제들을 따로 구할순 없는건가요.다시 부트 인강을 처음부터 듣자니 저 JPA도 신청해놔서 빨리 듣고 프로젝트 하나하고 싶거던요 .
-
미해결[유니티 3D] FPS 서바이벌 디펜스
중간에 앉기 기능이 있는데 컨트롤키를 누르고 있을때만 앉아 있을수 없나요?
(사진)
-
미해결쉽고 자연스럽게 배워보는 Javascript 입문 - 코드스쿼드 마스터즈 코스 레벨1
var str 을 정의할때 계속해서 += 로 추가하는 특별한 이유가 있나요?
안녕하세요 선생님 var str 을 정의할 때 var str = ""; str += n; str += " x "; str += i; str += " = " str += results[i]; 이렇게 계속해서 str 에 항목(?)을 추가해 나가잖아요. 그런데 그냥 이걸 처음부터 var str = n + " x " + i + " = " + results[i]; 이렇게 쓰면 안되는건가요? 출력되는 결과물은 똑같고, str 의 데이터타입도 string 으로 동일한데 전자처럼 코드를 작성하시는 특별한 이유가 있는지 궁금합니다. (구구단은 간단한 코드라 그 중요성을 못느끼지만) 혹시 더 복잡한 코드에서는 전자처럼 작성하는 것이 유지보수라던지 가독성 면에서 더 편리한게 있는건가요?
-
미해결유니티 게임 개발 (Unity 2D) - 시작부터 배포까지
소리가 안들리는 강의가 몇 개 있습니다
Vector3Scroll ViewInput Field백그라운드 스크롤링이 네 가지 강의가 파이어폭스와 인터넷 익스플로러 모두 안들립니다. 답변이 안달린지 꽤 된거같은데 어디 문의해야할지도 모르겠고 곤란하네요.
-
미해결Illustrator CC - 일러스트레이터 입문부터 실전까지 한번에 마스터하기
폰트 적용 및 다운로드
BABAS 폰트 적용을 몇 강에서 가르쳐주셨는지 궁금합니다.
-
미해결스프링 프레임워크 핵심 기술
Application.xml에서 Application Context not configured for this file 문제
안녕하세요~ 스프링을 처음 시작하는 학생입니다.수업 너무 잘 듣고 있습니다 ^^다름 아니라, 복습하다가 xml 설정파일로 bean을 등록하는데문득, application.xml 파일 위에 "Application Context not configured for this file"라는 메시지를그냥 무시하고 해도 되는건지가 궁금했습니다!
-
해결됨홍정모의 따라하며 배우는 C++
저는 true라고 입력해도 false로 나오네요..
include using namespace std;int main() {bool b;cin >> b; cout << boolalpha;cout << "your input : " << b << endl;}여기 코딩에 문제가 있는건가요 ???
-
미해결스프링 프레임워크 핵심 기술
질문드립니다
https://github.com/ShitaoMiu/springCoreDataBindVer2 여기다가 예제 인강 보면서 타이핑 한거 같이 올렸는데요 . 에러가 자꾸 나서요 . 여러번 봐도 자꾸 null 이 떨어집니다 test 파일에서. 근데 이거 공개로 github에 올려도 아무문제 없나요 ??? 방금 올렸다가 혹시 몰라서 바로 다시 지우긴 했습니다 .문제 없으면 다시 깃헙에 올릴께요
-
미해결Javascript ES6+ 제대로 알아보기 - 초급
1분 22초쯤에 a가 22라고 하셨는데
그냥 잘못 말하신거죠? 2인것같은데
-
미해결유니티 게임 개발 (Unity 2D) - 시작부터 배포까지
게임뷰화면의 질문입니다.
게임뷰의 화상도를 바꾸는 부분에서 1080x1920으로 바꾸었을때 강사님의 화면처럼 파란색영역이 세로로 긴 스마트폰 처럼 나오지않고 마치 부분이 확대된것처럼 파란색영역이 옆으로 더 넓으며 회색영역은 매우 적게 나옵니다. 다른 화상도로 바꾸어도 전체가 보이지않습니다. 유니티는 컴퓨터의 문제로 5버전을 사용하고 있습니다. 스케일은 가장 작은 상태입니다. 그렇다고 아쳐가 그렇게 크게 보이는 것도 아닙니다. 혹시 이유를 아신다면 가르쳐주시면 감사하겠습니다.
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
finally 구간 질문있어요
예를 들어 OutputStream을 썻다 치면 마지막에 스트림을 닫던데조건이 if(outputStream != null) outputStream.close();outputStream이 널이 아니면 닫아라 이뜻인가요?null 이어야지 닫는거 아닌가요 헷갈리네여
-
미해결스프링 웹 MVC
안녕하세요? 질문 하나 드릴게요.
매번 좋은 강의 감사합니다. 완벽히 저의 것으로 소화하기 위해 틈날 때마다 열심히 보고 있습니다. 부끄럽지만 현업에 있으면서도 잘 이해하지 못하고 넘어간 것이 많았구나 하는 생각이 듭니다.다름이 아니라 간혹 설명 중에 웹과 관련된 설정 이라는 설명을 하실 때가 있는데 웹과 관련된다라는 게 어떤 의미인지 조금 더 자세한 설명 부탁드립니다.^^감사합니다.
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
입력시 문제
어떤 문장을 입력하고 수정하기 위해 앞글자로 돌아가 보면 그 글자가 검은색으로 감싸져 있어서 다른 글자를 입력하면 그 뒤에 있는 문자가 삭제되는데 이럴땐 어떻게 해야하나요?
-
미해결스프링 기반 REST API 개발
예상치못한 예외가 throw 되었을 경우의 Response 처리에 관련하여 질문드립니다
실제로 컨트롤러에서 처리를 하다보면, 예상치 못한 에러가 발생하는 경우가 있는 것 같습니다. 가령 강의의 예제에서는 JSON serialization, deserialization 과정에서 checked exception이 발생할수 있으며, Repository객체를 사용하는 경우에는 DataAccessException 런타임 예외가 발생할 수 있을 것 같습니다. 이러한 경우들에도 적절한 응답을 돌려주고 싶은데, 그 때의 베스트 프렉티스에 대해서 여쭤보고자 합니다.결국 @ExeptionHandler 라는 어노테이션이 붙은 메소드를 최소한 글로벌하게 하나는 만들어서 인터널 서버 에러(500)에 매핑시키게 되는 꼭 필요한 부분이라고 생각하는데, 맞는 생각일까요? 잘못하면 에러 로그를 view로 보여주게 될 것 같아서 그것을 방지하고자 함입니다.@ExceptionHandlerpublic void globalExecptionHandler(Exception e) {return ResponseEntity.internalServerError();}컨트롤러 내부에서도 결국 적어도 Unchecked Runtime Exception을 잡기 위해서 @ExceptionHandler를 정의하면 컨트롤러별로 예상치 못한 예외를 적절히 핸들링해 필요한 처리를 할 수 있게 되기 때문에 정의하는 것이 좋을것 같다고 생각하는데요, 이렇게 정의 했을 때 제가 고민되는 부분이 있습니다. 예제에서 나오는 것처럼 로직으로 인해서 발생하는 에러는 ResponseEntity를 리턴하는 형태로 처리하고, 그 외의 에러는 @ExceptionHandler로 잡게되면, 에러를 2가지 서로 다른 방법으로 처리함으로서 코드의 가독성을 해치는게 아닐까라고 생각해 보았습니다.그렇다고 ResponseEntity로 통일하고자하면, 컨트롤러 메소드 각각에서 반드시 return으로 예외를 처리해야 하기 때문에, 컨트롤러 메소드 마다 try catch로 감싸주고 catch(Exception e) 같은 블록에서 반복적으로 internalServerError를 리턴해야만 하는 문제가 있습니다.그리고 @ExceptionHandler로 통일하고자하면, throw 문을 goto처럼 사용하는 것이되어, 코드의 가독성을 해칩니다. 하지만 동시에 컨트롤러 메소드 내부의 if else를 줄여 줘서 가독성을 증가시키고, 컨트롤러 / 기타 빈 객체의 책임을 나누는 효과도 있습니다. 가령 service레벨이나 레포지토리 레벨에서 여러 데이터를 종합하다보니(MSA설계에서 자주 있는것 같습니다) 상황에 따라 200대가 아닌 리스폰스를 돌려줘야 할 필요가 있는 경우, 이것을 controller에서 호출한 service.method()의 리턴값으로 돌려줘서 컨트롤러에서 if else로 처리하게 되겠죠. 하지만 적절한 예외를 정의하여 그것을 컨트롤러가 아닌 webmvc빈에서 throw를 하여 ExceptionHandler가 처리하도록 하면, 컨트롤러 메소드 코드를 간결하게 할 수 있을 것 같습니다. 하지만 역시 throw 를 goto처럼 써서 가독성을 떨어뜨리는게 아닐까 하는 부담감이 있기도 하네요.이런 것들을 복합적으로 고민해서 어떻게 1) 예제처럼 간단하게 체크해서 발생시킬수 있는 에러 2) 복잡한 상황에서 컨트롤러 객체가 아닌 곳에서 확인할 수 있는 에러 3) 예상치못한 런타임 에러(Repository connection pool error, httpclient socket timeout ...)를 깔끔하게 처리하여 클라이언트에 돌려줄 수 있을지 고민입니다. 어떻게 하는게 베스트일까요?
-
미해결ATOM Editor 소개 및 사용법
GIT HUB
우선 정말 감사들여요!! 생활코딩님 덕분에 얼마전부터 코딩공부를 시작할 수 있게되었어요! 잘 배우고 있습니다.YOUTUBE에서 WEB1강의를 들의면서 ATOM이랑 GITHUB를 깔았는데요. ATOM을 보니까 GITHUB랑 연동할 수 있는 것 같더라고요. 그래서 할려고 해보았지만 잘 모르겠어서요..ㅜ GITHUB아이디로 ATOM에서 로그인 할 수는 없는건가요..?
-
미해결쉽고 자연스럽게 배워보는 Javascript 입문 - 코드스쿼드 마스터즈 코스 레벨1
커밋 메세지 관련 질문
안녕하세요. 커밋 메세지 관련해서 질문드려요. 구구단1,2단 프로그램 구현 완료 후 커밋 메세지 작성하여 push하여 깃헙에 업로드까지 했습니다. 이때 커밋 메세지를 아래와 비슷하게 했습니다. 커밋 메세지: 구구단 1, 2단 프로그램 (콘솔버전) 코드스쿼드 레벨1 실습 콘솔에만 결과 출력 나중에 이 구구단 프로그램 코드를 조금 수정하여 다시 커밋 할때는 일반적으로 수정한 코드 부분에 관련해서만 커밋메세지를 작성하나요? 아니면 최초 커밋메세지처럼 전반적인 프로그램에 대해서 작성한 후 수정된 부분도 포함해서 작성하나요? 코드수정 후 커밋메세지 작성법에 대해서 궁금하여 문의드렸습니다. 강의 감사히 잘 듣고 있습니다:)