묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
노란 바탕 글씨는 왜 나오나요?
노란 바탕 글씨가 나오네요 ???
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
직접 만든 파일 실행하기
=================현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================간단한 질문입니다. 직접 설계(코드 작성)를 하고 그 파일을 실행하기 위해서는 어떻게 해야할까요?제가 vi practice.v로 설계를 하고 실행시키기위해 build파일을 복사하여 vi run에 붙여 넣은 뒤 xvlog ./practice.vxelab practice -debug wave -s practicexsim practice -R # do not check waveform위와 같이 수정을 하였습니다.그리고 ./run을 하니ERROR: [XSIM 43-3225] Cannot find design unit work.practice in library work located at xsim.dir/work.ERROR: Please check the snapshot name which is created during 'xelab',the current snapshot name "xsim.dir/practice/xsimk" does not exist이러한 매세지가 떴습니다. 무엇이 문제일까요?..
-
미해결
파이어베이스 관련 질문입니다.
게시판 기능을 만들고 있는데 파이어베이스에 저장된 데이터를 불러와서 작성자 A는 자신의 글만 삭제가 가능하고 다른 작성자의 글은 삭제를 못하게 하고싶은데 코드를 계속 수정하며 해보았지만 A도 A글을 삭제 못하고B도 A의 글을 삭제할 수 있는 현상이 계속 일어나고 있어서 어디가 문제인건지 궁금합니다 코드는 이렇습니다.private fun deleteContent(contentModel: ContentModel) { val contentId = contentModel.id // 게시글의 고유한 ID // 삭제 권한 확인 없이 직접 삭제 database.child(contentId).removeValue() .addOnSuccessListener { // 삭제가 성공한 경우 val intent = Intent(this@ContentDetailActivity, MainActivity::class.java) intent.putExtra("fragmentToLoad", "contentListFragment") startActivity(intent) finish() // ContentDetailActivity 종료 } .addOnFailureListener { // 삭제가 실패한 경우 // 에러 처리를 수행하거나 사용자에게 알림 Toast.makeText(this, "삭제 실패", Toast.LENGTH_SHORT).show() }
-
해결됨넓고 얕게 외워서 컴공 전공자 되기
선생님 안녕하세요
이번에 컴공과로 전과하게 되어서 전과하기전에 배우고 갈려고 강의 듣고있습니다 이 강의듣고 c언어까지 들으면 컴공가서도 어차피 배우겠지만 적응하는데 큰 문제는 없을까요 아직 머릿속에 정리는 안되네요 ㅜㅜ
-
미해결카프카 완벽 가이드 - ksqlDB
[수정요청] Mview CSAS 강좌중에 Insert문장 수정 요청
안녕하세요. 강좌를 수강 하다가, 강의 내용중 Mview CSAS 에서, customer_activeity_stream insert 문장이 강의 내용과 다르고, 칼럼이 달라서 에러 발생 합니다. activety_id 없습니다. 감사 합니다. INSERT INTO customer_activity_stream (customer_id, activity_id, activity_type, activity_point) VALUES (2, 10,'mobile_open',0.65); INSERT INTO customer_activity_stream (customer_id, activity_id, activity_type, activity_point) VALUES (4, 3, 'deposit', 0.35);
-
미해결스프링 핵심 원리 - 기본편
AutoAppConfig 필터링 문제
안녕하세요! 컴포넌트 스캔의 필터와 관련하여 질문이 있어 올립니다!기존에 있던 AppConfig.java로 등록한 Bean을 제외하려고 excludeFilters를 사용했는데, CoreApplication을 실행하면 Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [파일경로/core/out/production/classes/hello/core/member/MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]이런 오류가 뜹니다. 코드는 다음과 같습니다.AppConfig.javapackage hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public DiscountPolicy discountPolicy() { //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } } AutoAppConfig.javapackage hello.core; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import static org.springframework.context.annotation.ComponentScan.*; @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { }위의 오류는 memberRepository뿐만 아니라 rateDiscountPolicy에서도 나옵니다. @Component와 @Autowired 어노테이션은 잘 설정한것 같은데 뭐가 문제일까요?
-
미해결핸즈온 리액트 네이티브
8.17 프로필 사진 캐싱 관련 질문
안녕하세요,8.17 코드를 그대로 따라갔는데 마지막에 앱을 새로고침하면 이미지가 아예 안 뜹니다. (첨부 이미지 참고) 에러 메세지도 따로 없고, 그냥 이미지가 뜨지 않습니다.source.uri에는 firebase 스토리지에 올린 기본 프로필 이미지 링크가 들어있는 것을 확인했습니다. 코드는 github 까지 비교해가며 봤는데 동일합니다. 혹시 몰라 FastImage.js 및 ProfileScreen.js 코드 전문 첨부합니다. 무엇이 문제일까요..?ㅠ 그동안 라이브러리가 업데이트 된걸까요? FastImage.jsimport { Image } from 'react-native'; import PropTypes from 'prop-types'; import { useEffect, useState } from 'react'; import * as Crypto from 'expo-crypto'; import * as FileSystem from 'expo-file-system'; const FastImage = ({ source, ...props }) => { const [uri, setUri] = useState(source.uri); useEffect(() => { (async () => { try { console.log('source.uri', source.uri); const hashed = await Crypto.digestStringAsync( Crypto.CryptoDigestAlgorithm.SHA256, source.uri ); // Hash the URL const fileSystemUri = `${FileSystem.cacheDirectory}${hashed}`; // Create a file path const metadata = await FileSystem.getInfoAsync(fileSystemUri); // Check if the file exists if (!metadata.exists) { await FileSystem.downloadAsync(source.uri, fileSystemUri); // Download the file } setUri(fileSystemUri); // Set the file path } catch (error) { setUri(source.uri); } })(); }, [source.uri]); return <Image source={{ uri }} {...props} />; }; FastImage.propTypes = { source: PropTypes.object.isRequired, }; export default FastImage; ProfileScreen.jsimport { StyleSheet, Text, View, Pressable } from 'react-native'; import PropTypes from 'prop-types'; import { useUserState } from '../context/UserContext'; import { signOut } from '../api/auth'; import { GRAY, WHITE } from '../colors'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { MaterialIcons } from '@expo/vector-icons'; import { MaterialCommunityIcons } from '@expo/vector-icons'; import FastImage from '../components/FastImage'; const ProfileScreen = () => { const [user, setUser] = useUserState(); // [user, setUser] const { top } = useSafeAreaInsets(); return ( <View style={[styles.container, { paddingTop: top }]}> <View style={styles.settingButton}> <Pressable onPress={async () => { await signOut(); setUser({}); }} hitSlop={10} > <MaterialIcons name="logout" size={24} color={GRAY.DEFAULT} /> </Pressable> </View> <View style={styles.profile}> <View style={[ styles.photo, user.photoURL || { backgroundColor: GRAY.DEFAULT }, ]} > <FastImage source={{ uri: user.photoURL }} style={styles.photo} /> <Pressable style={styles.editButton} onPress={() => {}}> <MaterialCommunityIcons name="pencil" size={20} color={WHITE} /> </Pressable> </View> <Text style={styles.nickname}>{user.displayName || '닉네임'}</Text> <Text style={styles.email}>{user.email}</Text> </View> <View style={styles.listContainer}> <Text style={styles.listText}>설정 리스트?</Text> </View> </View> ); }; ProfileScreen.propTypes = {}; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: WHITE, }, settingButton: { alignItems: 'flex-end', paddingHorizontal: 20, }, profile: { justifyContent: 'center', alignItems: 'center', borderBottomWidth: 0.5, borderBottomColor: GRAY.DEFAULT, paddingVertical: 20, }, photo: { width: 100, height: 100, borderRadius: 50, }, editButton: { position: 'absolute', bottom: 0, right: 0, width: 30, height: 30, borderRadius: 15, backgroundColor: GRAY.DARK, justifyContent: 'center', alignItems: 'center', }, nickname: { fontSize: 24, fontWeight: '600', marginTop: 20, }, email: { fontSize: 15, // fontWeight: '600', color: GRAY.DARK, marginTop: 5, }, listContainer: { flex: 1, alignItems: 'center', }, listText: { fontSize: 20, fontWeight: '600', marginVertical: 20, marginHorizontal: 20, }, }); export default ProfileScreen;
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
컬럼 애너테이션 update property
update 프로퍼티를 false로 작성했는데도 500에러가 발생하지 않네요response에는 변경된 값이 나옵니다.http://localhost:3000/users/:id{ "id": 2, "title": "null0", "createdAt": "2024-03-24T23:59:11.774Z", "updatedAt": "2024-03-24T23:59:11.774Z", "version": 1, "additionalId": "a320e186-a44a-4dda-9af3-9cd52af4155c" }그런데 DB에 가보면 또 값은 변경되어 있지 않더라구요 2번 user의 title 값은 null이 그대로 찍혀있습니다.왜 500에러가 발생하지 않는건가요?
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
기간 연장이 가능할까요?
기간이 무제한인 다른 강의와 달리 기간이 1년인 강의는 처음이라 1편도 보지 못했는데 어느 순간 기간이 다가왔네요.이제부터 열심히 볼 테니 딱 두달만 연장해주세요..TT부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
AllBeanTest 결과가 안나옵니다???
테스트 결과 map과 list가 다 비어서 나오네요?AutoAppConfig.class를 AppConfig.class로 바꾸어도 결과가 똑같습니다.
-
미해결Next + React Query로 SNS 서비스 만들기
넥스트에서 로그인 분기처리 질문
넥스트에서 로그인시 해당유저의 role에 따라 분기를 나눌려면 어떠한 방식을 사용해야할까요?로그인된 유저의 role은 student, teacher, admin 세가지의 값이 있으며유저는 유저페이지만 선생은 선생페이지만 어드민은 어드민페이지만 따로 보여주는 방식이 있나요?폴더구조는 이러합니다.(afterLogin)- (admin)- (teacher)- (student) (beforeLogin)- ...
-
해결됨그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
자바 ArrayList와 LinkedList의 장단점
저번 강의에서 배열과 연결리스트의 장단첨 차이에는배열은 참조 속도가 상대적으로 빠르지만 데이터 삽입/삭제가 상대적으로 느리고연결리스트는 그 반대로라고 배웠는데요 자바의 ArrayList와 LinkedList랑 비교해도 똑같은 장단점을 가지나요?일반 배열과 달리 ArrayList는 처음에 크기를 할당하지 않아도 되니 오버헤드가 좀 감소할 것 같은데, 그래도 데이터 삽입 삭제 시 나머지 데이터의 이동이 필요하기 때문에 여전히 LinkedList 보단 속도가 느릴까요?
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
혹시 캡쳐된 부분 피그마 파일은 어디서 공유 받을 수 있나요?
우선 강의를 들어주셔서 감사합니다. 강의 들으시면서 궁금하신 부분을 남겨주세요. 회사 일 관계로 빠른 답변이 어려울 수 있으며, 최대 3일 이내에 답변드리도록 하겠습니다. 이해를 돕기 위해서 스크린샷 이미지, 피그마 파일 링크를 반드시 첨부해주세요. 마지막으로 먼저 유사한 질문이 있는지 한번 찾아보시는 걸 권장 드립니다. 인프런 서비스 운영 관련해서는 1:1 문의하기로 인프런 쪽으로 연락 주시기 바랍니다.
-
해결됨개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
메모리와 프로세스와 CPU
초창기 강의에서메모리와 CPU에대해서 설명해주셧을때 메모리(RAM)는 프로세스(현재 실행중인 프로그램)에 데이터와 명령어를 저장한다고 하였다고 들었습니다.프로그램이 실행하려면 메모리에 저장이 되어야한다고 이해가 안가는게 프로그램을 실행한다는건 CPU가 메모리에있는 데이터를 가지고와서 그 프로그램에 데이터와 명령어를 해석한후 동작을 시켜야 프로그램이 실행되는거 아닌가요? 그이후에 프로그램이 실행되면 거기에대한 명령어와 데이터가 저장되는거 아닌가요? 애초에 CPU가 명령어를 해석하고 동작시키기전에 메모리에 프로세스의 데이터들이 저장이 될 수가 있나요? 이 프로세스 즉, 현재 실행중인 프로그램 이라는 단어때문에 굉장히 애매모호 해지네요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
컴포넌트 props 질문
자잘하게 궁금한게 있으면 여러방식으로 직접해보고는 하는데요 아래의 코드처럼 {...["a", "b", "c"]} 이렇게 props를 전달했을 때 console에는 {0: "a", 1: "b", 2: "c"} 이렇게 없던 배열값의 키값이 생겼습니다. 짐작하기로는 index 위치가 key값이 된 것 같기는 한데 왜 이렇게 되는지 궁금합니다.ex) parent/index.tsximport Child from "./child/index.tsx"; export default function Parent(): JSX.Element { return <Child {...["a", "b", "c"]} />; }ex) parent/child/index.tsxexport default function Child(props: any): JSX.Element { console.log(props); // {0: "a", 1: "b", 2: "c"} return <></>; }
-
해결됨딥러닝 CNN 완벽 가이드 - TFKeras 버전
가중치 초기화(Weight Initialization) 질문입니다.
안녕하세요 교수님, CNN 강의와 같은 좋은 수업 감사드립니다.다름이 아니라 가중치 초기화를 공부하다가 생긴 궁금증에 질문 글을 달아봅니다.교수님께서 강의 하실 때 평균이 0, 표준 편차 1인 표준 정규 분포에서 Weight 초기화시 sigmoid 출력이 대부분 0과 1로 수렴하신다고 하셨는데이렇게 되는 이유가 평균이 0, 표준 편차가 1인 표준 정규 분포에서 Weight를 초기화하면 처음에 Weight값이 너무 작거나 혹은 너무 큰 값들로 배정되기 때문에 저렇게 되는 걸까요?즉, Weight값이 -1 ~ 1까지의 값들 중 임의로 배정되기 때문에 그런건가요?반대로 Sigmoid 출력이 대부분 0.5로 수렴하는 경우에는 -0.01 ~ 0.01중 Weight 값이 결정되기 때문에 그런걸까요?
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Flutter daemon terminated 오류
안녕하세요 코팩님!간만에 플러터 다시 해보는데 계속 에러가 떠서 질문드립니다.새로운 프로젝트 생성하면 Flutter daemon terminated Consider re-starting Android Studio라는 알람이 뜨고에뮬레이터 선택하는 칸이 사라집니다.핫리로드나 핫리스타트로 실행시켜보면No connected Devices Found 라는 에러가 뜹니다.cmd로 flutter doctor -v 해보면 아무 문제 없다는데안드로이드 스튜디오 터미널 상에서 flutter doctor -v 해보면 Connected device ( the doctor check crashed) ~~~라는 문제 하나가 발견되네요...(위가 cmd상, 아래가 안드로이드 스튜디오 터미널상) 컴퓨터 뿐만 아니고 안드로이드 스튜디오도 여러번 재부팅 해봤고디렉토리 중간에 한글이 있어서 그런가 싶어 디렉토리도 영어로만 되어있는 곳으로도 해봤는데 계속 같은 문제가 나옵니다.. 뭐가 문제일까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 이해가 안되는 부분이 있습니다.
안녕하세요. 큰돌님. 이 문제는 제가 직접 풀지 못해서 선생님 답안을 보고 익히고 있는 중 궁금한 게 생겨서 질문 남깁니다.for문을 나오면 있는 끝점을 계산하는 코드입니다.마지막에 이긴 팀을 기준으로 끝점을 계산하는 게 아닌득점을 많이 한 팀 기준으로 끝점을 계산하신 이유가 궁금합니다
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
jenkins 설치 후 실행 오류 질문 드립니다.
안녕하세요.답변부탁드립니다. 감사합니다. 아래의 명령어로 jenkins를 설치 하였습니다.===================================================================docker run -d -p 8080:8080 -p 50000:50000 --name jenkins-server --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11 ===================================================================설치 후 docker logs 명령어로 확인해 보니 첨부한 이미지와 같이 오류들이 보입니다. 이대로 진행되도 되는 것인지요?
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
Notification 구현시 컴파일에러
class MainActivity : AppCompatActivity() { lateinit var cardStackAdapter: CardStackAdapter lateinit var manager : CardStackLayoutManager private val TAG = "MainActivity" private val usersDataList = mutableListOf<UserDataModel>() private var userCount = 0 private val uid =FireBaseAuthUtils.getUid() private lateinit var currentUserGender : String private val REQUEST_CODE = 123 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val isTiramisuOrHigher = Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU val notificationPermission = Manifest.permission.POST_NOTIFICATIONS var hasNotificationPermission = if (isTiramisuOrHigher) ContextCompat.checkSelfPermission(this,notificationPermission) == PackageManager.PERMISSION_GRANTED else true val launcher = registerForActivityResult(ActivityResultContracts.RequestPermission()){ hasNotificationPermission = it } if(!hasNotificationPermission) { launcher.launch(notificationPermission) } val setting = findViewById<ImageView>(R.id.settingIcon) setting.setOnClickListener{ // val auth = Firebase.auth // auth.signOut() // val intent = Intent(this,SettingActivity::class.java) startActivity(intent) } val cardStackView = findViewById<CardStackView>(R.id.cardStackView) manager = CardStackLayoutManager(baseContext,object : CardStackListener{ override fun onCardDragging(direction: Direction?, ratio: Float) { } override fun onCardSwiped(direction: Direction?) { if(direction == Direction.Right){ userLikeOtherUser(uid,usersDataList[userCount].uid.toString()) } if(direction == Direction.Left){ } userCount = userCount + 1 if(userCount == usersDataList.count()){ getUserDataList(currentUserGender) Toast.makeText(this@MainActivity,"유저 리스트를 새롭게 받아옵니다.",Toast.LENGTH_SHORT).show() } } override fun onCardRewound() { } override fun onCardCanceled() { } override fun onCardAppeared(view: View?, position: Int) { } override fun onCardDisappeared(view: View?, position: Int) { } }) cardStackAdapter = CardStackAdapter(baseContext,usersDataList) cardStackView.layoutManager = manager cardStackView.adapter = cardStackAdapter // getUserDataList() getMyUserData() } private fun getMyUserData(){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { val data = dataSnapshot.getValue(UserDataModel::class.java) Log.d(TAG,data.toString()) currentUserGender = data?.gender.toString() getUserDataList(currentUserGender) } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userInfoRef.child(uid).addValueEventListener(postListener) } private fun getUserDataList(currentUserGender : String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // val post = dataSnapshot.getValue<Post>() for(dataModel in dataSnapshot.children){ val user = dataModel.getValue(UserDataModel::class.java) if(!user!!.gender.toString().equals(currentUserGender)){ usersDataList.add(user!!) } } cardStackAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userInfoRef.addValueEventListener(postListener) } private fun userLikeOtherUser(myUid : String, otherUid : String) { FireBaseRef.userLikeRef.child(myUid).child(otherUid).setValue("true") getOtherUserLikeList(otherUid) } private fun getOtherUserLikeList(otherUid : String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // 여기 리스트에서 나의 UID가 있나 확인 필요 for(dataModel in dataSnapshot.children){ val likeUserKey = dataModel.key.toString() if(likeUserKey.equals(uid)){ Toast.makeText(this@MainActivity,"매칭완료",Toast.LENGTH_SHORT).show() createNotificationChannel() sendNotification() } } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userLikeRef.child(otherUid).addValueEventListener(postListener) } // 알림 private fun createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 채널 이름 val name = "name" val descriptionText = "description" val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel("TestChannel", name, importance).apply { description = descriptionText } // Register the channel with the system. val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } } private fun sendNotification(){ var builder = NotificationCompat.Builder(this, "TestChannel") .setSmallIcon(R.drawable.ic_launcher_background) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setCategory(NotificationCompat.CATEGORY_MESSAGE) with(NotificationManagerCompat.from(this)){ notify(123,builder.build()) } } }안녕하세요. 알림기능 구현하는데notify(123,builder.build()) 위 부분에서 Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException 이런 에러가 아직도 발생하고있는데 어떻게 해결할수 있을지 자세한 답변을 부탁드려도될까요? 구글링 해봤는데 명확히 어떤코드 입력해서 컴파일에러를 지울 수 있을지 모르겠습니다. 빠른답변 부탁드리겠습니다.