inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

streaming 페이지 보완 필요

미해결

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

안녕하세요, 잘 학습하고 있는 학생입니다. 강의 따라가면서, streaming 파트는 다 적용을 했습니다. 소개 탭에서 홈 탭으로 이동 시에 태그목록과 포스트리스트도 skeleton 로딩페이지 잘 적용됩니다. '홈'을 눌렀을때, 기존의 '로딩 되는 중에 아무 변화 없이 사용자를 마냥 기다리게 함'에서 현재의 '로딩 되는 중에 skeleton 보여줌으로써 로딩되고 있음을 나타내줌'으로의 개선은 사용자 경험에 있어서, 정말 효과적인 방법이라고 느꼈습니다. 다만, 문제가 있습니다. '홈' 을 눌러 이동하는 경우말고, 태그 목록에서 나머지 'css'태그, 'git'태그 등등 이를 직접 클릭해서 이동하는 경우에는 streaming 이 적용되지 않습니다. 예를 들어, 홈을 클릭한 상황에서는 skeleton ui가 잘 나타나지만, 그렇게 홈으로 이동한 상황에서 다른 태그(css,Git 등)로 다시 이동하는 상황에서는 적용되지 않고 그대로입니다. 이를 해결하기 위해선 어떻게 해야 하나요?

  • react
  • 블로그
  • next.js
  • cursor
  • cursorai
주병규 댓글 2 좋아요 1 조회수 82

useSuspenseQuery 사용 시 SSR 401 이슈 관련

미해결

Next + React Query로 SNS 서비스 만들기

안녕하세요 강사님 좋은 강의 잘 듣고 있습니다! useSuspenseQuery를 사용 중에 고민이 생겨서 질문 드립니다. 제가 구현하고 있는 프로젝트의 대부분 API는 인증이 필요합니다. refresh token 은 http only 쿠키로 관리하고, access token 은 쿠키에 저장하고, 요청 헤더에 넣어 인증을 하고 있습니다. useSuspenseQuery 를 사용하는 페이지에서 SSR 단계에 401 에러가 발생합니다. 이후 CSR 전환 시에는 정상적으로 데이터를 불러와 화면은 최종적으로 렌더링됩니다. 해당 페이지를 dynamic import 로 CSR 강제하면 401이 발생하지 않습니다. 제가 추정한 원인은 클라이언트 컴포넌트 내부라도 초기 렌더링 시 SSR 패스에서 useSuspenseQuery 가 실행되어 서버에서 API 요청이 발생. 이때 공통 axios 인스턴스가 클라이언트 전용 방식으로 쿠키를 읽어 헤더에 토큰을 주입하도록 구현되어 있어, 서버 환경에서는 토큰을 읽지 못해 401이 발생하는 것으로 판단했습니다. 해결을 위해 시도한 방법 prefetchQuery + useSuspenseQuery 조합으로, prefetchQuery 단계에서 next/headers 를 통해 서버 환경에서 토큰을 읽어 주입하면 401이 사라졌습니다. 다만, 모든 useSuspenseQuery 호출 지점마다 prefetchQuery 를 추가하는 것은 과도하다고 느껴 대안을 모색 중입니다. 질문 사항 왜 SSR에서 실행되나요? 클라이언트 컴포넌트 내부에서 호출하는데도 useSuspenseQuery 가 SSR 렌더링 단계에서 동작하는 메커니즘을 정확히 이해하고 싶습니다. useSuspenseQuery 의 단점/주의점 강의에서는 주 사용을 권장해 주셨는데, 모든 데이터 관리에 useQuery 대신 useSuspenseQuery 사용하는게 좋은건지 실제 서비스에서 고려해야 할 단점이나 주의사항이 궁금합니다. 401을 피하는 권장 패턴 제 환경처럼 서버에서 토큰을 읽지 못해 401이 나는 경우, 제가 시도한 방법 인 prefetchQuery 적용 외에 권장되는 표준 패턴이 있을까요? prefetchQuery 를 여러 곳에서 사용할 때의 리스크 여러 페이지/쿼리에서 prefetchQuery 를 널리 적용하면 TTFB 지연, 직렬화된 캐시의 HTML 페이로드 증가, 중복 호출 등의 문제가 커질 수 있을까요? 그렇다면 적절한 적용 기준이나 완화 전략이 궁금합니다. 그리고 어떤 기준으로 prefetchQuery 를 적용하면 좋을지도 궁금합니다. 문서와 블로그, GPT 등을 찾아봤지만 명확히 정리하기 어렵고, 제가 질문을 드릴 수 있는 최고 전문가라고 생각하여 의견을 여쭙니다. 긴글 읽어주셔서 감사합니다! 아래 에러가 발생하는 예시 코드 첨부 드립니다. (APage를 CSR로 강제하면 에러 미발생) import Spinner from "@/components/common/spinner/Spinner"; import A from "@/components/pages/A"; import { Suspense } from "react"; import { ErrorBoundary } from "react-error-boundary"; interface APageProps { params: { id: string; }; } export default async function APage({ params, }: APageProps) { const { id } = params; const parsedId = parseInt(id); return ( <ErrorBoundary fallback={<div>에러가 발생했습니다</div>}> <Suspense fallback={<Spinner fullscreen />}> <A id={parsedId} /> </Suspense> </ErrorBoundary> ); } "use client"; import { useGetAList } from "@/api/A/queries/useGetAList"; interface AProps { id: number; } export default function A ({ id }: AProps) { const { data: probiomeList } = useGetAList(id); // 생략 import { queryKeys } from "@/constants/queryKeys"; import { UseSuspenseQueryCustomOptions } from "@/types"; import { useSuspenseQuery } from "@tanstack/react-query"; import { getAList } from "../A"; import { AList } from "@/types/A"; export function useGetAList( id: number, queryOptions?: UseSuspenseQueryCustomOptions<AList> ) { return useSuspenseQuery({ queryFn: () => getAList(id), queryKey: [ queryKeys.A.BASE, queryKeys.A.GET_A_LIST, id, ], ...queryOptions, }); }

  • react
  • next.js
  • react-query
  • next-auth
  • msw
dubu777 댓글 1 좋아요 0 조회수 199

질문)바이브코딩 웹제작

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

