묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    해결됨Real MySQL 시즌 1 - Part 2unique index가 걸린 상황에서 s-lock, x-lock 질문안녕하세요?먼저 좋은 강의 감사합니다. 7:50쯤 unique 제약조건이 걸린 상황에서 deadlock이 발생하는 경우에 질문이 있어서 글 남깁니다. 말씀주신 시나리오는unique index가 걸린 컬럼이 delete가 수행되면서, 동시에 insert into 구문이 들어오는 상황으로 말씀주셨는데요. unique index는 s-lock을 꼭 필요로 한다면,delete가 선행되지 않는 상황에서도 deadlock이 발생해야되는거 아닌가? 싶습니다. 상상하는 예시는 다음과 같습니다.tx-1 : begin; insert into tab(pk) values(2) (index 2 또는 그 범위에 s-lock) tx-2 : begin; insert into tab(pk) values(2) (index 2 또는 그 범위에 s-lock)tx-1 : commit; -> index 2에 x-lock을 잡으려고 하지만 tx-2가 s-lock을 잡고 있어서 잡을 수 없음 하지만, 실제로 테스트 해보았을 때는tx-1이 commit시에 정상적으로 insert 되고, tx-2는 duplicated key 오류를 반환합니다. 왜 이런지 알 수 있을까요?감사합니다 😃 다시 한 번 생각해보니, tx-1은 pk=2 가 없기 때문에 insert 후 x-lock으로 전환하고, tx-2는 x-lock으로 인해 lock_wait인 것 같습니다. 혹시 맞을까요?delete 가 선행된 경우는 이미 있는 레코드에 tx-1,2가 s-lock이을 잡으면서 delete가 commit된 시점에 tx-1,2가 x-lock을 획득하려는데서 dead lock이 발생하는 것이고요 
- 
      
        
    해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기JwtProvider 를 Component 로 선언하신 이유가 궁금합니다.안녕하세요 지식공유자님. 강의에서 JwtProvider 에 @Component 어노테이션을 선언하셔서 스프링이 관리하도록 의도하신 것 같습니다. 그런데, 함수에 static 을 모두 붙이시고, 사용하는 쪽에서는 bean 으로 등록 하지 않고 static util 처럼 사용하시는 것을 확인했습니다.질문은 두가지 입니다.@Component 를 선언하셨음에도 static 메서드를 authService 에서 사용하신 이유가 있으신지.빈으로 만들고서도 static 함수로 사용하는 것에 이점이 있는 것인지.답변 부탁드리겠습니다. 감사합니다. 
- 
      
        
    미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]안녕하세요 코드 관련 질문이 있습니다!최태현 강사님의 강의를 들으며 잘 배우고 있습니다!강사님의 코드를 보고 이해하며 따라가다가도 코드를 잘못 작성해 오류가 뜨는 경우가 많아 강사님 코드 전체를 보고 클론코딩을 하고 싶어 글 올립니다! 혹시 전체 코드를 받을 수 있을까요? 
- 
      
        
    해결됨200억건의 데이터를 MySQL로 마이그레이션 할 때 고려했던 개념과 튜닝 방법lock의 순서를 지켜주자는 말의 뜻안녕하세요? 질문이 있습니다.6분 20초쯤 "여러 데이터를 수정할 때는 발생하는 lock의 순서를 지켜주자" 라는 말을 이해하지 못했습니다. 좀 더 자세히 설명 가능하실까요?트랜잭션 X에서는 A -> B 를 수정한다. 트랜잭션 Y에서는 B -> A 를 수정한다. Deadlock 발생할 가능성이 있음은 이해했습니다. 여기서 lock의 순서를 지킨다는 것이 무슨 뜻일까요?트랜잭션 Y도 A -> B 흐름으로 수정하도록 만들라는 뜻인가요?그렇다면 이해는 되지만, 트랜잭션 Y가 B -> A 로만 수정해야하는 상황이라면 어떻게 해소해야 하는지 궁금합니다. 감사합니다 :) 
- 
      
        
    해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기안녕하세요 연관관계에 대해 질문이 있습니다.안녕하세요 지식공유자님.User 클래스의 credentials 필드에 lazy loading 관련하여 설명을 해주셨는데요, 제가 알기로는 mappedBy 가 있는 쪽에서는 LAZY 로딩이 동작하지 않는 것으로 알고 있습니다. 즉, 연관관계의 주인인 UserCredentails 쪽에만 적용하는 것이 맞다고 생각이 드는데 제 생각이 맞을까요? 
