inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

hot-article Test 진행 중 좋아요 수 문의

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [인기글 Producer&Consumer 테스트] 강의 6분 30초에서 좋아요 수는 userId는 유니크해야 좋아요 수가 중복없이 하나씩으로 집계된다고 말씀하셨습니다. 근데 비관적 락 방법 1과 2 그리고 낙관적 락 방법 모두 다 저희가 구현할 때, 따로 userId에 대한 중복 처리는 하지 않았는데 userId는 동일해도 상관 없지 않나 싶어서요. 비관적 락 방법 1 쿼리도 단순 where 조건은 articleId 뿐이라서 질문드려봅니다. 게시글 조회수는 redis로 key 생성할때, articleId와 userId를 활용해서 중복처리는 했는데, 게시글 좋아요수는 redis를 활용하지 않아서요!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
parkhs 댓글 2 좋아요 0 조회수 141

섹션 5. React.js 개론 - 구동원리에서 강의와 제 코드가 다릅니다

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

안녕하세요 강의 잘 듣고 있습니다 현재 섹션 5. React.js 개론 - 구동원리를 듣고 있는데 import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' import App from './App.jsx' createRoot(document.getElementById('root')).render( <StrictMode> <App /> </StrictMode>, ) 강의에 있는 코드와 제 main.jsx의 코드가 달라서요.. 전부 똑같이 설치했는데 달라도 괜찮은건가요?

  • javascript
  • react
  • node.js
green 댓글 2 좋아요 0 조회수 149

디비 오류

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. mysql 말고 마리아 디비로 진행하고 있는데 다음과 같은 오류가 납니다... java.sql.SQLException: (conn=47) Record has changed since last read in table 'article_like_count' 그래서 인지 count가 일정하지 않네요.. 이유가 있을까요

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
오개발 댓글 3 좋아요 0 조회수 339

restClinet retrieve() ignore문제

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요. 강의 잘 듣고 있습니다! restClient 사용시에 retrieve ignore로 테스트가 계속 실패 되네요. void인 경우 body(Void.class)하면 됐었는데 likePerformance 하는 경우 실패가 계속 되버려서요. 500에러라면서. body를 제거하고 하면 test 실패이고 해결방법 있을까요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
최지수 댓글 2 좋아요 0 조회수 84

Payment 엔티티에 exRateProvider 주입

미해결

토비의 스프링 6 - 이해와 원리

강의 중간 PaymentService 에 Payment 엔티티에 exRateProvider 도 주입해서 사용할 수 있다 라고 들었고, 이거는 한번 고민해보셨으면 좋겠다라고 강의 내용이 있어 질문드립니다. 예전에 제가 토비님께서 제작하신 토비의 스프링 공부했던 Rich Domain Model 에 관련된 사항 같습니다. 해당 내용으로 적용 시켜볼때는 Spring AOP 가 아닌 AspectJ 를 이용해서 엔티티 생성자 전후로 PointCut 으로 마치 Target(Payment 엔티티) 생성자에 exRateProvider 를 주입해주는걸로 방법이 생각나는데 정확하게 이 방법이 일단 맞을까요? "몇가지 방법이 있다고" 저는 들었던거 같은데 이외의 적용 할수있는 스프링 원리가 있을까요? 추가로 현재 exRateProvider 경우 환율 정보를 외부 API, 고정 환율 가져오는 구현체로 구성되어있는데 만약 DB Access 를 통해서 가져오는 구현체( exRateRepository )로 런타임에 의존 관계를 맺는 경우 에도 엔티티 생성자로 넣는 방법도 위처럼 생각한 방향대로 적용하면 되는걸까요? 즉 스프링에서 관리하는 Bean 을 POJO 로 주입 하는 방법에 대해서 궁금합니다!

  • java
  • spring
김태형 댓글 1 좋아요 0 조회수 124

@Transactional private 사용유무

미해결

토비의 스프링 6 - 이해와 원리

