Skip to content

RELEASE-20260511#204

Merged
alsgud8311 merged 6 commits into
mainfrom
development
May 11, 2026
Merged

RELEASE-20260511#204
alsgud8311 merged 6 commits into
mainfrom
development

Conversation

@alsgud8311
Copy link
Copy Markdown
Contributor

RELEASE-20260511

alsgud8311 and others added 6 commits April 30, 2026 23:55
- Simplified the navigation push logic in the interview result page for better readability.
- Improved client IP retrieval in server-side props for guest interview reports, adding a console log for debugging purposes.
- Updated Nginx configuration to restore the actual client IP with appropriate settings for real IP handling.
- Added a console error log to capture and stringify errors occurring during the guest interview report process for better debugging.
@alsgud8311 alsgud8311 merged commit c0b0b90 into main May 11, 2026
5 of 7 checks passed
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a guest interview feature, allowing unauthenticated users to experience a limited demo of the AI mock interview service. Key changes include updating middleware to allow public access to interview routes, implementing guest-specific API endpoints, and adding UI components such as the GuestInterviewModal and demo-specific banners. The PR also refactors the CreateInterviewForm and RankCard for improved UX, integrates Google AdSense, and restricts result visibility for guest users. Feedback focuses on improving error handling in the guest API, removing sensitive IP logging from production code, and utilizing the newly created GoogleAdSenseComponent to reduce code duplication.

