묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
9:55 knight.clone()호출시 원본의 제거
안녕하세요 9:55를 보면 Knight class객체를 하나 생성하여 그 객체를 리턴하는 Knight 클래스의 함수 clone()을 이용하여 Main에서 새로운 Knight class객체를 생성하고 있는데요 , 강의에서 말씀하셨다시피 클래스는 전달시 참조가 기본방식으로 알고있습니다. 그럼 clone 함수내에서 생성된 Knight 클래스 객체를 리턴시 참조로 리턴되는것이고 그럼 Main에서 Knight2 객체는 clone함수내에서 생성된 knight클래스 객체를 참조하는것이 되는것인데 문제는 clone함수가 호출이 종료되며 knight2클래스가 참조로 나타내는 knight클래스객체가 소멸되는건데 , c++ 에서는 이러면 원본이 삭제되는것이니 문제가 발생하는것으로 알고있습니다. 답변부탁드립니다!
-
미해결화이트해커가 되기 위한 8가지 웹 해킹 기술
칼리리눅스 설치관련
안녕하세요 virtualBox말고 윈도우에서 제공하는wsl2상에서 칼리 리눅스설치하고 수업을 들어도 되나요?
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강사님 질문 하나 추가로 더 있습니다.
삭제된 글입니다
-
미해결Typescript with Vue 실전 프로젝트
안녕하세요! @Prop() readonly id(느낌표):string; 에서 !(느낌표) 를 찍는 이유가 궁금합니다 :)
안녕하세요 @Prop() readonly id(느낌표):string; 이런 문장에서 !(느낌표) 를 찍는 이유가 궁금해서 질문 남깁니다 ! 감사합니다!
-
해결됨윤재성의 Vue.js 프로젝트를 통한 실무 개발 과정
랜더링이 무엇인가요?
값을 가져오는 건 바인딩이라고 하는데 랜더링은 구체적으로 뭐라고 하는지 모르겠습니다!
-
미해결스프링 핵심 원리 - 기본편
test
안녕하세요. 강의 진심 감사히 듣고 있는 수강생입니다. 다름이 아니라, 테스트 코드 작성하실 때 @BeforeEach로 테스트 메소드 실행될 때 마다 AppConfig 생성해서 한다고 하셨는데, 1) 그렇게 테스트 하는 이유는 테스트 할 때마다 깔끔한 데이터 상태를 위해서일까 싶은데 맞나요? 2) 테스트 해야할 케이스가 많으면 @BeforeEach 로 AppConfig 인스턴스를 계속 새로 생성해서 사용하는게 부담이 되진 않을지 궁금합니다. 3) 테스트 코드는 각 클래스 별로 독립적으로 실행되는 줄 알았는데 테스트 전체적으로 실행하나요? 제가 예로MemberServiceTest만 테스트 돌려도 ./core/src/*/classes 모든 클래스들을 모두 실행한다는 명령어가 콘솔에서 보여 질문드립니다. 3 가지 궁금합니다. 감사합니다!
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
gnb a span 너비 높이값 질문요!
gnb a span { 의 width 값과 height 값을 100%로 주셨는데 혹시 inherit으로 상속 받아도 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티설계질문입니다.
강의 잘봤습니다!! 역시 꿀강의!!! 배운 것을 토대로 토이프로젝트를 간단하게 진행 해보려고 합니다. 그래서 팁좀 받을 수 있을까... 해서요!!! 요구사항은 이렇습니다. - 회원엔티티는 본인의 플레이리스트 엔티티를 조회한다. - 플레이리스트의 정보는 동영상 엔티티에 저장되어 있다. - 회원은 본인의 플레이리스트 목록을 삭제할 수 있다. - 회원은 본인의 플레이리스트 중 가장많이 들은 곡 리스트를 조회할 수 있다. - 모든 사용자는 동영상 엔티티에 있는 모든 곡 중 가장 많이 들은 곡 리스트를 조회할 수 있다. 위와 같은 결과로 아래와 같이 설계하였습니다. 가능하시다면 피드백 가능할까요 ㅜ.ㅜ @Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; @OneToMany(mappedBy = "member") private List<PlayList> playList = new ArrayList<>();} @Entitypublic class Video { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Column(name = "video_no") private String videoNo; private String image; private int count; // 재생 횟수} @Entitypublic class PlayList { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int count; // 재생 수 @ManyToOne @JoinColumn(name = "member_id") private Member member; @ManyToOne @JoinColumn(name = "video_id") private Video video;}
-
미해결벡터 미적분학 시리즈2 - 미분 심화: 최적화 이론의 기초와 벡터 함수
3.4단원 (c)의 25:50 부분 quiz에서 질문드립니다.
안녕하세요, 선생님 3.4단원 (c)의 25:50 quiz 의 힌트 관련해서 문의드립니다. S = xy + yz + zx - 5 = 0 일 때, x -> 0 이나 x -> 무한대일 때, xyz -> 으로 가는 것을 보일 때, (1+epsilon)^(1/2) 테일러정리를 사용한다고 하셨는데, 어떤 부분에서 이 정리를 사용해야 될지 감이 안 잡혀서 문의드립니다. x -> 무한대일 때, y, z -> 0인 것을 보일 때 쓰는건지요? 스타벅스 기프티콘을 받고 싶었지만, 도저히 헷갈려서 문의드립니다. ㅠ
-
미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
참조값 차이 문의드립니다.
p = p.next; 위의 코드 바로 다음에 아래처럼 로그를 출력하면 전 p 와 p.next의 참조값이 동일하게 나올거라 생각했는데 다르게 나옵니다. 제가 잘못이해하고 있는걸까요? System.out.println("\n p2:"+ p + " / p.next:"+ p.next ); 테스트로 아래처럼 해보면 ListNode tmpP = p; ListNode tmpP2 = p.next; tmpP 와 p tmpP2 와 p.next는 각각 서로 같고 두쌍은 서로 다릅니다. ListNode tmpP2 = p.next; 가 tmpP2 와 p.next 가 같으므로 당연히 p = p.next 의 p와 p.next도 같아야된다고 생각하느데 다른 참조값이 나옵니다. (결과는 정상적으로 나옵니다) 추가로 체크해봤는데 p.next = node; p = p.next; 에서 아래 처럼 둘은 참조값이 같네요 p.next == node.next; p == node. 혹심 몰라 말씀드립니다
-
미해결성공적인 SQL 인젝션 공격을 위한, SQL 기본 문법
char(); 질문이 있습니다.
동일한 질문글을 보았으나 혹시나 해서 질문글 올립니다. 저 또한 select char(97);을 입력 시 0x61이 출력되는데 이후에 배우는 것들에 큰 차질을 빚게되나요? 해결할 순 없을까요?
-
미해결눈떠보니 코딩테스트 전날
유레카 문제풀이
유레카문제풀이에서 충분히 할 수 있을거라고 하면서 끝맺음이 나는데... 끝까지 문제풀이를 해주셨으면 합니다.ㅠ부탁드립니다.
-
미해결예제로 배우는 스프링 입문 (개정판)
9분 쯤 불들어오는 아이콘은 인텔리 버전에따라 보이나요?
.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문
캐릭터 시선으로 바라보는 축이 Local 인데 강의에서 45도 정도 로테이션 한상태로 캐릭터를 움직이면 글로벌축으로 움직여서 캐릭터시선으로 움직임을 주려고 다이렉션을 줬는데 , 주석에서 트랜스폼 다이렉션은 Local -> World 라고 하셨는데 혼동이 옵니다 World 와 Global 다른가요 ? 로컬이 캐릭터 시선이 아닌가요?
-
해결됨리액트로 나만의 블로그 만들기(MERN Stack)
선생님 질문이 있습니다~!
강의 14:20 즈음, server/routes/api/post.js 작성 중에, 87번 코드와, 103번 코드에서 약간에 차이가 보이는 듯 한데, 다른 코드와는 다르게 유독 103번 줄에는 await Post.findByIdAndUpdate(newPost._id, { $push: { } 없이, category: findResult._id }) 이렇게 코딩이 되어있는데, 혹시 $push: {} 없이 작성을 하더라도 나중에 완성되고 나서 작동하는데는 문제가 없나용~? (항상 잘 수강하고 있습니다 친절한 강의 감사드려요~~^^)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
save Method 질문
public Member save(Member member) { // SimpleJdbcInsert는 SQL문을 대체함 (Insert SQL 문을 구성하는 테이블명, PK , 필드명은 필요함) SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id"); Map<String, Object> parameters = new HashMap<>(); parameters.put("name", member.getName()); Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); member.setId(key.longValue()); return member;} SimpleJdbcInsert의 동작방식이 이해가 가지 않습니다.member.setId(key.longValue()) 에서멤버에 ID 값을 세팅한 것은 이해가되는데setName은 어떻게했는지 이해가 가지 않습니다.
-
미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
다른 풀이 문의드립니다
LinkedList 이해하려니 머리가 깨지네요 ㅎㅎ 이해는 했는데 이 문제가 사실 다 배열에 넣어서 그냥 큰 순서대로 소팅해도 되는것 같던데 그랗게하면 점수를 낮게 받을까요? 그렇게 풀면 안되는 이유가있을까요? 점수가 낮다면 그것만으로도 이유가 될거란건 수긍합니다 시험이니깐요 배열에 다넣어서 소트하는게 시간복잡도도 더 효율적인것 같은데요 지금 다시 leetcode에서 문제보니 LinkedList로 최종결과를 리턴하도록 강제하고있네요
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
Route.get() requires a callback function but got a [object Object]
인자를 객체로 넘겼다고 에러가 뜨는데, auth를 구현하는 app.get에서 자꾸 문제가 있다고 합니다. 오타는 도저히 못찾겠는데,, 문제가 무엇일까요 const express = require('express') const app = express() const port = 5000 const bodyParser = require('body-parser'); const { User } = require("./models/User"); const config = require('./config/key'); const cookieParser = require('cookie-parser'); const auth = require('./middleware/auth'); // application / x-www-form-urlencoded app.use(bodyParser.urlencoded({extended : true})); // application / json app.use(bodyParser.json()); app.use(cookieParser()); const mongoose = require('mongoose'); //mongoDB 연결 mongoose.connect(config.mongoURI,{ useNewUrlParser: true, useUnifiedTopolongy: true, useCreateIndex: true, useFindAndModify: false }).then(() => console.log('MongoDB connected !')) .catch(err => console.log('MongoDB Error !')); //Hello world 출력 app.get('/', (req, res) => { res.send('Hello World!') }); //register 라우트 app.post('/api/users/register', (req, res) => { // 회원가입 할 때 필요한 정보들을 client으로부터 받아오면 // 그것들을 database에 넣어준다. const user = new User(req.body) user.save((err, userInfo) => { if(err) return res.json({ success : false, err }) return res.status(200).json({ success: true }); }); }); // login 라우트 app.post('/api/users/login', (req, res) => { // console.log('ping') //요청된 이메일을 데이터베이스에서 있는지 찾는다. User.findOne({ email: req.body.email }, (err, user) => { // console.log('user', user) if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다." }) } //요청된 이메일이 데이터 베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인. user.comparePassword(req.body.password, (err, isMatch) => { // console.log('err',err) // console.log('isMatch',isMatch) if (!isMatch) return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다." }) //비밀번호 까지 맞다면 토큰을 생성하기. user.generateToken((err, user) => { if (err) return res.status(400).send(err); // 토큰을 저장한다. 어디에 ? 쿠키 , 로컳스토리지 res.cookie("x_auth", user.token) .status(200) .json({ loginSuccess: true, userId: user._id }) }) }) }) }) // auth 라우트 (미들웨어로 사용될 것입니다.) app.get('/api/users/auth', auth, (req, res) => { //여기 까지 미들웨어를 통과해 왔다는 얘기는 Authentication 이 True 라는 말. res.status(200).json({ _id: req.user._id, isAdmin: req.user.role === 0 ? false : true, isAuth: true, email: req.user.email, name: req.user.name, lastname: req.user.lastname, role: req.user.role, image: req.user.image }) }) app.get('/api/users/logout', auth, (req, res) => { // console.log('req.user', req.user) User.findOneAndUpdate({ _id: req.user._id }, { token: "" } , (err, user) => { if (err) return res.json({ success: false, err }); return res.status(200).send({ success: true }) }) }) // 포트를 통해 index.js 를 실행합니다. app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) }); 위는 index.js const { User } = require('../models/User'); let auth = (req, res, next) => { //인증 처리를 하는곳 //클라이언트 쿠키에서 토큰을 가져온다. let token = req.cookies.x_auth; // 토큰을 복호화 한후 유저를 찾는다. User.findByToken(token, (err, user) => { if (err) throw err; if (!user) return res.json({ isAuth: false, error: true }) // console.log('userh', user) req.token = token; req.user = user; next(); }) } module.exports = { auth }; auth.js // 모듈 (User에서는 데이터 베이스를 위한 몽구스, 유저의 비밀번호 암호화를 위한 비크립트, 유저의 개개인 토큰을 얻기 위한 제이슨웹토큰을 가져온다.) const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const jwt = require('jsonwebtoken'); // 비밀번호 암호화를 위한 salt 값 설정. salt 값은 암호화된 비밀번호를 해킹하기 어렵게 만들 수 있음. const saltRounds = 10; // 유저의 정보들을 객체화, 이른 바 유저 스키마를 생성한다. ( 몽구스의 메소드 ) // 각 유저들의 이름, 이메일, 비밀번호 등 개인정보를 담기 위한 객체임. const userSchema = mongoose.Schema({ name : { type: String, maxlength: 50 }, email : { type: String, trim: true, unique: 1 }, password : { type: String, minlength: 5 }, lastname : { type: String, maxlength: 50, }, role : { type: Number, default: 0 }, token: { type: String, }, tokenExp: { type: Number }, image : String }) // 유저 스키마 이전에 실행될 것임. userSchema.pre('save', function (next) { var user = this; if (user.isModified('password')) { //비밀번호를 암호화 시킨다. bcrypt.genSalt(saltRounds, function (err, salt) { if (err) return next(err) bcrypt.hash(user.password, salt, function (err, hash) { if (err) return next(err) user.password = hash next() }) }) } else { next() } }) // comparePassword 라는 이름의 유저 스키마 메소드를 생성합니다. ( 당연히 비밀번호 비교를 위한 메소드이겠지요? ) userSchema.methods.comparePassword = function (plainPassword, cb) { //plainPassword 1234567 암호회된 비밀번호 $2b$10$l492vQ0M4s9YUBfwYkkaZOgWHExahjWC bcrypt.compare(plainPassword, this.password, function (err, isMatch) { if (err) return cb(err); cb(null, isMatch); }) } userSchema.methods.generateToken = function (cb) { var user = this; // console.log('user._id', user._id) // jsonwebtoken을 이용해서 token을 생성하기 var token = jwt.sign(user._id.toHexString(), 'secretToken') // user._id + 'secretToken' = token // -> // 'secretToken' -> user._id user.token = token user.save(function (err, user) { if (err) return cb(err) cb(null, user) }) } userSchema.statics.findByToken = function(token, cb) { var user = this; // 토큰을 decode 한다. jwt.verify(token, 'secretToken', function(err, decoded) { // 유저 아이디를 통해서 유저를 찾은 다음에 // 클라이언트에서 가져온 token과 DB에서 가져온 토큰이 일치하는지 확인합니다. user.findOne({ "_id" : decoded, "token" : token }, function(err, user) { if(err) return cb(err); cb(null, user); }) }) } // 유저스키마 => User 라는 이름으로 모델화. const User = mongoose.model('User', userSchema); // 방금 모델화한 User 밖에서도 사용가능하도록 exports. module.exports = { User }; user.js 입니다. 문제가 무엇일까요, ㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Program에서 플레이어를 불러오지 못합니다.
아래와 같은 오류가 뜨면서 기사와 아처에 에러가 뜨네요. 겟 어택에 대한 부분도 에러가 뜨고 있습니다. 참고로 파트/섹션별로 나누어서 클래스를 만들어서 par1_section5_(이름) 으로 생성했습니다. 무엇이 문제일까요? 혼자 이것저것 수정해봐도 되지 않아 질문남깁니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
github private 접근 어떻게 해야 하나요?
두번째 강의내용에서 github에 접근해 clone 해오는걸 잘 이해가 안가네요 어떻게 접근해서 아이디를 남겨야되는지 github 방문에 다 봐도 그런 링크를 못찾고 했습니다. gist 라는 데도 안보이고요