proxy 패턴으로 애플리케이션 서비스에서 반복적인 트랜잭션 처리 적용까지는 이해했습니다. 여기서 만약 애플리케이션 서비스 내부에서 private 로 두개의 트랜잭션은 어떻게 적용해야할까요? 아래는 제가 생각한 흐름입니다. 가령 현재 강의에서는 OrderService 내부에서 주문 정보만 생성하고 있는데 주문 후 결제까지 이뤄진다면? public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; private final PaymentRepository paymentRepository; public OrderServiceImpl( OrderRepository orderRepository, PaymentRepository paymentRepository ) { this.orderRepository = orderRepository; this.paymentRepository = paymentRepository; } @Override public Order createOrder(Order order) { // 주문 도메인 생성 // 결제 도메인 생성 } @Transactional private void save(Order order, Payment payment) { // 주문 및 결제 정보 저장 } } 제가 찾아보기로는 @Transactional 경우 Proxy 패턴으로 스프링에서 begin, rollback, commit 을 자동으로 수행해주는데 이를 private 으로 선언 한 경우 스프링에 private 메소드에 접근을 못해서 정상 동작을 안하는걸로 알고 있습니다. (강의를 듣고서) 제가 추측하기로는 TransactionTemplate 으로 프록시 패턴으로 적용한경우 private 메소드에는 접근을 못하니깐 애노테이션 또한 정상동작을 안하는것으로 생각됩니다. (제 추측이 틀렸다면 자세한 설명 부탁드립니다.) 그러면 애플리케이션 서비스는 기술 의존적으로 바뀌게 될텐데 private 함수에서 애노테이션이 아닌 TransactionTemplate 을 써야되나? 강의 듣고서는 이정도밖에 생각이 안드는데 어떤식으로 접근하고 private 에서도 트랜잭션을 적용하기위한 원리는 어떤게있는지 답변 주시면 감사하겠습니다!

  • java
  • spring
김태형 댓글 1 좋아요 0 조회수 178

저장 버튼이 생기지 않습니다.

해결됨

아바타 커뮤니티앱 만들기 (React Native Expo)

저장 버튼을 동일하게 작성했는데 화면상에 그려지지 않더라구요. 공식문서도 확인해보고 찾아보는데, isFocused나 useLayoutEffect등을 통해 실험해봐도 저장 버튼이 보이지 않습니다. 무엇을 잘못 작성했나 싶어 자료를 다운로드 받아 post 의 _layout.tsx 와 write.tsx도 복사, 붙여넣기 하여 확인했는데도 저장버튼이 보이지 않았습니다. 그런데, post의 _layout에서 headerRight을 작성하니 보입니다. setOptions가 동작하지 않는 것 같이 보이는데, 원인을 잘 모르겠습니다. 어떻게 해결하면 될까요? import CustomButton from "@/components/CustomButton"; import DescriptionInput from "@/components/DescriptionInput"; import TitleInput from "@/components/TitleInput"; import useCreatePost from "@/hooks/queries/useCreatePost"; import { ImageUri } from "@/types"; import { useNavigation } from "expo-router"; import { useEffect } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { StyleSheet } from "react-native"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; type FormValues = { title: string; description: string; imageUris: ImageUri[]; }; export default function PostWriteScreen() { const navigation = useNavigation(); const createPost = useCreatePost(); const postForm = useForm<FormValues>({ defaultValues: { title: "", description: "", imageUris: [], }, }); const onSubmit = (formValues: FormValues) => { createPost.mutate(formValues); }; useEffect(() => { navigation.setOptions({ headerRight: () => ( <CustomButton label="저장" size="medium" variant="standard" onPress={postForm.handleSubmit(onSubmit)} /> ), }); }, []); return ( <FormProvider {...postForm}> <KeyboardAwareScrollView contentContainerStyle={styles.container}> <TitleInput /> <DescriptionInput /> </KeyboardAwareScrollView> </FormProvider> ); } const styles = StyleSheet.create({ container: { margin: 16, gap: 16, }, }); import { colors } from "@/constants"; import { Feather } from "@expo/vector-icons"; import { Link, Stack } from "expo-router"; export default function PostLayout() { return ( <Stack screenOptions={{ headerTintColor: colors.BLACK, contentStyle: { backgroundColor: colors.WHITE, }, }} > <Stack.Screen name="write" options={{ title: "글쓰기", headerShown: true, headerLeft: () => ( <Link href={"/"} replace> <Feather name="arrow-left" size={28} color={"black"} /> </Link> ), }} /> </Stack> ); } +추가로 확인한 부분. app의 _layout.tsx에서 <Stack.Screen name="post" options={{ headerShown: false }} /> 이 친구를 주석하면 헤더가 두 개 나오게 되는데, 숨겨놨던 루트에 저장 버튼이 떠 있더라구요. 이걸 어떻게 수정하면 되는건지.. 어렵네요

  • javascript
  • react
  • react-native
  • typescript
  • react-query
프롱 댓글 2 좋아요 0 조회수 200

게시글 테스트 데이터 삽입 에서 SQL 최대 2만건 삽입 되는문제

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 데이터 삽입 부분에서요, 영상 강의에서는 데이터 1200만건 삽입 하는데 대략 13분 정도 걸리는걸 확인 햇는데, 저는 2초만에 끝나더니 삽입된 갯수 확인해보니까 2만건만 추가 되고 더 추가 안된거같은데 어떤 문제가 있을가요?? 아래는 코드랑 영상에서 설명한 sql 설정값 첨부 했습니다. @SpringBootTest public class DataInitializer { @PersistenceContext EntityManager entityManager; @Autowired TransactionTemplate transactionTemplate; Snowflake snowflake = new Snowflake(); CountDownLatch latch = new CountDownLatch(EXECUTE_COUNT); static final int BULK_INSERT_SIZE = 2000; static final int EXECUTE_COUNT = 6000; @Test void initialize() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(10); for(int i = 0; i < EXECUTE_COUNT; i++) { executorService.submit(() -> { insert(); latch.countDown(); System.out.println("latch.getCount() = " + latch.getCount()); }); } latch.await(); executorService.shutdown(); } void insert() { transactionTemplate.executeWithoutResult(status -> { for(int i = 0; i < BULK_INSERT_SIZE; i++) { Article article = Article.create( snowflake.nextId(), "title" + i, "content" + i, 1L, 1L ); entityManager.persist(article); } }); } }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
MinKyu Song 댓글 2 좋아요 0 조회수 193

