inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

활용-7, 데이터 저장에 대해서 질문있어요.

미해결

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

viewDidLoad에서 let array = movieDataManager.getMovieData() 로 데이터를 담았더니 스파이더맨2 추가가 안 되고, 셀을 구성할 때 let array = movieDataManager.getMovieData() let movie = array[indexPath.row] cell.mainImageView.image = movie.movieImage cell.movieNameLabel.text = movie.movieName cell.descriptionLabel.text = movie.movieDescription 이렇게 넣어주니까 추가가 되는 것 같은데. . 제가 어디서 놓친건지 아니면 원래 안 되는건지 모르겠어요 ..

  • ios
  • swift
syp0211 댓글 1 좋아요 0 조회수 398

섹션 7 - 24강

미해결

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

저는 오토레이아웃을 잡을 때 강의를 참고하면서 Snapkit, Then 라이브러리를 적용해 만들고 있는데 Snapkit을 사용할 경우 어떤 방식으로 레이아웃을 변경 해야할까요 ?

댓글 1 좋아요 0 조회수 298

vbase-3 탭 자동완성이 안되는데..

해결됨

Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"

스니펫 설치하고 vueinit 입력하고 탭하면 자동완성이 되는데 강사님처럼 vbase-3 탭은 안되더라구요 이유가 뭘까요 ㅠ

  • vue.js
웹개바르르 댓글 1 좋아요 1 조회수 1793

활용 - 2) 텍스트필드 / 델리게이트 패턴 개념 질문

미해결

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

안녕하세요 앨런님 델리게이트 패턴 관련해서 궁금한게 있어서 질문 드려봅니다. 1.텍스트필드 delegate에 ViewController 인스턴스 등록 2.View 인스턴스는 UITextFieldDelegate 프로토콜 채택 3.텍스트필드에서 실제 이벤트 발생시 등록된 delegate의 메서드를 호출 (아마 호출된 메서드의 반환값을 이용하여 허용 또는 금지를 시킬것같은데 잘은 모르겠습니다.) 4.ViewController 클래스에서는 필요한 논리를 작성하거나 Bool 형식으로 값을 리턴하여 텍스트필드를 제어 UITextFieldDelegate 프로토콜을 채택하고 사용하면 되기에 해당 메서드의 구현부는 공개할 필요가 없음. 제가 이해한것이 맞는지 판단이 안서서 질문 남겨봅니다.

  • ios
  • swift
권석기 댓글 1 좋아요 0 조회수 302

안녕하세요 비쥬얼스튜디오에서 빌드하면 출력되는 에러인데요

미해결

언리얼 엔진4 입문 (C++ 기반)

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세 요. 오류 MSB3073 "D:\UE5\UE_5.2\Engine\Build\BatchFiles\Build.bat StarEditor Win64 Development -Project="D:\UEPro\Starrail\Star.uproject" -WaitMutex -FromMsBuild" 명령이 종료되었습니다(코드: 6). Star C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets 44 라는 에러문구가 출력되서 질문드립니다. 검색을 해보니 UPROPERTY()에 오타가있다. 컴파일 경로가 길다. Window SDK업데이트를 해야한다 등 여러가지 답변이 있어서 하나씩 적용을 해봤지만 코드 수정 이후 빌드를 하면 위 에러가 출력되는데 원인 알 수 있을까요?

  • unreal-engine
  • ue-blueprint
최정민 댓글 3 좋아요 0 조회수 2029

이거 우류나네요... 똑같이썼는데요

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); } @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals (member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows (IllegalStateException.class, () -> memberService.join(member2));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); assertThat (e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } } 이거 계속 오류나는데 왜그럴까요. org.opentest4j.AssertionFailedError: Expected java.lang.IllegalStateException to be thrown, but nothing was thrown. 이렇게 떠요

  • java
  • spring
  • mvc
  • spring-boot
spaines 댓글 1 좋아요 0 조회수 831

grahpqlFetcher 설명가능할까요

미해결

풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. export const graphqlFetcher = <T>(query: RequestDocument, variables = {}) => request<T>(BASE_URL, query, variables) 이 코드 에서 <T> 이 타입에 대한 것과 query: RequestDocument, variables = {} 여기 부분이 뜻하는 것과 request<T>(BASE_URL, query, variables 여기 부분이 뜻하는 의미를 알고 싶습니다 .ㅠㅠ grahpql이 처음이라 구글링해서 봐도 잘 모르겠어요.. 그리고 혹시 그럼 지금은 graphql을 쓰는 거고, 이전 영상에서 fake api 불러올 때는 rest api 사용한 게 맞나요?? 알려주시면 감사드립니다!

  • react
  • firebase
  • graphql
oridori2705 댓글 1 좋아요 1 조회수 554

React -Router 사용에 관해서

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

안녕하세요 선생님! netflix 강의 너무 잘들었습니다! 듣고나서 혼자 이것저것 만들어보는데 , react router 사용을 하다보니 1. index.js 에서 App 을 BrowserRouter로 래핑하는 방법 2. 특정 컴포넌트에서 BrowserRouter로 감싸서 따로 쓰는경우 가 있는 것 같더라고요. 두가지 차이점을 정확히 모르겠습니다. chat gpt는 개발자가 개발하는 과정에서 선택하는 부분이라고 되어 있는데, 그 선택하는 이유를 잘 모르겠습니다. 하지만 <App> 컴포넌트를 감싸지 않고 다른 컴포넌트에서 <BrowserRouter> 를 사용하는 것은 특정 컴포넌트 또는 컴포넌트 그룹에 대한 라우팅을 독립적으로 구성하고 싶을 때 사용될 수 있습니다. 이렇게 하면 라우팅 로직이 특정 컴포넌트에 한정되며, 애플리케이션의 다른 부분과 격리될 수 있습니다. 예를 들어, <App> 컴포넌트의 하위 컴포넌트 중에서만 특정 라우팅이 필요한 경우 해당 컴포넌트 내에서 <BrowserRouter> 를 사용하여 독립적인 라우팅을 구성할 수 있습니다. 이런식으로 대답이 오는데 이해가 잘 가질 않네요. 혹시 검색 키워드나, 참고할만한 글이 있을까 해서 글 남깁니다. 감사합니다~

  • react
  • react-router
팡tae 댓글 1 좋아요 0 조회수 420

배포 문제

미해결

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

안녕하세요 강사님. 강의를 듣고 배포중에 에러가 났습니다. AWS의 Lightsail react 인스턴스와 django 인스턴스를 하나씩 만들어서 배포하는 중 서버와 API통신은 되지만 Socket통신이 되지않고 있습니다. WebSocket connection to 'ws://{path}/ws/chat/' failed 와 같은 에러가 나타는데 혹시 네트워크 설정이나 따로 해줘야할 설정같은게 있을까요??

  • python
  • django
  • django-channels
honge7694 댓글 1 좋아요 0 조회수 533

d-day 코드오류

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

강의보면서 그대로 작성했는데 targetDate 부분이 오류가 납니다. 여기서 안되니까 remaining 에서도 오류나고.. 콘솔 찍으면 NaN 만 출력이 되네요ㅠㅠ 왜그럴까요? <script> const dateFormMaker = function () { const inputYear = document.querySelector("#target-year-input").value; const inputMonth = document.querySelector("#target-month-input").value; const inputDate = document.querySelector("#target-date-input").value; const dateFormat = `${inputYear}-${inputMonth}-${inputDate}`; return dateFormat; }; const counterMaker = function () { const targetDateInput = dateFormMaker(); const nowDate = new Date(); const targetDate = new Date(targetDateInput).setHours(0,0,0,0); /* error */ const remaining = (targetDate - nowDate) / 1000; const remainingDate = Math.floor(remaining / 3600 / 24); const remainingHours = Math.floor(remaining / 3600) % 24; const remainingMin = Math.floor(remaining / 60) % 60; const remainingSec = Math.floor(remaining) % 60; console.log(remainingDate, remainingHours, remainingMin, remainingSec); console.log(targetDate); }; </script>

  • react
  • node.js
  • seo
  • graphql
  • next.js
쟌 댓글 1 좋아요 0 조회수 296

assertThat import 문제

해결됨

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

assertThat import 안되는 문제 선생님 안녕하세요. 이번에 새로 수강하고 있는 수강생입니다. 프로젝트 다운 받고 실행을 시켜려고 하는데 실행이 안돼서 따로 설정해서 돌리고 있습니다. Junit5까지는 진행했지만 assertThat 코드를 호출하는 진도에서 실행이 안되고 있습니다. 혹시 어떤 방법으로 해결 할 수 있을까요? 찾아도 안나오네요 ㅠㅜ build.gradle.kts 파일입니다 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "3.0.6" id("io.spring.dependency-management") version "1.1.0" id("java") id("org.jetbrains.kotlin.plugin.jpa") version "1.7.22" // id("org.jetbrains.kotlin.plugin.spring") version "1.7.22" id("org.jetbrains.kotlin.kapt") version "1.7.22" kotlin("jvm") version "1.7.22" kotlin("plugin.spring") version "1.7.22" } group = "com.example.kotlin" version = "0.0.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_17 configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.jetbrains.kotlin:kotlin-reflect:1.7.22") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3") implementation("org.junit.jupiter:junit-jupiter:5.8.1") implementation("com.querydsl:querydsl-jpa:5.0.0") kapt("com.querydsl:querydsl-apt:5.0.0:jpa") kapt("org.springframework.boot:spring-boot-configuration-processor") runtimeOnly("com.h2database:h2") testImplementation("org.assertj:assertj-core:3.21.0") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-web-services") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") developmentOnly("org.springframework.boot:spring-boot-devtools") annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation(kotlin("test")) } tasks { test { useJUnitPlatform() } withType<KotlinCompile> { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "17" } } withType<Test> { useJUnitPlatform() } }

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
  • gradle
rlagkwls1024 댓글 1 좋아요 1 조회수 1377

시간복잡도 질문

미해결

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

일반적으로 알려진 시간복잡도에 따르면 input 값이 200000 정도일 경우 O(nlogn) ~ O(n) 사이의 시간복잡도에 해당한다고 생각하였는데, 이중 for문을 사용해도 시간 초과가 일어나지 않는 원인이 무엇인지 궁금합니다.

  • python
  • 코딩-테스트
sohee3055 댓글 1 좋아요 0 조회수 392

인터셉터 활용?

해결됨

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

안녕하세요 호돌맨님! JWT 관련 강의에서 ArgumentResolver를 활용해 토큰 검증을 하고 사용자 정보를 추출해 반환하셨는데, 만약 프로젝트를 진행할 때 로그인을 해야 모든 URL에 접근할 수 있다고 한다면 아래 코드처럼 인터셉터에서 토큰 검증을 하고 ArgumentResolver에선 별다른 검증 없이 subject만 추출해서 반환해도 문제가 없을까요? 혹시 제가 접근 자체를 잘못하고 있다면 알려주시면 감사하겠습니다 @Slf4j @RequiredArgsConstructor public class LoginCheckInterceptor implements HandlerInterceptor { private final JwtService jwtService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String requestURI = request.getRequestURI(); log.info("인증 체크 인터셉터 실행 {}", requestURI); String accessToken = request.getHeader("Authorization"); jwtService.validateAccessToken(accessToken); try { jwtService.getSubject(accessToken); } catch (JwtException e) { throw new Unauthorized(); } return true; } } @RequiredArgsConstructor public class JwtArgumentResolver implements HandlerMethodArgumentResolver { private final JwtService jwtService; @Override public boolean supportsParameter(MethodParameter parameter) { boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class); boolean hasLoginType = LoginUser.class.isAssignableFrom(parameter.getParameterType()); return hasLoginAnnotation && hasLoginType; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { String accessToken = webRequest.getHeader("Authorization"); Long userId = jwtService.getSubject(accessToken); log.info("userId = {}", userId); return new LoginUser(userId); } }

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
민혁 댓글 2 좋아요 0 조회수 747

