묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
drop shadow
Drop shadow 설정 자체가 안되요 ㅠㅠ두껍게 설정하는 것을 얼만큼 하셨는지 안나와서요. 어떻게 설정하셨나요??
-
미해결[Rookiss 켠김에 출시까지] MMO Lab #1 (M1) <유니티 방치형 키우기 게임>
클래스 다이어그램
루키즈님도 이런 프로젝트를 제작할때 클래스 다이어그램을 만들며 제작하시나요?? 궁금합니다
-
미해결홍정모의 따라하며 배우는 C언어
6-1강 첫번째 예제 질문
코드 처음에 num과 sum 변수를 0으로 초기화 해줘야만 코드만 실행되는 이유는 무엇인가요? 0으로 초기화하지 않고 실행했을때 오류가 나는 이유도 궁금합니다
-
해결됨네카라에서 MongoDB를 활용하여, 1000만건 이상의 데이터 파이프라인 작성법
강의 코드 관련
강의에서 코드는 어떻게 볼 수 있을까요?강의에서 활용하는 코드를 직접 보면서 실행시켜보고 싶습니다
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
기본환경설정(2-1), (Ctrl+)F5누르면 실행하지 않고 Select debugger라고 뜹니다.
안녕하세요. F5나 Ctrl+F5를 누르면 코드를 실행하지 않고 첨부한 캡쳐처럼 Select debugger 라고 뜹니다. 그리고 오른쪽의 세모를 클릭하면 실행합니다.강의대로 그대로 따라했는데 제가 무언가 빠뜨린 게 있는 건가요?어떻게 해야하죠?감사합니다!
-
해결됨독하게 시작하는 C 프로그래밍
[필수 실습 문제] 버스 요금 계산
안녕하세요 강사님 [필수 실습 문제] 버스 요금 계산 관련 질문 있습니다.저는 나이가 20살 미만이면 기본 버스 요금 1000원의 75% 적용한다는 구문을printf 함수 안에 input*0.75 이렇게 적었는데요이렇게 적으면 최종 요금이 0이 나오더라구요이렇게 되는 이유가 최종 요금을 나타내는 형식문자가 %d인데 *0.75 를 곱해서 일어난 것 같은데전체적으로 보면 input 0.75 = 1000 * 0.75 =750 의 정수형식이라서 상관없을 거 같은데 형식 문자가 %d 정수형이면 그 값을 나타내는 변수에도 정수만 들어가야하나요?
-
해결됨Flutter로 SNS 앱 만들기
회원가입 버튼을 누른 후 validation 문제
영상 마지막에 고쳐주신 setState(() { _isEnabled = false; _autovalidateMode = AutovalidateMode.always;});위치를 바꾸어주어서 그 전에 null 로 return 하는 조건문 때문에 autovalidateMode.always 가 적용되지 않는 것 같습니다. 조언 부탁드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc에서 동작시키면 갑자기 회원조회기능, 회원등록후 홈화면 가기가 안되ㅂ니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1i3bo7BW0D9boeFa4l3_EW4sBliS1sqDe/view?usp=sharing 코드는 위와 같습니다. 감사합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?
안녕하세요 강사님현재 스프링부트 3.2.2 버전을 사용하고 있습니다.배운대로 개인적인 프로젝트에 적용해보고 있는데@Around 애노테이션의 메서드 실행이@GetMapping일 경우에는 AOP가 잘 작동하나@PostMapping일 경우에는 작동하지 않고@Validation 애노테이션에서 오류가 먼저 터집니다..무슨 문제일까요..? .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<?> com.board.www.app.board.controller.api.BoardApiController.create(com.board.www.app.board.dto.BoardDto,org.springframework.web.multipart.MultipartFile) with 2 errors: [Field error in object 'dto' on field 'content': rejected value []; codes [NotBlank.dto.content,NotBlank.content,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dto.content,content]; arguments []; default message [content]]; default message [내용을 입력해 주세요]] [Field error in object 'dto' on field 'title': rejected value []; codes [NotBlank.dto.title,NotBlank.title,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dto.title,title]; arguments []; default message [title]]; default message [제목을 입력해 주세요]] ]
-
미해결쉽고 빠르게 익히는 Power BI 심화 1 (시각화와 파워 쿼리)
폴더 내 엑셀 파일 합치기 문의
안녕하세요. 폴더 내 엑셀 파일 합치는 과정에서 엑셀 파일 안에 여러 시트가 있는 경우는 어떻게 진행하면 되는지 궁금합니다..!
-
미해결뉴욕 프로덕트 디자이너가 알려주는, 입문자를 위한 UX디자인 개론
UX원리를 토대로 내가 생각할 때 좋은 UX와 안좋은 UX사례
안녕하세요? 비전공자이나 UX에 대해 배워보고자 강의를 듣게 되었습니다. 이미 다른 강의를 들어본 경험도 있는데 비전공자도 이해하기 쉽게 강의해주셔서 흥미롭게 듣고 있습니다. 먼저 저는 안좋은 사례로 당근 마켓의 웹페이지를 꼽아보았습니다. 웹으로 보면 상단 메뉴바에 중고 거래, 동네 업체, 알바, 부동산 직거래, 중고차 직거래로 카테고리가 분류된 것을 볼 수 있습니다.당근 마켓에서 중고 물품 뿐만 아닌 알바, 부동산, 중고차까지 소비자들 간의 다양한 직거래가 가능하다는 것을 한 눈에 알 수 있고 동네 업체 카테고리에선 같은 지역에 살고 있는 사람들이 자주 이용하는 업체들과 업체 후기와 더불어 식당, 카페 등의 하위 카테고리로 분류 되어 높은 의도 사용자들이 빠르게 정보를 습득하고 낮은 의도의 사용자들 역시 보다 쉽게 접근 할 수 있도록 구분되어 있다고 보여집니다.중고 거래 카테고리에는 중고 거래 인기 매물들이 먼저 나타납니다. 관심, 채팅 개수, 조회수와 상관 없이 랜덤으로 나타난 것으로 보여집니다. 하단으로 내려가면 인기 매물을 더 볼 수 있는 버튼이 있고 누르면 더 많은 인기 매물을 볼 수 있는데 이때 오른쪽 상단에 지역과 동네를 선택할 수 있는 토글이 등장합니다.이 토글을 열면 지역과 동네를 설정하여 우리 동네의 인기 매물들을 볼 수 있는데 앱에서는 카테고리 별로 구분하여 볼 수 있고, 더 최근에 업로드 된 순서대로 나타내고 있습니다.본 사용자는 인기 매물, 업로드 순 매물로 보는 것에 불편함을 느끼지는 않았으나 선착순으로 거래가 이루어지는 중고거래가 대부분이기 때문에 웹에서처럼 인기 매물 순서대로 확인하게 된다면 사용자들이 불편함을 느낄 수 있을 것 같아 안좋은 사례라고 생각합니다.또한 앱에서는 여성 의류, 잡화, 남성 의류, 잡화, 디지털 기기 등 품목에 따른 카테고리가 있으나 웹에서는 품목에 따른 카테고리가 아닌 동네에 따른 인기 매물만 보여집니다. 또 검생창에는 예를 들면 ‘루이비통 스피디’ 라고 검색할 경우 25, 25 등 스피디에 속하는 모든 제품들이 보여지나 ‘루이비통 스피티 35’ 라고 검색할 경우에는 제품이 나타나지 않는 불편함이 있습니다. 이러한 부분들 역시 목적 의식이 분명한 사용자들에게는 다소 불편할 수 있어 안좋은 사례라고 생각하게 되었습니다. 그리고 좋은 사례로는 마켓컬리를 꼽았습니다. 좋은 사례로는 마켓컬리를 꼽아 보았습니다. 마켓컬리는 하단 탭바에 5개의 아이콘이 구성되어 있고 레이블 텍스트는 들어가 있지 않더라도 직관적으로 알아 볼 수 있도록 되어 있어 기능을 유추하고 보기에 편리하다는 느낌을 받았습니다. 예를 들면 햄버거 버튼은 카테고리, 컬리로그의 해쉬태그 형태, 집 모양의 홈버튼 등으로 사용자들이 익숙하고 편리하게 사용 할 수 있으며 깔끔하고 플랫한 형태가 아이콘 트랜드가 반영되어 있다고 생각 되었습니다.또 가장 많이 담는 특가 상품에는 어떤 것들이 있는지 더 살펴 볼 수 있도록 전체 보기가 엄지 영역에 들어가 있고 바로 그림 하단에는 장바구니 버튼을 두어 편리하게 구매로 유도할 수 있는 점이 좋다고 생각됩니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 readonly 거는 이유
@Slf4j static class BasicService { @Transactional public void tx1() { } @Transactional(readOnly = true) public void tx2() { } }만약에 이렇게 코드를 만드는데 tx2에서 트랜잭션을 readonly를 언제 보통 거는걸까요?tx2에 메소드에서 어차피 @Transactional(readOnly) 를 거나 안거나 성능은 별차이가 없는걸까요?두번째는 어차피 수정 삭제도아니고 조회인데 굳이 트랜잭션을@Transactional(readOnly = true) 거는 이유는 어떤경우가 있나요? 조회를 할때도 트랜잭션이 필요할때가 있어요?
-
미해결백엔드 개발자 성능 개선 초석 다지기
gradle
안녕하세요! 혹시 캐시 설정 관련해서도 gradle 설정 파일도 올려주실 수 있을까요!?
-
미해결Next + React Query로 SNS 서비스 만들기
안녕하세요 복습중인데 msw 404 (Not Found) 질문드립니다.
// http.ts import { createMiddleware } from "@mswjs/http-middleware"; import cors from "cors"; import express from "express"; import { handlers } from "./handlers"; const app = express(); const port = 9090; app.use( cors({ origin: "http://localhost:3000", optionsSuccessStatus: 200, credentials: true, }) ); app.use(express.json()); app.use(createMiddleware(...handlers)); app.listen(port, () => console.log(`Mock server is ruuning on port: ${port}`)); // handlers.ts import { http, HttpResponse } from "msw"; const CalendarData = [ { id: 0, date: "2024-03-01", memo: [ { id: 0, text: "식사", }, { id: 1, text: "운동", }, ], }, { id: 1, date: "2024-03-02", memo: [ { id: 0, text: "연차", }, { id: 1, text: "회의", }, ], }, { id: 2, date: "2024-03-03", reservation: 0, canceled: 0, noShow: 0, memo: [], }, { id: 3, date: "2024-03-04", memo: [ { id: 0, text: "공부", }, { id: 1, text: "휴식", }, ], }, { id: 4, date: "2024-03-05", memo: [], }, { id: 30, date: "2024-03-31", memo: [ { id: 0, text: "파티", }, { id: 1, text: "운동", }, ], }, ]; export const handlers = [ http.get("http://localhost:3000/api/calendar", ({}) => { return HttpResponse.json(CalendarData); }), ]; // browser.ts import { setupWorker } from "msw/browser"; import { handlers } from "./handlers"; const worker = setupWorker(...handlers); export default worker; // MSWComponent.tsx "use client"; import { useEffect } from "react"; export const MSWComponent = () => { useEffect(() => { if (typeof window !== "undefined") { if (process.env.NEXT_PUBLIC_API_MOCKING === "enabled") { require("@/mocks/browser"); } } }, []); return null; }; // msw api 요청 함수 export async function getCalendarData() { const res = await fetch(`http://localhost:3000/api/calendar`, { next: { tags: ["calendar"], }, cache: "no-store", }); if (!res.ok) { throw new Error("Failed to fetch calendar data"); } return res.json(); } // layout.tsx import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import PortalWrap from "@/components/PortalWrap/PortalWrap"; import Toast from "@/components/Toast/Toast"; import { MSWComponent } from "@/mocks/MSWComponent"; import SSRQueryClientProvider from "@/libs/ReactQuery/SSRQueryClientProvider"; const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { title: "Create Next App", description: "Generated by create next app", }; export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( <html lang="en"> <body className={inter.className}> <MSWComponent /> <SSRQueryClientProvider> {children} <PortalWrap /> <Toast /> </SSRQueryClientProvider> </body> </html> ); } // .env NEXT_PUBLIC_API_MOCKING=enabled NEXT_PUBLIC_MODE=local// package.json { "name": "planner", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", "mock": "npx tsx watch ./src/mocks/http.ts" }, "dependencies": { "@tanstack/react-query": "^5.14.6", "classnames": "^2.5.1", "date-fns": "^3.3.1", "next": "^14.0.3", "react": "^18", "react-dom": "^18", "react-icons": "^5.0.1", "react-transition-group": "^4.4.5", "sass": "^1.71.1", "zustand": "^4.5.2" }, "devDependencies": { "@mswjs/http-middleware": "^0.9.2", "@tanstack/react-query-devtools": "^5.25.0", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/node": "^20.10.5", "@types/react": "^18", "@types/react-dom": "^18", "@types/react-transition-group": "^4.4.10", "autoprefixer": "^10.0.1", "cors": "^2.8.5", "eslint": "^8", "eslint-config-next": "14.1.2", "express": "^4.18.2", "msw": "^2.0.11", "postcss": "^8", "tailwindcss": "^3.3.0", "typescript": "^5" }, "msw": { "workerDirectory": "public" } } npm run mock 를 사용해서 터미널에 Mock server is ruuning on port: 9090 이 나오는것까지 확인되었는데 GET http://localhost:3000/api/calendar 404 (Not Found) 콘솔에 이렇게 오류가 나옵니다.몇시간 동안 이것저것 수정해보고 했는데 어디서 잘못된건지 왜 요청을 못받아오는지 모르겠습니다ㅠ
-
해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
임시객체와 보이지않는 복사생성 과정 프로그램에서- 제가 임의로 복사생성자 부분의 프로그램을TestData(const TestData& rhs){ cout << "TestData(const TestData&)" << endl;}- 위와 같이 수정하고- F11키로 디버깅 추적을 해보면 복사생성자가분명 위의 생성자에서는 nData 를 접근하는 명령이 없는데도 아래 부분에 있는private 😀int nData = 0;부분을 수행합니다.왜 그런지 질문 드립니다. 아울러 제가 초기화 부분 "= 0" 를 없애 버리면 수행되지 않습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Mapping 할 URL을 만들 때 질문입니다.
예를 들어 게시글에 관련된 CRUD를 만들 때/board/{식별키}이런 식으로 만들고 method로 구분 하고 있는데요.이 게시글 식별키는 PK기 때문에 외부로 노출하고 싶지 않은데 따로 방법이 있을까요?겉으로 보기에는 /board 의 URL 이지만 내부적으로 이 게시글들을 구분하는 방법이 있을까요?
-
해결됨[리액트 2부] 고급 주제와 훅
[2.4장 다이얼로그 1] 2.4.5 withLayout(풀이) 에 관한 질문입니다.
안녕하세요 선생님 혼자 해보는 과정중에 질문이 있습니다.import React from "react"; import Backdrop from "../components/Backdrop"; import Dialog from "../components/Dialog"; export const layoutContext = React.createContext({}); layoutContext.displayName = "LayoutContext"; export class Layout extends React.Component { constructor(props) { super(props); this.state = { dialog: null, }; this.setDialog = this.setDialog.bind(this); } setDialog(dialog) { this.setState({ dialog }); } render() { const value = { dialog: this.state.dialog, setDialog: this.setDialog, }; return ( <layoutContext.Provider value={value}> {this.props.children} </layoutContext.Provider> ); } } export const DialogContainer = () => ( <layoutContext.Consumer> {({ dialog }) => dialog && <Backdrop>{dialog}</Backdrop>} </layoutContext.Consumer> ); export const withLayout = (WrappedComponent) => { const WithLayout = (props) => ( <layoutContext.Consumer> {({ dialog, setDialog }) => { const openDialog = () => { console.log("openDialog") setDialog(<Dialog>hihi</Dialog>); }; const closeDialog = () => { setDialog(null); }; const enhancedProps = { openDialog, closeDialog, }; return ( <WrappedComponent {...props} {...enhancedProps}></WrappedComponent> ); }} </layoutContext.Consumer> ); return WithLayout; }; withLayout을 만들어서 openDialog, closeDialog를 enhancedProps로 전달을 하였습니다.import * as MyLayout from "../lib/MyLayout"; const Page = ({ header, children, footer, openDialog }) => ( <div className="Page"> <header>{header}</header> <main>{children}</main> <footer>{footer}</footer> <MyLayout.DialogContainer /> <button onClick={openDialog}>dialog</button> </div> ); export default MyLayout.withLayout(Page); Page에서 MyLayout.DialogContainer이 기본값이 null인데 button을 추가하여 고차컴포넌트에서 주입받은 openDialog를 사용하여 Dialog를 렌더링하는데 성공하였습니다.닫기도 해보고싶어서import * as MyLayout from "../lib/MyLayout"; const Dialog = ({ closeDialog }) => ( <div className="Dialog"> <header>header</header> <main>main</main> <footer>footer</footer> <button onClick={closeDialog}>closeDialog</button> </div> ); export default MyLayout.withLayout(Dialog);Dialog component에 닫기 버튼을 추가하려고 MyLayout.withLayout으로 감싸니초기화 전에 참조하려 했다는데 이 에러 자체는 이해가 가지만 왜 지금 위 상황이 이 에러에 해당되는 상황인지 이해가 가지 않습니다...
-
미해결스프링 핵심 원리 - 기본편
5. 싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분 질문입니다.
안녕하세요,싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분에서 질문이 있습니다. 스프링 컨테이너가 빈을 싱글톤으로 관리하는 부분에 대해 설명하시는 강의이므로 ["컨테이너에 의한 싱글톤"과 비교하여 "일반 싱글톤 패턴"이 갖는 단점]이라는 측면으로 이해하려 합니다.의존관계상 클라이언트가 구체 클래스에 의존한다 -> DIP를 위반한다. / 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.다른 질문글들을 찾아보니 이 내용은 "컨테이너를 사용하지 않을 경우 싱글톤이 아닌 일반적인 구체 클래스를 클라이언트에서 직접 new 하듯이 클라이언트에서 구체적인 싱글톤 클래스의 getInstance를 호출해야한다"는 점에서 DIP를 위반한다는 내용으로 이해됩니다. 그러면 이 단점은 컨테이너를 사용하지 않을 경우 싱글톤 클래스나 싱글톤이 아닌 클래스나 마찬가지로 갖는 단점인데 싱글톤 패턴의 단점이라고 표현하신 점에서 제가 이해하지못한 차이가 있는지 궁금합니다.테스트하기 어렵다. / 내부 속성을 변경하거나 초기화 하기 어렵다.컨테이너를 사용하면 config에서 의존관계의 구체클래스만 변경하며 객체의 속성 변경이 용이하지만 직접 구현한 싱글톤 패턴은 이미 생성된 static 객체가 존재하므로 내부를 변경해야한다면 1) 싱글톤 클래스의 코드를 고치거나 2) 클라이언트 또는 테스트 코드에서 수정자 등을 이용해야하므로 내부 속성 변경이 번거롭고 따라서 여러 케이스로 테스트가 어렵다는 의미일까요?결론적으로 유연성이 떨어진다. ("DI가 어렵다, 구체 클래스의 getInstance를 다 해줘야 한다, ...")이 부분도 컨테이너가 없을 경우 일반 클래스, 싱글톤 클래스가 갖는 단점이라 생각되는데 싱글톤의 단점이라 표현하신 점에서 제가 이해하지 못한 부분이 있는지 궁금합니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 질문있습니다.
앨범 클래스 파일에는 아래와 같은 에러가 나옵니다.(3번째 사진)Persistent entity 'Album' should have primary key코드입니다.package jpabook.jpashop.domains.Item; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; //import javax.persistence.*; @Entity @DiscriminatorValue("A") @Getter @Setter public class Album { private String artist; private String etc; }OrderItem 클래스 파일에는 아래와 같은 에러가 나옵니다.(2번째 사진)'Many To One' attribute type should not be 'Item'코드입니다.package jpabook.jpashop.domains; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.Entity; import jpabook.jpashop.domains.Item.Item; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import jakarta.persistence.*; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class OrderItem { @Id @GeneratedValue @Column(name = "order_item_id") private Long id; // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "item_id") private Item item; @JsonIgnore // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "order_id") private Order order; // private int orderPrice; //주문 가격 // private int count; //주문 수량 }카테고리 클래스 파일에는 아래와 같은 에러가 나옵니다.(1번째 사진)'Many To Many' attribute value type should not be 'Item'코드입니다.package jpabook.jpashop.domains; import jakarta.persistence.*; import jpabook.jpashop.domains.Item.Item; import lombok.Getter; import lombok.Setter; //import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "category_id") private Long id; private String name; @ManyToMany @JoinTable(name = "category_item", joinColumns = @JoinColumn(name = "category_id"), inverseJoinColumns = @JoinColumn(name = "item_id")) private List<Item> items = new ArrayList<>(); // @ManyToOne(fetch = LAZY) @ManyToOne @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); // //==연관관계 메서드==// // public void addChildCategory(Category child) { // this.child.add(child); // child.setParent(this); // } } 강의를 여러번 들어도 틀린부분은 없는데 에러가 나오는게 이해가 되지 않아 코드 올립니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 프록시 컨테이너 호출 관계
이 그림에서요 basicService 프록시가 컨테이너에 빈으로 등록되어서 테스트 코드 클래스로 주입된다고하셨는데, 그러면 뒤에 실제 객체는 컨테이너에 빈으로 등록이 실제로 안되어있는건가요?아니면 되어있는건가요?