inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

update 실무

미해결

실전! 스프링 데이터 JPA

안녕하세요 ㅎㅎ 실무적으로 궁금한게 하나 있어서 질문드립니다 update 쿼리는 실무에서도 100% 더티체캉으로 해결하나요 ??

  • spring
  • java
  • spring-boot
  • JPA
H K 댓글 1 좋아요 0 조회수 302

entity vs form vs dto

미해결

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

entity vs form vs dto 1. 이들은 각각 어떤 특징이 있다고 생각하면 될까요? 2. 이셋을 큰 틀로 보자면 모델로 봐도 되나요?

  • spring-boot
  • spring
  • 웹앱
  • java
  • JPA
빠르면비행기 댓글 1 좋아요 1 조회수 537

thymeleaf 관련 질문

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • spring-boot
  • spring
  • MVC
  • java
댓글 1 좋아요 0 조회수 229

엔티티 VS 폼객체

미해결

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

강의내용 8:30 내용질문입니다. < API를 만들때는 엔티티를 외부에 반환하면 안된다 > 1. 필드가 그대로 노출됨 (ex.userpassword) 2. API 스펙이 변한다. (엔티티에 로직을 추가했는데 api스펙이 변한다) 솔직히 말씀드리면 전부 이해가 안됩니다..ㅠ 이전 강의에서 FORM에 입력되는 데이터를 Member 엔티티를 쓰는게 아니라 따로 만들어준 MemberForm을 쓰는이유는 이해했습니다. (Member객체 코드가 지저분해질수 있고, Valid 기능같은것을 사용하지못해서) 그것과 유사한 이유인것 같은데... 정확히 이해가 안되네요 사실 api라는 개념도 정확하게 잡히지 않습니다. 정리해서 질문 하겠습니다. 1. 저희가 강의에서 만들어준 api가 있나요??? (혹시 MemberController의 메서드들이 모두 api에 속하는건가요?) 2. 필드가 노출된다는게 무슨말인지 모르겠습니다. 예를들어 폼에 password입력칸이 있는데, 이게 어떻게 노출이 가능하다는 것인가요? 3. api의 스펙이 바뀐다는 부분이 이해가안됩니다. api스펙이 무엇을 뜻하며, 그게 바뀌면 무슨 문제가 생기나요?

  • java
  • spring-boot
  • JPA
  • 웹앱
  • spring
Ahrisan 댓글 1 좋아요 5 조회수 454

여러 인덱스 중 하나를 타게 할 수 없을까요?

미해결

실전! Querydsl

안녕하세요.^^ 강의 잘 듣고 열심히 공부 중입니다. jpa + querydsl 공부 도중에 궁금한 것이 하나 생겼습니다. querydsl 에서 여러 인덱스 중에 하나를 강제로 타도록 할 수는 없나요? native query로는 mysql 같은 경우 use index를 쓰면 되는데 querydsl 에는 어떻게 할 수 없을까 무식하게 갑자기 고민하고 고민하다가 혹시 방법이 있나 없나 궁금해서 질문 들여봅니다.

  • java
  • JPA
탱구리 댓글 1 좋아요 0 조회수 1054

예외테스트 중 저번강의에서 햇던 것과 차이

미해결

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