회원가입 눌러도 반응이 없어요. 도와주세요 ㅠ

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

연동을 다해놨는데, 스프링 실행할때 에러가 나네요.. 이유를 못찾겠습니다. 구글 드라이브에 올릴게요 강의는 회원등록 4분46초 부분 하고 있었습니다. https://drive.google.com/file/d/1Xes5ztWKL5s4NDre1bSuGeL2t-tbnJIO/view?usp=sharing

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
김지수 댓글 1 좋아요 0 조회수 604

회원목록 white label error (500) java.lang.NullPointerException

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원목록 조회시 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed May 31 00:06:03 KST 2023 There was an unexpected error (type=Internal Server Error, status=500). No message available java.lang.NullPointerException at hello.hellospring.controller.MemberController.list( MemberController.java:40 ) 라고 뜨며 아래는 MemberController 코드입니다 package hello.hellospring.controller; import hello.hellospring.domain.Member; import hello.hellospring.service.MemberService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } @GetMapping("/members/new") public String createForm() { return "members/createMemberForm"; } @PostMapping("/members/new") public String create(MemberForm form) { Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } @GetMapping("/members") private String list(Model model) { List<Member> members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; } }

  • java
  • spring
  • mvc
  • spring-boot
tlsehdrl4340 댓글 1 좋아요 0 조회수 665

41강 아이디 중복확인 Ajax 질문이 있습니다

미해결

스프링 프레임워크는 내 손에 [스프1탄]

