묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
CommentApiTest에서 readAll() 메서드에서의 SQLException
안녕하세요 쿠케님 ! CommentApiTest에서 readAll() 메서드의 body(CommentPageResponse.class); 부분에서 SQLException이 발생하는 것을 확인했습니다. 하지만 테이블 컬럼을 확인해보니, Comment 테이블에 content 컬럼이 분명히 존재하는걸 확인할 수 있었습니다.그리고 실제로 readAll() 메서드가 사용되는 쿼리에서는 content 컬럼이 사용되지도 않는데, 어째서 content 컬럼을 찾을 수 없다고 하는지 모르겠습니다. findAll()의 쿼리가 잘못됐나 해서 쿼리문을 직접 실행을 해도 잘 돌아가는걸 확인할 수 있었습니다. 코드도 첨부하겠습니다.
-
미해결입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
테스트 코드 작성 중 AssertionError 발생
테스트 코드 작성에서 오류가 뜨는데 어떤 오륜지 잘 모르겠습니다.beforeAll() 함수에서는 Assertions 임포트 잘 되는거같은데 테스트 시작이 안되네요..
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
comment에서 findParent 질문드립니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. findParent 메서드에서 return문을 보면 getDeleted로 부모 댓글이 삭제됐는지 여부를 확인하는 코드가 있는데, 부모가 삭제됐을때를 체크하는 이유가 무엇인가요? 부모 댓글이 삭제됐을 때, 더이상 하위 댓글을 달 수 없도록 하기 위함인가요? 하위 댓글이 남아있는 이상 부모 댓글은 "삭제됐습니다"와 같이 표시만 할 뿐이고 db에서 삭제되지는 않더라도 deleted=true로 바뀌어 있을텐데 만약 부모 댓글이 삭제됐을때 하위 댓글을 추가로 달 수 없는게 아니라, 계속해서 하위 댓글을 달 수 있다면 부모 댓글이 삭제된 상태라 하더라도 create 메서드를 실행할때 부모 댓글의 id를 넣어도 문제 없지 않은가라는 의문이 들어서요 create 메서드를 보면 parent가 null이라면 부모댓글이니까 null을 넣고 하위 댓글이라면 findparent에서 찾은 부모 댓글의 id를 넣어주는 코드인데, 부모 댓글이 deleted=true로 바꼈다 할지라도 DB 자체에서 완전히 삭제되지 않은 이상 즉, 하위 댓글이 여전히 남아있는 상황이라면 deleted=true로 바뀐 부모 댓글의 id를 넣어줘도 되지 않나?라는 생각이 들어서 질문드립니다!
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
aws 와 microsoft azure 중 aws 선택하신 이유가 궁금합니다.
클라우드 서비스로 aws와 microsoft azure 둘중 비쥬얼 스튜디오랑 호환이 잘되있는 microsoft azure도 괜찮은 선택지일수 있을거같은데, 루키스님이 aws 고르신 이유가 궁금합니다. !
-
미해결실무 활용 SQL 데이터 분석: 효율적인 데이터 처리와 인사이트 도출
12-2 listing 로드 문제
load할 때 id에 중복값이 있어서 고유키 설정인 안되는데 어떻게 해결하나요
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
count 쿼리 질문있습니다
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 구조를 보면 마지막 페이지로 갈 수록 모든 페이지 목록을 불러오는거 같은데 제가 이해한게 맞나요? pageLimitCalculator를 보면 page=4, pageSize=10, movablePage=3일때 pageLimitCalculaotr를 계산하면 61인데 현재 4페이지에 있다면 2번째 그룹인데 2번째 그룹의 데이터 목록들만 불러오는게 아니라 1번째 그룹데이터까지 포함해서 총 60개를 불러오는게 맞는거죠? 그렇다면 pageLimitCalculator 공식에서 (((page - 1) / movablePageCount) + 1) pageSize movablePageCount + 1; 마지막에 1을 더해주는데 왜 해주는 건가요?다음 페이지에 데이터가 있나 없나를 확인하기 위해 1을 더하는건줄 알았는데 제가 생각한대로 마지막페이지로 갈수록 모든 데이터를 불러오는 구조라면 굳이 마지막에 1을 더할 필요가 있나 싶어서요궁금합니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
snowflake 알고리즘 - synchronized 활용한 동시성 제어
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님 안녕하세요다름이아니라 snowflake 알고리즘에서 의문점이 생겨서 질문 드립니다. 질문1) snowflake 알고리즘에서 synchronized를 활용하여 동시성 제어를 하는데,만약 각 도메인 모듈마다 멀티 서버를 구상한다면 동시성 제어가 가능한가요? 질문2) 만약 안된다면, redis 와 같은 외부 미들웨어를 통해서 동시성제어를 하는 방식으로 해당 알고리즘을 수정해야 될까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Transactional Ouxbox 질문 있습니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1."Message Relay는 전송이 실패한 이벤트에 대해서만 Outbox Table에서 polling하면된다 "그리고 생성 10초 이후 이벤트를 polling 하는 이유가"중복 이벤트 발송을 방지하기 위해서"라고 말씀하셨는데 그 부분이 잘 이해가 안됩니다. 우선 첫번째로,예를 들어 위와 같은 상황에서1.Article Service는 API 요청을 받으면 2가지 동작을 한다.2.Message Relay로 직접 이벤트를 전달하고, Outbox table에 이베트를 삽입한다. 위와 같이 이해를 했습니다. 그런데 이 2가지 동작 다음에"Message Relay는 전송이 실패한 이벤트에 대해서만 Outbox Table에서 polling해서 중복된 이벤트를 처리하는 일이 없도록 한다"라는 동작을 어떻게 어떤 순서로 수행할 수 있는건가요?? 그리고 여기에 추가로"생성 10초 이후 이벤트를 polling 해서 중복 이벤트 발송을 방지할 수 있다"라는 부분도 어떤 순서로 동작하기에 가능한 일인지 잘 모르겠습니다 제가 헷갈리는 부분은 이벤트를 직접 받기도 하고, 2.위 ppt 설명에서 2개의 애플리케이션이 있다면, 0~1번 샤드와 2~3번 샤드를 각각 polling한다.가 잘 이해가 되질 않습니다.예를 들어 A 애플리케이션이 0~1번 샤드에 할당된 상태B 애플리케이션이 2~3번 샤드에 할당된 상태일때, 만약, A 애플리케이션의 데이터가 유실됐다는 오류가 발생 -> Message Relay는 Outbox table에서 0~1번의 샤드만 polling한다. 이런 식으로 이해하면 옳게 이해한 것이 맞을까요? 매번 질문글에 상세한 답변 감사합니다좋은 하루 되세요
-
미해결Vue로 Nodebird SNS 만들기
npm run dev 할 때 에러가 발생합니다.
2강에서 서버 실행시 에러가 발생합니다.무료 게임 강좌에서는 정상적으로 실행되었습니다. node : 10.15.3nuxt: 2.8.1vue: 2.6.10vue-server-renderer: 2.6.10 [로그 정보]PS C:\vue-nodebird\ch1\front> npm run dev> vue-nodebird-front@1.0.0 dev C:\vue-nodebird\ch1\front> nuxt WARN Address localhost:3000 is already in use. 11:49:13i Trying a random port... 11:49:13 ╭─────────────────────────────────────────────╮ │ │ │ Nuxt.js v2.8.1 │ │ Running in development mode (universal) │ │ │ │ Listening on: http://localhost:58015/ │ │ │ ╰─────────────────────────────────────────────╯i Preparing project for development 11:49:14i Initial build may take a while 11:49:14√ Builder initialized 11:49:14√ Nuxt files generated 11:49:14 ERROR Unexpected token . 11:49:14 const r=Object.create(null),i=e=>globalThis.process?.env||undefined||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?r:globalThis),s$1=new Proxy(r,{get(e,o){return i()[o]??r[o]},has(e,o){const E=i();return o in E||o in r},set(e,o,E){const b=i(true);return b[o]=E,true},deleteProperty(e,o){if(!o)return false;const E=i(true);return delete E[o],true},ownKeys(){const e=i(true);return Object.keys(e)}}),t=typeof process<"u"&&process.env&&process.env.NODE_ENV||"",B=[["APPVEYOR"],["AWS_AMPLIFY","AWS_APP_ID",{ci:true}],["AZURE_PIPELINES","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"],["AZURE_STATIC","INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"],["APPCIRCLE","AC_APPCIRCLE"],["BAMBOO","bamboo_planKey"],["BITBUCKET","BITBUCKET_COMMIT"],["BITRISE","BITRISE_IO"],["BUDDY","BUDDY_WORKSPACE_ID"],["BUILDKITE"],["CIRCLE","CIRCLECI"],["CIRRUS","CIRRUS_CI"],["CLOUDFLARE_PAGES","CF_PAGES",{ci:true}],["CODEBUILD","CODEBUIL SyntaxError: Unexpected token . at new Script (vm.js:80:7) at createScript (vm.js:274:10) at Object.runInThisContext (vm.js:326:10) at Module._compile (internal/modules/cjs/loader.js:664:28) at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10) at Module.load (internal/modules/cjs/loader.js:600:32) at tryModuleLoad (internal/modules/cjs/loader.js:539:12) at Function.Module._load (internal/modules/cjs/loader.js:531:3) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (node_modules\@nuxt\friendly-errors-webpack-plugin\node_modules\consola\lib\index.cjs:2:13) at Module._compile (internal/modules/cjs/loader.js:701:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10) at Module.load (internal/modules/cjs/loader.js:600:32) at tryModuleLoad (internal/modules/cjs/loader.js:539:12) at Function.Module._load (internal/modules/cjs/loader.js:531:3)
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
인기글 선정과 관련해서 궁금한 점이 있습니다.
안녕하세요 강의 주제와는 맞지 않는 질문일 수도 있는데모놀리식 아키텍처에서는 그냥 게시글 생성/수정/삭제, 댓글 생성/삭제 등 이런 로직에서 점수를 업데이트하면 될 것 같아서 그런데모놀리식 아키텍처에서는 이벤트 방식으로 인기글을 선정하는 방법은 불필요하게 복잡하게 구현하게 되는걸까요?
-
미해결실무 활용 SQL 데이터 분석: 효율적인 데이터 처리와 인사이트 도출
2-2. 실습 2A 6, 7번 문제
Ex 7. # fact_orders 테이블에서 product id 순으로 다음 10개의 제품을 표시하세요 select product_id, prod_cat_name_eng from ecommerce.dim_products order by product_id limit 10 offset 10; 왜 문제는 'fact_orders 테이블에서'인데 from ecommerce.dim_products인거죠?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
카프카의 offset 개념에 관해 질문 있습니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 같은 Consumer groups에 속한 consumer들은 각각 다른 partition을 구독하는데, 같은 offset을 사용해야하는 이유가 잘 이해가 헷갈립니다. 즉, Consumer groups에 속한 consumer들끼리같은 offset을 사용하는 이유가 잘 이해가 되질 않습니다 "각 데이터는 각 Topic의 Partition 단위로 순차적으로 기록되고, 기록된 데이터는 offset을 가진다." 라는게 간단한 예시를 들면, Topic1 ( 날씨에 관한 데이터 )Partition 1 ( 서울 날씨 관한 데이터)partition 2 ( 부산 날씨 관한 데이터)partition 3 ( 대구 날씨 관한 데이터) 라고 이해를 했습니다. 근데 여기서 partition마다 데이터가 다른데 같은 offset을 사용한다는 개념이 잘 와닿지가 않습니다 항상 강의 잘 보고 있습니다. 감사합니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
@Test update, delete 메서드 문의
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 강의 잘 듣고 있습니다. 테스트 코드 update와 delete 메서드를 실행해도 변화가 없어서 검색을 해보니 .retrieve() 뒤에 .toBodilessEntity()를 추가하니 정상적으로 작동됩니다. 강의와 다르게 .toBodilessEntity() 메서드를 추가해야지 작동하여서 이에 대해 어떤 차이가 있는 궁금합니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?
프론트엔드 개발자인데 사이드 프로젝트에 백엔드가 없어서, 제가 직접 만들어보려고 Node.js 강의 보고 있어요.MongoDB가 배우기 쉽다고 해서 MongoDB를 쓰려고 하는데 강의에서 MySQL 파트를 스킵해도 괜찮을까요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
메모리 크기
JVM 관련프로그램인데 micro인 1GB로 메모리를 설정하면 프로그램이 뻗을 일은 없을까요?(1번과 연계해서) 현재 SSR로 화면 그려주고 있는데, api처리 + 빈 컨테이너(Springboot) + Kotlin + 템플릿엔진(타임리프) 까지 했을때 1GB를 초과하지는 않으셧는지도 궁금합니다!만약에 화면을 다른 언어/라이브러리(Vue, React)로 개발하게 된다면 CORS라던지 건드려야 될게 많아지고, 추가로 node 환경을 또 띄워야 되서 메모리가 부족하게 될 수도 있을까요?
-
미해결백엔드 개발자 성능 개선 초석 다지기
캐싱 데이터가 안보입니다.
조회를 하고 cache확인 api를 호출해도 캐시데이터가 보이지 않습니다.. 어디를 확인해봐야할까요? chatGPT를 통해 물어보고 확인해본 아래다섯가지는 정상적입니다. 코드도 깃허브 코드에서 수정한것이 없어서 질문남깁니다spring.cache.type=ehcache 설정 확인 ehcache.xml 파일 존재 여부 및 경로 확인 Ehcache 의존성 (ehcache 라이브러리) 추가 여부 확인@EnableCaching 설정 확인 @Cacheable이 정상적으로 적용되었는지 확인
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
query DSL 대신 Native Query를 사용하시는 이유가 있으신가요?
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강의 잘 듣고 있는 학생입니다.다름이 아니라, 강의에서 query DSL 대신 Native Query를 사용하시는 이유가 있으신가요? 현업에서는 query DSL 대신 Native Query를 더 많이 사용하는걸까요??
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
velog., github 업로드 관련 문의
강사님 잘 듣고 있습니다..! 혹시 다름이 아니라 출처를 남기고 velog, github에 공부한 내용을 업로드 해도 될까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
컴파일러 경고 메세지 관련 질문입니다.
안녕하세요 쿠케님 강의 잘 듣고있습니다!제네릭을 사용할 때마다 생기는 고민이 있습니다.. 제네릭을 사용하다보면 컴파일러 경고가 발생하는 경우가 있는데(IDE의 노란 밑줄) 이런 경고들을 모두 해결해서 제거해야할 까요?? 아니면 어느정도 무시를 해도 되는 걸까요??이펙티브 자바에는 런타임에 캐스팅 관련 예외가 발생할 수 있으니 이런 경고를 최선을 다해 제거하라. 라는 내용이 있기도 하고, 노란 밑줄이 보이면 눈에 거슬리기도 해서 처음에는 어느정도 제거하면서 개발을 했었는데, 시간이 지날 수록 이게 맞나 싶기도하고 책에 있는 내용이 절대적인 것도 아니기도해서 그리고 강의에서도 어느정도 무시를 하는 것 같아 질문 남깁니다!팀에서 결정한 컨벤션으로 개발하면 될 것 같은데, 다른 팀에서는 어떻게 진행하는지 궁금합니다! 최대한 제거하는지.. 어느정도는 무시(@SuppressWarnings)해도 되는지
-
미해결비전공자도 이해할 수 있는 DB 설계 입문/실전
관리자 테이블
안녕하세요.관리자 테이블에 이메일이 유저의 이메일과 다르지 않다고 생각이 들어서 합치는 게 낫다고 생각이 들었습니다. 처음에는 유저에 그냥 합쳐서 새로운 컬럼 role로 관리하려고 했는데, 중복이 있어서관리자 테이블엔, role 컬럼을 넣어서 user, admin 2개로 추가해서 이제 유저 테이블에서 FK로 사용하려고 하는데 이 방법은 어떨까요? (강의 너무 잘 듣고 있습니다, 제 멘토이십니다ㅎㅎ)