안녕하세요 선생님, 혹시 전체 강의를 수강하진 않았지만 이 부분이 가능할것으로 생각들어 강의 결제하였는데, 궁금해서 문의드려요 lovable이나 replit으로 만든 웹을 안드로이드 앱으로 만들려면 어떻게 해야되는건가요? 이거에 대한 강의나 관련내용이 있을까요??저 그 방법이 있는거 같아서 결제했는데, 알려주실수 있나요?강의에 포함안되어 있다면 통상적으로 어떤식으로 만드는 궁금합니다.

  • flutter
  • next.js
  • cursor
화이팅! 댓글 2 좋아요 0 조회수 175

supabase 연결하는 프로젝트 단위 기준

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

supabase에 연결할 때, 만드는 서비스마다 프로젝트를 다르게 설정하면 되는 걸까요? 아니면 같은 프로젝트에다가 그냥 연결해도 알아서 별개로 DB를 구축해주는 건지 궁금합니다!

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
고구고구마 댓글 2 좋아요 0 조회수 155

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] (05:30부터) publicValue와 protectedValue에는 어떻게 접근한건가요? : publicValue, protectedValue는 타 클래스인 Parent의 멤버변수이고, 그것에 접근하려면 Parent의 인스턴스를 생성한 다음(인스턴스 변수는 'p'라 하겠습니다) 'p.'을 앞에 적어야 접근이 가능한 것 아닌가요? 즉 저는 p.publicValue같은 식으로 불러야 하는 것으로 알고있는데, 여기서는 어떻게 'p.'없이 접근을 한건지 궁금합니다 ㅠ

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

안녕하세요 급하게 next.js를 배워아햐는데

해결됨

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

현재 react.js는 수강한상태이고 타입스크립트는 수강안한 상태입니다. 급하게 회사에서 next.js를 배우라고해서 인강을들어아햐는데 타입스크립트 모르고 react.js만 알아도 수강하는데 아무지장없을까요?

  • react
  • typescript
  • next.js
임다정 댓글 2 좋아요 0 조회수 109

리액트 쿼리 useinfinitequery 무한스크롤 구현 시 페이지가 이동할 경우 데이터가 보존되게 할 수 있나요??

미해결

Next + React Query로 SNS 서비스 만들기

