- generic [ref=f2e3]: - link "본문으로 건너뛰기" [ref=f2e4] [cursor=pointer]: - /url: "#main-content" - banner [ref=f2e5]: - generic [ref=f2e6]: - link "TechLog Studio" [ref=f2e7] [cursor=pointer]: - /url: /studio - text: TechLog - generic [ref=f2e8]: Studio - navigation "Studio 주 탐색" [ref=f2e10]: - link "작업본" [ref=f2e11] [cursor=pointer]: - /url: /studio/documents - link "게시 기록" [ref=f2e12] [cursor=pointer]: - /url: /studio/publications - link "새 문서" [ref=f2e13] [cursor=pointer]: - /url: /studio/documents/new - link "주제·프로젝트" [ref=f2e14] [cursor=pointer]: - /url: /studio/taxonomy - link "릴리즈" [ref=f2e15] [cursor=pointer]: - /url: /studio/releases - link "공개 사이트 보기" [ref=f2e16] [cursor=pointer]: - /url: / - button "로그아웃" [ref=f2e17] - main [ref=f2e18]: - generic [ref=f2e19]: - generic [ref=f2e20]: - generic [ref=f2e21]: - paragraph [ref=f2e22]: WORKSPACE - heading "작업 흐름" [level=1] [ref=f2e23] - paragraph [ref=f2e24]: 작성 중인 기록을 이어서 정리하고 검증·게시 흐름으로 연결합니다. - link "새 문서" [ref=f2e25] [cursor=pointer]: - /url: /studio/documents/new - region "Studio 요약" [ref=f2e26]: - generic [ref=f2e27]: - generic [ref=f2e28]: 전체 작업본 - strong [ref=f2e29]: "47" - generic [ref=f2e30]: - generic [ref=f2e31]: 검증할 기록 - strong [ref=f2e32]: "5" - generic [ref=f2e33]: - generic [ref=f2e34]: 게시 준비 - strong [ref=f2e35]: "0" - generic [ref=f2e36]: - generic [ref=f2e37]: 게시 기록 - strong [ref=f2e38]: "21" - generic [ref=f2e39]: - generic [ref=f2e40]: - heading "이어서 작성" [level=2] [ref=f2e41] - link "전체 보기" [ref=f2e42] [cursor=pointer]: - /url: /studio/documents - paragraph [ref=f2e44]: 이어서 작성할 문서가 없습니다. - generic [ref=f2e45]: - generic [ref=f2e46]: - heading "검증과 미리보기" [level=2] [ref=f2e47] - link "전체 보기" [ref=f2e48] [cursor=pointer]: - /url: /studio/documents - generic [ref=f2e49]: - article [ref=f2e50]: - paragraph [ref=f2e51]: 검증 기록 - generic [ref=f2e52]: - heading [level=3] [ref=f2e53]: - link "Refresh Token 관리만 서버로 이전, Access Token은 여전히 Browser에 노출" [ref=f2e54] [cursor=pointer]: - /url: /studio/documents/488ce49b-afa4-42a5-a2ce-de2e0653cd82/edit - paragraph [ref=f2e55]: KeyCloak Patterns · 검증하기 - time [ref=f2e56]: 2026. 9. 7. - article [ref=f2e57]: - paragraph [ref=f2e58]: 열린 질문 - generic [ref=f2e59]: - heading [level=3] [ref=f2e60]: - link "ANALYZE 이후 Cardinality Estimate는 어떻게 달라지는가" [ref=f2e61] [cursor=pointer]: - /url: /studio/documents/e1e0e2a0-c6b6-45bf-be42-f697ba5e2fff/edit - paragraph [ref=f2e62]: Liner N + 1문제 · 검증하기 - time [ref=f2e63]: 2026. 9. 4. - article [ref=f2e64]: - paragraph [ref=f2e65]: 열린 질문 - generic [ref=f2e66]: - heading [level=3] [ref=f2e67]: - link "Round Trip과 Row Volume을 독립 측정할 것인가" [ref=f2e68] [cursor=pointer]: - /url: /studio/documents/5159c415-232d-424a-970a-b0db52746767/edit - paragraph [ref=f2e69]: Liner N + 1문제 · 검증하기 - time [ref=f2e70]: 2026. 9. 4. - article [ref=f2e71]: - paragraph [ref=f2e72]: 검증 기록 - generic [ref=f2e73]: - heading [level=3] [ref=f2e74]: - link "Collection Fetch Join으로 N+1을 해결하다 만난 MultiBag예외와 행 폭증 문제" [ref=f2e75] [cursor=pointer]: - /url: /studio/documents/7ed75172-fd56-42bf-956a-8f9fc1cca235/edit - paragraph [ref=f2e76]: Liner N + 1문제 · 검증하기 - time [ref=f2e77]: 2026. 9. 4. - article [ref=f2e78]: - paragraph [ref=f2e79]: 적용 기준 - generic [ref=f2e80]: - heading [level=3] [ref=f2e81]: - link "JPA N+1 정량 진단 기준" [ref=f2e82] [cursor=pointer]: - /url: /studio/documents/b0b55ac9-c0a3-4c01-ba84-0aa478923ace/edit - paragraph [ref=f2e83]: Liner N + 1문제 · 검증하기 - time [ref=f2e84]: 2026. 9. 4. - generic [ref=f2e85]: - generic [ref=f2e86]: - heading "게시 준비" [level=2] [ref=f2e87] - link "전체 보기" [ref=f2e88] [cursor=pointer]: - /url: /studio/documents - paragraph [ref=f2e90]: 게시 준비가 끝난 문서가 없습니다. - region [ref=f2e91]: - generic [ref=f2e92]: - paragraph [ref=f2e93]: PUBLIC HOME - heading "지금 집중하는 것" [level=2] [ref=f2e94] - paragraph [ref=f2e95]: 공개 홈 맨 위 영역입니다. 셋 다 비워 두면 그 영역은 나타나지 않습니다. - generic [ref=f2e96]: - generic [ref=f2e97]: - generic [ref=f2e98]: - generic [ref=f2e99]: 현재 작업 (프로젝트) - combobox "현재 작업 (프로젝트) 단계·현재 목표·다음 작업이 카드에 함께 나옵니다." [ref=f2e100]: - option "고르지 않음" - option "Liner N + 1문제" - option "Backend Clean Architecture" - option "KeyCloak Patterns" [selected] - generic [ref=f2e101]: 단계·현재 목표·다음 작업이 카드에 함께 나옵니다. - generic [ref=f2e102]: - generic [ref=f2e103]: 열린 질문 - combobox "열린 질문" [ref=f2e104]: - option "고르지 않음" - option "Forward-Auth 구조에서 Application Authorization을 어디까지 Edge에 둘 것인가" - option "BFF의 Session과 OAuth2AuthorizedClient를 어디에 저장할 것인가" [selected] - option "서버 세션 기반 인증 구조는 다중 인스턴스에서 어떻게 운영할 것인가" - option "Refresh Token Rotation과 다중 Replica 경쟁을 어떻게 처리할 것인가" - generic [ref=f2e105]: - generic [ref=f2e106]: 최근 결정 - combobox "최근 결정" [ref=f2e107]: - option "고르지 않음" - option "브라우저에 OAuth token을 노출하지 않으면서 애플리케이션이 Resource Server 호출을 중계하고 조합해야 하는 경우, BFF가 authorization code 교환과 token 보관, downstream API 호출을 소유한다. 브라우저에는 애플리케이션 session만 제공한다." [selected] - option "외부 IdP 연동은 별도의 인증 구조가 아니다. Google과 같은 외부 IDP는 사용자의 인증을 담당하고, Keycloak은 그 인증 결과를 받아 애플리케이션이 신뢰할 수있는 토큰을 발급한다. SPA, Mediator, BFF, OAuth2-proxy와 같은 4가지 구조는 이렇게 발급된 토큰이나 세션을 애플리케이션에서 어디까지 노출하고 관리할지를 구분한다." - generic [ref=f2e108]: - button "홈 설정 저장" [ref=f2e109] - paragraph [ref=f2e110]: - text: 저장하면 공개 홈에 바로 반영됩니다. - link "주제·프로젝트" [ref=f2e111] [cursor=pointer]: - /url: /studio/taxonomy - text: 에서 프로젝트를 만들고 게시할 수 있습니다. - generic [ref=f2e112]: - generic [ref=f2e113]: - heading "최근 게시" [level=2] [ref=f2e114] - link "게시 기록 보기" [ref=f2e115] [cursor=pointer]: - /url: /studio/publications - generic [ref=f2e116]: - article [ref=f2e117]: - paragraph [ref=f2e118]: 게시 - generic [ref=f2e119]: - heading "Collection Fetch Join Pagination의 In-memory Paging" [level=3] [ref=f2e120] - paragraph [ref=f2e121]: Liner N + 1문제 - time [ref=f2e122]: 2026. 9. 1. - article [ref=f2e123]: - paragraph [ref=f2e124]: 게시 - generic [ref=f2e125]: - heading "Collection Fetch Join으로 N+1을 해결하다 만난 MultiBag예외와 행 폭증 문제" [level=3] [ref=f2e126] - paragraph [ref=f2e127]: Liner N + 1문제 - time [ref=f2e128]: 2026. 9. 1. - article [ref=f2e129]: - paragraph [ref=f2e130]: 게시 - generic [ref=f2e131]: - heading "Fetch 타입이 아닌 조회 방식으로 인한 N+1" [level=3] [ref=f2e132] - paragraph [ref=f2e133]: Liner N + 1문제 - time [ref=f2e134]: 2026. 9. 1. - article [ref=f2e135]: - paragraph [ref=f2e136]: 게시 - generic [ref=f2e137]: - heading "외부 IdP Brokering의 동작" [level=3] [ref=f2e138] - paragraph [ref=f2e139]: KeyCloak Patterns - time [ref=f2e140]: 2026. 9. 1. - article [ref=f2e141]: - paragraph [ref=f2e142]: 게시 - generic [ref=f2e143]: - heading "BFF가 OAuth Token을 관리하는 조건" [level=3] [ref=f2e144] - paragraph [ref=f2e145]: KeyCloak Patterns - time [ref=f2e146]: 2026. 8. 31. - paragraph [ref=f2e147]