이야기를 나눠요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
-1 변수
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 보통 변수에서 int result = -1 로 두던데, 왜 0으로 안두고 -1로 두는건가여??
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
firebase v9 전체소스 수정 코드
- 아래는 전체 소스 코드 입니다.- 올려주신 v9 소스코드 보고 현 강의 내용에 맞게 수정 했습니다. import React, { Component } from 'react'; import { FaRegSmileWink,FaPlus } from 'react-icons/fa'; import Modal from 'react-bootstrap/Modal'; import Button from 'react-bootstrap/Button'; import Form from 'react-bootstrap/Form'; // import { } from 'react-icons/fa'; import {connect} from 'react-redux'; import { getDatabase, ref, onChildAdded, onValue, push, child, update, off } from "firebase/database"; export class ChatRooms extends Component { state = { show:false, name : "", description : "", chatRoomsRef: ref(getDatabase(), "chatRooms"), } handleClose = () => this.setState({show:false}); handleShow = () => this.setState({show:true}); hanldeSubmit = (e) =>{ e.preventDefault(); const {name, description} = this.state; if(this.isFormValid(name,description)){ this.addChatRomm(); } } addChatRomm = async() =>{ const key = push(this.state.chatRoomsRef).key; const { name, description} = this.state; const {user}=this.props; const newChatRoom = { id: key, name : name , description : description, createdBy : { name : user.displayName, image : user.photoURL } } try{ await update(child(this.state.chatRoomsRef, key), newChatRoom) this.setState({ name : "", description : "", show:false }) console.log("chatRR",this.state.chatRoomsRef); console.log("newC",newChatRoom); console.log("key",key); } catch(error){ console.log(error); } } isFormValid = (name, description) => name && description; render() { return <div> <div style={{ position: 'relative', width:'100%', display : 'flex', alignItems: 'center' }}> <FaRegSmileWink style={{ marginRight : 3 }}/> CHAT ROOMS (1) <FaPlus onClick={this.handleShow} style = {{ position: 'absolute', right: 0 , cursor: 'pointer' }}/> </div> {/*ADD CHAT ROOM MODAL*/} <Modal show={this.state.show} onHide={this.handleClose}> <Modal.Header closeButton> <Modal.Title>Create a Chat Room</Modal.Title> </Modal.Header> <Modal.Body> <Form onSubmit={this.hanldeSubmit}> <Form.Group className="mb-3" controlId="formBasicEmail"> <Form.Label>방 이름</Form.Label> <Form.Control onChange={(e)=>this.setState({name: e.target.value})} type="text" placeholder="Enter a ChatRoom Name" /> </Form.Group> <Form.Group className="mb-3" controlId="formBasicPassword"> <Form.Label>방 설명</Form.Label> <Form.Control onChange={(e)=>this.setState({description: e.target.value})} type="text" placeholder="Enter a ChatRoom Description" /> </Form.Group> </Form> </Modal.Body> <Modal.Footer> <Button variant="secondary" onClick={this.handleClose}> 취소 </Button> <Button variant="primary" onClick={this.hanldeSubmit}> 방 생성 </Button> </Modal.Footer> </Modal> </div>; } } const mapStateToProps = state =>{ return { user : state.user.currentUser } } export default connect(mapStateToProps) (ChatRooms);
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
downloadURL
일단 파이어베이스 문제인지 강의 내용에 나와있는 ref.getdownloadURL() 형태로는 불러올 수 가 없습니다. 그렇기 때문에 import 쪽에 getDownloadURL을 추가해주시고 import { getStorage, ref, uploadBytes, getDownloadURL } from "firebase/storage"; 이후에 let downloadURL = await getDownloadURL(ref(storage, `user_image/${user.uid}`)); 위와 같이 해주면 되겠습니다. 또한 403 에러가 나오신다면 규칙 문제이니 allow read, write: if true;로 바꿔주시면 되겠습니다 참고 문헌 : https://stackoverflow.com/questions/50432995/firebase-cloud-storage-permission-denied-could-not-perform-this-operation-fire https://firebase.google.com/docs/storage/web/download-files#web-version-9_1
-
3D 게임 디자이너에게 배우는 Zbrush 2020 기초와 활용
수고하셨습니다!
너무 알찬 강의해 주셔서 너무 감사합니다 강사님 덕분에 지브러쉬에 쉽게 접근할 수 있게 되었어요 고생 많으셨습니다!!
-
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
선생님 질문 있습니다
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.선생님 답변 듣고 멘탈을 추스리고 일단 강의를 듣고 있는 중에 궁금증이 생겨서 질문 남겨요! 선생님 강의 듣고, 책으로도 공부하려고 하고 있습니다(배송중이여서 책은 아직 못봤습니다) 최종 결과물로는 directX로 게임을 제작할텐데 그때도 이렇게 복사 붙여넣기의 연속인가요??? c++ 공부할 떄 처럼 따라치는게 아니라 복사 붙여넣기만 하다보니 공부가 되는건지에 대한 의문이 해결이 안되니깐 하루에 공부를 7-8시간씩해도 시간을 버리는 느낌.,.?도 들고 너무 답답합니다.. (독학으로 하고 있어서,, 선생님이 자주 말씀하시는 헤딩을 하고 있는 것 같은데,,ㅠㅠ 답답하네요) 먼저 이 길을 지나가진 선생님으로서... 이 답답함 해결해주실수있을까요..? 항상 친절하게 답변해주셔서 감사합니다!!
-
Slack 클론 코딩[실시간 채팅 with React]
swr 서버 질문
안녕하세요 저는 현재 백엔드쪽에서 토이프로젝트를 하고 있습니다. 프론트는 잘 모르지만 구현이 필요해서 제가 하게 되었습니다 제로초님 무료 react 강의를 듣고 sleact 구매하게 되었는데요 토이프로젝트의 서버가 springboot 여서 혹시 swr과 호환이 되는지 궁금합니다
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
ref is not a function 해결
파이어 베이스 업데이트가 원인인지는 잘 모르겠으나. 강의 내용대로 하면 몇 가지 오류 사항이 있을 겁니다. 일단 mime-types 도 에러가 나서 저는 따로 file.type을 받아와서 처리했습니다. const handleUploadImage = async (event) =>{ const file = event.target.files[0]; const metadata = { contentType: file.type}; //스토리지에 파일 저장하기 console.log('file',file); console.log('meta',metadata); 일단 제가 해결 했던 방법은. 아래와 같이 firebase/storeage를 import 해줍니다. import { getStorage, ref, uploadBytes } from "firebase/storage"; 그 이후에 getStorages() 와, storageRef 부분을 선언해줍니다. const storage = getStorage(); const storageRef = ref(storage, `user_image/${user.uid}`); try{ // 'file' comes from the Blob or File API const uploadTask = uploadBytes(storageRef, file, metadata); 이후엔 uploadBytes를 이용해서 인자값으로 저렇게 넣어주면 일단 데이터는 들어갈텐데 만약 403 에러가 나온다면 storage - Rules 에서 allow read,write: if request.auth != null; 로 바꿔주면 해결 될겁니다. 참고 문헌 : https://firebase.google.com/docs/storage/web/upload-files https://stackoverflow.com/questions/38671444/user-does-not-have-permission-to-access-this-object-firebase-storage-android 전체 소스 코드 import React,{useRef} from 'react'; import {GiBroadsword} from 'react-icons/gi'; import Dropdown from 'react-bootstrap/Dropdown'; import Image from 'react-bootstrap/Image'; import { useDispatch, useSelector } from 'react-redux'; import firebase from '../../../firebase'; import { getStorage, ref, uploadBytes } from "firebase/storage"; // import mime from 'mime-types'; function UserPanel() { const user = useSelector(state => state.user.currentUser) const inputOpenImageRef = useRef(); console.log(user) const handleLogout = () =>{ firebase.auth().signOut(); } const handleOpenImageRef = () =>{ inputOpenImageRef.current.click(); } const handleUploadImage = async (event) =>{ const file = event.target.files[0]; const metadata = { contentType: file.type}; //스토리지에 파일 저장하기 console.log('file',file); console.log('meta',metadata); const storage = getStorage(); const storageRef = ref(storage, `user_image/${user.uid}`); try{ // 'file' comes from the Blob or File API const uploadTask = uploadBytes(storageRef, file, metadata); // let uploadTask = uploadBytesResumable(strRef(storage, `user_image/${user.uid}`), file, metadata) // console.log('upload',uploadTask); }catch(error){ console.log(error); } } return ( <div> {/* Logo */} <h3 style = {{color:"white"}}> <GiBroadsword/> {""} ChatApp </h3> <div style ={{display:"flex", marginBottom: '1rem'}}> <Image src={user && user.photoURL} style={{width:'30p', height:'30px',marginTop:'3px'}} roundedCircle/> <input type="file" accept="image/jpeg, image/png" ref={inputOpenImageRef} style={{display:"none"}} onChange = {handleUploadImage} /> <Dropdown> <Dropdown.Toggle style={{background:'transparent', boder:'0px'}} id="dropdown-basic"> {user && user.displayName} </Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item onClick={handleOpenImageRef}> 프로필 사진 변경 </Dropdown.Item> <Dropdown.Item onClick={handleLogout}> 로그아웃 </Dropdown.Item> </Dropdown.Menu> </Dropdown> </div> </div> ) } export default UserPanel;
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
좋은 강의 감사드려요. 유료 강의로 넘어갑니다!
좋은 강의 감사드려요. 유료 강의로 넘어갑니다!
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
윈도우 볼륨 마운팅에서 고생하시는 분들 ..
괜히 옆에 맥북 놔두고 윈도우로 따라해봤는데 힘든게 많네요 ㅋㅋㅋ 참고로 prometheus.yml 경로로 이동하셔서 (저는 아카이브해두려고 별도 폴더에 복사해왔어요) 이렇게 실행하시면 됩니다. docker run -d -p 9090:9090 \ --network ecommerce-network \ --name prometheus \ --mount "type=bind,source=$PWD\\prometheus.yml,target=/etc/prometheus/prometheus.yml" \ prom/prometheus
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
여기에 의존성도 같이 추가되어야 하는걸까요 ?
강의 따라가면서 만들어보고 있는데, DiscoveryService의 경우에는 별도로 의존성을 추가한 적이 없었던거 같습니다. 때문에 spring-cloud-starter-config 의존성을 추가해야 도커 동작이 의도한 대로 될 것 같은데 (실제로 설정 정보를 쓰는 부분은 없으니 이러나 저러나 결과는 같겠지만) 맞는걸까요 ? 짧은 시간에 몰아서 들으려고 하니 헷갈리네요 ㅎㅎ
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Kotlin으로 하시는 분들은 memberRowMapper함수 이렇게 하시면 될 것 같습니다
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. private fun memberRowMapper(): RowMapper<Member>{ return RowMapper {rs:ResultSet, rowNum: Int -> Member().apply{ id = rs.getLong("id") name = rs.getString("name") } } }
-
파이썬(Python) 기초부터 실무까지 part.1
소수 구하는 문제 제맘대로 풀었습니다.
# 입력받은 두 수 사이의 소수를 출력하는 프로그램# 소수란 2이상의 수 중에서 1과 자신외에 자신을 나눌 수 없는 자연수를 말한다.# 2가 가장 작은 소수이므로, 어떤 수를 반(2)으로 나눈것보다 큰 수로는 그 수를 나눌 수 없다.# 따라서 어떤 수 n이 있을 때, 2부터 n/2까지의 수로 나눌 수 없으면 n은 소수이다.# 가능하면 적게 실행해야하므로 2부터 n-1까지 반복하지 않고 2부터 n/2까지 반복하는 것이 경제적이다.def IsPriNum(num) : #소수면 True, 소수가 아니면 False 반환하는 함수 for i in range(2,round(num/2)+1) : #2부터 num/2까지의 수 중 자신을 나눌 수 있는(=나누었을 때 나머지가 0이되는) 수가 있을경우 소수가 아님. if num > 3 and num%i == 0 : # 2(=3-1)이상의 수 중 자신을 나누는 수가 있으면 IsPriNum에서 False반환 return False else : continue return True # 2부터 num/2까지의 수 중 자신을 나눌 수 있는 수가 없으면 IsPriNum에서 True반환priNum = [] # 소수를 저장할 리스트print("입력하신 두 자연수를 포함한 사이의 자연수 중 소수를 출력합니다.")firstNumStr = input("첫 번째 자연수를 입력해주세요 : ")lastNumStr = input("두 번째 자연수를 입력해주세요 : ")# 입력된 값 중 0이 있거나 숫자가 아닌 값이 있을경우 재입력 while firstNumStr=='0' or lastNumStr=='0' or not(firstNumStr.isnumeric()) or not(lastNumStr.isnumeric()): print("잘못 입력 하셨습니다. 1이상의 자연수를 숫자로 입력 해 주세요.") firstNumStr = input("첫 번째 자연수를 입력해주세요 : ") lastNumStr = input("두 번째 자연수를 입력해주세요 : ")# 문자열을 정수로 변환firstNum = int(firstNumStr)lastNum = int(lastNumStr)#두 수 중 작은수를 firstNum에, 큰 수를 lastNum에 저장if firstNum > lastNum : temp = firstNum firstNum = lastNum lastNum = temp# 소수를 소수리스트에 추가하고 해당소수 출력for i in range(firstNum, lastNum+1) : if i == 1 : # 1일경우 Pass continue elif IsPriNum(i) == True : #소수로 확인되면 아래 문장 실행 priNum.append(i) #소수를 소수리스트에 추가 print("{}는 소수입니다.".format(i)) #추가된 소수 출력print("{}부터 {}까지의 자연수 중 소수는 {}개이며, {}입니다.".format(firstNum,lastNum,len(priNum),priNum))
-
파이썬(Python) 기초부터 실무까지 part.1
7분38초에 출력결과 수정하기 전에것 기준으로 만들어 본 코드입니다ㅏㅏ
# 다음 같은 모양 출력# *# ***# *****# *********for i in range(4) : if i == 0 : print(" "*10, "*", " "*10, sep='') else : print("{:>10}".format("*"*(pow(2, i-1))), "*", "{:<10}".format("*"*(pow(2, i-1))),sep='')
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
getRemoteAddr() is not supported 해결
getRemoteAddr() is not supported 뜨시는 분들은 userService.WebSecurity.configure 확인해보세요 포트포워딩 안돼있으면, 원래 개인 PC는 IP가 계속 바뀌거든요. @Overrideprotected void configure(HttpSecurity http).... http.authorizeRequests().antMatchers("/**") .hasIpAddress("220.xxx.xxx.xxx") ...
-
제대로 파는 Git & GitHub - by 얄코(Yalco)
잘 들었습니다:)
학부때 쓰고 꽤 오랜 시간이 지나서 다 까먹었는데, 개인 프로젝트를 진행하며 쓸 일이 생겨서 듣게되었습니다 :) 핵심만 딱딱 짚어주셔서 너무 좋네요! 도움이 많이 됐습니다 알찬 강의 감사합니다:D
-
파이썬(Python) 기초부터 실무까지 part.1
28분 30초에서 별 꼭짓점에서의 회전각도 144도는
별의 꼭짓점의 각도가 36도이므로, 완전히 반대로 가는 180도 회전에서 꼭짓점 각도인 36도룰 뺀 만큼 회전시켜주면 됩니다. 즉 180도 - 36도 = 144도로 회전해야합니다. 아래는 별의 꼭짓점이 36도인 이유입니다. ------------- 별을 그리면 별의 내부는 정오각형입니다. 오각형은 삼각형 3개로 나눌 수 있으며, 삼각형의 내각의 합은 180도 이므로 오각형 내각의 합은 180 x 3 = 540도입니다. 정오각형이므로 각은 각각 540/5 = 108도가 됩니다. 이 오각형의 한변과 별의 한쪽팔을 이루는 삼각형의 한 변은 직선으로 연결되어있으므로, 정오각형의 한 각과 인접한 이등변삼각형의 한 내각의 합은 180도입니다. 즉 이등변삼각형의 한 내각 = 180도 - 108도 = 72도입니다. 이등변 삼각형의 두 내각의 합은 72 x 2 = 144도이며, 따라서 나머지 한 각의 각도는 180-144 = 36도가 됩니다.
-
파이썬(Python) 기초부터 실무까지 part.1
32분 40초경에 화씨100도의 탭이 튀는 이유는
숫자 100과 띄어쓰기 한칸을 포함한 총 4칸의 문자열 다음에 탭이 오기때문에 탭이 한번 튀는것입니다. 아래는 설명입니다. 우선 탭은 띄어쓰기 네칸과 같으며, 문자열의 길이가 4의 배수가 되면(즉 탭의 범위가 모두 차버리면) 그 다음 4칸을 띄어버립니다. 아래와 같이 말입니다. a---1 ab--1 abc-1 abcd----1 abcde---1 abcdef--1 abcdefg-1 abcdefgh----1 print함수 내부의 t가 마지막인자가 아니기 때문에, t의값이 입력된 후 뒤에 띄어쓰기(' ')가 기본으로 붙습니다. 이는 print함수의 sep=의 default가 띄어쓰기(' ')이기 때문인데요. 별도로 sep=''라고 설정하시면 100뒤에 띄어쓰기가 붙지않아서 100도에서 혼자 튀는 일이 발생하지 않습니다.
-
파이썬(Python) 기초부터 실무까지 part.2
선생님이 몰라서 답을 찾는 시간이 너무 많아요.
헷갈리네요
-
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
선생님 이게 정상인가요?
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 C++ 강의를 듣고 바로 DX수업을 수강하고 있습니다... 이제 수업 2개 들었는데 수업을 좇아 갈 수 없는 느낌이 듭니다... 선생님께서 시작 전에 멘탈 나가지 말라고 하셨는데 멘탈이 나간 것 같습니다.. C++ 수업 듣고 바로 DX수업은 원래 힘든 것입니까?? 아니면 제가 덜떨어진 것 입니까...? 으아아아 죄송합니다... 힘들어서 푸념 한 번 했습니다... 열심히 해보겠습니다 감사합니다
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의하고는 관계가 없는데요. 배민에선 CQRS 구현을 어떻게 하신건가요?
배민은 지금 거대한 CQRS 시스템이라는 글을 읽었는데요. 어떤 기술들을 사용했는지 혹시 알 수 있을까요? 찾아보면 간단하게는 Rest template, feign 등을 사용해서 마이크로서비스 간의 통신은 할 수 있고 시스템 간의 동기화는 kafka 같은 기술을 사용하는 것 같은데요. 이게 또 CQRS 라는걸 좀 더 엄격하게? 적용한다면 event sourcing, event store 이런 개념이 또 들어가더라고요. 스프링에는 이런 기능들을 제공하는 Axon이라는 프레임워크도 있더군요.