- 
      
        
    해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기안녕하세요 MySqlConfig 설정에 대해 질문이 있습니다.안녕하세요 지식 공유자님.MySqlConfig 클래스에 대해 질문이 있습니다. yml 에 이미 mysql 정보들을 설정했는데 MySqlConfig 클래스에서도 @Value 를 통해 설정정보를 또 작성하는 것은 무엇을 위함인것일까요?제가 알기로는 Spring Boot의 자동 설정이 application.yml의 설정들을 자동으로 읽어와서 DataSource bean으로 구성하는 것으로 알고있는데 다시 작성하는 이유가 궁금합니다. 감사합니다. 
- 
      
        
    미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]mysql 연결 관련 에러 질문있습니다안녕하세요 선생님. 실습 과정중 mysql과 연결이 잘 안 되는 것 같아 질문드립니다 처음에 있었던 에러였는데요 화면 접속 자체는 잘 되는데 이름과 나이를 저장하면 2024-11-28 16:57:49.886 ERROR 13764 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.group.libraryapp.dto.user.request.UserCreateRequest]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.group.libraryapp.dto.user.request.UserCreateRequest (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]] with root cause com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.group.libraryapp.dto.user.request.UserCreateRequest (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]이런 오류가 떴습니다. 검색해보니 UserCreateRequest에 기본 생성자를 만들라고 해서 만든 후 실행하니 이 오류는 안뜨긴합니다. 인자 있는 생성자가 있었는데 왜 기본 생성자를 만들어야하는건가요? 지금 제 코드가 꼬여서 그런걸까요?또한 에러 해결 방법으로 애노테이션 누락: Jackson 라이브러리에서 객체를 직렬화/역직렬화할 때 필요한 애노테이션이 누락되었을 수 있습니다. 예를 들어, 생성자에 @JsonCreator와 각 필드에 @JsonProperty를 추가해 보세요.이런 방법을 추천하는데 이건 무엇인가요?? 위 에러 고친 이후에는 SQL 문법 오류가 발생하는데요 선생님과 똑같이 문법을 사용했는데 왜 오류가 생기는지 모르겠습니다.. sql에 테이블 자체는 잘 생성되어있는 상태입니다 
- 
      
        
    미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지리눅스 노드 설치시 패키지build-essential이면 충분한가요?libvips-devopenssl-dev / libssl-dev 위 두개는 필요없나요? 
- 
      
        
    해결됨비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)인덱스 많은 테이블에서 데이터 많아질 수록 insert 속도 증가-- 테이블 A: 인덱스가 없는 테이블CREATE TABLE test_table_no_index (id INT AUTO_INCREMENT PRIMARY KEY,column1 INT,column2 INT,column3 INT,column4 INT,column5 INT,column6 INT,column7 INT,column8 INT,column9 INT,column10 INT); -- 테이블 B: 인덱스가 많은 테이블CREATE TABLE test_table_many_indexes (id INT AUTO_INCREMENT PRIMARY KEY,column1 INT,column2 INT,column3 INT,column4 INT,column5 INT,column6 INT,column7 INT,column8 INT,column9 INT,column10 INT); -- 각 컬럼에 인덱스를 추가CREATE INDEX idx_column1 ON test_table_many_indexes (column1);CREATE INDEX idx_column2 ON test_table_many_indexes (column2);CREATE INDEX idx_column3 ON test_table_many_indexes (column3);CREATE INDEX idx_column4 ON test_table_many_indexes (column4);CREATE INDEX idx_column5 ON test_table_many_indexes (column5);CREATE INDEX idx_column6 ON test_table_many_indexes (column6);CREATE INDEX idx_column7 ON test_table_many_indexes (column7);CREATE INDEX idx_column8 ON test_table_many_indexes (column8);CREATE INDEX idx_column9 ON test_table_many_indexes (column9);CREATE INDEX idx_column10 ON test_table_many_indexes (column10); -- 높은 재귀(반복) 횟수를 허용하도록 설정-- (아래에서 생성할 더미 데이터의 개수와 맞춰서 작성하면 된다.)SET SESSION cte_max_recursion_depth = 100000; -- 인덱스가 없는 테이블에 데이터 10만개 삽입INSERT INTO test_table_no_index (column1, column2, column3, column4, column5, column6, column7, column8, column9, column10)WITH RECURSIVE cte AS (SELECT 1 AS nUNION ALLSELECT n + 1 FROM cte WHERE n < 100000)SELECTFLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000)FROM cte; -- 인덱스가 많은 테이블에 데이터 10만개 삽입INSERT INTO test_table_many_indexes (column1, column2, column3, column4, column5, column6, column7, column8, column9, column10)WITH RECURSIVE cte AS (SELECT 1 AS nUNION ALLSELECT n + 1 FROM cte WHERE n < 100000)SELECTFLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 1000)FROM cte;를 그대로 사용했는데,index 가 많은 테이블에 데이터가 많아질 수록 insert 시 속도가 느려져야 될 것 같은데 느려지지 않는 것 같습니다. auto commit 모드이고 결과는 1차 : 10만개 삽입시 소요시간 3s2차 : 10만개 삽입시 소요시간 4s3차 : 10만개 삽입시 소요시간 4s4차 : 10만개 삽입시 소요시간 4s5차 : 10만개 삽입시 소요시간 4s6차 : 10만개 삽입시 소요시간 4s입니다. 뭔가 db 환경 문제일까요? db : MariaDBversion: 10.6.15 입니다. 
