묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결만들면서 배우는 리액트 : 기초
handleFormSubmit
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Form컴포넌트에서 props로 받던 handleFormSubmit을 직접 구현하려면 props에서 꼭 빼야하나요? 그게 아니라면 App에 있었던 handleFormSubmit에서 같이 구현해서 props로 넘겨서 쓰는것도 한 방법일까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 보안 관련 질문 드립니다!
안녕하세요, 항상 강의 정말 재미있게 수강하고 있습니다! 서버의 구조가 어떤지, 어떻게 동작하는지 전반적으로 알 수 있게 되어서 루키스님께 정말 감사할 따름입니다. 강의를 듣고나서 추가적으로 궁금한 점이 생겨서 질문 드립니다! 강의에서 만든 TCP 서버(게임 서버)와 클라이언트가 패킷을 주고 받을 때 현업에서는 어떻게 보안 처리를 하는지 궁금합니다. 현재 서버 구조는 패킷 전체를 암호화한다면 패킷 헤더에 있는 내용을 읽을 수 없어서 ReadBuffer에서 몇 바이트를 읽어와야 하는지 알 수 없게 될텐데 게임 서버 구조가 이러한 구조라면 헤더는 빼고 암호화를 하여 보안처리를 해야 복호화 후에 데이터를 읽어올 수 있을 것 같아서요. 아니면 다른 방법을 사용하는 것인지 궁금합니다!
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
10분 즈음에 더미데이터 filter 안 되시는 분
diaryList[0].filter 이렇게 하시면 콘솔창에서 필터가 되어 있는 모습을 볼 수 있습니다. 한 30분동안 왜 필터가 안 되는지 forEach로 찍어봤는데 배열 하나 안에 객체가 여러개 있는거기 때문에 저렇게 해야하는거 같긴 한데, 또 강사님은 그냥 하셔도 출력이 되시네요. 무튼 저는 위의 방식으로 해결했습니다.
-
미해결React & Express 를 이용한 웹 어플리케이션 개발하기
쌤 리액트로 앱 만들수 있는건가요?
쌤 리액트로 앱 만들수 있는건가요?
-
미해결이펙티브 타입스크립트 스터디
13분 50분즈음에서 배열과 객체에 'as const' 관련해서 논의한거 관련 질문이요
개인적으로 강의 들으면서 as const를 썼을 때 왜 다를 까를 추측해봤는데 제 생각이 타당한지 같이 고민해주시면 감사하겠습니다. 혹시 배열이랑 튜플에 내장하고 있는 pop, push, shift, unshift와 같은 메서드들의 존재 때문이 아닐까요? 배열이나 튜플에 as const를 쓰면 기존 배열과 튜플에 있는 메서드들이 사라지니까 타입이 달라져서 에러가 뜨는거고 객체에는 그런 메서드들이 없어서가아닐까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
굳이 Proxy 객체로 감싸서 반환하는 이유가 무엇인가요,,,,
강의 도중 중요한 내용은 아니라고 하셨지만 궁금해서 이렇게 질문을 남깁니다. 커넥션을 사용하고 반환하는 과정에서 Proxy로 감싸지 않고 반환하면 다시 재사용하는데 있어서 어떤 문제가 발생하는 것인지 궁금합니다. 또한, Proxy 로 감싸서 얻는 이점이 무엇인지도 궁금하네요.. 강의 감사합니다!
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
컬럼을 배열형으로....
api 설계할 때, 클라이언트로 전달해야하는 값이 list 형태이면 컬럼을 string[] 배열로 설정해도 되나요?? 엔티티 구성할 때 string[] 형태의 컬러은 본 적이 없어서 헷갈립니다,,, ex) 대상 : [ 10살, 11살, 12살] 하나의 컬럼에 여러 값들이 들어갈 경우,,,,, 어떤식으로 처리해야 하는지 모르곘습니다.
-
미해결따라하며 배우는 NestJS
잘보고 있습니다.
설명 너무 친절하고 꼼꼼하셔서 잘 보고있습니다 ! 그런데 @Param 과 @Query 를 섞어서 설명해주시는 부분이 있는 것 같습니다. 배열로 들어올 수 있는 부분은 query params 아닌가요? 🤔 path params 가 배열로 들어올 수 있는지 궁금합니다 !
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
에러...
강사님 아래처럼 이런 에러가 뜨는데요.. ㅜ
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
안녕하세요, 권한 요청메일 확인 부탁드리겠습니다.
안녕하세요:) 어제 저녁에 메일 보냈는데 혹시 제대로 가지 않은건가 싶어 이렇게 글 남기게 되었습니다. 좋은하루 되세요~
-
미해결제대로 파는 Git & GitHub - by 얄코(Yalco)
저는 vcs에 마우스 클릭하는 부분이 안 뜨는데 설정 추가로 해줘야할 게 있나요?
얄코님ㅇ느 vsc에 git rebase나 merge 시 마우스로 클릭하는 부분이 뜨던데 저는 그러질 않습니다. 이 부분 따로 추가설정해줘야 하는 것이 있을까요?
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
User.findAll 질문드립니다
강사님 안녕하세요이건 기본적인 질문 같아서 질문드리기가 좀 그래서..계속 찾아봤는데, 해결이 안되어서 봐주시면 감사하겠습니다의외로 간단한 문제 같은데 잘 모르겠어서요 User를 가져와서 User.create({}) 는 성공했습니다 그런데, 30행처럼 User.findAll({ attributes: ['name', 'age'], }); 이렇게 적어줘도 콘솔창에, 레코드들이 안나타나더라구요 그렇지만, 터미널을 확인해보면 확실히 select 문은 작동했습니다select문이 실행되어도 콘솔창이나, 터미널에서 레코드들을 확인할 수 없는지 질문드리고 싶습니다
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
곳감문제 곳감 갯수 더할 때 질문입니다.
from collections import deque def solution() : n = int(input()) tree = [list(map(int, input().split())) for _ in range(n)] m = int(input()) for _ in range(m) : c, d, v = map(int, input().split()) tmp = deque(tree[c-1]) if d == 0 : for _ in range(v) : tmp.append(tmp.popleft()) else : for _ in range(v) : tmp.appendleft(tmp.pop()) tree[c-1] = list(tmp) s = 0 e = n-1 res = 0 for i in range(n) : res += sum(tree[i][s : e+1]) if i < n//2 : s += 1 e -= 1 else : s -= 1 e += 1 print(res) solution() 코드는 위와 같습니다. 마지막에 곳감갯수 더하실 때 for문을 활용하여 더하셨는데 위 코드처럼 슬라이싱과 sum을 활용해도 괜찮을까요??for문을 사용하는것이 시간복잡도가 덜 할까요??
-
미해결실전 자바스크립트
github에 정리좀하려고하는데, 해당 예제코드들 따로 공유가능할ㄲ요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결취미로 해킹#2(해커의 컴퓨팅)
와이파이 공유기 해킹
강의에 무선랜 해킹이있던데 만약 해커가 공유기를 해킹해서 어드민 권한을 가지면 공유기에 연결된 컴퓨터 핸드폰이나 핸드폰안에있는 갤러리 연락처 같은곳도 접속할수있나요?
-
해결됨Kevin의 알기 쉬운 RxJava 1부
TimeUtil.sleep 관련 질문
리액티브 연산자 개요 및 생성 연산자 강의에서 질문 있습니다. TimeUtil.sleep 과 관련된 질문입니다. 이와 관련된 질문이 이미 있었고, 해당 답변도 봤는데요. (Q&A 링크 : https://inf.run/TUZc ) 뭔가 제가 알던 쓰레드 동작 방식과 차이가 있어서 재질문합니다. 이미 답변 주신 글에서는 "이유는 interval 연산자는 내부적으로 main 쓰레드가 아닌 Computation 쓰레드에서 실행이 되기 때문에 Observable.interval.. 코드가 실행이 되기도 전에 main 쓰레드가 종료되기 때문입니다." 라고 답변을 주셨는데요. 그런데 제가 알기로는 main 쓰레드와 별개로 동작하는 쓰레드가 있으면 애플리케이션이 종료되지 않는 걸로 알고 있습니다. 예를 들어서 아래와 같은 간단한 코드를 실행하면 바로 알 수 있습니다. public static void main(String[] args) { System.out.println("main Start!"); Thread thread = new Thread(() -> { try { Thread.sleep(3000); System.out.println("wow"); } catch (InterruptedException e) { throw new RuntimeException(e); } }); thread.start(); System.out.println("main end"); } 실행해보면 main 쓰레드와 관련된 동작은 모두 끝나도 3초가 지나야만 프로세스가 종료됩니다. 혹시 답변에서 주셨던 Computation 쓰레드는 혹시 Daemon 쓰레드인가요? 아니면 제가 놓치는 부분이 있는 건가요??
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈 모델 생성 질문드립니다
강사님 안녕하세요항상 좋은 강의 들려주셔서 감사합니다 강의를 수강하며 코드를 따라해보니 실행도 잘되고 테이블도 잘 생성되었습니다 그런데 제가, 코드를 변형하고 싶었습니다user.js에 기본키 역할을 하는 email 컬럼(필드)을 넣고 싶었습니다 기본키로 id가 자동 생성된다고 말씀해주셨는데, 저는 email 컬럼(필드)를 만들어서 기본키 역할을 하게 만들고 싶었습니다그래서 추가했더니 에러가 생겨서 혹시 어디가 문제인지 봐주시면 정말 감사하겠습니다(스택오버플로우를 찾아봐도 아직 실력이 부족해서 원하는 해답을 찾기 어려웠습니다) 1단계. 워크 벤치에서 테이블을 다시 삭제했습니다 2단계는 user.js를 아래처럼 고쳤습니다 3단계는 comment.js를 고쳤습니다 4단계 app.js를 실행했습니다 그러자 에러가 생겼습니다 콘솔창 메시지를 그대로 복붙했습니다 C:\Program Files\nodejs\node.exe .\app.js 3001 번 포트에서 대기 중 Executing (default): CREATE TABLE IF NOT EXISTS `users` (`email` VARCHAR(30) , `name` VARCHAR(20) NOT NULL UNIQUE, `age` INTEGER UNSIGNED NOT NULL, `married` TINYINT(1) NOT NULL, `comment` TEXT, `created_at` DATETIME NOT NULL, PRIMARY KEY (`email`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci; Executing (default): SHOW INDEX FROM `users` FROM `nodejs` Executing (default): CREATE TABLE IF NOT EXISTS `comments` (`id` INTEGER NOT NULL auto_increment , `comment` VARCHAR(100) NOT NULL, `created_at` DATETIME, `commenter` VARCHAR(30), PRIMARY KEY (`id`), FOREIGN KEY (`commenter`) REFERENCES `users` (`email`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci; Error at Query.run (c:\실험\learn_sequelize\node_modules\sequelize\lib\dialects\mysql\query.js:52:25) at c:\실험\learn_sequelize\node_modules\sequelize\lib\sequelize.js:313:28 at processTicksAndRejections (node:internal/process/task_queues:96:5) at async MySQLQueryInterface.createTable (c:\실험\learn_sequelize\node_modules\sequelize\lib\dialects\abstract\query-interface.js:94:12) at async Function.sync (c:\실험\learn_sequelize\node_modules\sequelize\lib\model.js:937:5) at async Sequelize.sync (c:\실험\learn_sequelize\node_modules\sequelize\lib\sequelize.js:377:9) {name: 'SequelizeDatabaseError', parent: Error: Referencing column 'commenter' and refe…lumn 'email' in foreign key constraint 'comm…, original: Error: Referencing column 'commenter' and ref…umn 'email' in foreign key constraint 'comm…, sql: 'CREATE TABLE IF NOT EXISTS `comments` (`id` IN…LT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;', parameters: {…}, …} 아래는 전체 소스코드 입니다 app.js 소스코드입니다 const express = require('express'); const path = require('path') const morgan = require('morgan') const nunjucks = require('nunjucks'); const { sequelize } = require('./models') const app = express(); app.set('port', process.env.PORT || 3001); app.set('view engine', 'html'); nunjucks.configure('views', { express: app, watch: true, }); sequelize.sync({force: false}) .then(()=>{ console.log('데이터베이스 연결 성공'); }) .catch((err)=>{ console.error(err); }); app.use(morgan('dev')); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); // app.use('/', indexRouter); // app.use('/users', usersRouter); // app.use('/comments', commentsRouter); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status = 404; next(error); }); // app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== 'production' ? err : {}; res.status(err.status || 500); res.render('error'); });// app.listen(app.get('port'), () => { console.log(app.get('port'), '번 포트에서 대기 중'); }); //3001번 포트 대기 중 user.js 소스코드입니다 /** * ./models/user.js */ const Sequelize = require('sequelize'); module.exports = class User extends Sequelize.Model { static init(sequelize) { return super.init({ email: { type: Sequelize.STRING(30), primaryKey: true, }, name: { type: Sequelize.STRING(20), allowNull: false, unique: true, }, age: { type: Sequelize.INTEGER.UNSIGNED, allowNull: false, }, married: { type: Sequelize.BOOLEAN, allowNull: false, }, comment: { type: Sequelize.TEXT, allowNull: true, }, created_at: { type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW, }, }, { sequelize, timestamps: false, underscored: false, modelName: 'User', tableName: 'users', paranoid: false, charset: 'utf8', collate: 'utf8_general_ci', }); } static associate(db) { db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'email' }); } }; comment.js 소스코드입니다 /** * ./models/comment.js */ const Sequelize = require('sequelize'); module.exports = class Comment extends Sequelize.Model { static init(sequelize) { return super.init({ comment: { type: Sequelize.STRING(100), allowNull: false, }, created_at: { type: Sequelize.DATE, allowNull: true, defaultValue: Sequelize.NOW, }, }, { sequelize, timestamps: false, modelName: 'Comment', tableName: 'comments', paranoid: false, charset: 'utf8mb4', collate: 'utf8mb4_general_ci', }); } static associate(db) { db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'email' }); } }; index.js 소스코드입니다 const Sequelize = require('sequelize'); const User = require('./user'); const Comment = require('./comment'); const env = process.env.NODE_ENV || 'development'; //환경변수 NODE_ENV 또는 'development' 로 하겠다 const config = require(__dirname + '/../config/config.json')[env]; const db = {}; const sequelize = new Sequelize(config.database, config.username, config.password, config); db.sequelize = sequelize; db.Sequelize = Sequelize; db.User = User; db.Comment = Comment; User.init(sequelize); Comment.init(sequelize); User.associate(db); Comment.associate(db); module.exports = db; 구글링을 해봐도 원인을 잘 모르겠어서 가르쳐주시면 정말 감사하겠습니다 읽어주셔서 감사합니다
-
미해결IntelliJ를 시작하시는 분들을 위한 IntelliJ 가이드
Cmd + '0'
Cmd + '0' 와 Cmd + '9' 관계는 어떻게 다른가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync, ReceiveAsync문의드립니다.
1. AcceptAsync 재귀 - 백로그 큐의 크기가 있다고 해도 초기 오픈한 게임의 경우 사용자가 지속적으로 들어올것 같은데,이 때는 AcceptAsync 호출 시 계속 pending에서 false가 나올것 같은데 이 때는 코드적으로 조치를 취해야 겠죠? 2. ReceiveAsync - 사용자가 지속적으로 데이터를 보낼 경우 지속적으로 수신 버퍼에 데이터가 있을 수 있기 때문에 pending false 로 인한 재귀에 빠질 수 있을것 같은데 이 때도 조치를 취해야 하나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
20분 30초 ConnectionReset
안녕하세요20분 30초에서 클라이언트의 연결을 끊었을 때 서버 콘솔에서 ConnectionReset 이라는 로그가 나왔는데, 이거는 어디서 출력하는 건가요? 저도 똑같이 해봤는데 ConnectionReset 이라는 로그가 안나오네요 ㅜㅜ