O(1)의 값에 대한 질문

해결됨

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 MyheshSetV0에 클래스에서 (밑의 코드는 중략) 이 클래스의 인스턴스 변수인 int[] elementData 배열은 기본형이기에 모두 0으로 초기화 되어지는데 이러한 메인 클래스에서 첫 set.addO(1)이 되는 부분이 이해가 잘 안되네요 ㅜㅜ 결국 기본형 배열에 0으로 초기화가 되어있으니 끝까지 비교가 되어 처음 add 역시 O(n)이 될 것 같아서 Integer 제너릭 타입은 널이 들어가서 for-each문 배열을 안 돌지만 int형은 0으로 n번째만큼 돌지 않을까? 라는 생각을 하고 있습니다 혹시 가르쳐 주실 수 있을까요 (요약문) int[] elementData는 기본형으로 0으로 전부 초기화 contains의 0값을 data에 다 넣어서 == 비교처리가 됨으로 O(n)처리가 되지 않을지 질문( 추후 Integer배열(null 초기화)로 가정하면 될지)

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
류정균 댓글 2 좋아요 3 조회수 189

JdbcClient 생성 질문

미해결

토비의 스프링 6 - 이해와 원리

JdbcOrderRepository 에서 JdbcClient 경우 Bean 으로 주입 받지않고, 생성자에서 직접 사용하셨는데 Bean 주입받는거와 차이가 있을까요? JdbcClient 를 구현하고 있는 DefaultJdbcClient 경우 상태를 가지지않고 datasource 또는 jdbcTemplate 을 이용해서 생성하는 로직밖에 없는데 강의해서 직접 생성하신 부분이 어떤 차이가 있는지 궁금합니다. 아래는 제가 추측 및 생각한 흐름입니다. EntityManager 경우에는 reuqest 및 transaction context 마다 생성을 해줘야되는데 이와 유사하게 처리를 하신건가? 그렇다고 하기에 DataConfig 에서 JdbcOrderRepository 는 싱글톤으로 한번만 만들어지는데 이러면 JdbcClient 도 싱글톤 아닌가?

  • java
  • spring