- 
      
        
    미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)퀘스트 관련 질문 드립니다.안녕하세요. 강의를 보다가 퀘스트 관련해서 몇가지 궁금한 점이 생겨 글을 남깁니다.QuestTask 정보를 string화 해서 DB에 저장하시던데, 저럴 경우 운영적인 측면에서는 이슈가 없을까요? (DB 마이그레이션이라던지)Dialogue의 진행은 클라이언트에서 진행되고 Dialogue가 완료되면 Interaction을 서버로 요청하던데, 이럴 경우 클라에서는 Dialogue가 진행됐지만 서버에서 실패할 수 있는 상황이 생길 것 같은데요. Dialogue 같은 건 원래 클라이언트가 주도적으로 진행을 하나요?일반적인 MMO를 보면 Quest가 완료된 후에 Dialogue가 출력되거나 Npc가 특정 위치로 이동을 하거나 특정 지역으로 Pc가 Teleport를 하는 등 서버에서 동기화를 맞출필요가 있는 일들이 여럿 발생하던데.. 이런 처리는 일반적으로 어떻게 구현 할까요?언제나 좋은 강의 감사드립니다~ 
- 
      
        
    미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]localhost ui 화면이 연결이 안돼요저번에 실행했을 땐 잘 연결됐는데 지금은 이렇게 사진처럼 연결되지가 않네요.... 왜 이런건가요..?서버도 실행한 상태에서 local 주소를 입력했는데 이렇게 된 상태입니다.혹시 몰라 서버를 실행했을 때 에러가 뜨는 부분들을 다 캡쳐했습니다. 
- 
      
        
    미해결백엔드 개발자 성능 개선 초석 다지기현업에서의 부하테스트 및 Ngrinder 설치현업에서의 부하테스트와 Ngrinder 사용에 대해 질문드립니다. 현업에서는 부하테스트용 서버(e.g. Stage 서버)를 두고 해당 서버에 부하테스트를 하는지, 아니면 로컬에 띄워두고 간략하게 테스트를 하는지 궁금합니다.Ngrinder를 어떤 서버에 설치하는지 궁금합니다.별도의 IDC 서버에 설치한 후, 팀 내 개발자가 모두 해당 Ngrinder를 사용해 부하테스트를 적용하는지, 아니면 Ngrinder는 로컬 컴퓨터(개인 노트북 등)에 설치 후 부하 테스트 대상 서버만 Stage 환경 등에 두고 해당 서버에 테스트를 하는지 궁금합니다. 