Exception을 테스트하는 부분에서 궁금한 점입니다. 해당 강의에서는 @Test(expected = IllegalStateException.class) 어노테이션과 fail()함수를 이용해서 테스트하셨는데, 이 강의보다 최신강의로 알고있는 spring 기본편에서 테스트하실때는 아래코드와 같이 하셨습니다. 두 테스트 차이가 있을까요? @Test public void 회원가입_중복() throws Exception { // given Member member1 = new Member(); member1.setName("인프런"); Member member2 = new Member(); member2.setName("인프런"); // when memberService.join(member1); // then IllegalStateException e = assertThrows(IllegalStateException.class, () -> { memberService.join(member2); }); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); }

  • spring
  • java
  • spring-boot
  • 웹앱
  • JPA
Ahrisan 댓글 1 좋아요 0 조회수 235

사용자 등록함

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 사용자 등록함수중에 언급해주신 group_concat (이미 등록되어있는함수라고 말씀해주셨는데 찾을수가 없어서.. 여쭈어봅니다) 보시다시피 그냥 concat은 있는데 group_concat 이건 어디에 등록이 되어 있는건가요 ? 그리고 JPQL 스스로 함수를 정의할 수는 없습니다 라고 다른글에서 말씀해주셨는데 그러면 이렇게 따로 정의해서 만들 필요가 있나요?

  • JPA
  • java
기팝 댓글 1 좋아요 2 조회수 735

compileQuerydsl 오류

미해결

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의를 처음 듣고 있는 학생입니다 강의 영상에서와 같이 프로젝트를 만든후 compileQueryDsl을 실행하니 Unable to load class 'com.mysema.codegen.model.Type'. 이 에러가 나오면서 컴파일이 되지 않습니다 도저히 답을 찾을 수가 없어서 질문남겨요

  • java
  • JPA
fe00045 댓글 6 좋아요 7 조회수 25247

service와 controller의 역할에 대한 질문이 있습니다.

해결됨

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] service와 controller의 역할에 대한 질문이 있습니다. 강의를 듣고 활용해던 도중 의문점이 생겼습니다. 한참 찾아봤는데 아직도 모르겠어서 질문드립니다. 저의 기존 코드에서는 어떤 컨트롤러의 post 요청에서 A,B,C 엔티티가 반드시 순서대로 생성된후 저장되어야 합니다. (참조관계 떄문에 그렇습니다) 기존에 저는 컨트롤러에서 A 엔티티 생성 -> AService.createA() 한 후 B, C도 동일한 과정을 거칩니다. 이러니까 컨트롤러가 서비스의 역할을 해버린다고 생각했습니다. 그래서 컨트롤러는 그냥 dto를 넘겨주고 서비스에서 위의 작업을 하려했습니다. 그랬더니 몇가지 문제가 생겼습니다. 1. service에서 repository만을 사용하면 코드 중복이 심함(create 할때 복잡한 중복검증 로직이 있는대, 그것까지 전부 다시 해야함) 2. service에서 service를 주입받아서 하자니 순환참조, 나말고 코드 이해도 낮은 다른사람이 손대면 실수할 가능성 높음 등등의 문제가 생김 그래서 그냥 원래대로 냅두려니 controller가 너무 크고 service가 하는게 그냥 repository로 요청 보내기인 경우가 대부분임 그래서 질문은 1. 적절한 방법이 뭘까요? 2. 복잡하고 큰 규모의 서버 코드를 보고싶은데 좋은 예시를 어디서 찾을수 있을까요? 3. 제가 해결방법으로 여러 service를 주입받아서 사용만하는 service를 만들어서 컨트롤러에 있던 코드를 거기로 옮겨서 컨트롤러에 비즈니스 로직이 생기는걸 없에고 순환참조, 코드 중복 등을 제거 해봤는데 이게 맞는건가요? 4. MSA와 상관있는 문제일까요?

  • service
  • 웹앱
  • controller
  • spring
  • mvc
  • spring
  • java
  • spring-boot
  • oop
  • JPA
kevin 댓글 5 좋아요 2 조회수 2623

TypeORM 트랜잭션 질문드립니다.

해결됨

탄탄한 백엔드 NestJS, 기초부터 심화까지