김태형 댓글 2 좋아요 0 조회수 216

문득 영한님의 키세팅이 궁금해서 여쭤봅니다

미해결

김영한의 실전 자바 - 중급 1편

[질문 내용] 저도 mac os를 사용중인데 이번 문제 같이 String값을 대문자로 써야할때면 기본키가 Caps Lock키를 꾹 누르는거라 시간도 오래걸리고 사용하기 어려운데 다른 키로 사용하시는 걸까요? 뭔가 금방금방 바꾸시는거 같아서요

  • java
  • 객체지향
김지협 댓글 1 좋아요 0 조회수 147

[30-01] 웹 에디터와 폼 라이브러리

해결됨

[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스

안녕하세요 해당수업중 강의 내용대로 했는데 실행시 아래와 같이 에러 뜨고 정상 실행이 안됩니다. TypeError: react_dom_1.default.findDOMNode is not a function at ReactQuill.getEditingArea ( http://localhost:3000/_next/static/chunks/node_modules_5754136c._.js:16760:43 ) at ReactQuill.instantiateEditor ( http://localhost:3000/_next/static/chunks/node_modules_5754136c._.js:16631:50 ) at ReactQuill.componentDidMount ( http://localhost:3000/_next/static/chunks/node_modules_5754136c._.js:16590:14 ) at LoadableComponent ( http://localhost:3000/_next/static/chunks/_2df4111c._.js:296:57 ) at WebEditorPage ( http://localhost:3000/_next/static/chunks/_2df4111c._.js:81:215 ) at ClientPageRoot ( http://localhost:3000/_next/static/chunks/node_modules_next_dist_1a6ee436._.js:2053:50 )

  • react
  • react-native
  • 하이브리드-앱
  • graphql
  • next.js
Lia 댓글 3 좋아요 0 조회수 225

추상 클래스와 인터페이스 활용 영역에 대한 문의

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 강의를 통해 제가 최종적으로 이해한바로는, 인터페이스의 경우는 다형성을 위해서 제약사항을 좀더 추가 된것과 더불어 클라이언트 코드 입장에서는 내부 구현 클래스를 굳이 알 필요가 없고 확장성에 용이 하다는점. 추상클래스는 객체 생성을 방지와 더불어, 자식 클래스에서 추상클래스 내의 메소드를 사용할 수 있게 한것으로 이해했는데요. 여기서 궁금한게 있습니다. 보통 실무에서는 공통 모듈이나 공통 적인 유틸성 함수들을 구현해서 사용하는 경우가 많은데요. 이런 경우는 추상클래스내의 추상메소도를 통해 구현해서 활용하는것이 더 효율적인지? 아니면, 꼭 추상클래스로 안해도 되는지? 추상클래스의 적절한 활용 범위와 더불어 런타임시(메모리 상에서) 처리 성능에 있어서 어느정도의 이점이 있는지 궁금합니다.

  • java
  • 객체지향
hwi 댓글 1 좋아요 0 조회수 104

api폴더 하위의 api.ts들은 언제사용하나요?

해결됨

한 입 크기로 잘라먹는 Next.js

백엔드서버와 통신할 때, service폴더를 만들고 하위에 api 정리를 자주 하였는데요,(fetch, axios instance등) 현재 강의에서 언급하고있는 이 api폴더는 next로 풀스택 개발외에는 딱히 사용되지 않는편인가요?

  • react
  • typescript
  • next.js
  • api
이윤재입니다. 댓글 1 좋아요 0 조회수 193

interrupt 에 대하여

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

안녕하세요 강사님! 간단한 질문이 있습니다!! shutdown 이나 shutdownNow 모두 작업중이 스레드에게 Interrupt 를 거니까, 100초 짜리 작업이 interrupt 체킹이 안되어있는 스레드였다면 (sleep 함수가 아니라 실제로 작업이 100초짜리 걸려서, Thread.isInterrupted 같은걸로 체크가 없다면) (sleep 은 interrupt 를 잡음) shutdownNow 에도 동작을 안하나요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
댓글 1 좋아요 0 조회수 124

댓글 신규 path 동시성 이슈

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

댓글의 path를 설정하는 과정에서 public CommentPath createChildCommentPath(String descendantsTopPath) { if (descendantsTopPath == null) { return CommentPath.create(path + MIN_CHUNK); } String childrenTopPath = findChildrenTopPath(descendantsTopPath); return CommentPath.create(increase(childrenTopPath)); } 이런식으로 findChildrenTopPath 를 설정하게 되는데 이 과정에서 동시성 이슈가 발생할 수 있을 것 같아 질문 드립니다. increase 하는 함수에서도 동시성 제어를 하는 파트가 없어 동시에 같은 계층의 댓글이 생성되면 id가 겹칠 것 같습니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
See Go 댓글 2 좋아요 0 조회수 132

제네릭 연습문제 1번

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. isEmpty() 메서드 관련해서 제네릭은 실행 시점에 타입이 정해지는데 단순 null 인지만 확인하는것이 아닌 기본형,참조형 각각의 타입별로 비어있는지를 구현해야 하지 않나 싶습니다. 아래와 같이 test를 해보면 잘못된 값이 나옵니다. public class ContainerTest { public static void main(String[] args) { Container<Integer> integerContainer = new Container<>(); System.out.println("빈값 확인1: " + integerContainer.isEmpty()); } }

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
큐펀치 댓글 2 좋아요 0 조회수 121

jpa 책 질문있습니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강의에서 2015년에 나왔다고 하셨던거 같은데 지금 책 구매해서 봐도 괜찮나요? 에러라던가 버전이라던가 아니면 jpa 방식이 변했다던가 그런부분은 거의 없나요 ?

  • java
  • spring
  • mvc
  • spring-boot
열심인 참새 댓글 1 좋아요 0 조회수 176

application.yaml 에 redis 정보

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

redis 분산락을 사용할때, application.yaml 에 아래와 같은 redis 정보가 없어도 정상동작하는 이유가 궁금합니다 !!! spring: data: redis: host: localhost port: 6379

  • java
  • spring
  • 동시성
힝훙항 댓글 2 좋아요 0 조회수 116

PC 접속 X, 모바일 접속만 가능

해결됨

(2025) MBTI 테스트 기반 수익형 웹사이트 만들기 - <코딩 배워 사업하자>

선생님 안녕하세요! 3시간 전에 서비스를 배포했습니다. 근데 PC 접속이 안되어 cafe24에서 설정한 DNS가 아직 적용이 잘안되어서 서비스 접속이 PC로 안되는줄 알았습니다. 하지만 모바일로 접속하니 접속이 잘만 되더라구요?... 어떻게 이럴수가 있을까요? PC가 안되면 모바일도 안되어야하지 않나요?

  • react
  • aws
  • Google-Analytics
  • cloudflare
  • adsense
  • 수익화
asd 댓글 2 좋아요 0 조회수 205

인기 태그

인프런 TOP Writers

주간 인기글