- 
      
        
    미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지morgan모듈이 cors 문제가 발생할때만 OPTIONS 메서드가 로깅이 되는 이유가 궁금합니다.cors 정책 적용// routes/v2.js const express = require("express"); const { verifyToken, apiLimiter } = require("../middlewares"); const { createToken, getMyPosts, getPostsByHashtag, corsWhenDomainMatches, getFollowersByUser, getFollowingsByUser, } = require("../controllers/v2"); const router = express.Router(); // router.use((req, res, next) => { // res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000"); // res.setHeader("Access-Control-Allow-Headers", "content-type"); // next(); // }); router.use(corsWhenDomainMatches); // CORS 정책 적용 미들웨어 // 토큰 발급 라우터 // /v2/token router.post("/token", apiLimiter, createToken); ... module.exports = router;morgan 로깅 CORS 정책 미적용// routes/v2.js const express = require("express"); const { verifyToken, apiLimiter } = require("../middlewares"); const { createToken, getMyPosts, getPostsByHashtag, corsWhenDomainMatches, getFollowersByUser, getFollowingsByUser, } = require("../controllers/v2"); const router = express.Router(); // router.use((req, res, next) => { // res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000"); // res.setHeader("Access-Control-Allow-Headers", "content-type"); // next(); // }); // router.use(corsWhenDomainMatches); // CORS 미들웨어 비활성화 // 토큰 발급 라우터 // /v2/token router.post("/token", apiLimiter, createToken); ... module.exports = router; morgan 로깅찾아보니 OPTIONS 메서드는 CORS 문제 때문이 아닌 브라우저는 요청을 보내기전 OPTIONS 메서드로 먼저 예비요청을 보낸다는 것을 알았습니다. 그렇다면 OPTIONS 메서드는 모든 요청마다 예비 요청으로 이뤄지고 있을텐데 왜 CORS 문제일때만 OPTIONS 메서드가 로깅이 되는지 궁금합니다. 
- 
      
        
    해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)스포닝풀 작업하는거 질문드려요제가 강의를 놓친걸수도 있는데 질문드려서 죄송합니다.스포닝풀을 스크립터블 오브젝트로 관리하는데 (M1 에서는 타일맵에 찍어서 관리 했었던걸로 기억합니다)스크립터블 오브젝트로 Pivot PosX , Pivot PosY 를 어떻게 직관적으로 보고 작업 할수 있나요? 그냥 찍어서 좌표 확인하는건지 아니면 더 편한 방법이 있는건지 궁금해서 질문남겨요 
- 
      
        
    해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기MySQL을 미리 설정을 해놔야할까요?start.sh 하는데 계속 jpa에서 연결하는 데 문제가 있는거 같아서요.혹시 이를 세팅하는 부분이 다른 강의에 있는것일까요? 
- 
      
        
    해결됨이거 하나로 종결-스프링 기반 풀스택 웹 개발 무료 강의다운로드 불가1강 소개 자료 zip 파일이 압축 해제가 안 됩니다! 
- 
      
        
    미해결비전공자도 이해할 수 있는 DB 설계 입문/실전통계 수치와 관련된 컬럼배운 내용을 적용해보면서 궁금한 점이 생겨 질문드립니다.게시판 특성상 계속해서 게시물이 쌓이게 되어 데이터의 양이 늘어날 것이라 생각합니다.일반적으로 게시글 상세 페이지로 들어가기 전에 페이징된 게시물 리스트를 보면 해당 게시글의 제목, 조회 수, 좋아요 수 등이 표시되기도 하는데그렇다면 보통 현업에서는 각각의 좋아요 수 쿼리와 조회 수 쿼리를 날려서 많은 데이터들을 그때그때 full scan하도록 하는지 아니면 역정규화를 수행하여 원래 테이블에 좋아요 수나 조회 수 컬럼을 붙여 넣는지 궁금합니다. 
- 
      
        
    미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]프론트 코드 부탁드립니다!안녕하세요 강의 잘듣고있습니다! 프론트 코드도 확인해보면서 공부하고싶어서 프론트 코드 부탁드립니다. backendgoat0915@gmail.com 이 이메일로 보내주시면 감사드리겠습니다. 감사합니다! 
- 
      
        
    미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기insert into 구문insert into 구문 따라하면서 익히고 있는데 결과값이 선생님과 상이하게 나와서 질문드려요 ㅜㅜ 어디서 뭘 잘못하고 있는 걸까요...? 그리고 char이랑 varchar이 뭔지 자세하게 설명해 주실수 있으실까요...? 
- 
      
        
    미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기PDF 자료 문의안녕하세요 선생님,강의 잘 듣고 있습니다. 그런데 혹시 강의자료를 PDF로 전달 받을 수 있을까요? 
