묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
jar 배포 시 frontend 페이지에 접속이 안되는 이슈
./gradlew buildFatJar 로 빌드한 후에jar를 실행해보니 frontend 페이지가 접속이 안되는 이슈가 있었습니다 (윈도우, 맥 환경 동일).다른 분들은 정상적으로 실행되는데 제 환경이 잘못되어서 그런지도 모르겠습니다. Routing.kt에 react 설정부분을 아래와 같이 변경하니 정상적으로 동작합니다. frontend 폴더는 ./resources 폴더로 이동시켰습니다. 어떤 문제때문에 발생한 이슈인지 강사님이나 고수님들이 조언 주시면 감사하겠습니다. 😄 [기존 코드] singlePageApplication { react("frontend") } [변경 코드] staticResources("/", "frontend") { default("index.html") preCompressed(CompressedFileType.GZIP) }
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
혹시 kotlinx-datetime 라이브러리를 사용하지 않으신 이유가 있으신가요?
java 의 datetime 라이브러리를 사용하게 됨으로써, exposed 에서나 kotlinx-serialization 을 통한 직렬화에서도 직접 custom serializer 를 만들어주거나, 별도의 라이브러리를 주입하여 처리해주는 부분이 늘어간 것 같아서 질문을 드리게되었습니다.kotlinx-datetime 라이브러리를 통해 datetime 을 핸들링하게 될 경우엔 kotlinx-serialization 을 통해 직렬화 및 역직렬화를 수행할때, 별도의 custom serializer 를 만들어주지 않아도 라이브러리에서 지원이 되어서요. (exposed 는 이번에 처음 사용해서 지원하는 타입들이 내장되어 있는지 조사해봐야할 것 같습니다.)java 의 datetime 라이브러리가 아무래도 아직 더 대중적으로 사용하는 라이브러리라서, 익숙해서 사용하신 것인지, 이유가 궁금합니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
BTS 만들 intent 사용에 오류
강의대로 intent 작성 후 alt+enter를 누르면 사진과 같이 밑에 새로운 함수가 생겨버립니다?어디가 잘못된 걸까요??import 부분도 강의 부분과 조금 다른듯 해서요
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
FCM 토큰 문의
안녕하세요 강의 관련 문의가 있습니다.3분 00초에서 기존 회원의 경우 토큰 값이 없어서DB에서 삭제 후 신규 가입을 하셨는데요회원정보 삭제 없이 DB에토큰 값만 Update 할 수 있는 방법은 없을까요 ?강의 잘 보고 있고 항상 감사합니다 :
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
첫번째 Ktor 서버 띄워보기 전에 강의 하나가 빠져있는것 같습니다.
프로젝트를 어떻게 구성해야하는지에 대한 설명이 누락되어있는 것 같습니다. kotlinx serialization 을 add 해야 한다던지 그런
-
미해결[중급편] 친절한 JETPACK 개론 <하> (Android Kotlin)
ListAdapter / DiffUtil 관련 강의 문의
섹션 2 에 해당하는 모든 강의가 화면이 안보이는데원래 그런건가요? 혹시 삭제된 걸까요?
-
미해결
웹 앱 로그인 유지 방법
안녕하세요. 웹앱 기반의 앱을 만들고 있는 초급 개발자입니다. js에 있는 특정 로그인 암호화 알고리즘을 전부 kotlin에서 재정의하려하니 너무 골이 아파져서 방향을 어떻게 잡아야 할지 우선 여쭤보고 가는게 좋겠다고 생각하여 질문 남기게 되었습니다.우선 제가 생각한 방법들을 이렇습니다. 로그인 기능만 네이티브앱에서 구현(암호화 알고리즘 kotlin으로 재정의)해당 js함수를 사용하는 웹을 컨트롤러에서 호출하고, 응답만을 가져와서 Android 클라이언트에 반환위 두 가지를 일단 시도중인데 2번 방식이 쉽지가 않네요. 애초에 가능한건지도 확실치가 않아 보입니다.이런 고민을 해보신 적이 있다면 부디 조언 부탁드리겠습니다.
-
미해결노래 들으며 실전 프로젝트로 안드로이드 최신 기술을 공부해 보자! - 이름 궁합 편
API 제공 사이트에서 test 할때 서버에러가 나는데요.
이제 더이상 사용할 수 없는 API인걸까요?해결방법이 있다면 알려주시면 감사하겠습니다.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
강사님 FCM 단계에서 전체적으로 앱 문제가 발생해서 혹시 원격으로 조치 해주실 수 있나요?
강사님 FCM 단계에서 전체적으로 앱 문제가 발생해서 혹시 원격으로 조치 해주실 수 있나요? 3주째 같은 강의 단계에서 멈춰서 진행이 안 되고 있어서... 피드백도 AI가 해주다보니 정확한 조치를 받기도 어려운 단계네요.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
토큰 정보 유저정보에 저장하기 강의 4분 12초 코드를 동일하게 입력했는데 적용이 잘 안되는 것 같아요.
위에 toString 부분이 정상적으로 활성화가 안 되는 것 같아요. 노란색 글씨로 변경되어야 하는 걸로 알고 있는데,앞서 스플래쉬 화면에서도 토큰정보 가지고 올 때도 동일하게 코드가 반응이 없네요.앱을 켜도 토큰 값이 로그캣에 뜨지않아요.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
토큰 받아와서 메세지 보내기 강의 2분 20초 로그캣 확인 하는 창이 다르고 토큰 값이 안떠요.
위와 같이 로그 캣 결과가 나오는데, 로그캣 창 버전이 달라서 안 뜨는건지 무엇인 문제인지 모르겠네요.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
FCM 강의, firebaseservice 클래스 내 오류코드 해결방안이 궁금합니다.
위 코드에서 하단 부분에 notify(id : 123, builder.build())부분이 계속해서 빨간줄로 되어 있는데 어떻게 해결해야하나요?
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
FCM 강의 중간부터 코드 오류가 발생했는지 앱에서 회원가입을 해도 파이어베이스 Authentication에는 회원등록이 해도 화면이 넘어가지 않고 데이터도 저장이 안 되네요.
회원가입창에서 회원가입을 한다.2. '회원가입' 버튼을 눌러도 해당화면에서 메인화면으로 넘어가지 않는다.파이어베이스 Authentication에는 회원등록은 되어 있으나, Realtime Database와 Storage에는 사진등록이 되지 않는다.회원등록 완료데이터베이스에 회원정보(닉네임, 성별, 지역 등)가 등록되어 있지 않다.스토리지에 사진도 등록되지 않아있다.현재 위와 같은 오류가 발생하네요. 어떤 부분을 확인해야할까요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
안드로이드 스튜디오 게시글 이미지 업로드 유무
게시글을 올릴때 이미지를 업로드 하지 않으면, 안드로이드 스튜디오가 꺼집니다. 혹시 이미지를 업로드 하지 않아도 게시글을 작성하려면 코드를 어떻게 수정해야하나요? package com.example.healthcareapplication.fragments import android.app.Activity.RESULT_OK import android.content.Intent import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import android.os.Bundle import android.provider.MediaStore import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.databinding.DataBindingUtil import androidx.navigation.fragment.findNavController import com.example.healthcareapplication.DATA.ContentData import com.example.healthcareapplication.DATA.ContentModel import com.example.healthcareapplication.R import com.example.healthcareapplication.databinding.FragmentCommunityWriteBinding import com.google.firebase.auth.FirebaseAuth import com.google.firebase.ktx.Firebase import com.google.firebase.storage.ktx.storage import java.io.ByteArrayOutputStream import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale class CommunityWriteFragment : Fragment() { private lateinit var binding: FragmentCommunityWriteBinding private lateinit var auth: FirebaseAuth override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_community_write, container, false) val view = binding.root auth = FirebaseAuth.getInstance() binding.writeBtn.setOnClickListener { val title = binding.title.text.toString() val content = binding.content.text.toString() fetchContent(title, content) findNavController().navigate(R.id.action_communityWriteFragment_to_communityFragment) } binding.ImageBtn.setOnClickListener { val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI) startActivityForResult(gallery, 100) } return view } private fun fetchContent(title:String, content:String){ val userId = auth.currentUser?.uid ?: return val currentDateTime = Calendar.getInstance().time val dateFormat = SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.KOREA).format(currentDateTime) val key = ContentData.boardRef.push().key.toString() ContentData.boardRef .child(key) .setValue(ContentModel(title, content, userId, dateFormat)) Toast.makeText(requireContext(), "게시글 업로드 성공!", Toast.LENGTH_SHORT).show() ImageUpload(key) } private fun ImageUpload(key:String){ val storage = Firebase.storage val storageRef = storage.reference val mountainsRef = storageRef.child(key + ".png") val imageView = binding.imageArea // Get the data from an ImageView as bytes imageView.isDrawingCacheEnabled = true imageView.buildDrawingCache() val bitmap = (imageView.drawable as BitmapDrawable).bitmap val baos = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos) val data = baos.toByteArray() var uploadTask = mountainsRef.putBytes(data) uploadTask.addOnFailureListener { // Handle unsuccessful uploads }.addOnSuccessListener { taskSnapshot -> // taskSnapshot.metadata contains file metadata such as size, content-type, etc. // ... } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(resultCode == RESULT_OK && requestCode == 100){ val selectedImageUri = data?.data selectedImageUri?.let { uri -> binding.imageArea.setImageURI(uri) val layoutParams = binding.imageArea.layoutParams layoutParams.width = 300 // 원하는 너비 설정 layoutParams.height = 300 // 원하는 높이 설정 binding.imageArea.layoutParams = layoutParams } } } }
-
미해결2시간으로 끝내는 코루틴
자식1, 2와 부모코루틴의 관계
본 강의를 모두 수강하였습니다! 코루틴에서 헷갈렸던 개념들을 알 수 있어서 좋았습니다!본 코루틴 강의에서 자식과 부모 관계의 에러가 발생했을 때 에러 핸들링 하는 경우는 자식이 하나만 존재했을 때의 예시밖에 없어서 직접 2개를 가지고 실험을 해보았습니다! 먼저, 자식1이 취소가 됐을 때에는 취소예외가 발생했기 때문에 부모로 전파되지 않고, 그러므로 다른 자식2도 영향을 받지 않는다 라고 이해를 하고 있습니다!하지만 자식1에서 취소가 아닌 예외가 발생했을 경우 부모로 전파되는 것으로 알고있고, 이 때 적절한 조치가 되지 않는다면 자식2까지 취소되는 것으로 알고있습니다!따라서 다음과 같이 CoroutineExceptionHandler를 적용해보았습니다.fun main() = runBlocking { val handler = CoroutineExceptionHandler { _, exception -> println("Caught exception: $exception") } val parentJob = CoroutineScope(Dispatchers.Default).launch(handler) { val job1 = launch { println("Job 1 is running") throw RuntimeException("Error in Job 1") } val job2 = launch { println("Job 2 is running") delay(1000) println("Job 2 is completed") } job1.join() job2.join() } parentJob.join() println("Parent job is completed") }Job 1 is runningCaught exception: java.lang.RuntimeException: Error in Job 1Parent job is completed결과는 자식1만 실행이되고, 거기서 Exception을 던졌는데, Job2는 취소되는것으로 보입니다..!질문 1 ) 다음과 같이 try catch 로 전환하면 자식2의 취소가 발생하지 않는데, CoroutineExceptionHandler로는 자식2의 취소를 막을수는 없는 것일까요?val job1 = launch { println("Job 1 is running") try { throw RuntimeException("Error in Job 1") } catch (e: RuntimeException) { println("RuntimeException") } }질문 2) 강의내용에서는 SupervisorJob() 을 사용하면 부모 코루틴으로 예외가 전파되지 않는다고 해주셨는데, 다음 결과에서는 부모코루틴에 해당되는 CoroutineExceptionHandler 가 실행되는 것으로 보입니다. 하지만, 질문1에서 걱정하는 자식2의 취소로 이어지지 않고 있습니다. 이는 부모코루틴으로 예외가 전파되는 상황일까요?? 만일 전파되는 상황이라면 왜 질문1과는 다르게 자식2의 취소로 이어지지 않는 것일까요?fun main() = runBlocking { val handler = CoroutineExceptionHandler { _, exception -> println("Caught exception: $exception") } val parentJob = CoroutineScope(Dispatchers.Default).launch(handler) { val job1 = launch(SupervisorJob()) { println("Job 1 is running") throw RuntimeException("Error in Job 1") } val job2 = launch { println("Job 2 is running") delay(1000) println("Job 2 is completed") } job1.join() job2.join() } parentJob.join() println("Parent job is completed") }Job 1 is runningJob 2 is runningCaught exception: java.lang.RuntimeException: Error in Job 1Job 2 is completedParent job is completed자바 -> 코틀린 강의부터 시작해서 코루틴 강의까지 너무 감사하게 잘 보고있습니다! 감사드립니다 🙂
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
10 issues were found when checking AAR metadata:
파이어베이스 북마크 만들기 하면서 나오는 에러입니다.1. Dependency 'androidx.credentials:credentials:1.2.0-rc01' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 2. Dependency 'androidx.credentials:credentials-play-services-auth:1.2.0-rc01' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 3. Dependency 'androidx.navigation:navigation-common:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 4. Dependency 'androidx.navigation:navigation-common-ktx:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 5. Dependency 'androidx.navigation:navigation-runtime:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 6. Dependency 'androidx.navigation:navigation-ui:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 7. Dependency 'androidx.navigation:navigation-runtime-ktx:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 8. Dependency 'androidx.navigation:navigation-ui-ktx:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 9. Dependency 'androidx.navigation:navigation-fragment-ktx:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 10. Dependency 'androidx.navigation:navigation-fragment:2.7.5' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 대체 어떤 부분을 봐야 할까요...
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
섹션 1 CardStackView의 Implement members 질문있습니다.
7:16Implement members를 하려고 하는데 어떻게 해야되나요? 여담으로 아직 섹션 1 끝내지도 않았는데 옛날 버전이라 그런지 진도 나가기가 너무 힘들어요... 강의 최신 버전으로 업데이트는 안되나요? 프로젝트 생성부터 Gradle 추가까지 지금 7분밖에 못 들었는데 두시간을 넘게 찾고있는거 같습니다.
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
소스코드 컴파일 오류
컴파일시 오류가 발생합니다.포트가 사용되고 있다고 하면서 웹서버 구동이 안되는데 포트를 바꿔봐도 오류가 발생합니다.깃허브에서 소스코드는 받았습니다.해결방법 좀 부탁드립니다. AI 답변이 달렸길래 추가 내용을 적습니다. 포트도 변경해봤고, 사용중인 포트가 없는것도 확인했습니다. 오류 코드는 다음과 같습니다.***************************APPLICATION FAILED TO START***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.Process finished with exit code 1
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
수업자료 다운로드 후 알집풀기에서 오류가 발생합니다.
윈도우 사용중이고, 위와 같이 오류가 납니다.파일이 없는 것 같아요.
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
@Component
안녕하세요 또 이렇게 질문을 드리네요공통 개발 - 인터셉터에서 AdminInterceptor은 @Component을 사용합니다. 제가 자료를 찾아봤는데 개념 이해가 어렵더라구요개발자가 직접 작성한 class를 Bean으로 등록하기 위한 어노테이션이라고 정의 되어 있던데 그럼 Bean은 또 뭔지 찾아봤어요자바 객체를 스프링에서는 Bean이라고 한다. 라고 정의 되었더라구요. 객체는 뭐 재료를 합쳐서 사용자가 사용할 수 있겠끔 만들어진 거가 객체인건 알고 있고 ....다시 정리하면 직접 작성한 class를 객체화 시키려는건가라고 좀 애매하게 이해했는데 이건 또 아닌거 같고.. 예제를 본다면 class InlineExamConsole{ @Autowired public void setExam(Exam exam) { this.exam = exam; }}이 클레스면 xml은<context:annotation-config/><bean id = "exam" class="entity.NewlecExam" /><bean id = "console" class="ui.InlineExamConsole"></bean>로 되어야 하고...IoC 컨테이너의 상황은exam: Exam<---- console:InlineExamCode처럼 플로우가 될꺼구...그런데 <context:annotation-config/><bean id = "exam" class="entity.NewlecExam" /><!-- <bean id = "console" class="ui.InlineExamConsole"> </bean>->를 해서 삭제.... bean을 삭제 하면 IoC 컨테이너의 상황은 아래처럼 될듯 한데 exam: Exam<---- console:InlineExamCodeconsole는 또 사용해야겠으니 아래처럼 @Componet를 등장시키고, @Componetclass InlineExamConsole{ @Autowired public void setExam(Exam exam) { this.exam = exam; }}IoC 컨테이너에서 console:InlineExamCode를 부활exam: Exam<---- console:InlineExamCode그런데 부활만 했지 그냥 좀비 상태가 되어 버린 console:InlineExamCode... console:InlineExamCode은 어떻게 찾는건지..그럼 xml를 변경<context:component-scan base-package = "spring.di.ui"/><context:annotation-config/><bean id = "exam" class="entity.NewlecExam" />위 테그로 spring.di.ui에 컴포넌트가 있으니 다른곳에 찾지 말고 위 테그에서 컴포넌트 찾고 그 컴포넌트를 Bean에 등록해서 객채화 해~~~ 라는거같은데 코드상으로는 이렇게 이해를 했어요하지만 강의에서는 context:component-scan base-package 를 못본거 같은데 ....(뭐 제가 바빠서 꼼꼼하게 못본것일 수도 있고 ) 저 컴포넌트의 이해를 좀 도와주시면 안될까요??컴포넌트 활용이나 @Component를 사용안하면 얼마나 불편해지길래 저 이노테이션을 사용한건지 ...(사실 저 이노테이션을 안써도 잘 활용할 수 있을거 같은데 ...)