안녕하세요 윤상석 강사님. TypeORM의 트랜잭션 관련으로 질문이 있습니다. TypeORM에서 트랜잭션을 다루는 방법은 이전 질문글 에 답변해주셨듯이 크게 3가지인 것으로 알고 있습니다. 1. QueryRunner 2. getConnection, getManager 3. @Transactional 개인적으로는 @Transactional() 데코레이터를 사용하는것이 편리하여 사용하고 있었는데요. NestJS 공식문서 에서 데코레이터를 이용하는 것을 권장하지 않고 있고, 구글링을 해보아도 유닛 테스트에 어려움이 있어 권장하지 않는 분들이 많은 것을 알게되었습니다. 여기서 첫 번째 질문이 있습니다. Q1. "유닛 테스트에 어려움이 있다"는 이야기가 구체적으로 무슨 의미인지 궁금합니다. 모킹이 어렵다. 내 마음대로 제어가 불가능하다 등의 이야기가 이해는 가는데 와닿지는 않아서 질문드립니다. ---- QueryRunner 방식을 이용하게 되면 try-catch-finally 코드가 강제가 되는 것 같아보입니다. 여기서 두 번째 질문이 있습니다. Q2. 모든 에러를 감지하는 Filter를 적용해두었다면 QueryRunner를 사용하는 try-catch-finally 구문에서 에러 처리를 해버려 필터가 작동하지 않을 것 같은데 맞을까요? 맞다면, 만약 Filter에서 요청이 실패하였을 때의 로깅기능이 있다고 가정한다면 로깅기능이 작동하지 않을 것 같습니다. 그렇다면 catch 문에서 따로 Filter에서 구현한 로깅을 다시 구현해주어야 할까요? ---- 트랜잭션 처리를 도와주는 typeorm-transactional-cls-hooked 패키지를 발견하였습니다. 여기서 마지막 세 번째 질문이 있습니다. Q3. 해당 패키지는 유닛 테스를 할 때 트랜잭션 기능이 작동하지 않도록 모킹기능도 제공해주는 것 같습니다. QuerryRunner 보다 안 좋은점이 있다면 어떤 점이 있을까요? ---- 질문이 너무 많은 것 같아 죄송합니다. 좋은 강의와 답변해주셔서 항상 감사합니다.

  • 트랜잭션
  • mongodb
  • nodejs
  • express
  • nestjs
  • ssr
Mpels 댓글 1 좋아요 1 조회수 771

연결에러 나시면 보세요.

미해결

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

6.0 이상부터는 useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false 내용이 기본 적용으로 위 내용을 주석처리나 지우고 실행 하시면 잘 연결 됩니다~

  • 에러
  • nodejs
  • react
다 랜코 댓글 10 좋아요 28 조회수 952

스토어에 들어있는 값 사용하기

미해결

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

안녕하세요! 저번 질문에서 강사님께서 라는 질문에 대하 라고 답변을 해주셨는데요! 그렇다면 다른 파일(예를 들어 RegisterPage.js 등 디스패치를 쓰는 곳들을 뜻합니다!) response.payload라고 쓰지 않고 loginSuccess, register,userData 등의 스토어에 저장된 값을 다른 파일에서 직접 사용하고 싶다면 어떻게 해야되나요? 강의에서도 스토어에 있는 값을꺼내쓰지않고 와 같이 직접 처리를 해주었는데, 특별한 이유가 있나요 ?? 감사합니다.

  • nodejs
  • react
hyewon981019 댓글 1 좋아요 0 조회수 287

JUnit5에서 prettyPrint() 적용하기

미해결

스프링 기반 REST API 개발