더보기 버튼 클릭 시 페이지 이동 (page=1 -> page=2) + 무한스크롤 구현 기능 구현이 필요해서 아래와 같이 구현해보았는데 어쩔땐 되고 어쩔땐 안되더라구요... 만약 데이터를 10개씩 불러올 경우 10개 -> 20개 -> 30개 -> 40개 이러다 갑자기 다시 10개가 됩니다... 원래 useInfiniteQuery 무한스크롤 구현 시 페이지이동하면서 기존 데이터를 보존하는 방법이 불가능한건지 아님 제가 코드를 잘못짠건지 궁금합니다... const useInfiniteQuery = (params: Params) => { const searchParams = useSearchParams() const page = searchParams.get('page') return useInfiniteQuery({ queryKey: [CONTENTS_KEY, params], queryFn: ({ pageParam }) => { return getContentsApiClient({ ...params, ...outLinkParams(), page: Number(pageParam) }) }, getNextPageParam: (lastPage, _, lastPageParam) => { // 마지막 page라면 hasNextPage가 false const lastPageNumber = Math.ceil(lastPage.totalCount / (params.size || 10)) if (lastPageNumber === lastPageParam) { return undefined } return Number(lastPageParam) + 1 }, initialPageParam: Number(page) || 1, placeholderData: keepPreviousData, }) } //더보기 버튼 // 클릭 시 페이지 이동 function AddMore({ fetchNextPage, totalPages }: { fetchNextPage: () => void; totalPages: number }) { const searchParams = useSearchParams() const pathname = usePathname() const params = new URLSearchParams(searchParams.toString()) const pageNo = Number(searchParams.get('page') || 1) params.set('page', (pageNo + 1).toString()) if (totalPages === pageNo) return null return ( <div className={cn('wrap')}> <Link className={cn('link')} href={`${pathname}?${params.toString()}`} onClick={fetchNextPage} scroll={false} > <span className={cn('label')}>더보기</span> </Link> </div> ) } 강의 잘 듣고있습니다. 감사합니다! 참고로 백엔드는 문제가 없습니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
변재정 댓글 3 좋아요 0 조회수 212

api 를 호출해야만 ISR 이 적용 되는것 같은데 자동으로 적용하려면 어떻게 해야 하나요?

해결됨

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

🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요) 제목을 구체적으로 작성해 주세요 ✅ 좋은 예 : 감정일기장 Home 구현중 xx 이슈가 발생합니다. ⛔ ️ 나쁜 예 : 이거 왜 안되나요?, 오류나요 도와주세요 등 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 코드의 이슈는 전체 프로젝트를 "링크 형태"로 올려주셔야 원인을 파악할 수 있습니다. 깃허브, 구글드라이브 등의 수단을 통해 링크 형태로 전달해주세요 직접 실행해보며 원인을 파악해야 하기 때문에 텍스트 형태로 붙여넣는건 삼가해주세요 🥲 답변이 도움이 되셨다면 답글 or 해결완료 버튼을 클릭해주세요 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 제 답변이 여러분께 도움이 되었는지 저도 알고 싶어요 🥲 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요 더 빠른 답변이 가능합니다!

  • react
  • typescript
  • next.js
강지웅 댓글 1 좋아요 0 조회수 126

MSA 아키텍쳐 DB관게

해결됨

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

MSA 구조에서 DB는 FK로 묶여있지 않고 다 분리된 테이블일까요? 아니라면 ERD 다이어그램도 추가해 주실 수 있으실까요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
최어진 댓글 1 좋아요 0 조회수 167

MSA 아키텍쳐 DB관게

해결됨

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

MSA 구조에서 DB는 FK로 묶여있지 않고 다 분리된 테이블일까요? 아니라면 ERD 다이어그램도 추가해 주실 수 있으실까요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
최어진 댓글 2 좋아요 0 조회수 62

정말 감사합니다.

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 질문은 아니고.. 생산자 소비자 문제 파트 공부하다가 정말 감사해서 글 남깁니다. 이해를 위한 그림이 지금 세기도 힘들 정도로 많이 들어가있는데.. 학습자를 배려해주시는 마음이 느껴져서 정말 감사하네요.. 얼마나 많은 시간과 노력이 들어가있는지 가늠도 안됩니다. 정말 덕분에 편하게 공부하고 있습니다. 항상 감사드립니다.

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

생산자 소비자 문제 큐 사용

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이전의 프린트 예제에서는 큐를 생성할 때 ConcurreentLinkedQueue를 사용했고, 생산자 소비자 문제에서는 ArrayDeque를 사용했는데, ConcurreentLinkedQueue를 쓰지 않아도 괜찮은건가요? 이 예제는 lock을 획득한 스레드만 접근 가능해서 동시성문제를 해결한 상황이라서 그런건가요?

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

getter setter

미해결

나도코딩의 자바 기본편 - 풀코스 (20시간)

modelname은 getter에 if 문을 넣고 price엔 if를 setter에 넣었는데 그 기준이 있나요? 아니면 실행되고 출력하는데엔 어디에 넣든 아무 영향이 없는 걸까요?

  • java
  • 객체지향
민혁 댓글 2 좋아요 0 조회수 126

CommentApiTest 중 오류가 발생합니다

해결됨

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

섹션3 23강 댓글 최대 2 depth - CUD API 테스트 & 테스트 데이터 삽입 파트 수강 중 create 테스트를 실행하는데 오류가 계속 발생합니다 package kuke.board.comment.api; import kuke.board.comment.service.response.CommentResponse; import lombok.AllArgsConstructor; import lombok.Getter; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestClient; public class CommentApiTest { RestClient restClient = RestClient.create("http://localhost:9001"); @Test void create() { CommentResponse response1 = createComment(new CommentCreateRequest(1L, "my comment1", null, 1L)); CommentResponse response2 = createComment(new CommentCreateRequest(1L, "my comment2", response1.getCommentId(), 1L)); CommentResponse response3 = createComment(new CommentCreateRequest(1L, "my comment3", response1.getCommentId(), 1L)); System.out.println("commentId=%s".formatted(response1.getCommentId())); System.out.println("\tcommentId=%s".formatted(response2.getCommentId())); System.out.println("\tcommentId=%s".formatted(response3.getCommentId())); // commentId=123694721668214784 // commentId=123694721986981888 // commentId=123694722045702144 } CommentResponse createComment(CommentCreateRequest request) { return restClient.post() .uri("/v1/comments") .body(request) .retrieve() .body(CommentResponse.class); } @Getter @AllArgsConstructor public static class CommentCreateRequest { private Long articleId; private String content; private Long parentCommentId; private Long writerId; } } 코드는 강사님 코드를 복붙을 해 봤는데도 아래의 오류가 지속적으로 발생합니다 500 Internal Server Error: "{"timestamp":"2025-08-24T11:27:31.828+00:00","status":500,"error":"Internal Server Error","path":"/v1/comments"}" org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: "{"timestamp":"2025-08-24T11:27:31.828+00:00","status":500,"error":"Internal Server Error","path":"/v1/comments"}" at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:102) at org.springframework.web.client.StatusHandler.lambda defaultHandler defaultHandler 3(StatusHandler.java:89) at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:698) at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:200) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:685) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:631) at kuke.board.comment.api.CommentApiTest.createComment(CommentApiTest.java:32) at kuke.board.comment.api.CommentApiTest.create(CommentApiTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) DB를 봤을 때 parent_comment_id 가 NOT NULL이라 안 되나 싶다가도 강사님은 pdf의 create table comment ( comment_id bigint not null primary key, content varchar(3000) not null, article_id bigint not null, parent_comment_id bigint not null, writer_id bigint not null, deleted bool not null, created_at datetime not null ); sql문과 똑같이 만들었던걸 생각하면 아닌 거 같기도 하고 뭐가 문제인지 감이 안 옵니다 @Service @RequiredArgsConstructor public class CommentService { private final Snowflake snowflake = new Snowflake(); private final CommentRepository commentRepository; @Transactional public CommentResponse create(CommentCreateRequest request) { Comment parent = findParent(request); Comment comment = commentRepository.save( Comment.create( snowflake.nextId(), request.getContent(), parent == null ? null : parent.getCommentId(), request.getArticleId(), request.getWriterId() ) ); return CommentResponse.from(comment); } private Comment findParent(CommentCreateRequest request) { Long parentCommentId = request.getParentCommentId(); if ( parentCommentId == null) { return null; } return commentRepository.findById(parentCommentId) .filter(not(Comment::getDeleted)) .filter(Comment::isRoot) .orElseThrow(); } public CommentResponse read(Long commentId) { return CommentResponse.from( commentRepository.findById(commentId).orElseThrow() ); } @Transactional public void delete(Long commentId) { commentRepository.findById(commentId) .filter(not(Comment::getDeleted)) .ifPresent(comment -> { if (hasChildren(comment)) { comment.delete(); } else { delete(comment); } }); } private boolean hasChildren(Comment comment) { return commentRepository.countBy(comment.getArticleId(), comment.getCommentId(), 2L) == 2; } private void delete(Comment comment) { commentRepository.delete(comment); if (!comment.isRoot()) { commentRepository.findById(comment.getParentCommentId()) .filter(Comment::getDeleted) .filter(not(this::hasChildren)) .ifPresent(this::delete); } } } 서비스의 경우에도 딱히 차이점을 발견하지 못했고 혹시나 싶어 복붙을 해도 마찬가지의 오류가 발생합니다

  • java
  • mysql
  • spring-boot
jackt0506 댓글 2 좋아요 0 조회수 125

38강 editConfiguration에 active profiles 가 없어요

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

위와 같이 active profiles가 없는데 어떻게 하면 될까요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
커디널스 댓글 1 좋아요 1 조회수 50

로컬 모니터링 구축에 대해 질문있습니다.

해결됨

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

Actuator, 프로메테우스, Grafana를 통해 운영 서버 모니터링 대시보드를 구축하려고 합니다. (CloudWatch는 일정 용량 이후 비용이 부과되는 문제로 Prometheus를 선택했습니다.) 근데 운영 서버에서 Actuator와 프로메테우스 서버를 띄우면 외부에서도 Actuator 가 제공하는 메트릭 정보뿐만 아니라, 프로메테우스가 수집한 정보를 9090 포트 번호를 통해 접근 가능하다고 생각하였습니다. 처음에는 Actuator의 정보를 ADMIN 권한을 가진 관리자만 접근 가능하도록 설정하였지만, Prometheus 서버에서 접근이 불가능한 문제가 생겼습니다. Prometheus와 Grafana를 통해 모니터링을 구축할 때, 데이터에 대한 보안을 강화할 수 있는 방법이 뭐가 있는지 궁금합니다.

  • java
  • spring
  • mysql
  • redis
  • 이력서
foureach2025 댓글 2 좋아요 0 조회수 107

어플리케이션 , 도메인 계층질문

해결됨

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

안녕하세요 토비님 어플리케이션 계층의 port는 도메인과 외부의 연결을 위해 필요 하다고 알고 있는데 jpa나 마이바티스 같은 기술 또한 도메인 외부의 내용이기에 인프라 계층으로 들어간다고 알고 있습니다 그런데 의존성 역전을 위한 레파지토리 인터페이스를 어플리케이션 계층에 만들면 어플리케이션 서비스에서 도메인에 관련된 내용을 너무 깊게 관여하는 것 같아서 질문 드립니다 어플리케이션과 도메인의 경계를 어디까지로 보는게 좋을까요

  • java
  • spring
  • spring-boot
  • jpa
  • 리팩터링
  • ddd
김지훈 댓글 3 좋아요 0 조회수 220

gradle source sets가 없을때

해결됨

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

안녕하세요 8강 강의에서 멀티모듈 구조 만드실때 각 서비스에 디렉토리를 추가하는 과정에서 new -> directory 클릭했을 때 강사님은 경로명 입력하는 칸 밑에 gradle source sets가 떠서 쉽게 src와 test디렉토리 등을 추가하셨는데 저는 뜨지 않습니다.. 왜 그런걸까요??

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
유근찬 댓글 2 좋아요 0 조회수 96

Repository 인터페이스 위치

미해결

Java/Spring 주니어 개발자를 위한 오답노트

class Controller, class Service, Interface Repository, class RepositoryImpl, Interface JpaRepository의 그림에서 Interface Repository 가 Persistence 가 아닌 Business 계층으로 분리하신 이유가 궁금합니다!

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
yhwjd 댓글 1 좋아요 0 조회수 90

인기 태그

인프런 TOP Writers

주간 인기글