묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨대용랑 채팅 TPS에 대한 stateful 서비스 구축하기
동영상 오타.
대용랑 채팅 TPS에 대한 stateful 서비스 구축하기Kafka의 Pub/Sub Modeling을 활용해서, 데이터를 관리해봐요. 편에서 config.toml 파일에서 [kafka]URL 보시면 localhost:9292로 오타네요. 9092가 맞는거 아닌가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
연관관계 관련 질문 있습니다.
public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream() .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalArgumentException::new); targetHistory.doReturn();리팩토링 강의에서 repository 사용없이 this.userLoanHistories.stream()로 바로 데이터를 불러오던데 mappedBy로 연관관계가 존재하면 가능한건가요?
-
미해결입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
도커로 크롬에서 프로그램 열기
안녕하세요.크롬에서 프로그램을 열 수 없습니다. (11:00)https://github.com/bohuiKang/portfolio_bohui아래에 에러 메시지입니다. 어떤 부분이 문제인지 찾지 못했습니다.. 어디가 문제인지 알 수 있을까요?2024-12-12 18:14:04 2024-12-12T09:14:04.434Z INFO 1 --- [nio-8080-exec-8] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...2024-12-12 18:14:04 2024-12-12T09:14:04.434Z WARN 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S012024-12-12 18:14:04 2024-12-12T09:14:04.434Z ERROR 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure2024-12-12 18:14:04 2024-12-12 18:14:04 The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.2024-12-12 18:14:04 2024-12-12T09:14:04.436Z WARN 1 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata2024-12-12 18:14:04 2024-12-12 18:14:04 org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection [Communications link failure...2024-12-12 18:14:04 2024-12-12T09:14:04.574Z WARN 1 --- [ main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)...2024-12-12 18:14:21 2024-12-12T09:14:21.680Z WARN 1 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S012024-12-12 18:14:21 2024-12-12T09:14:21.680Z ERROR 1 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure2024-12-12 18:14:21 2024-12-12 18:14:21 The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.2024-12-12 18:14:21 2024-12-12T09:14:21.742Z INFO 1 --- [nio-8080-exec-1] c.b.p.a.advice.AdminApiControllerAdvice : Could not open JPA EntityManager for transaction2024-12-12 18:14:21 2024-12-12 18:14:21 org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction...
-
미해결Real MySQL 시즌 1 - Part 1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
안녕하세요. 2강을 수강하면서 궁금한 점이 있어 질문 글 남깁니다. VARCHAR(30) vs VARCHAR(255) 둘 중에서 데이터 타입을 선택할 때 실제 사용하는 길이만큼만 명시해 주는 게 메모리 사용 효율을 높일 수 있다고 말씀해주셨는데요.VARCHAR(30)와 VARCHAR(255) 모두 저장되는 데이터의 길이 정보를 1 바이트(0~255 표현 가능)로 저장하는 것이 맞는걸까요?강의 자료에 VARCHAR(30) vs VARCHAR(255) 차이를 설명할 때 '디스크 공간 효율 차이도 미미하게 존재(1바이트 vs 2바이트)'라고 적혀 있어 VARCHAR(255)에서 저장되는 데이터 길이 정보에 2바이트의 공간을 할당한다는 의미로 이해되어서요. 좋은 강의 감사합니다.
-
미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
json 배열 파싱
안녕하세요..! JSON 파싱에 대해선 강의에 안나와서 질문드립니다..! 한 컬럼에 파싱해야될 제이슨이 배열 형태로 여러개 있을 경우 어떻게 추출해야될지 궁금합니다. 컬럼명을 a 라고 예시로 들자면 a = { 과일=[{"이름" : "사과", "가격" : 2,000}], 음식=[{"이름" : "햄버거", "가격" : 7,500}] , 과일=[{"이름" : "사과", "가격" : 2,000}]} 이런식으로 [ { } ] , [ { } ], [ { } ] 이렇게 여러개가 있습니다 ! unnest 활용해서 a 컬럼 내 "과일"에 대한 item들을 cross join 해서 가져오는건 성공했는데 나머지 값들은 어떻게 추출하는지 모르겠어서 다른 방법이 있는지 궁금합니다!
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
리니지1의 이동 질문
한때 오랫동안 리니지를 즐겼던 유저로써 리니지1의 이동은 어떤식으로 구현되었을까요?리니지에서 이동중에 서버렉이 걸리면 케릭터가 찍은 좌표로 클라의 케릭터는 계속 걸어갑니다.렉이걸린시점부터의 클라시점 밖의 NPC나 몬스터는 표시가 안되고 렉이 풀리면 클라 포지션이 렉이 걸린 시점의 포지션으로 순간이동하는 렉이 있었는데요 통신이 안되도 케릭은 일정타이밍까지는 이동이 됩니다.그러타면 서버에서는 도착좌표만 주고 클라에서 보간처리로 이동을 한다는 말이될것같은데그렇게 따지면 클라의 보간처리로 이동한다면 다른 케릭에의해서 길이 막혔을 때 처리가 안될것 같습니다.지금 프로젝트의 구현과 리니지1의 이동 동기화의 차이점도 궁금합니다.
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
버그에대한 썰
현재 프로젝트를 진행하는 과정에서 버그를 어떻게 발견했으며 문제의 코드를 어떻게 추적했고어떠한식으로 수정했다 그래서 느낀점은 이렇다등의 기억에 남는 버그가 있다면 짧게나마 썰을 풀어주시면 그것또한 큰 도움이 될것같아서 제안드립니다 ^^;
-
미해결MySQL 성능 최적화
performance_schema.events_stages_history_long, performance_schema.events_statements_history_long 테이블에 데이터가 쌓이지 않고 있습니다.
안녕하세요 우선 좋은 강의 남겨주셔서 감사합니다. 인덱스 다이브 최적화 영상을 보고 따라 해보았는데요. SHOW VARIABLES LIKE 'performance_schema';`performance_schema` 퍼포먼스 스키마 조회를 하게된다면 이렇게 ON 으로 되어 있습니다.UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%'; UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_statements%%';퍼포먼스 스키마에 필요한 지표들을 수집 하도록 하고 테이블에 저장 할 수 있도록 해당 쿼리문을 실행 했습니다. 이에 대한 해당 테이블 조회 값 입니다. (performance_schema.setup_instruments 테이블은 너무 많아 생략하고 performance_schema.setup_consumers 만 보여드립니다.) 그리고 해당 orders 테이블을 조회 하고 나서SELECT stages.EVENT_ID, statements.EVENT_ID, statements.END_EVENT_ID, statements.SQL_TEXT, stages.EVENT_NAME, stages.TIMER_WAIT / 100 FROM performance_schema.events_stages_history_long AS stages JOIN performance_schema.events_statements_history_long AS statements ON (stages.EVENT_ID >= statements.EVENT_ID AND stages.EVENT_ID <= statements.END_EVENT_ID) WHERE stages.EVENT_NAME LIKE '%statistics%' AND statements.SQL_TEXT LIKE '%FROM orders%' AND statements.SQL_TEXT NOT LIKE '%SELECT stages.EVENT_ID,%' ORDER BY statements.EVENT_ID DESC; performance_schema 를 통해 성능 비교 했는데요. 아무것도 나오지가 않습니다. 실제로performance_schema.events_stages_history_longperformance_schema.events_statements_history_long이 테이블이 아무것도 쌓이지 않는다는 것을 확인하였습니다. 왜 이런 현상이 나타나는걸까요? 참고로 버전은 MySQL (ver. 9.1.0) 이고 docker 를 이용해 서버를 구동했었습니다.
-
미해결Real MySQL 시즌 1 - Part 1
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
안녕하세요. 강의 잘 듣고 있습니다. 제가 이해한바로는 LIMIT, OFFSET은 앞에서부터 data를 순차적으로 읽기때문에 성능 상 좋지 않고 이를 개선하기 위해 범위 기반 방식을 사용한다고 이해하였습니다.범위 기반 방식은 직접 ID 값을 지정 해주는 방식이며, id 기반으로 5000단위로 조회한다고 가정하면1회차: select * from users where id > 0 AND id <= 50002회차: select * from users where id > 5000 AND id <= 1000위와 같이 구현될 것으로 예상됩니다.관련해서 궁금한 점이 생겼는데요. 결국 두번째 쿼리를 실행 시 5000보다 큰 id를 찾는 과정에 시간이 소요될 것으로 예상되는데요, id가 index로 지정되어있어 LIMIT, OFFSET 방식보다 빠르게 찾을 수 있는 것인가요??LIMIT, OFFSET 방식 사용 시 어떤 컬럼이 index로 지정되어있는지와 상관없이 무조건 순차 탐색이 일어나는 것이고 범위 기반으로 조회 시 index로 서치하기때문에 더 빠르게 시작점을 탐색할 수 있다고 이해하면 될까요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
포탈 프로젝트에 서버 코드에 에러가 뜨네요
포탈 프로젝트에 ELeavType이 없다고 에러가 뜨는데 어떻게 하면 되나요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
아이템 수량에 관해서 질문입니다.
DB에서 겹쳐지는 아이템 하나의 컬럼에 수량 1000개를 그대로 저장하고 클라에게 1000개 그대로 보내서 1000개를 50개씩 20개로 쪼게는 부분은 클라딴에서 처리하는 방식은 안되는건가요?
-
미해결Real MySQL 시즌 1 - Part 2
unique 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 입니다.