안녕하세요 선생님 41강 아이디 중복확인 섹션에서 Interface인 MemberMapper.java 에서 public Member registerCheck(String memID); 위처럼 선언해주었고, MemberMapper.xml 에서 <select id="registerCheck" resultType="srv.ges.entity.Member"> SELECT * FROM mem_tbl WHERE memID = #{memID} </select> 위처럼 select문에 resultType만 작성하셨는데, 'memID'를 Parameter로 넘기니 ParameterType도 작성해야 하는 것 아닌가요?

  • jsp
  • spring
  • mvc
  • spring-security
장재영 댓글 2 좋아요 0 조회수 484

Object Detection (fasterrcnn) 공지해주신 소스의 오류 수정 부탁드립니다.

미해결

차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원

안녕하세요 일전에 공지해주신 아래 파일에서 에러가 나는데 수정 좀 부탁 드립니다. 1강_TF2_Detection_Model_ZOO_example_fasterrcnn_pedestrian_dataset_2022_11_11.ipynb https://colab.research.google.com/drive/1LIMGUFJtCWw3gdgWh3T2aorR4AwogyPS?usp=sharing 죄송합니만 개인 사정상 다소 급하오니 선처 부탁드립니다!

  • 머신러닝
  • 딥러닝
  • tensorflow
  • 컴퓨터-비전
  • cnn
joohyunb 댓글 1 좋아요 0 조회수 543

방향성에 대한 강의

해결됨

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

마지막 멘트하실 때 앞으로 뭘 더 공부하고 어떻게 공부하면 좋을지 알려주신다고 하셨는데 그것에 대한 강의는 없는 건가요? 완강했습니다! 감사합니다~

  • javascript
  • react
  • node.js
김학준 댓글 2 좋아요 0 조회수 737

NotFoundException

미해결

따라하며 배우는 NestJS

컨트롤러와 서비스에 NotFoundException을 둘다 작성하셨는데 혹시 필요없는 로직이 아닌지 생각됩니다. 컨트롤러에서 데이터를 받았는데 서비스로 데이터가 안넘어 갈일은 없다고 생각되서요 꼭 필요한 코드인지 의문입니다.

  • postgresql
  • jwt
  • nestjs
  • typeorm
이지수 댓글 1 좋아요 0 조회수 739

트랜잭션 AOP주의사항 - 해결방법 문의

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 영한님께서 이번 강의에서 트랜잭션 프록시 객체에서 외부메서드를 호출하고, 진짜 객체의 외부 메서드에서 자기 자신의 내부 메서드를 호출할 때 내부 메서드에는 @Transactional을 설정해도 트랜잭션이 적용되지 않는 점 이해 했습니다. 강의에서 이 부분을 해결하기 위해 별도의 클래스를 만들고, Bean으로 주입(이 경우 프록시객체가 Bean으로 등록)해서 프록시 객체가 @Transactional 메서드를 호출하는 방식으로 해결하는 점도 이해했습니다. 스프링 MVC강의에서 빈 스코프 문제(프로토타입과 싱글톤 Bean을 같이 사용할 때 문제점)을 해결하기 위해 Dependency Lookup을 사용하신 방법이 떠올라 V3테스트코드를 작성해보았습니다. @Slf4j @SpringBootTest public class InternalCallV3Test { @Autowired CallServie callServie; @Test void printProxy() { log.info("callService class={}", callServie.getClass()); } @Test void internalCall() { callServie.internal(); } @Test void externalCall() { callServie.external(); } @TestConfiguration static class InternalCallV1TestConfig { @Bean CallServie callServie() { return new CallServie(); } } @Slf4j static class CallServie { @Autowired private ObjectProvider<CallServie> selfProvider; public void external() { log.info("call external"); printTxInfo(); CallServie self = selfProvider.getObject(); log.info("self class={}", self.getClass()); self.internal(); } @Transactional public void internal() { log.info("call internal"); printTxInfo(); } private void printTxInfo() { boolean txActive = TransactionSynchronizationManager.isActualTransactionActive(); log.info("tx active={}", txActive); boolean readOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly(); log.info("tx readOnly={}", readOnly); } } } 실행 결과는 다음과 같습니다. DL을 이용해서 스프링 컨테이너에서 프록시를 가져와서, 프록시의 메서드를 호출하면 트랜잭션이 적용되는 것 처럼 보입니다. 질문 1) 이 방법으로 트랜잭션이 적용되는게 맞을까요? 2) 이 방법을 혹시 스프링-고급편에서 다루나요? 3) 1번 질문이 맞다면 클래스를 새로 만들고, 메서드를 옮기는 비용보다 DL로 프록시객체를 찾아오는 비용이 더 쌀 것 같은데, 둘 중 어느 방법이 선호되는 편인가요?

  • spring
고래밥 댓글 2 좋아요 0 조회수 733

인기 태그

인프런 TOP Writers

주간 인기글