묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
강의 자료 이미지가 보이지 않습니다.
섹션2 [데이터베이스와 RDBMS] 수강을 하면서 다운받은 강의 자료를 보려고 열면 다음과 같이 삽입된 이미지가 보이지 않습니다. 어떻게 해결할 수 있을까요?
-
해결됨Real MySQL 시즌 1 - Part 1
EXPLAIN ANALYZE 수행 시 쿼리 실행 계획이 예상과 다릅니다.
먼저 강의 내용이 아닌 책내용을 질문하게 되서 죄송합니다. 하지만 여기 말고 질문할 곳이 마땅치 않아 부득이하게 이곳에 적게 되었습니다. 부디 사정을 봐주시길 부탁드립니다. Real MySQL 1권의 10.2 실행 계획 확인(415pg)에서는 EXPLAIN ANALYZE 실행 시 나타나는 결과에서는 다음과 같은 규칙이 적용된다고 설명되어 있습니다. 들여쓰기가 같은 레벨에서는 상단에 위치한 라인이 먼저 실행들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행 이 말대로라면 아래 그림에서의 실행순서는 F, D, E, C, B, A 가 됩니다. 하지만 책에서는 실행순서가 D, F, E, C, B, A 로 된다고 적혀있습니다. 들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행된다고 하여 F 가 가장 먼저 실행될 줄 알았는데 D 부터 시작된다고 적혀있어서 혼동이 왔습니다. 혹시 왜 D 부터 시작하는지 설명을 부탁드릴 수 있을까요?감사합니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
react.js 프론트 소스 파일 부탁합니다..
웹을 구현하는데 프론트앤드가 필요한데, 프론트는 소스 코드를 제공하지 않는다는게 좀 의아합니어쨌든 프론트 소스코드 파일 react.js 부탁합니다..skii4@hanmail.net
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
팔로잉과 팔로워 관계
deserializeUser에서 req.user에 넣을 팔로잉이랑 팔로워 찾으실 때, as는 모델 관계의 as를 따라간다고 하셨는데 왜 위 코드에서 Follwers가 //팔로잉이고 Followings가 //팔로워라고 하신 건지 모르겠습니다ㅜ 예를 들어, 저의 팔로잉을 찾으려면 제 아이디를 팔로워 아이디에서 찾아야 하니까 기준 아이디가 followerId가 되는 Followings가 맞는거 아닌가요?
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
nodebird 프로필 수정 기능 구현 시, 에러가 발생했을 때 에러처리미들웨어에서 res.render('error')가 안되는 상황
프로필 수정 기능을 구현하기 위한 profileUpdate.html{% extends 'layout.html' %} {% block content %} <div class="timeline"> <form id="profile-update-form"> <!-- <div class="input-group"> <label for="join-email">이메일</label> <input id="join-email" type="email" name="email" /> </div> --> <div class="input-group"> <label for="join-nick">닉네임</label> <input id="join-nick" type="text" name="nick" /> </div> <div class="input-group"> <label for="join-password">비밀번호</label> <input id="join-password" type="password" name="password" /> </div> <button id="join-btn" type="submit" class="btn">수정</button> </form> </div> {% endblock %} {% block script %} <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script> window.onload = () => { const errorParam = new URL(location.href).searchParams.get('error'); if (errorParam) { alert(errorParam); } }; if (document.getElementById('profile-update-form')) { document.addEventListener('submit', async (event) => { event.preventDefault(); const formData = new FormData(event.target); const config = { headers: { 'content-type': 'application/json', }, }; axios .put('/profile/update', formData, config) .then((res) => { alert('프로필 정보가 수정되었습니다.'); window.location.href = '/profile'; }) .catch((error) => { alert(error); }); }); } </script> {% endblock %} 그리고 controller/page.jsexports.renderProfileUpdate = (req, res, next) => { res.render('profileUpdate', { title: '내 정보 수정 - NodeBird' }); }; exports.profileUpdate = async (req, res, next) => { try { const { nick, password } = req.body; const id = req.user.id; const exUser = await User.findOne({ where: { id } }); if (!exUser) { throw new Error('존재하지 않는 사용자입니다.'); // res.status(404).send('no user'); } const sameNickUser = await User.findOne({ where: { nick, id: { [Op.ne]: exUser.id, }, }, }); if (sameNickUser) { throw new Error('중복된 닉네임입니다.'); // res.status(501).send('중복된 닉네임입니다.'); } const hash = await bcrypt.hash(password, 12); exUser.set({ nick, password: hash, }); await exUser.save(); res.status(201).send(); } catch (error) { console.error(error); next(error); } };app.js의 에러처리 미들웨어app.use((err, req, res, next) => { // 404 다음은 에러처리 미들웨어 console.error('에러는 ', err.message); res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== 'production' ? err : {}; // 보안상 위험(오히려 배포 시 사용자 화면에 에러를 숨김) // 에러를 로깅 서비스에 넘김 res.status(err.status | 500); res.render('error'); // views/error.html });일부러 중복된 닉네임을 넣어 라우터에서 에러를 발생시켰을 때, 에러처리미들웨어의 console.error('에러는 ', err.message); 부분에서 "Error: 중복된 닉네임입니다. at exports.profileUpdate (/nodestudy/nodebird/controllers/page.js:31:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5)에러는 중복된 닉네임입니다.PUT /profile/update 500 10.568 ms - 1862" 로 에러 메시지가 정상적으로 찍히는 것을 확인하였습니다.preview 탭에선 정상적으로 나오는 것 같은데, 실제 브라우저 화면에선 위와 같이 뜨면서 제가 원하는 에러 메시지('중복된 닉네임입니다')가 alert 창에 뜨지 않으며, error.html이 렌더링도 되지 않고 있습니다. 구글링해봐도 제가 잘 못한건지 이유를 못찾겠습니다🥲 제가 뭘 놓친걸까요?
-
해결됨비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)
혹시 심화 수업은 계획이 없으신가요..?
강의 너무 잘 보았습니다.혹시 힌트 도 주요 튜닝 방법중 하나인데.이쪽은 강의계획이 없으신지 여쭤보고싶습니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
connect.sid를 쿠키에 넣는 시점과 express-session
req.login를 통해 req.session에 { 랜덤값: 유저아이디}를 저장하는 건 알겟는데, connect.sid=랜덤값을 쿠키에 넣는 시점은 언제인가요?그리고 서버가 connect.sid를 세션 쿠키로 전송할 때, express-session 은 자동으로 이 값을 secret으로 서명하여 전송하나요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
한번만 도와주세요 오류를 못찾겠습니다.
사이드 바에 skill이랑 project만 페이지 오류가발생합니다. skill 들어갔을떄 오류 로그는 project 들어갔을떄 오류 로그 깃허브 주소:https://github.com/kimauto/portfolio-kimauto이렇게 오류가 뜨면 No static resource admin/skill저는 skill 컨트롤러,서비스,DTO 가서 제가 코드 실수를 했나 먼저 확인하고 용백님 깃헙 소스코드랑 비교하면서 오류 체크를 했습니다. 이렇게 오류를 접근하는 방식이 맞나요? 무슨 문제일까요?
-
해결됨Real MySQL 시즌 1 - Part 1
JPA 사용시 테이블수정에 궁금한점이있습니다
안녕하세요. 현재 JPA를 사용하고있는데 말씀해주신대로 varchar(255)를 기본 string 값으로 잡고있더라고요 이부분을 필요한만큼 테이블수정을 기하는것이 좋은 설계인것인가요? 아니면 jpa 기본권장스펙대로 가는게좋은건가요?
-
해결됨Real MySQL 시즌 1 - Part 1
복합인덱스 정렬
안녕하세요. 강의를 잘 듣고 있는 수강생입니다.강의를 듣다가 좀 다른 결일 수도 있는 궁금증이 있습니다.범위기반 데이터 조회에 아래 예시에서 order by finished_at, id 부분에서 finished_at이 범위검색 쿼리로 들어가는데 이런 경우 뒤에 있는 id는 인덱스를 타지 않는 것으로 알고 있습니다. 그럼 id로 범위 검색하려고 하면 finished_at으로 검색된 범위 안 전체 데이터를 전부 스캔하게 되나요?select * from payments where finished_at ≥ ‘시작날짜’ and finished_at < ‘종료날짜’ and id > 8 order by finished_at, id limit 30
-
미해결[웹 개발 풀스택 코스] Node.js 프로젝트 투입 일주일 전 - 기초에서 실무까지
sql버전안맞음
저의 경우 client sql 버전이 안맞다고 나옵니다 workbench는 8.0Mysql 9.0 Configurator로 설치했습니다 stackoveflow에서 찾아보니ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Where root as your user localhost as your URL and password as your passwordThen run this query to refresh privileges:flush privileges;Try connecting using node after you do so.If that doesn't work, try it without @'localhost' part. 이런 답변이 있는데 어떻게 적용하는지 알 수 있을까요?
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
express.static의 요청 처리
app.use('/', express.static(path.join(__dirname, 'public')));다른 코드들에서는 이런 식으로 경로를 지정하면 경로와 똑같은 요청만 처리를 하거나 모든 요청에 대해 처리하고 싶으면 그냥 경로를 생략하였는데 express.static은 왜 localhost:3000/ 에 대한 요청만 받아들이는 것이 아니라, 모든 요청에 대해 해당 파일이 있는지 확인하게 되는지 궁금합니다. 예시)localhost:3000/about -> public 폴더 안에 about 파일이 있는지 찾음 localhost:3000/hello.css-> public 폴더 안에 hello.css 파일이 있는지 찾음express.static은 특별한 미들웨어 인가요?
-
해결됨200억건의 데이터를 MySQL로 마이그레이션 할 때 고려했던 개념과 튜닝 방법
Deadlock Case 4분 45초 질문
안녕하세요. Deadlock Case 4분 45초 예제가 어떤 상황을 말씀하시는건지 잘 이해가 안돼 질문남깁니다.다음과 같이 설명해 주셨는데요```1. 테이블 A/B, 트랜잭션 X/Y가 존재2. 트랜잭션 X는 A테이블을 수정, 트랜잭션 Y는 B테이블을 수정3. 2번의 두 요청은 멀티스레드 환경에서 거의 동시에 요청이 들어옴4. 이후 A테이블에서는 세션으로서 전송이 되어서 한 번에 처리를 하려 함5. X트랜잭션은 A테이블을 수정한 다음 B테이블을 수정하려 함...```5. X트랜잭션은 A테이블만 수정한다 했던거 같은데 B테이블은 왜 수정하나요?4. 세션으로서 전송이 되어서 한 번에 처리를 하려한다는게 어떤 얘기일까요? 5번과 연관지어 생각했을 때 하나의 트랜잭션에 여러 요청이 들어오는 걸 세션으로 전송된다고 말씀하신건가요? 그래서 하나의 세션에 A테이블을 수정하는 작업과 B테이블을 수정하는 작업 두개가 들어온거일까요?
-
해결됨Real MySQL 시즌 1 - Part 1
LATERAL 키워드는 mysql8 에서 잘 지원 되나요?
제목 그대로 입니다.저는 지금 11.4.2-MariaDB-ubu2404 버전을 사용 하고 있는데요.. lateral 키워드를 인식을 못합니다.검색 해서 알아보니 마리아디비 및 mysql 에서는 lateral 키워드를 완벽히 지원 못한다는 내용이 있던데요..원래 PostgreSQL 에서 지원하는 기능 이었다고 하던데요.. mysql 8 강의에서 소개를 하고 있다면 사용 가능한 것 일텐데..저의 데이터베이스 세팅 등이 이상한 걸까요?mysql 8 버전으로 테스트를 해봐야 할까요?lateral 설명을 보니 많은 도움이 될 것 같아 꼭 사용 하고 싶은 기능인데.. 왜 안되는지 알 수가 없네요.. 왜 그럴까요??SELECT e.emp_id, e.emp_name, l.recent_salary, l.salary_dateFROM employees eLEFT JOIN LATERAL ( SELECT salary AS recent_salary, date AS salary_date FROM salary_history sh WHERE sh.emp_id = e.emp_id ORDER BY date DESC LIMIT 1) AS l ON TRUE;하면SQL Error [1064] [42000]: (conn=9) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(이런 에러가 생깁니다.LATERAL 을 인식 못하는 것 같습니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
`app.use`의 용도에 대해 질문 드립니다!
궁금한 점이 있습니다. 지금까지는 다음과 같이 app.use 안에 요청 처리를 위한 미들웨어를 작성했는데, app.use((req, res, next) => { console.log("모든 요청에 실행하고 싶어요"); next(); });다음과 같이 app.use에 다운받은 미들웨어를 장착하는 건 "이 파일에서 특정 미들웨어를 사용하겠다"는 의도로 사용하는 건가요?? 아니면 둘 다 같은 동작을 하는건데 제가 둘을 다르다고 생각하는 걸까요?app.use(morgan("dev")); app.use(cookieParser()); app.use(express.json()); app.use(express.urlencoded({ extended: true }));추가로, 위 미들웨어들로 인해 req이나 res 객체에서 편하게 .cookie나 .body를 사용할 수 있게 되는데 그럼 미들웨어 내에서 미들웨어를 사용하는 건가요 🤔🤔?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
ProjectSkill과 Skill 객체 생성 관련 질문있습니다.
테스트코드 작성하는 강의를 막 마치고, html '/test' 생성하여 확인하는 강의를 진입하여 듣던중,test만 돌리다 오랜만에 datainitilizer가 불리도록 run을 하니,org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataInitializer': Invocation of init method failedCaused by: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : com.mkim.portfolio.domain.entity.ProjectSkill.skill -> com.mkim.portfolio.domain.entity.Skill 이런 에러가 발생하였습니다.테스트코드 작성 강의전에는 정상적으로 datainitializer 호출되었고, 테스트 케이스도 전부 패스한 상황이라 무엇이 문제인가 계속 확인을 하는데 이해한 바로는 ProjectSkill이 Skill 엔티티를 참조해야하지만 아직 생성이 안된 상태라 발생하는것처럼 이해하였는데, val java = Skill(name = "Java", type = SkillType.LANGUAGE.name, isActive = true) val kotlin = Skill(name = "Kotlin", type = SkillType.LANGUAGE.name, isActive = true) val python = Skill(name = "Python", type = SkillType.LANGUAGE.name, isActive = true) val spring = Skill(name = "Spring", type = SkillType.FRAMEWORK.name, isActive = true) . . . skillRepository.saveAll( mutableListOf( java, kotlin, spring, . . . ) . ... ..... project1.skills.addAll( mutableListOf( ProjectSkill(project = project1, skill = java), ProjectSkill(project = project1, skill = spring), ProjectSkill(project = project1, skill = mysql), ProjectSkill(project = project1, skill = redis) ) )이렇게 작성하여 부르면 에러가 나지만val skills = mutableListOf( Skill(name = "Java", type = SkillType.LANGUAGE.name, isActive = true), Skill(name = "Kotlin", type = SkillType.LANGUAGE.name, isActive = true), Skill(name = "Python", type = SkillType.LANGUAGE.name, isActive = true), Skill(name = "Spring", type = SkillType.FRAMEWORK.name, isActive = true), Skill(name = "Django", type = SkillType.FRAMEWORK.name, isActive = true), Skill(name = "MySQL", type = SkillType.DATABASE.name, isActive = true), Skill(name = "Redis", type = SkillType.DATABASE.name, isActive = true), Skill(name = "Kafka", type = SkillType.TOOL.name, isActive = true) ) skillRepository.saveAll(skills) . ... ..... project1.skills.addAll( mutableListOf( ProjectSkill(project = project1, skill = skills[0]), // Java ProjectSkill(project = project1, skill = skills[3]), // Spring ProjectSkill(project = project1, skill = skills[5]), // MySQL ProjectSkill(project = project1, skill = skills[6]) // Redis ) ) 이와 같이하면 에러가 살아집니다...무엇이 달라 차이를 만드는지가 너무 궁금하여 질문 남겨요감사합니다, 전체 현재까지 코드 깃허브
-
해결됨인프라공방 - 그럴듯한 서비스 만들기
섹션1과 섹션2의 연계성 관련 질문
안녕하세요, 현재 EC2 프리티어 한대를 통해 웹 프로젝트를 오픈 준비 중인 대학생입니다!현재 저에게 당장 필요한 내용은 EC2 서버와 관련된 성능 지표를 측정하고, 리눅스 서버 구조를 이해하는 것 등인데 이것은 섹션2의 강의 내용에 해당하는 것 같더라구요.그래서 섹션2를 먼저 들으면서 현재 관리 중인 EC2에 적용해보고, 이후에 섹션1을 듣고자 하는데이렇게 해도 강의를 듣는데는 큰 문제가 없는지 궁금합니다!
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
테스트코드 실패
안녕하세요, 테스트코드 결과가 계속 실패되는데... 이유를 찾지 못하여 질문 드립니다. BeforeAll에서 projects를 디버그찍어 skills안의 skill확인 하면 제대로 들어간것이 보이는데, 테스트에 진입을 하면 skills가 0이 되는데...다른 변수들은 다 들어가고 skills만 0이 되는 상황입니다... 어디서 부터 실수를 만든건지 파악이 안되어 도움을 요청드립니다. 아래 현재 문제가 있는 코드 남깁니다.Git 저장소
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
어떤 객체가 이벤트를 발생시키는지
여러 챕터에서 객체의 on 메서드를 사용하는 코드가 자주 보여서 개념에 대해 알아보았습니다.const fs = require("fs"); console.log("before:", process.memoryUsage().rss); // 메모리 체크 // 스트림 방식으로 파일 읽고 보내기 const readStream = fs.createReadStream("./big.txt"); const writeStream = fs.createWriteStream("./big3.txt"); readStream.pipe(writeStream); readStream.on("end", () => { console.log("stream: ", process.memoryUsage().rss); });그런데 이렇게 이벤트가 발생하는 객체의 종류를 모두 외우고 있어야 하나요? 아니면 이 객체가 이벤트를 발생시키는지 예상(?), 판단할 수 있는 기준이 있나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
45강 배포후
jar명령어까지 하여 스프링부트를 실행해주었는데 다음과 같은 오류가 뜨고 웹에서도 서버 내부 오류라고 뜹니다. 무엇이 잘못된건지 모르겠네요.https://www.inflearn.com/community/questions/1199055/45%EA%B0%95-dev-%EC%97%B0%EA%B2%B0-%EC%97%90%EB%9F%AC 이거 참고해도 이해가 안가요