묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
인덱스 데이터 흐름
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?3-6. 쿼리플랜이란? 여기까지 이해하신 내용은 무엇인가요?옵티마이저가 스토리지 엔진으로부터 가장 효율적으로 데이터를 가져오기 위해 쿼리플랜을 작성한다는 것을 이해했습니다. 2. 어려움을 겪는 부분어떤 개념이 헷갈리시나요?이때 인덱스를 참고해서 데이터를 가져온다면 이 인덱스는 메모리에 올라와 있는 상태인가요?? 아니면 디스크에 있는 인덱스를 확인하고 디스크에서 데이터를 가져오는 건가요? 데이터를 가져오는 전체적인 흐름이 궁금합니다! 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
-
해결됨이거 하나로 종결 - 32시간 고품질 스프링 풀스택 웹 개발
다음강좌가 또나오나요? 언제쯤 출시되나요?
오늘 올라온 새소식보고 문의남깁니다.현재 이강좌 구입해서 아직 듣고있지않고있거든요다음강좌가 스프링부트 리액트라고하는데지금강좌랑 내용상 겹침이 거의없는건가요?? 한가지 건의를드리자면 next.js나 장고계열에선 강의들을보면 결제기능까지 탑재하는 강의내용이 많은데 유독 스프링계열강의들에선 crud까지만 강의하고 대부분의 강좌들이 결제기능구현하는내용이 없더라구요스프링공부하는이유가 쇼핑몰같은걸 갠적으로 만들어보려고 학습하는데;;;; 다음강의 출시하실예정이라면 개인이 혼자 웬만한 웹사이트 제작할수있게 결제부터 다양한 기능구현에대한 내용을 포함시켜주실수있는지 궁금합니다. 왜 스프링계열에선 결제api연동하는걸 강의하는내용들을 다루지않는지 궁금하긴하네요
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
DB에 데이터가 저장이 되지 않습니다.
내용을 다 따라한것 같은데 DB에 저장이 안되네요..
-
미해결데이터분석가 서류탈락? 알려드릴게요, 되는 포트폴리오
독학으로 데이터분석 취업 관련 질문 입니다!
안녕하세요! 강의 너무 잘 들었습니다. 덕분에 데이터분석 학습 과정에 대한 로드맵을 설정할 수 있었습니다.다름 아니라 독학으로 데이터분석 취업하기 파트에 질문이 있어 글 남겼는데요, 책을 통한 학습을 제시해주셨는데책 대신 강의 (예를들면 인프런의 강의들) 로 교체해도 무방한지아니면 책으로 하는게 더 좋을지 강의자님의 고견 구하고자 합니다.저의 백그라운드 및 목적 및 목표 설명드리자면비전공자로 현재 데이터분석 부트 캠프를 진행중이며부트캠프 수업 과정과는 별개로 스스로의 커리큘럼을 추천해주신 강의 커리큘럼을 참고해서 진행하려고 합니다.목적은 일련의 학습과정을 통해 포트폴리오를 작성할 만한 실력을 쌓는 것 이며, 이에 도달하는 과정을 최대 6개월 가능하면 3개월 이내로 줄이는 것이 목표 입니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
cache eviction 관련 질문입니다.
위의 내용과 같이 언제, 어떻게 만료 시킬 지에 대한 만료 방식을 cache eviction이라고 해주셨는데 검색해보니까 내용 상의 차이가 있다는 것을 알게 됐습니다. TTL, TTI와 같은 특정 시간, 점유 시간에 대해 발동되어 cache expiration으로 정의가 됐습니다. 반면 cache eviction은 메모리 공간이 부족한 경우 발동되어 LRU, LFU, FIFO 등으로 구분됐습니다.결국 둘 다 캐시 삭제 기법이긴 하나, 트리거 조건에 차이가 있었습니다. 면접에서 eviction 관련 질문을 받는다면 둘을 혼용해도 무방할까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요 선생님 게시글 목록 API-페이지 번호 구현 강의에서 질문 있습니다.
안녕하세요 선생님 좋은 강의 감사합니다.저희 articleController에서 readAll 부분을 보면@GetMapping("/v1/articles") public ArticlePageResponse findAll( @RequestParam("boardId") Long boardId, @RequestParam("page") Long page, @RequestParam("pageSize") Long pageSize ) { return articleService.readAll(boardId, page, pageSize); }이런식으로 pageSize를 쿼리 파라미터로 넘겨주도록 설계가 되어 있는데, pageSize라는 파라미터는 값을 받아서 처리하는 것이 아니라, 서버에서 값을 정하고 항상 똑같은 pageSize를 써야하는 것 아닌가요 ??왜 pageSize를 인자로 받는지 이해가 잘가지 않습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요 ! 강의 잘 듣고 있습니다.
안녕하세요 선생님 강의 잘 듣고 있습니다 .controller를 구현하실때 중복되는 부분을전부 다 쓰신 이유가 따로 있으신가요 ?예를 들어 ArticleController에서@RequestMapping("/v1/articles")public class ArticleController{...}이런식으로 RequestMapping 애노테이션을 붙여 중복을 줄일 수도 있는데 선생님은 전부 다 그냥 쓰셔서 어떤 의도가 있는 것인지가 궁금합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
페이지네이션 시 조회 과정 질문
현재 페이지네이션 기반 조회 시 조회 과정이 궁금해서 질문드립니다.secondary index에서 offset 위치까지 순차탐색 -> secondary index -> 클러스터링 인덱스에서 primary key 조회 -> 실제 데이터 조회일단 위 과정이 맞는지 궁금합니다.2 . 위 과정이 맞다면 이 과정에서 db에서 데이터 조회를 limit만큼 반복하는 것인지, 아니면 실제 db에서 데이터 조회는 한 번에 이루어지는 것인지 궁금합니다.페이지 조회 말고 그냥 범위 조회일 시에는 한 번에 조회되서 값이 많아도 시간 차이가 많이 안나는지 궁금합니다. offset 없이 조회해보니 바로 조회되는 거 같긴합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
값이 안변해요
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. @Test void updateTest() { update(184717674569289728L); ArticleResponse response = read(184717674569289728L); System.out.println("response = " + response); } void update(Long articleId) { restClient.put() .uri("/v1/articles/{articleId}", articleId) .body(new ArticleUpdateRequest("hi 2", "my content 22")) .retrieve(); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor @NoArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } response = ArticleResponse(articleId=184717674569289728, title=hi, content=my content, boardId=1, writerId=1, createdAt=2025-05-25T02:22:06, modifiedAt=2025-05-25T02:22:06) 이렇게 값이 안변하는 이유가 있을까요? @PutMapping("/v1/articles/{articleId}") public ArticleResponse update(@PathVariable Long articleId, @RequestBody ArticleUpdateRequest request) { return articleService.update(articleId, request); }
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Event 클래스에 제네릭을 쓰신 이유가 궁금합니다.
EventPayload 를 제네릭으로 하셨는데 단순히 다형성 이용해서 하는 거랑 차이가 뭘까요?package kuke.board.common.event; import kuke.board.common.dataserializer.DataSerializer; import lombok.Getter; @Getter public class Event<T extends EventPayload> { private Long eventId; private EventType type; private T payload; public static Event<EventPayload> of(Long eventId, EventType type, EventPayload payload) { Event<EventPayload> event = new Event<>(); event.eventId = eventId; event.type = type; event.payload = payload; return event; } public String toJson() { return DataSerializer.serialize(this); } public static Event<EventPayload> fromJson(String json) { EventRaw eventRaw = DataSerializer.deserialize(json, EventRaw.class); if (eventRaw == null) { return null; } Event<EventPayload> event = new Event<>(); event.eventId = eventRaw.getEventId(); event.type = EventType.from(eventRaw.getType()); event.payload = DataSerializer.deserialize(eventRaw.getPayload(), event.type.getPayloadClass()); return event; } @Getter private static class EventRaw { private Long eventId; private String type; private Object payload; } }
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
SnowFlake
현재 댓글 무한 depth까지 수강했는데 snowFlake를 통해 Id값을 넣고 있는데 해당 부분을 service단에서 entity.create를 통해 구현하는 점에 대해 궁금증이 생겼습니다.이런 방식으로 계속 진행이 되면 보일러 플레이트방식이 되는것 같은 느낌이 들어서 차라리 커스텀 IdentifierGenerator를 통해 Entity안에서 값을 넣어주면 어떨까하고 생각을 해보게 되었습니다. 이렇게 진행하면 기존 service를 통해 진행하는 것보다 비효율적일까요?? 두개의 차이점이 궁금합니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
physical cache miss 시, collapse 동작 안하는 상황에 대해
레디스에 physical 하게 남아있지 않은 캐시에 대해선 request collpsing이 동작하지 않습니다. 이를 해결하기 위한 방법이 따로 있을까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요, MessageRelay 관련해 궁금한 사항 생겨서 문의드립니다.
안녕하세요, 강사님늘 강의 잘 듣고 있습니다. 감사합니다.강의를 보다보니, 아래 프로세스가 발생한다면 동시성 이슈가 발생할 수 있을 것 같기도 한데요,혹시 관련하여 의견 여쭙고자 글 남깁니다감사합니다.
-
미해결Real MySQL 시즌 1 - Part 1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
10강 LEFT JOIN 주의사항 및 튜닝에서explain select u.id, u.name, uc.coupon_id, uc.use_ynfrom user u left join user_coupon uc on uc.user_id = u.i and uc.coupon_id = 3;위 쿼리의 실행계획으로type ALL 이 나왔는데요왜 u.id는 primary key인데 왜 index가 나오지 않고 ALL이 나오는 걸까요?left join 시 where 절에 조건이 없으면 드라이빙 테이블은 항상 ALL로 읽나요?혹시 u.name을 select절에 포함해서 ALL이 나오는걸까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
테이블을 생성할 때 관계 명시를 안 하는 게 더 나은지 질문드립니다!
안녕하세요! 학부생일때 간단한 프로젝트를 진행할 때는, erd를 그릴 때 관계도 명시하고, 이를 지켜서 테이블을 생성하려고 했습니다.그런데 테이블 생성문을 보니 보통 관계를 명시 안 하고 하시더라구요! (user의 id와 user_id 같은 것)보통 실무에서는 이렇게 관계를 명시 안 하고 테이블을 생성하는 편인가요?그리고 이렇게 했을 때 장점이 있을까요?너무 초보적인 질문이었다면 죄송합니다...!!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
프로젝트 구조 질문 있습니다
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 항상 좋은 강의 잘 보고 있습니다. 다름이 아니라, 현재 강사님 프로젝트 구조가 정확하게 실무에서 사용하는 MSA 프로젝트가 맞나요?아니면 , 모놀리식 기반 멀티 모듈 구조를 통해 MSA 학습을 위한 구조인가요?현재 강의를 보면서 토이 프로젝트로 MSA 학습을 진행해보려고 하는데, 해당 구조가 실제 현업에서 사용하는 구조가 맞는지 궁금합니다 !
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
STOMP에서 메세지를 전송하는 방법에 대해
WssControllerV1에서 @SendTo 어노테이션을 통해 구독중인 클라이언트들에게 메세지를 보낸다고 이해했는데,STOMP 문서를 읽어보니 SimpMessagingTemplate를 통해 메세지를 보내는 것 같았습니다.이 둘의 차이점과 @SendTo를 사용하신 이유를 알 수 있을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
다른 예외 처리 방식
강사님께서는 데이터를 먼저 읽고 없으면 예외를 발생시켰는데, 그렇게 하지 않고 일단 업데이트(혹은 삭제)를 시키고 나서 변경된 row의 개수가 0이면 예외를 발생시키는 방법으로 예외 처리를 해도 괜찮나요? 코드는 아래와 같습니다.if(jdbcTemplate.update(sql, request.getName(), request.getId()) == 0) { throw new IllegalArgumentException(); }}
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
INDEX의 첫번째 칼럼은 정렬이 상관이 없는 것이 맞는지 궁금합니다
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 3-9강 여기까지 이해하신 내용은 무엇인가요? B+Tree 작동 원리, INDEX 생성 2. 어려움을 겪는 부분select o1_0.id, o1_0.created_at, o1_0.member_id, o1_0.order_date, o1_0.order_number, o1_0.status, o1_0.total_amount, o1_0.updated_at from ch3_orders o1_0 where o1_0.order_date>='2023-01-01T00:00' and o1_0.status= 'COMPLETED' and o1_0.total_amount>=500 order by o1_0.order_date desc; 위와 같은 쿼리를 실행할 때, INDEX의 첫번째 필드를 date로 하였을 때, date의 정렬 방식에 따라서 속도가 달라지는 이유가 궁금합니다. (즉, 아래처럼 2가지 방식의 INDEX)CREATE INDEX ids_order_date_status_amount ON ch3_orders(order_date desc, status, total_amount);CREATE INDEX ids_order_date_status_amount ON ch3_orders(order_date, status, total_amount); 날짜 기준으로 최신 데이터를 100개 가져오는 쿼리를 실행시켰을 때, B+Tree의 leaf 노드에서는 양방향으로 이동할 수 있기 때문에 date가 ASC 정렬된 상태에서 역방향으로 읽어 최신 데이터를 읽으나, DESC 정렬된 상태에서 순방향으로 읽어 가져오나 읽는 노드의 수는 동일하다고 생각이 듭니다. 실제로 date를 각각의 정렬조건으로 INDEX를 만들어서 실제로 실행을 시켰을 때에도 거의 차이가 존재하지 않았습니다. (데이터가 많지 않아서 그런지는 모르겠습니다...) 하지만 제가 시도 한 내용이 맞는지 잘 모르겠습니다.3. 시도해보신 내용 ASC, DESC 정렬을 시킨 INDEX를 사용하여 analyze 한 결과입니다.Limit: 100 row(s) (cost=50413 rows=100) (actual time=0.874..0.899 rows=100 loops=1) -> Index range scan on o1_0 using ids_order_date_status_amount over ('2023-01-01 00:00:00.000000' <= order_date AND 'COMPLETED' <= status AND 500 <= total_amount)...Limit: 100 row(s) (cost=50413 rows=100) (actual time=0.43..0.446 rows=100 loops=1) -> Index range scan on o1_0 using ids_order_date_status_amount over (order_date <= '2023-01-01 00:00:00.000000' AND status <= 'COMPLETED'), with index condition: (...1번은 ASC로 정렬한 INDEX입니다. 2번은 DESC로 정렬한 INDEX입니다. 여기에서 desc로 정렬한 acutal time이 거의 2배 빨라진 것을 확인 할 수 있습니다. analyze가 정확한 값을 알려주지 않을 수도 있다는 사실을 알고 있지만, 제가 판단한 내용이 맞는지 의심이 듭니다. 딩코딩코님도 desc로 정렬을 하신거 보면 이유가 있을 것이라고도 생각합니다. Q1. 위 상황에서 INDEX의 첫번째 칼럼은 정렬 조건이 의미가 없는 게 맞나요?Q2. 만약 의미가 있다면 어떤 부분에서 의미가 있는지 궁금합니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.
제로초님 깃헙 소스코드 복사해서 실행한 파일로 크롬에서 실행했는데, input 폼에 id 넣고 등록을 누르면 404 에러 페이지가 뜹니다.사파리 브라우저는 문제 없이 돌아가고 크롬브라우저에서만 이렇게 됩니다. 어떤 문제인가요?에러 메세지도 안떠서 당황스러운데 이런건 구글링 해봐도 잘 안찾아지는데 앞으로 이런 문제는 어떻게 검색해야 찾을 수 있을까요 ?