묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)
Cacheable key값 설정에서 null
@Cacheable(cacheNames = "getBoards", key = "'boards:page:' + #page + ':size:' + #size", cacheManager = "boardCacheManager") public List<Board> getBoards(int page, int size) { Pageable pageable = PageRequest.of(page - 1, size); Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable); return pageOfBoards.getContent(); } }여기서 key = "'boards:page:' + #page + ':size:' + #size"레디스에 저장되는 키값은 "getBoards::boards:page:null:size:null" 이렇게 저장이 됩니다. 혹시 null이 들어가는 이유가 있을까요? page와 size의 데이터도 잘 넘어오고 레디스에서 저 키값으로 조회를 하면 안에 데이터는 잘 들어가 있습니다. #page와 #size가 null인 이유가 있을까요?
-
미해결견고한 결제 시스템 구축
결제 복구의 세부 과정을 병렬로 처리한 이유가 궁금합니다
안녕하십니까 여정민 강사님! 강의 도중 궁금한 점이 있어 질문 드리고자 합니다. 질문은 12:32 초의 코드를 보면package com.example.paymentservice3.payment.application.service import com.example.paymentservice3.payment.application.port.`in`.PaymentConfirmCommand import com.example.paymentservice3.payment.application.port.`in`.PaymentRecoveryUseCase import com.example.paymentservice3.payment.application.port.out.* import org.springframework.scheduling.annotation.Scheduled import reactor.core.scheduler.Schedulers import java.util.concurrent.TimeUnit class PaymentRecoveryService ( private val loadPendingPaymentPort: LoadPendingPaymentPort, //결제 처리가 완료되지 않은 상태의 결제를 조회 하기 위해 private val paymentValidationPort: PaymentValidationPort, //결제 유효성 검사 private val paymentExecutorPort: PaymentExecutorPort, //결제 승인 요청 private val paymentStatusUpdatePort: PaymentStatusUpdatePort //결제 상태 업데이트 ) : PaymentRecoveryUseCase { @Scheduled(fixedDelay = 180, timeUnit = TimeUnit.SECONDS) override fun recovery() { loadPendingPaymentPort.getPendingPayments() .map { PaymentConfirmCommand( paymentKey = it.paymentKey, orderId = it.orderId, amount = it.totalAmount() ) } .parallel(2) .runOn(Schedulers.parallel()) .flatMap { paymentValidationPort.isValid(it.orderId, it.paymentKey).thenReturn(it) } .flatMap { paymentExecutorPort.execute(it) } .flatMap { paymentStatusUpdatePort.updatePaymentStatus(PaymentStatusUpdateCommand()) } } }위와 같이 작성되어있는데 여기서결제 유효성 검사결제 승인 요청결제 상태 업데이트위 3가지 기능 수행을 병렬로 처리한 이유가 궁금합니다.강의에서 언급된 이유로는 "각 작업 간의 수행 순서가 중요하지 않은 작업들은 병렬로 처리하여 전체 처리 시간을 단축" 이라고 말씀하셨습니다. 제가 생각했을 때는 유효성 검사에 성공하면 결제 승인을 요청하고 결제 승인 요청에 대한 결과를 바탕으로 결제 상태 업데이트가 수행이 되어야 한다고 생각되어 병렬처리를 하는 부분에 있어 타당함을 잘 모르겠습니다. 제 짧은 견해로는 결제 유효성 검사결제 승인 요청결제 상태 업데이트위 순서를 지켜 수행되어야 한다고 판단하였습니다. 이 부분에 대해서 강사님의 생각이 궁금합니다. p.s. 좋은 강의를 제공해주셔서 감사합니다. 여태 수강한 강의 내용들이 모두 새로워 덕분에 공부할 부분을 많이 찾게 되어 감사드립니다. 앞으로도 좋은 강의를 만들어주시면 많은 도움이 될 것 같습니다 화이팅!
-
해결됨홍정모의 따라하며 배우는 C언어
예제 코드 리뷰
이진수를 십진수로 바꾸는 함수 부분을 이렇게 작성했는데, 기능상으로는 문제가 없어보이는데 다른 측면에서 문제가 될 수 있는 경우가 어떻게 될까요? unsigned char to_decimal(const char bi[]){ unsigned char sum = 0; int j = 0; for (int i = strlen(bi) - 1; i >= 0; --i) { if (bi[j] == '1') sum = sum + (int)pow(2, i) * 1; else if (bi[j] != '0') { printf("Wrong character : %c", bi[j]); exit(1); } j++; } return sum;}
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~
삭제 예정 강의는 언제 삭제 되나요? 저것 때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~아니면 삭제 예정 강의를 듣지 않아도 수강 완료 할 수 있는 방법이 있을까요?
-
해결됨모의해킹 실무자가 알려주는, 파일 다운로드 취약점 공격 기법과 실무 사례 분석
Burp Suite 서비스 포트 변경 후 Tomcat 패키지 안잡힘
버프스위트의 서비스 포트를 8081로 바꾸고 프록시 설정 변경에 들어가서 8081로 편집한 뒤 프록시 서버 사용으로 저장을 했습니다. 그리고 나서 localhost:8080으로 Intercept on 상태에서 접근해서 인터셉트를 시도했지만 Tomcat이 잡히지 않습니다. 버프스위트의 open browser 기능을 이용하여 localhost:8080을 인터셉트 시도했을 때는 정상적으로 인터셉트 되었습니다. 혹시 무엇이 잘못된 것인지 알 수 있을까요??
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
C++강의 듣다가 왔습니다.
C++과 언리얼로 만드는 mmorpg 시리즈를 구매한 학생입니다. 1주차부터 이해가 안돼서찾아보니 Part3 유니티 (클라 프레임워크)Part4 게임서버 (서버 프레임워크 ServerCore)Part7 게임서버&클라 연동 (클라 서버 연동 기본기)Part8 EF Core (ORM) 를 읽어보면 이해하기 쉽다고 하셨는데part4. 게임서버는 C++강의로 들어도 괜찮을까요??
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
while 구문에 a++ 이면 왜 6까지 가나요?
16:31에서 6까지 간다고 했는데, a가 6이면 while식을 이미 조건 충족하지 않아서 식 진행이 안돼야하는 거 아닌가요? a가 6인데 뒤에 식을 이미 진행 해버린다는 게 무슨 말인지 모르겠어요.
-
해결됨코딩테스트 [ ALL IN ONE ]
답을 보면서 공부하는 게 좋을까요?
가끔 어려운 거는 답을 봐도 왜 이게 답인지 모르겠는 경우가 간혹 있는데요 여튼 코테 문제를 풀 때 너무 답이 안 나오면 답을 보는 게 좋을까요 아니면 붙잡는 게 좋을까요? 사람마다 다 이야기가 달라서 혼동이 됩니다.
-
미해결
스프링 MemberRepositoryTest 에러
11줄이 에러가 나서 test다시 만들었는데 에러가 뜹니다.
-
해결됨[Rookiss University] UE5 Lyra 클론 코딩 (Haker)
완성파일 빌드 에러
강의 소개 영상, OT에 산출물로 어떤어떤 시스템이 완성되는지 플레이 화면으로 볼 수 있으면 살까말까 고민이 좀 덜 되었을 듯 하네요.아무튼 그래서 결제하고 강의 들어가기 전에 완성파일 받고 둘러보려고 했는데, BlueprintAssist 플러그인 없다고 빌드가 안 되는군요. 무시하고 강제로 빌드하기 했더니 소스에서 빌드하라고 하네요. 그리고 다시 소스에서 빌드했더니 1>Unable to find plugin 'BlueprintAssist' (referenced via HakGame.uproject). Install it and try again, or remove it from the required plugin list. 이러네요. 해결방법을 알려줄 수 있나요?BlueprintAssist을 사야 하나요? 노드 선 정리 깔끔하게 되는 거 같긴 한데...
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
RxJS 디버깅 질문 있습니다.
안녕하세요. 제로초님 제가 좀 질문이 많은 것 같은데, 항상 친절하게 답변해주셔서 감사합니다.다름이 아니라, 개발하면서 IDE의 디버깅 모드를 이용해본적이 거의 없고, 항상 값의 흐름과 변화를 콘솔로 찍어서 디버깅을 하곤 했는데, 디버깅 모드를 사용하면 좀 더 편하게 확인이 가능 한 것 같더라구요.그래서 한번 사용해보려고 했는데, 그냥 일반적인 crud api를 만들어서 중단점 찍고 디버깅을 돌려봤을때는 요청이 가다가 멈추고 값이 잘 나타나는걸 확인 할 수 있었습니다. 하지만, MSA로 구성되어있는 프로젝트에서 디버깅을 실행해보니까 중단점을 설정해놔도 걸리지가 않더라구요. 요청과 응답은 다르지 않을텐데 MSA라서 안되는건가 싶기도 해서 좀 찾아보니까 RxJS에서 디버깅 중단점이 잘 안된다는 글을 발견했습니다. 혹시 제로초님께서도 Observable같은 RxJS를 사용하시면서 디버깅에 어려움을 겪으셨던 경험이 있으신가요? 웹스톰 사용하시는걸로 알고있는데, 디버깅 어떻게 진행하시는지 공유해주시면 정말 도움이 많이 될 것 같습니다! 매번 콘솔로 확인하려니까 생산성이 너무 떨어지네요 ㅠ
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
비교연산자 반복문+조건문에서 count에 대한 질문
count ++의 의미를 제대로 모르겠네요, count를 썼을 때는 앞의 조건들이 일치하는 값의 갯수를 적어주는 거 같은데, ++면 1씩 더해줘라 이런뜻이니ㅠ 최종 카운트갯수에 1을 더해서 최종 답을 적으란 말도 아니고, count + = i ; 이런 것도 있네요ㅠ 설명 부탁드립니다.
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
아이콘 사이즈 변경
안녕하세요! 강의 잘 들으며 실습해보고 있습니다.버튼을 컴포넌트 세트로 만드는 연습을 하고 있는데요.사이즈별 버튼 생성시, 기존 24*24 사이즈의 아이콘에서 버튼의 사이즈에 맞게 아이콘 사이즈도 키워지면 좋을 것 같은데, 아이콘 프로퍼티 변경시 24*24 사이즈로 복귀됩니다. 아이콘 파운데이션을 크기별로 생성하는 것 말고 혹시 어떤 방법을 사용할 수 있는지 여쭙습니다.혹 제가 해당 개념을 강의 중 놓쳤거나 했다면 알려주시면 감사하겠습니다!
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
TPSRAM 질문있습니다!
SRAM 에서는 Write할 때 입력 data를 넣고 1클럭 뒤에 memory에 저장이되고, Read할 때는 주소를 불러오자마자 바로 Read가 됐던걸 확인할 수 있었는데,질문1) TPSRAM에서의 동작은 wa에 wd를 넣고 1클럭 후에 memory에 write 값이 저장되는 부분은 동일한건가요? 질문2) SRAM에서와 달리 ra에서 rd가 나오기까지 1클럭이 늦게 나오는 이유는 F/F을 하나 거치기 때문인지도 궁금합니다!
-
미해결실전! GitHub Actions으로 CI/CD 시작하기
강의자료 다운
강의자료를 다운받으니까 파일이 아무것도 원래 없는걸까요?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
CacheManager에 대해 질문 있습니다.
안녕하세요. 최근에 게시물 조회수 카운팅 작업을 하고 있습니다. 어떻게 구성을 할 지 생각을 좀 해보다가, `CacheManger (https://docs.nestjs.com/techniques/caching) 를 사용해서(entity-id-ip):(timestamp)이렇게 key-value 형태로 담아서 메모리에 저장하고, ttl을 1시간으로 설정해서 만약에 키가 존재하면 조회수가 오르지 않고, 값을 현재 시간으로 업데이트 해주고, 키가 없으면 값을 넣어주고 조회수 +1을 해주게 로직을 설정했습니다.그런데 이게 로컬환경에서는 잘 되는데, 이상하게 배포환경에서는 정상적으로 작동하지 않습니다. 그래서 Redis를 설치해서 해보자니 제가 NestJS 10버전을 사용하고 있는데 쉽게 도와주는 라이브러리가 9버전까지만 지원해서 버전을 낮추기도 좀 그렇고, 얘도 어쨌든 메모리를 사용하는 거라 똑같을 것 같아서 우선 보류해뒀습니다. 마지막으로 쿠키를 사용해서, entity키에 값으로 게시물의 id를 담아 해당 게시물이 값에 존재하면 조회수가 올라가지 않도록 해봤는데, 이건 로컬 환경에서도 잘 안먹히고있어서 도통 어떻게 해야할지 감이 안와 막혀있습니다 ㅜㅜ CacheManger를 사용해서 해결하면 좋을 것 같은데, 배포 환경에서는 왜 작동이 안되는지 혹시 원인을 아시나요? 그리고 제로초님께서 추천해주시는 방법도 궁금합니다 ㅠ달성하고자 하는 목적은 일정 기간동안 같은 방문자의 게시글 조회수 카운팅을 +1 만 하는 것입니다!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
temurin 21버전 project JDK misconfigured 뜨면 사용 못하나요?
새 프로젝트를 만들고 setup jdk버튼을 눌러 테뮤린21을 다운받았습니다. 프로젝트 스트럭쳐에서 테뮤린이 적용되었는데 빨간색이고, 홈화면엔 misconfigured가 떠있다면 못쓴다는 의미일까요?그렇담 대신에 오라클오픈22 jdk를 사용하면되나요?
-
해결됨[코드캠프] 시작은 프리캠프
태그 궁금한 점
div와 span 태그 간의 차이점은 알겠는데 p태그와 div,span태그 간의 차이가 있나요? 어떤 기준으로 선택하여 사용하면 될까요?input 태그 내에서 value를 사용할 때 value가 하는 역할이 무엇인지 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문있습니다!
선생님과 다른 방식으로 로직을 짰는데뭐가 틀렸는지 찾지 못해서 질문 남깁니다.#include <bits/stdc++.h> using namespace std; int N; string input, pattern; int main() { cin >> N >> pattern; // 패턴을 '*'를 기준으로 앞 뒤로 나누기 int pos = pattern.find('*'); string prevPattern = pattern.substr(0, pos); string nextPattern = pattern.substr(pos + 1); for (int i = 0; i < N; i++) { cin >> input; if (input.find(prevPattern) != string::npos && input.substr(input.find(prevPattern) + prevPattern.size()).find(nextPattern) != string::npos) cout << "DA" << '\n'; else cout << "NE" << '\n'; } return 0; }
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
VStack, HStack으로 뷰 구성하기 강의 padding 질문입니다
안녕하세요 강의 수강 중 이해가 안되는 부분이 있어서 질문 드립니다 import SwiftUI struct ContentView: View { var body: some View { VStack{ HStack{ Image("dogProfile") .resizable() .frame(width: 120, height: 120) .clipShape(Circle()) .overlay( Circle() .stroke(Color.teal, lineWidth: 3) ) VStack(alignment: .leading){ Text("이름: 키도") Text("시바견") Text("2017년 5월생") } // VStack 안에 있는 뷰에 모디파어어를 일괄 적용하고 싶을 경우 이런 식으로 구성할 수 있다(일괄 적용이라는 표현보단 Vstack 자체에 모디파이어를 적용했다는 표현이 더 옳을지도? .font(.system(size: 20)) // 정보 글의 폰트 사이즈 .padding(.leading, 20) // 그림과 정보 글 사이의 공백 } .padding(.bottom, 20) VStack(alignment: .leading, spacing: 10){ Text("좋아하는 것") .font(.system(size: 20)) .bold() Divider() // 좋아하는 것 밑에 있는 선을 그려주는 함수 Text("- 각종 고기(🐮 = 🐷 = 🐔 > 🐟)") Text("- 장본 게 담겨 있는 종량제 봉투") Text("- 집에 새로 온 사람") } .padding() .background( RoundedRectangle(cornerRadius: 15) .fill(.mint) .opacity(0.2) // 색의 투명도를 지정하는 모디파이어 0이면 완전 투명 .shadow(radius: 5) ) VStack(alignment: .leading, spacing: 10){ Text("스킬") .font(.system(size: 20)) .bold() Divider() // 좋아하는 것 밑에 있는 선을 그려주는 함수 HStack(alignment: .top, spacing: 30){ VStack(alignment: .leading, spacing: 10){ Text("- 앉아") Text("- 엎드려(앉아와 자주 혼동함)") Text("- 하우스(집으로 들어가기)") } VStack(alignment: .leading, spacing: 10){ Text("- 손") Text("- 코") } } } .padding() .background( RoundedRectangle(cornerRadius: 15) .fill(.pink) .opacity(0.2) // 색의 투명도를 지정하는 모디파이어 0이면 완전 투명 .shadow(radius: 5) ) } .padding() // 질문인 부분 } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } }위 코드 맨 마지막 padding을 보면 가장 처음 사용하는 VStack에 .padding을 적용하는 코드입니다 궁금한 건 저 padding의 값을 50, 100 이렇게 설정해도 Vstack의 위 아래 여백은 변하지 않는다는 점입니다. 분명 .padding에 값을 넣어주지 않으면 기본적으로 상하좌우 모든 부분에 여백을 주는 걸로 알고 있는데 만 상하 부분의 여백이 변하지 않는 것을 확인했습니다. 개인적으로 여백을 넓게 잡으면 여백을 잡기 위해 글자나 사진 사이즈 등이 뭉개지는 현상이 발생할 줄 알았는데 좌우는 뭉개지는 데 상하는 뭉개지지 않더라구요 Vstack이 기본적으로 가지고 있는 공간이 있는 최소한의 건지... 혹시 뭉개지지 않는 이유를 알 수 있을까요?? 그리고 혹시 // VStack 안에 있는 뷰에 모디파어어를 일괄 적용하고 싶을 경우 이런 식으로 구성할 수 있다(일괄 적용이라는 표현보단 Vstack 자체에 모디파이어를 적용했다는 표현이 더 옳을지도? 이 주석 제가 맞게 이해한 건지도 알려주시면 정말 감사하겠습니다..! 좋은 하루 보내세요! 감사합니다!