@ExtendWith ({ RestDocumentationExtension . class , SpringExtension . class }) @SpringBootTest class EventControllerTest { private MockMvc mockMvc ; @Autowired private ObjectMapper objectMapper ; @Autowired private WebApplicationContext context ; @Autowired private EventRepository eventRepository ; @BeforeEach void init ( RestDocumentationContextProvider restDocumentation) { this . mockMvc = MockMvcBuilders . webAppContextSetup ( this . context ) .addFilters( new CharacterEncodingFilter( "UTF-8" , true )) .apply( documentationConfiguration (restDocumentation) .operationPreprocessors() .withRequestDefaults( modifyUris ().host( "yoonjoy.me" ).removePort(), prettyPrint ()) .withResponseDefaults( modifyUris ().host( "yoonjoy.me" ).removePort(), prettyPrint ())) .alwaysDo( print ()) .build(); } 추가로 addFilters에 UTF-8 설정을 통해 responseBody에서 한글이 깨지는 것을 막고, modifyUris을 통해 호스트 url localhost을 원하는 문자로 바꿀 수 있습니다.

  • spring
  • rest-api
  • java
강낭콩 댓글 1 좋아요 3 조회수 733

save 질문드립니다.

미해결

실전! 스프링 데이터 JPA

jpa 커리큘럼 듣고있는 학생입니다. 첫 커리큘럼 강의 merge를 쓰지말라고 하셨는데(*1), 스프링 데이터 jpa의 save를 보면(SimpleJpaRepository구현체) merge를 사용하고 있습니다. 그러면 실무에서 스프링 데이터 jpa를 사용할 때 save기능을 사용하여야 하는것인지 사용하지 말아야 하는것인지 가이드 라인이 있을까요? *1.DB에서 데이터를 가지고 오기때문에 sql이 한번 나가는 문제, DB에서 가지고 온 데이터 수정할 때 일정 필드값이 누락될 경우 누락된 값은 변경감지와는 달리 없어지기 때문 등등의 문제로

  • JPA
  • java
  • spring-boot
  • spring
김민국 댓글 1 좋아요 0 조회수 356

반려동물 시장 진출 앱 기획 관련 스프링 개발자 모집

미해결

안녕하세요 현재 서로 믿을 수 있는 스타트업 멤버 구축 되었고 추가로 능력있고 참하신 개발자 팀원 두분 더 찾습니다. 관심있으신분 연락 부탁드립니다 1. 주제소개: 반려동물 서비스 중 현재 시장에 없는 서비스. 2. 현재 진행 단계: 시장분석 및 주제와 명확한 방향성까지 잡은 상태 3. 모집분야 및 주요업무: 앱 개발자-하이브리드 앱 (웹앱을 네이티브 형태로 감싼 형태) 유사사이트: https://www.pet-friends.co.kr/main/tab/2 4. 모집경력 및 필요스킬: 앱개발 관련하여 경력이 있거나, 최소 스프링을 자유롭게 다룰 수 있는 스킬 필요 vue.js 옵션 등 5. 참고기타사항: 기획/디자인/개발/마케팅 포지션 다 구성되어 있으나, 추가 개발자가 두분 정도 더 필요한 상황 6. 문의/연락: 010-4590-4917 배대근 카카오:antoniobae1 참고url:IT 웹 앱 마케팅 개발 창업모임 파랑새(Since 2021.10.02 : 네이버 카페 - http://naver.me/FIgA4x8x

  • spring
  • vue
  • js
  • java
Market+IT 댓글 0 좋아요 0 조회수 239

useFactory 사용시 resource 파일 분리 후 di 방법

미해결

탄탄한 백엔드 NestJS, 기초부터 심화까지

먼저 너무 좋은 ADMIN 대시보드 라이브러리를 알려주셔서 감사합니다. 해당 라이브러리로 몇가지 테스트해보는 중인데 adminJsOptions가 너무 길어져 resources를 별도의 파일로 분리하려 하고 있습니다. 하다보니 이미 factory로 blogModel을 inject하고 있는데 resources를 별도의 파일로 분리하려고 보니 blogModel을 분리한 파일에서 어떻게 가져와야할지 막막하더라구요. adminjs뿐아니라 다른 모듈을 사용할때도 useFactory를 통해 di를 해주는경우가 많은데 이럴때는 분리된 파일에는 어떻게 의존성을 주입해줘야 할까요??? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 import * as AdminJSMongoose from '@adminjs/mongoose' ; import { AdminModule as AdminBroModule } from '@adminjs/nestjs' ; import { Module } from '@nestjs/common' ; import { getModelToken } from '@nestjs/mongoose' ; import AdminJS from 'adminjs' ; import { Model } from 'mongoose' ; import { UsersModule } from 'src/users/users.module' ; import { User } from 'src/users/users.schema' ; import { after, before } from './hooks/users.hooks' ; AdminJS.registerAdapter(AdminJSMongoose); @Module({ imports: [ AdminBroModule.createAdminAsync({ imports: [UsersModule], inject: [getModelToken(User. name )], useFactory: (usersModel: Model < User > ) = > ({ adminJsOptions: { rootPath: '/admin' , resources: [ { resource: usersModel, options: { navigation: { name : null , icon: '' , }, properties: { email: { isTitle: false , position: 1 , }, name : { isTitle: true , }, _id: { isVisible: { list: false }, }, password: { isVisible: false , }, }, actions: { edit: { isAccessible: isAdmin }, delete : { isAccessible: isAdmin }, new : { isAccessible: isAdmin }, show: { isAccessible: isAdmin, }, list: { isAccessible: isAdmin }, custom_delete: { actionType: 'record' , icon: 'TrashCan' , guard: 'doYouReallyWantToDoThis' , variant: 'danger' , before: before, after: after, handler: async (request, response, context) = > { const user = context.record; await usersModel.findOne({_id: request.params.id}); console .log( 'custom handler!!!' ); return { record: user.toJSON(context.currentAdmin), }; } }, }, }, }, ], }, auth: { authenticate: async (email, password) = > { const user = await usersModel.findOne({ email: email }); if (user) { const matched = user.password = = = password; if (matched & & user.role = = = 'ADMIN' ) { return user.readOnlyData; } } return null ; }, cookieName: 'cookie-test' , cookiePassword: 'test' , }, }), }), ], }) export class AdminModule {} const isAdmin = ({ currentAdmin }) = > currentAdmin & & currentAdmin.role = = = 'ADMIN' ; resource 코드 분리 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 import * as AdminJSMongoose from '@adminjs/mongoose' ; import { AdminModule as AdminBroModule } from '@adminjs/nestjs' ; import { Module } from '@nestjs/common' ; import { getModelToken } from '@nestjs/mongoose' ; import AdminJS from 'adminjs' ; import { Model } from 'mongoose' ; import { UsersModule } from 'src/users/users.module' ; import { User } from 'src/users/users.schema' ; import { after, before } from './hooks/users.hooks' ; import { userResource } from './resources/users.resource' ; AdminJS.registerAdapter(AdminJSMongoose); @Module({ imports: [ AdminBroModule.createAdminAsync({ imports: [UsersModule], inject: [getModelToken(User. name )], useFactory: (usersModel: Model < User > ) = > ({ adminJsOptions: { rootPath: '/admin' , resources: [ userResource ], }, auth: { authenticate: async (email, password) = > { const user = await usersModel.findOne({ email: email }); if (user) { const matched = user.password = = = password; if (matched & & user.role = = = 'ADMIN' ) { return user.readOnlyData; } } return null ; }, cookieName: 'cookie-test' , cookiePassword: 'test' , }, }), }), ], }) export class AdminModule {} const isAdmin = ({ currentAdmin }) = > currentAdmin & & currentAdmin.role = = = 'ADMIN' ; 함수로 만들어 파라미터로 넘겨주는 방법밖에 없을까요???

  • NestJS
  • ssr
  • mongodb
  • express
  • nodejs
지태관 댓글 1 좋아요 1 조회수 393

cascade 사용 이점

미해결

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

Order 엔티티의 orderItem과 delivery에 cascade를 사용했기 때문에 둘의 레포지토리를 만들지 않은 건지 궁금합니다. 만약, cascade를 사용하지 않았다면 레포지토리를 만들어줘야 하는 건가요??

  • JPA
  • 웹앱
  • java
  • spring
  • spring-boot
나 좀 도와줘요 댓글 1 좋아요 1 조회수 207

정적 팩토리 메소드로 변경감지

미해결

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

@Controller @PostMapping ( "/items/{itemId}/edit" ) public String update ( @PathVariable ( "itemId" )Long itemId , @ModelAttribute ( "form" ) BookForm form){ itemService .updateItem(itemId , form.getName() , form.getPrice() , form.getStockQuantity() , form.getAuthor() , form.getIsbn()) ; return "redirect:/items" ; } @Service /** * 다운캐스팅 없이 따로 findBook 메소드를 만들어줌 */ @Transactional public void updateItem (Long id , String name , int price , int stockQuantity , String author , String isbn) { Book findBook = itemRepository .findBook(id) ; findBook.updateBook(name , price , stockQuantity , author , isbn) ; log .info( "update실행" ) ; } Book엔티티 @Entity @DiscriminatorValue ( "B" ) @Getter @NoArgsConstructor (access = AccessLevel. PRIVATE ) @Slf4j public class Book extends Item { private String author ; private String isbn ; private Book (String name , int price , int stockQuantity , String author , String isbn) { super (name , price , stockQuantity) ; this . author = author ; this . isbn = isbn ; } /** * 정적 팩토리 메소드 생성 */ public static Book createItem (String name , int price , int stockQuantity , String author , String isbn) { Book book = new Book(name , price , stockQuantity , author , isbn) ; return book ; } /** * update 변경 로직 */ public void updateBook (String name , int price , int stockQuantity , String author , String isbn) { addItem(name , price , stockQuantity) ; this . author = author ; this . isbn = isbn ; } } Item엔티티 /** * update 변경 로직 */ protected void addItem (String name , int price , int stockQuantity) { this . name = name ; this . price = price ; this . stockQuantity = stockQuantity ; } 안녕하세요! 2회독하면서 영한센세가 말씀하신대로 setter는 최대한 쓰지않고 개발하고있습니다. 따로 DTO는 만들지않고 정적 팩토리 메소드를 활용해서 변경감지 로직을 짜봤는데 제대로 짠건지 잘 모르겠네요. 여기서 더 수정 하자면 어떤부분을 고치면 좋을까요??

  • spring
  • spring-boot
  • java
  • JPA
  • 웹앱
우와아앙 댓글 1 좋아요 0 조회수 273

55초 '플러시 발생' 관련 문의 드립니다

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

55초 '플러시 발생' 관련 문의 드립니다. 기존 강의 슬라이드에 그려지고 설명된 바로는, persist()호출 되거나 영속 상태의 entity에 변경이 발생할 때, 영속성컨텍스트 1차 캐시 Entity가 업데이트 되고 동시에 지연 SQL 저장소에 추가된다고 설명해 주셨습니다. 즉, flush() 호출 시에는 단순히 이미 저장 된 batch SQL들을 Query하고 DB transaction을 commit한 뒤 1차 캐시 스냅샷을 업데이트할 거라 예상했습니다. 그런데 이번 강의에서는 em.flush() '호출 시'에 '변경 감지' 및 '수정된 엔티티 쓰기 지연 SQL 저장소에 등록'을 수행한다고 설명해 주셨네요.. 타이밍에 대한 설명이 상이한데, 어느 쪽이 맞는 설명인지 문의 드립니다..

  • JPA
  • java
하하 댓글 1 좋아요 1 조회수 308

생성 메서드란게 정적 팩토리 메서드를 말하는건가요??

미해결

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

정적 팩토리 메서드와 코드가 엄청 유사한데 객체 생성을 위한 메서드로 이해하면 될까요??

  • spring-boot
  • JPA
  • java
  • spring
  • 웹앱
나 좀 도와줘요 댓글 1 좋아요 0 조회수 518

인기 태그

인프런 TOP Writers

주간 인기글