안녕하세요. 이도원 선생님 강의 항상 잘 듣고 있습니다. 강의와 연관되어 MapStruct 와 Entity Setter 에 대해 문의드립니다. ------------------------------------------------ 제가 이해한 내용은 두가지 입니다, 1. Entity 에 Setter 는 지양해야한다. 2. MapStruct 는 구현체 자동생성에서 Field mapping에 target의 setter 를 사용한다. ------------------------------------------------ 여기에서 제가 질문드리고 싶은 내용은 한가지입니다. 1. 함수의 사용권한을 특정 클래스객체에 제한할 수 있는가? ( Entity Setter 의 사용권한을 Mapper 에게만 줄 수 있는가? ) ------------------------------------------------ 구현체를 직접 수정하기에는 번거롭고, 필수필드만 setter를 생성하기엔 선택필드가 들어갈 상황을 배제하기에 오류가 예상됩니다. 결국 MapStruct 를 사용할때는 setter를 생성해 두어야 할꺼 같아서 질문드립니다. 감사합니다.
서비스역할의 구현체들은 서비스에 있는 기능을 사용하기 위해 OrderServiceImpl 경우에는 MemoryMemberRepository, FixDiscountPolicy 를 private final 을 붙여서 사용하는데 private는 해당 클래스 밖에서 직접 접근을 하지 못하게 하는것! final은 한번 값을 넣어주면 절대 바뀌지 않는것! 제가 이해 한 것을 토대로 왜 굳이 private final을 붙였나 OrderAPP를 찾아보았습니다. MemberService memberService = new MemberServiceImpl(); OrderService orderService = new OrderServiceImpl(); 두 객체를 생성할 때 두 객체 전부 MemoryMemberRepository를 참조하는 MemberRepository를 생성하기에 겹치는 부분이 생길 가능성이있기때문인가요,,? 어짜피 store는 static 변수이기때문에 객체가 얼마든지 생성된다고 해도 공유하고 있기에 문제가 일어날 것 같지는 않습니다. 뭔가 왜 private final인지 포인트를 잡지못하고 있는거 같아요ㅠ
next.js에 swr, typescript를 이용해 노드버드 실습을 해보다가 서버사이드 렌더링에 대해 궁금한 게 생겼습니다. 사용자가 만약 로그인을 한 상태일 때, 서버사이드 렌더링을 해서 컴포넌트에 사용자 정보를 넣어준 상태로 페이지가 보여지도록 하고 싶은데요. 강의에서는 pages/index.js에서 리덕스를 이용하여 LOAD_MY_REQUEST 액션을 dispatch 한 뒤, components/AppLayout.js 에서 useSelector로 me 값을 가져 오면 사용자 정보가 담겨진 채로 AppLayout.js 컴포넌트가 랜더링 됩니다. swr을 적용해서 동일하게 구현해보려고 하는데요. swr에서는 page/index.js에서 서버사이드에서 로그인한 사용자 정보롤 가지고 오더라도, components/AppLayout.js에서 useSWR을 사용하면 처음 [로그아웃] 상태일 때의 화면이 잠깐 나오고, [로그인]상태일 때의 모습으로 변합니다. 혹시 swr을 이용해서 pages/index.js에서 서버사이드 렌더링으로 가지고 왔던 값을 components/AppLayout.js에도 페이지 렌더링 초기에 값을 함께 전달해주는 방법은 없을까요? 제가swr을 이용해 아래처럼 적용해봤는데, 다른 방법이 있을까요? pages/index.tsx export const getServerSideProps : GetServerSideProps = async function ({ req }) { const cookie : string = req ? req . headers . cookie : '' ; if ( cookie ) { const data = await fetcher . get ( '/user' , { cookie }); if ( data ) { return { props : { userProps : data }, }; } } return { props : { userProps : null }, }; }; function Index ({ userProps }: InferGetServerSidePropsType < typeof getServerSideProps >) { const { data : user } = useSWR < IUser >( '/user' , fetcher . get , { initialData : userProps }); return < AppLayout > { user ? user . nickname : '로그인해주세요' } </ AppLayout > ; } components/AppLayout.tsx function AppLayout () { const { data : user } = useSWR < IUser >( '/user' , fetcher . get ); return ( < div css = { userNavStyle } > { user ? ( <> < Profile image = { user . profile } size = '40px' /> </> ) : ( < Link href = '/login' > < a href = '' className = 'login' > 로그인 </ a > </ Link > ) } </ div > ); }
faker로 새로운 데이터생성하는데, (node:8264) UnhandledPromiseRejectionWarning: ValidationError: comment validation failed: userFullName: Path `userFullName` is required. 이런 오류가 났습니다. 그래서 Comment.js 에서 userFullName 부분을 기존 username: {type: String, required: true} 에서 required 부분을 삭제하였더니 잘 동작하더라구요. 이전에는 위 오류가 나지않았는데 갑자기 안되는 이유가 있나요...??? const CommentSchema = new Schema ( { content : { type : String , required : true }, user : { type : ObjectId , required : true , ref : "user" , index : true }, userFullName : String , blog : { type : ObjectId , required : true , ref : "blog" }, }, { timestamps : true } );
JPA 활용 2강의 - 컬렉션 조회(One To Many) - v3.1 방법으로 ToOne 관계만 fetch join하고, batch_fetch_size 설정했습니다. QueryDsl에서 hospital 엔티티의 id를 통해 원하는 것만 조회하고 싶은데 reviewHospital가 List 형태라서 review.reviewHospitals.hospital.id.eq(id) 이런식으로 안 됩니다. 그래서 생각해낸 게 contain으로 JPAExpression을 이용해서 where 절에 hospital id를 입력해서. 병원에 해당하는 id를 검색했습니다. java.sql.SQLException: Subquery returns more than 1 row 그런데 위와같이 subQuery가 1개 이상이라고 오류가 나더군요. hospital.id에 맞는 여러 개의 Review들을 조회하고 싶은데 다른 방법이 있는지 궁금합니다.
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
안녕하세요 강의 정말 잘 보고있습니다... 문법에대해선 어느정도 이해를해서 남이 작성한 코드나 선생님이 작성한 코드를 보면 무슨기능을하고 왜하는지는 이해를 하겠지만.. 혼자서 작성할려고하면 머리가 새하얗게 되고 뭐 부터 시작을 해야할지 잘 모르겠는데 어떻게 해야할까요..? 코드를 작성할때 ㅊ하나하나 시작해야하는 순서가있나요 ?? 예컨데 변수몇개 등등 구상을 먼저해야한다 라던가.. 이러한 알고리즘? 을 어떻게 생각해야할지 모르겠습니다.
강의 예제 시연 때 아래와 같이 정의된 상태에서 EntryPoint 핸들러를 주석처리를 하셨지요 SecurityController.java @RestController public class SecurityController { @GetMapping ( "/login" ) public String login () { return "'/login' - 개발자가 작성한 Login 페이지 " ; } } SecurityConfig.java http // 인증 / 인가 예외처리 . exceptionHandling () // .authenticationEntryPoint((request, response, ex) -> { // // 인증 실패 후 재인증요구 처리 : AuthenticationEntryPoint.commence() method // response.sendRedirect("/login");// 게빌자 제공 로그인 페이지로 이동 설정 // }) 주석 처리 이후에는 S.Security 기본제공 `/login` URI 가 호출 되었구요, 주석 처리 이전에는 개발자가 작성한 Controller `/login ` URI 가 호출이 되었습니다. 결과를 통해 추론 해보면, Spring Security 의 기본 제공 컨트롤러 구현체가 존재한다는 것을 알게 되었습니다 질문입니다 EntryPoint 핸들러를 주석처리 하자마자 개발자 정의 Controller 에 선언된 /login URI 는 Spring Security 기본제공 컨트롤러 /login URI 에게 우선순위가 밀려 호출이 되지 않는것 같습니다. 왜 개발자가 정의한 Controller 에 /login 이 우선처리 되지 않고, EntryPoint 핸들러를 통해 sendRedirect( /login ) 처리로만 이동이 가능한건지 원리가 궁금합니다. 혹시 sendRedirect 가 최우선순위로 호출되는 것이라는 단순한 이유일까요? 읽어주셔서 감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해당 강좌에선 4개의 행을 한 페이지에서 사용하는 법을 강의해주셨는데 DB시트에서 A,B,C,D 행이 있다고 칠 때 한 페이지에서는 해당 DB시트의 A,C 행만 보여지는 리피터를 만들고 싶고 어떤 페이지에서는 B,C 행만 보이는 리피터를 만들고 싶을때는 어떻게 해야 할까요? 거기에 예를 들어 한 페이지의 C행의 정보가 수정된다면 다른 페이지의 C행의 정보도 같이 수정이 되는 방법이 있는지 궁금합니다!
일단 확실히 WAR로 만들었고, 혹시나 2.5.x버전으로 올라가서 그랬을까 싶어서 2.4.8 버전으로 만들었고, index.html을 resources - static에 넣었을때는 index.html, basic.html이 잘 매핑이 됩니다만,, webapp을 만들고 하위에 넣엇을땐 매핑이 되질 않네요.. 현재 제 파일 상황이구요, proviededRundtime로 주석처리하고 해봤구요 이건 이렇습니다만,, 두가지로 해봤을때도 같습니다.. .