묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
yml 파일이 여러개일경우
docker-compose.yml docker-compose_nginx.yml docker-compose_mysql.yml docker-compose_tomcat.yml 이런식으로 yml파일이 여러개일경우에도 그냥 docker-compose up 하면 다 실행되는건가요? up down을 개별적으로도 할 수 있나여?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
build 오류
아래화면 처럼 뜹니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
파일을 못 가져옵니다
안녕하세요. 강좌에 Play함수의 매개변수로 파일경로를 지정하면 읽어와야 하는데 읽지를 못하고 있습니다. 소스코드는 강의에 나온 그대로이고, 확장자도 .wav 붙여서 해봐도 안됩니다.. 혹시나 스크립트 위치 기준으로 불러들이는가 해서 Play 함수와 관련된 스크립트 파일을 Assets에 옮겨서도 실행해봤는데 안됩니다. ㅈ
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
build 문제
아래 화면 처럼 뜹니다
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 삭제 기능 구현 질문
안녕하세요 강의를 열심히 듣고있는 수강생입니다! 다름이 아니라 댓글 불러오기 강의를 수강한 이후 게시판 삭제 기능처럼 댓글도 똑같이 자기가 작성한 댓글을 삭제하도록 구현해보고 있는데 난관에 봉착하여 질문드리게 됐습니다.. binding.deleteIcon.setOnClickListener { itemClickListener.onClick(it, position) } val myUid = FBAuth.getUid() val writerUid = items[position].commentUid if(myUid.equals(writerUid)){ binding.deleteIcon.isVisible = true } else{ } } } interface OnItemClickListener { fun onClick(v: View, position: Int) } // (3) 외부에서 클릭 시 이벤트 설정 fun setItemClickListener(onItemClickListener: OnItemClickListener) { this.itemClickListener = onItemClickListener } // (4) setItemClickListener로 설정한 함수 실행 private lateinit var itemClickListener : OnItemClickListener} 우선 commentrvadpater에서 댓글아이템에 내가 작성한 댓글에 uid가 같으면 삭제 아이콘이 보이게끔 하는걸 뷰홀더에 적용시켰고, 성공했습니다. commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() }}) 리사이클러뷰 클릭 이벤트를 boardinsideactivity 즉, 게시판 내부를 구현해주는 액티비티에 구현하여 삭제아이콘을 누르면 댓글이 삭제가 완료되고 토스트메시지까지 띄워졌습니다. 하지만 문제가 생겼습니다.. 위에서 삭제 아이콘을 누르면 게시판 내에 댓글이 모두 삭제됩니다. 리얼타임베이스 시점에서 보면 게시판 key값 내에 파란 부분만 삭제하고 싶은데 빨간부분 모두 삭제됩니다 ..ㅠ commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() }}) 아마 이 코드에서 child에 있는 key값을 지워주는게 아닌 다른 값을 지워줘야 되는게 문제인거 같은데 child 안에 무슨 값을 넣어줘야될지 잘 모르겠습니다... class BoardInsideActivity : AppCompatActivity() { private lateinit var binding: ActivityBoardInsideBinding private lateinit var key : String private val TAG = BoardInsideActivity::class.java.simpleName private val CommentDataList = mutableListOf<CommentModel>() private lateinit var commentAdapter:CommentRVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBoardInsideBinding.inflate(layoutInflater) setContentView(binding.root) binding.boardSettingIcon.setOnClickListener { showDialog() } key = intent.getStringExtra("key").toString() getBoardData(key) getImageData(key) binding.commentBtn.setOnClickListener { insertComment(key) } getCommentData(key) commentAdapter = CommentRVAdapter(this,CommentDataList) binding.commentRV.adapter = commentAdapter binding.commentRV.layoutManager= LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) binding.commentRV.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL)) commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() } }) } fun getCommentData(key:String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { CommentDataList.clear() for(dataModel in dataSnapshot.children) { Log.d(TAG,dataModel.toString()) dataModel.key val item = dataModel.getValue(CommentModel::class.java) CommentDataList.add(item!!) } commentAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.commentRef.child(key).addValueEventListener(postListener) } fun insertComment(key :String) { FBRef .commentRef .child(key) .push() .setValue( CommentModel( binding.commentArea.text.toString(), FBAuth.getTime(), FBAuth.getUid() ) ) Toast.makeText(this,"입력 완료", Toast.LENGTH_SHORT).show() binding.commentArea.setText("") } private fun showDialog(){ val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null) val mBuilder = AlertDialog.Builder(this) .setView(mDialogView) .setTitle("게시글 수정/삭제") val alertDialog = mBuilder.show() alertDialog.findViewById<Button>(R.id.editBtn)?.setOnClickListener { val intent = Intent(this, BoardEditActivity::class.java) intent.putExtra("key",key) startActivity(intent) alertDialog.cancel() } alertDialog.findViewById<Button>(R.id.removeBtn)?.setOnClickListener { FBRef.boardRef.child(key).removeValue() Toast.makeText(this,"삭제 완료",Toast.LENGTH_SHORT).show() finish() } } private fun getImageData(key: String){ // Reference to an image file in Cloud Storage val storageReference = Firebase.storage.reference.child(key + ".png") // ImageView in your Activity val imageViewFromFB = binding.getImageArea storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task-> if(task.isSuccessful){ Glide.with(this) .load(task.result) .into(imageViewFromFB) } else{ binding.getImageArea.isVisible=false } }) } private fun getBoardData(key: String) { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { try { val dataModel = dataSnapshot.getValue(BoardModel::class.java) dataModel!!.title?.let { Log.d(TAG, it) } binding.titleArea.text = dataModel!!.title binding.textArea.text = dataModel!!.content binding.timeArea.text = dataModel!!.time binding.uidArea.text = dataModel!!.uid val myUid = FBAuth.getUid() val writerUid = dataModel.uid if(myUid.equals(writerUid)){ binding.boardSettingIcon.isVisible = true } else{ } } catch (e:Exception){ Log.d(TAG,"삭제완료") } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.child(key).addValueEventListener(postListener) }} 이건 전체 코드입니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
실무적인 구성에 대한 질문입니다.
실무적으로 궁금한 게 있습니다. 일반적으로 대부분의 서비스들은 admin을 제공하는데요. react.js 를 이용해 실제 서비스용 frontend를 구현하고 nestjs를 이용해서 api backend를 만들고 두 번째 frontend 로 admin을 만들어서 2개의 프론트엔드(서비스용, 어드민용)를 동일한 backend api를 공유하여 사용하는지. 아니면 1개의 frontend에서 서비스용과 어드민용을 같이 만들고 backend는 1개를 두는지. 같은 backend를 사용할 경우 서비스용에 전체 기능을 가진 api를 사용하는 것은 혹시 위험하지는 않을지. adminbro같은 경우에는 자동화된 툴로 admin을 간편하게 사용할 수는 있지만, 실제 프로젝트에 적용하기에는 문제가 있는 것은 아닌지. 업무효율성을 고려하여 admin역시 만드는 것이 좋아 보이긴 합니다. 즉 정리하면 service용 reactjs, admin용 reactjs, backend 1 이렇게 구성이 될까요? (총3개) 아니면 서비스용 frontend, backend, 관리자용 frontend, backend 이렇게 구성하는 것이 좋을지. (총4개)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
save() 메소드 내에서 result 정의할 때 질문이 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Member result = repository.findById(member.getId()).get(); 이 구문만으로 result 객체와 member 객체가 같아지는 것이 이해가 잘 가질 않습니다. 저 구문에서 result 객체를 생성함과 동시에 result 의 id 를 member 의 id 와 같게하는 것은 이해가 갔습니다. 하지만 그것만으로 result 객체와 member 객체가 isEqualTo 메소드에서 같은 값이 나오는 것이 이해가 가질 않습니다. 혹시 제가 저 구문을 잘 못 이해하고 있는 건가요? 답변 부탁드립니다..!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-P번 질문
코드 main 함수 부분 중에 int ans = 0;//조합 3개=3중 for문 for (int i = 0; i < v.size(); i++) { for (int j = 0; j < i; j++) { for (int k = 0; k < j; k++) { a[v[i].first][v[i].second] = a[v[j].first][v[j].second] = a[v[k].first][v[k].second] = 1;//벽 생성// ans = max(ans, solve()); a[v[i].first][v[i].second] = a[v[j].first][v[j].second] = a[v[k].first][v[k].second] = 0;//벽 해제-->초기화// } } } cout << ans; for문에서 i의 범위 설정은 알겠는데, j와 k의 범위 설정이 약간 이해가 가지 않아서 질문드립니다~~
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 레포 권한 요청 드립니다.
깃헙 레포 권한 요청 드립니다. 인프런 아이디 : yg1206.lee@gmail.com(구글연동) 인프런 이메일 : yg1206.lee@gmail.com 깃헙 아이디 : yg1206.lee@gmail.com 깃헙 Username : yoongeon1206
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
다른 개발자와의 네트워킹 하는 법 질문
안녕하세요? 정수님 작년에 개발자를 되기 전에 정수님 강의를 먼저 보고 개발자가 되어야겠다고 결심을 하고 공부를 시작했었는데, 이제 부트캠프에서 프로젝트를 끝나고 다음주부터 스타트업에 인턴으로 나가게 되었습니다. 이렇게 다시 질문을 남기게 된 이유는 다름이 아니라 개발자로써 일하면서 네트워킹, 인맥을 구축하는 법이 궁금해서 입니다. 비록 제가 아직 개발자로 일을 해보지 않아서 잘은 모르겠지만, 제가 이전에 근무하던 다른 업계 등에서 업계 사람들 간의 네트워킹이 중요 했었는데, 개발자도 그러한 네트워킹이 중요하지 않을까라는 생각을 합니다. 그런데 전 비전공자 출신으로 주변에 아는 개발자도 거의 없고 학교 선후배도 없습니다. 그래서 지금 제가 가진 아는 분이라면 부트캠프 출신들의 동기나 그곳의 멘토들 밖에 없습니다. 정수님 같은 경우에는 비전공자 출신 개발자로 어떻게 개발자들간의 네트워킹을 하였고 어떻게 그러한 네트워킹을 유지해나가는 지 궁금해서 이렇게 질문글을 남기게 됩니다. 언제나 친절한 답변을 남겨주셔서 감사합니다. 좋을 하루 보내세요
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청
안녕하세요. 깃헙 권한 요청 드릴게요 - 인프런 아이디 : yg1206.lee@gmail.com (구글연동) - 인프런 이메일 : yg1206.lee@gmail.com - 깃헙 아이디 : yg1206.lee@gmail.com - 깃헙 Username : yoongeon1206
-
미해결대세는 쿠버네티스 (초급~중급편)
NAT 관련 질문
강의에서 Pod D에서 Service IP를 이용해 Pod B에 접근하는 부분입니다. 그림에서 Node2 의 NAT 기능에 의해 Node1에 등록되어 있는 Service-Pod Ip Transration이 일어나는 것을 알 수 있는데요. 이전 강의에서 kube-proxy가 이를 iptables등에 등록을 해주는 과정을 설명해주실 때 1. Service가 새로 생성 2. apiserver가 Endpoint Object 생성을 감지해 Service-Pod IP 매핑을 kube-proxy에 등록 하는 과정이 있었는데 강의 그림으로는 생성된 서비스가 있는 Node의 kube-proxy로만 Service-Pod IP 매핑이 등록되는 것으로 이해했습니다. 만약 이 가정이 옳다면, 맨 위 그림에서 Pod D가 있는 Node2에서 Node1의 Service-Pod IP 매핑정보를 알 수 없을텐데 어떻게 알 수 있었을까요? 2번 과정이 혹시 모든 Worker Node에 전파되는 것일까요? 감사합니다.
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
리액트 실시간 처리 질문 드립니다.
리액트 실시간 처리 질문 드립니다. 전에 리액트 공부가 잘 안되서 다시 시도하고 있습니다. 현재 pc 환경은 윈도우 이며, 기본 셋팅은 vsc 설치 및 확장 설치외에 없습니다. stage2 웹개발하기 부분 리액트 실행을 그대로 따라하고 있습니다만 npm start 한후에 app.js에 값을 변경 후 새로고침을 해도 아무런 변화가 없고 서버를 끄고 다시 켜야 적용이 됩니다. 이 경우가 리액트 초기 실험 말고도 다른 웹팩이나 gulp 혹은 node js를 시험해 볼때도 실시간 적용이 안되는 경우가 많았습니다. 이럴 시 어떻게 세팅 하거나 실시간으로 적용 되게 하는 방법이 있나요?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
비주얼스튜디오코드설치...
강의대로 비주얼스튜디오코드 설치했는데 폴더를 만들어야 왼쪽창에서 마우스 오른쪽버튼 활성화되나요? 그부분에대한 어떤 설명도 없어 막힌상태입니다 아니면 초보가 들을수있는 강의가 따로 있나요? 제한모드는 뭔가요? 좀 자세한 설명부탁드립니다... 일단 강의화면이랑 제화면이 다른상태네요 코드사용법? 이런 폴더도 저는 없구요 설치해라는건 다 한 상태입니다
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
실행은 되는데 이상한 글자들이 떠서 질문드립니다.
실행은 잘되는데 아래 사진처럼 빨간색 네모안에 이상한 글자들이 써져있어요. 왜 이런 글자가 뜨는지 알려주실수 있을까요?
-
미해결웹 게임을 만들며 배우는 React
eslint? 빨간줄이 안생겨요
강의를 듣다가 우연히 저는 eslint 가 실행이 안되는(?)것 같아 질문드립니다. 제 것엔 왜 빨간 밑줄이 그어지지 않을까요?eslint 는 그냥 vscode 확장프로그램으로 깔았습니다.
-
미해결타입스크립트 입문 - 기초부터 실전까지
제네릭 타입 제한 강의에서 질문드립니다.
안녕하세요, 제네릭 강의 부분에 '정의된 타입으로 타입을 제한하기' 강의에서 여쭤보고 싶은게 생겨 질문 드립니다. logTextLength(10); 에서 에러가 출력되는 이유가 궁금합니다. 수업과 핸드북 내용(https://joshua1988.github.io/ts/guide/generics.html#%EC%A0%9C%EB%84%A4%EB%A6%AD-%EC%A0%9C%EC%95%BD-%EC%A1%B0%EA%B1%B4)을 참조했을 때, 에러가 발생하는 이유는 logTextLength함수의 전달인자인 10인 숫자 타입에는 length 속성이 없기 때문이라고 하셨는데요, 그런데 수업 중 'T extends LengthType'으로 T 타입은 LengthType 내에 있는 모든 속성들을 갖고 있게 된다고 하셔서, logTextLength(10) 의 10이라는 숫자 타입에도 LengthType의 속성인 length를 갖게 된다고 생각했었습니다. 그런데 logTextLength(10) 이 에러를 출력하는 이유로, 10에 length 속성이 없기 때문이라고 하신 부분이 이해가 잘 안가 문의드립니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Config Directory 내 모델 선택 질문
안녕하세요. 강사님. 항상 강의 잘 듣고 있습니다. 설명을 듣던 중 질문이 생겨서 질문드립니다. 저희가 config_file을 설정할 때, ''/content/mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' 을 설정해서 사용을 하는데, 1x가 epoch:12라고 하셨는데, 2x를 사용하지 않는 이유는 무엇일까요? 그리고 mmdetection 내 다양한 알고리즘을 선택할 때, 선택을 하는 좋은 기준 같은 것들을 여쭤보고 싶습니다! 제 생각엔 아무래도 학습을 더 한 2x가 더 정확성을 가질 것이라고 생각이 드는데, 특별히 1x를 설정하신 이유가 궁금합니다. 감사합니다 :)
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
listview. adapter 에 질문있습니다.
- 밑의 listview.adapter 부분이 이해가 안가서 질문 드립니다. 어뎁터로 데이터를 넘겨준다고 하셨는데 이게 java-리스트뷰 어뎁터 쪽이라면 val 이든 동일한 이름이 무언가가 없고 레이아웃 쪽또한 동일한 이름의 함수가 없는데 어떤역활을 하는것인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만들지 않은 url로 접근 할 떄 처리는 어떻게 하나요 ??
만약에 /itemsed 라는 만들지도 않은 url로 접근할 경우는 어떻게 처리를 하나요 ?? 1) 로그인을 한 경우 잘못된 경로 인입 -> 에러창이 뜸 (아마도 다음 예외처리에서 해결??) 2) 로그인을 하지 않은 경우 잘못된 경로 인입 -> 로그인체크 인터셉터에서 로그인창으로 리다이렉트 -> 이 경로도 1)과 마찬가지고 에러페이지로 예외처리 하려면 addPaterns 에 /** 가 아니라 더 세밀하게 조정을 해야할까요? 아니면 다른 방법이 있을까요 ?