.catch((error) => {
if (isAxiosError(error)) {
if (error.response?.status === 400) {
throw new Error(error.response.data.message);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

error.response.data가 존재하지 않거나 message 필드가 없을 경우 런타임 에러가 발생할 수 있습니다. 옵셔널 체이닝을 사용하고, 기본 에러 메시지를 제공하여 안정성을 높이는 것이 좋습니다.

Suggested change
throw new Error(error.response.data.message);
throw new Error(error.response?.data?.message || "면접 생성 중 오류가 발생했습니다.");

(context.req.headers["x-real-ip"] as string) ||
context.req.socket.remoteAddress ||
"";
console.log("clientIp for guest interview report", clientIp);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

운영 환경에서 클라이언트의 IP 정보를 로그로 남기는 것은 보안 및 개인정보 보호 측면에서 부적절할 수 있습니다. 디버깅용 로그라면 제거하는 것을 권장합니다.

}
};
} catch (error) {
console.error("error for guest interview report", JSON.stringify(error));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

JSON.stringify(error)Error 객체의 정보를 제대로 출력하지 못하는 경우가 많습니다(빈 객체 {} 반환). 에러 객체 자체를 로그로 남기거나 error.message를 사용하는 것이 디버깅에 더 도움이 됩니다. 또한 운영 환경에서는 상세한 에러 로그 노출을 최소화해야 합니다.

Suggested change
console.error("error for guest interview report", JSON.stringify(error));
console.error("error for guest interview report", error);

Comment on lines +22 to +24
import GuestInterviewModal from "@/domains/interview/components/guestInterviewModal";
import { useModal } from "@kokomen/utils";
import Image from "next/image";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

GoogleAdSenseComponent를 사용하기 위해 임포트를 추가해야 합니다.

Suggested change
import GuestInterviewModal from "@/domains/interview/components/guestInterviewModal";
import { useModal } from "@kokomen/utils";
import Image from "next/image";
import GuestInterviewModal from "@/domains/interview/components/guestInterviewModal";
import { useModal } from "@kokomen/utils";
import Image from "next/image";
import { GoogleAdSenseComponent } from "@/domains/ads/googleAdsenseComponent";

Comment on lines +66 to +73
<ins
className="adsbygoogle"
style={{ display: "block" }}
data-ad-client="ca-pub-9998347148036420"
data-ad-slot="4601910391"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

이번 PR에서 추가된 GoogleAdSenseComponent를 사용하여 중복 코드를 제거하고 유지보수성을 높이는 것을 권장합니다. 해당 컴포넌트는 광고 초기화 로직(adsbygoogle.push({}))을 포함하고 있어 더 안정적으로 광고를 로드할 수 있습니다.

          <GoogleAdSenseComponent />

@github-actions
Copy link
Copy Markdown

🛠️ Build Summary

Status: ✅ SUCCESS
Duration: 64초
Exit Code: 0
Commit: a16259d

📋 Build Output (마지막 45줄)

├ ƒ /api/auth/logout                           0 B         340 kB
├ ƒ /dashboard                             12.7 kB         647 kB
├ ƒ /interviews                            8.83 kB         356 kB
├ ƒ /interviews/[interviewId]              10.3 kB         614 kB
├ ƒ /interviews/[interviewId]/result       6.21 kB         374 kB
├ ○ /layout (1544 ms)                        542 B         341 kB
├   └ css/2af4d3721e97fa9b.css               280 B
├ ƒ /login                                 2.73 kB         343 kB
├ ƒ /login/callback                        2.79 kB         343 kB
├ ƒ /login/google/callback                 2.79 kB         343 kB
├ ƒ /login/profile                          5.5 kB         376 kB
├ ƒ /members/[memberId]                     4.8 kB         349 kB
├ ƒ /members/[memberId]/sitemap.xml          429 B         341 kB
├ ƒ /members/interviews/[interviewId]      3.99 kB         349 kB
├ ƒ /purchase                              7.83 kB         637 kB
├ ƒ /purchase/confirm                      2.42 kB         345 kB
├ ○ /purchase/error (1543 ms)                801 B         343 kB
├ ƒ /rank                                  4.15 kB         348 kB
├ ƒ /recruit                               6.98 kB         354 kB
├ ƒ /resume                                1.76 kB         451 kB
├ ƒ /resume/eval                           4.62 kB         348 kB
├ ƒ /resume/eval/[evaluationId]/result     3.78 kB         449 kB
├ ƒ /resume/eval/demo                      3.56 kB         453 kB
├ ƒ /resume/interview                      6.22 kB         376 kB
├ ƒ /resume/interview/[interviewId]        4.53 kB         348 kB
├ ƒ /server-sitemap.xml                      423 B         341 kB
├ ƒ /sitemap/rank.xml                        421 B         341 kB
├ ƒ /terms/privacy                         6.03 kB         346 kB
└ ƒ /terms/termsofuse                      5.86 kB         346 kB
+ First Load JS shared by all               357 kB
  ├ chunks/framework-0859aa6f37f5c68e.js   57.6 kB
  ├ chunks/main-31c252151686fafc.js         176 kB
  ├ chunks/pages/_app-0fecc227f783f2c2.js   104 kB
  ├ css/82f052892f50a131.css               16.7 kB
  └ other shared chunks (total)            2.54 kB

ƒ Middleware                               96.2 kB

○  (Static)   prerendered as static content
ƒ  (Dynamic)  server-rendered on demand

   Memory usage report:
    - Total time spent in GC: 456.21ms
    - Peak heap usage: 155.98 MB
    - Peak RSS usage: 825.98 MB

🤖 Generated by GitHub Actions at Mon May 11 12:59:26 UTC 2026

@github-actions
Copy link
Copy Markdown

🚀 Lighthouse Report for TEST1

📅 Date: 5/11/2026

Category Score
🔴 Performance 44
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🔴 Largest Contentful Paint 32 4.7 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST2

📅 Date: 5/11/2026

Category Score
🔴 Performance 45
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🔴 Largest Contentful Paint 31 4.8 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST3

📅 Date: 5/11/2026

Category Score
🔴 Performance 44
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🔴 Largest Contentful Paint 31 4.8 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST4

📅 Date: 5/11/2026

Category Score
🔴 Performance 43
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🔴 Largest Contentful Paint 28 4.9 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST5

📅 Date: 5/11/2026

Category Score
🔴 Performance 47
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🔴 Largest Contentful Paint 41 4.3 s
🟢 Cumulative Layout Shift 100 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant