Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ResumeOutput } from "@kokomen/types";
import { Dispatch, SetStateAction } from "react";
import { CamelCasedProperties } from "@kokomen/types";
import {
CamelCasedProperties,
ResumeEvaluationResult as ResumeEvaluationResultType
} from "@kokomen/types";
import { resumeEvaluationDemoResult } from "@/domains/resume/constants";
import { Button, Input } from "@kokomen/ui";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
Expand All @@ -22,7 +24,7 @@ export default function ResumeEvaluationDemoForm({
setResult
}: {
setResult: Dispatch<
SetStateAction<CamelCasedProperties<ResumeOutput> | null>
SetStateAction<CamelCasedProperties<ResumeEvaluationResultType> | null>
>;
}) {
const onClickSubmit = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,7 @@ const resumeEvalFormFields = z
.refine((data) => data.resume_id || (data.resume && data.resume.length > 0), {
message: "이력서를 선택해주세요",
path: ["resume"] // 에러 메시지를 표시할 필드 위치
})
// 2. 포트폴리오 검증: ID가 있거나, 파일이 선택되었거나
.refine(
(data) =>
data.portfolio_id || (data.portfolio && data.portfolio.length > 0),
{
message: "포트폴리오를 선택해주세요",
path: ["portfolio"]
}
);
});
type ResumeEvalFormFields = z.infer<typeof resumeEvalFormFields>;

export default function ResumeEvaluationForm({ user }: { user: UserInfo }) {
Expand Down
164 changes: 91 additions & 73 deletions apps/client/src/domains/resume/constants/index.ts
Original file line number Diff line number Diff line change
@@ -1,77 +1,95 @@
import { CamelCasedProperties, ResumeOutput } from "@kokomen/types";
import {
CamelCasedProperties,
ResumeEvaluationResult as ResumeEvaluationResultType
} from "@kokomen/types";

export const resumeEvaluationDemoResult: CamelCasedProperties<ResumeOutput> = {
technicalSkills: {
score: 92,
reason: `• 최신 프레임워크 및 기술 스택에 대한 깊이 있는 이해도
• 프론트엔드(React, Next.js, TypeScript)와 백엔드(Node.js, NestJS) 전반적인 풀스택 역량
• 클라우드 인프라(AWS, Docker, Kubernetes) 및 CI/CD 파이프라인 구축 경험
• 성능 최적화 및 코드 품질 관리를 위한 체계적인 접근 방식
• 다양한 데이터베이스(PostgreSQL, MongoDB, Redis) 활용 능력`,
improvements: `• 서비스 아키텍처 설계 및 운영 경험 쌓기
• 보안 취약점 분석 및 대응 능력 강화
• 테스트 자동화 및 TDD 방법론 심화 학습`
},
projectExperience: {
score: 70,
reason: `• 개인 프로젝트 위주로 실무 협업 경험이 부족함
• 소규모 토이 프로젝트 중심으로 대규모 시스템 경험 제한적
• 프로젝트 완성도는 있으나 운영 및 유지보수 경험 부족
• GitHub 관리는 하고 있으나 팀 협업 워크플로우 경험 없음
• 프로젝트 다양성이 부족하고 비슷한 기술 스택 반복 사용`,
improvements: `• 실무 협업 프로젝트 또는 인턴 경험을 통한 팀워크 역량 강화
• 대규모 트래픽 처리 및 성능 최적화 실전 경험 필요
• 레거시 코드 리팩토링 및 유지보수 경험 부족
• 프로젝트 기획부터 배포까지의 비즈니스 관점 경험 필요
• 다양한 도메인의 프로젝트 경험으로 시야 확장 권장`
},
problemSolving: {
score: 70,
reason: `• 알고리즘 문제 풀이는 가능하나 실무 문제 해결 경험 부족
• 복잡한 버그에 대한 체계적인 디버깅 접근법이 미흡함
• 에러 처리가 표면적이고 근본 원인 분석 능력 부족
• 문제 해결 시 검색 의존도가 높고 독립적 해결 능력 제한적
• 성능 이슈나 시스템 장애 대응 경험이 거의 없음`,
improvements: `• 실무에서 발생하는 복잡한 버그 디버깅 경험 필요
• 시스템 장애 대응 및 트러블슈팅 실전 경험 부족
• 성능 병목 지점 식별 및 최적화 실무 경험 필요
• 다양한 시나리오의 엣지 케이스 처리 경험 축적
• 코드 리뷰를 통한 문제 해결 접근법 다각화 필요`
},
careerGrowth: {
score: 55,
reason: `• 커리어 방향성이 불명확하고 구체적인 성장 계획 부재
• 트렌드만 쫓아가며 한 분야의 깊이 있는 전문성 부족
• 학습이 산발적이고 체계적인 성장 전략이 없음
• 피드백을 받아도 실질적인 개선으로 이어지지 않음
• 단기 목표에만 집중하고 장기적 비전이 부족함`,
improvements: `• 멘토링 경험을 통해 얻은 경험이 부재
• 한 가지 분야의 전문성을 깊이 있게 쌓는 전략 고려
• 멘토링이나 시니어 개발자와의 정기적인 교류를 통한 성장 방향 설정
• 학습한 내용을 체계적으로 정리하고 공유하는 습관 필요
• 기술 트렌드 파악과 실무 적용 사이의 균형 필요
• 단순 코딩 스킬을 넘어 비즈니스 이해도 향상 필요`
},
documentation: {
score: 35,
reason: `• 문서화에 대한 중요성 인식이 부족하고 습관화되지 않음
• README가 매우 간략하거나 형식적으로만 작성됨
• 코드 주석이 거의 없어 코드 의도 파악이 어려움
• 기술적 결정 과정이나 이유를 전혀 기록하지 않음
• API 문서, 명세서 작성 경험이 전무함`,
improvements: `• 모든 프로젝트에 상세한 README 작성 습관 들이기
• 기술 블로그를 통한 학습 내용 정리 및 공유 시작
`
},
totalScore: 60,
totalFeedback: `기술적 역량이 매우 뛰어난 개발자입니다!

특히 최신 기술 스택에 대한 이해도와 활용 능력이 돋보이며, 풀스택 개발 역량을 갖춘 점이 강점입니다. 다만 대부분의 경험이 개인 프로젝트 중심이라 실무 협업 경험과 대규모 시스템 운영 경험이 보완되면 더욱 성장할 수 있을 것입니다.

가장 시급한 개선점은 문서화 습관입니다. 훌륭한 코드를 작성하시지만 이를 체계적으로 정리하고 공유하는 능력이 부족한 편입니다. 기술 블로그나 README 작성을 통해 문서화 역량을 키우신다면 팀 협업 시 큰 강점이 될 것입니다.

또한 커리어 성장 방향성을 보다 구체화하고, 단기 학습 중심에서 벗어나 장기적인 전문성 구축 전략을 세우시는 것을 권장합니다. 현재의 높은 기술력을 바탕으로 실무 경험과 문서화 능력만 보완된다면, 빠르게 핵심 개발자로 성장할 수 있는 잠재력을 가진 인재입니다.`
};
export const resumeEvaluationDemoResult: CamelCasedProperties<ResumeEvaluationResultType> =
{
id: 1,
resume: {
id: 1,
title: "꼬꼬면 개발자_이력서.pdf"
},
portfolio: {
id: 1,
title: "꼬꼬면 개발자_포트폴리오.pdf"
},
jobPosition: "프론트엔드 개발자",
jobDescription: "꼬꼬면 개발자_이력서.pdf",
jobCareer: "0-1년",
result: {
technicalSkills: {
score: 92,
reason: `• 최신 프레임워크 및 기술 스택에 대한 깊이 있는 이해도
• 프론트엔드(React, Next.js, TypeScript)와 백엔드(Node.js, NestJS) 전반적인 풀스택 역량
• 클라우드 인프라(AWS, Docker, Kubernetes) 및 CI/CD 파이프라인 구축 경험
• 성능 최적화 및 코드 품질 관리를 위한 체계적인 접근 방식
• 다양한 데이터베이스(PostgreSQL, MongoDB, Redis) 활용 능력`,
improvements: `• 서비스 아키텍처 설계 및 운영 경험 쌓기
• 보안 취약점 분석 및 대응 능력 강화
• 테스트 자동화 및 TDD 방법론 심화 학습`
},
projectExperience: {
score: 70,
reason: `• 개인 프로젝트 위주로 실무 협업 경험이 부족함
• 소규모 토이 프로젝트 중심으로 대규모 시스템 경험 제한적
• 프로젝트 완성도는 있으나 운영 및 유지보수 경험 부족
• GitHub 관리는 하고 있으나 팀 협업 워크플로우 경험 없음
• 프로젝트 다양성이 부족하고 비슷한 기술 스택 반복 사용`,
improvements: `• 실무 협업 프로젝트 또는 인턴 경험을 통한 팀워크 역량 강화
• 대규모 트래픽 처리 및 성능 최적화 실전 경험 필요
• 레거시 코드 리팩토링 및 유지보수 경험 부족
• 프로젝트 기획부터 배포까지의 비즈니스 관점 경험 필요
• 다양한 도메인의 프로젝트 경험으로 시야 확장 권장`
},
problemSolving: {
score: 70,
reason: `• 알고리즘 문제 풀이는 가능하나 실무 문제 해결 경험 부족
• 복잡한 버그에 대한 체계적인 디버깅 접근법이 미흡함
• 에러 처리가 표면적이고 근본 원인 분석 능력 부족
• 문제 해결 시 검색 의존도가 높고 독립적 해결 능력 제한적
• 성능 이슈나 시스템 장애 대응 경험이 거의 없음`,
improvements: `• 실무에서 발생하는 복잡한 버그 디버깅 경험 필요
• 시스템 장애 대응 및 트러블슈팅 실전 경험 부족
• 성능 병목 지점 식별 및 최적화 실무 경험 필요
• 다양한 시나리오의 엣지 케이스 처리 경험 축적
• 코드 리뷰를 통한 문제 해결 접근법 다각화 필요`
},
careerGrowth: {
score: 55,
reason: `• 커리어 방향성이 불명확하고 구체적인 성장 계획 부재
• 트렌드만 쫓아가며 한 분야의 깊이 있는 전문성 부족
• 학습이 산발적이고 체계적인 성장 전략이 없음
• 피드백을 받아도 실질적인 개선으로 이어지지 않음
• 단기 목표에만 집중하고 장기적 비전이 부족함`,
improvements: `• 멘토링 경험을 통해 얻은 경험이 부재
• 한 가지 분야의 전문성을 깊이 있게 쌓는 전략 고려
• 멘토링이나 시니어 개발자와의 정기적인 교류를 통한 성장 방향 설정
• 학습한 내용을 체계적으로 정리하고 공유하는 습관 필요
• 기술 트렌드 파악과 실무 적용 사이의 균형 필요
• 단순 코딩 스킬을 넘어 비즈니스 이해도 향상 필요`
},
documentation: {
score: 35,
reason: `• 문서화에 대한 중요성 인식이 부족하고 습관화되지 않음
• README가 매우 간략하거나 형식적으로만 작성됨
• 코드 주석이 거의 없어 코드 의도 파악이 어려움
• 기술적 결정 과정이나 이유를 전혀 기록하지 않음
• API 문서, 명세서 작성 경험이 전무함`,
improvements: `• 모든 프로젝트에 상세한 README 작성 습관 들이기
• 기술 블로그를 통한 학습 내용 정리 및 공유 시작
`
},
totalScore: 60,
totalFeedback: `기술적 역량이 매우 뛰어난 개발자입니다!

특히 최신 기술 스택에 대한 이해도와 활용 능력이 돋보이며, 풀스택 개발 역량을 갖춘 점이 강점입니다. 다만 대부분의 경험이 개인 프로젝트 중심이라 실무 협업 경험과 대규모 시스템 운영 경험이 보완되면 더욱 성장할 수 있을 것입니다.

가장 시급한 개선점은 문서화 습관입니다. 훌륭한 코드를 작성하시지만 이를 체계적으로 정리하고 공유하는 능력이 부족한 편입니다. 기술 블로그나 README 작성을 통해 문서화 역량을 키우신다면 팀 협업 시 큰 강점이 될 것입니다.

또한 커리어 성장 방향성을 보다 구체화하고, 단기 학습 중심에서 벗어나 장기적인 전문성 구축 전략을 세우시는 것을 권장합니다. 현재의 높은 기술력을 바탕으로 실무 경험과 문서화 능력만 보완된다면, 빠르게 핵심 개발자로 성장할 수 있는 잠재력을 가진 인재입니다.`
}
};

export const resumeEvaluationCategories: {
key: string;
Expand Down
13 changes: 9 additions & 4 deletions apps/client/src/pages/resume/eval/demo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import {
InferGetServerSidePropsType
} from "next";
import { Footer } from "@/shared/footer";
import { CamelCasedProperties, ResumeOutput, UserInfo } from "@kokomen/types";
import {
CamelCasedProperties,
ResumeEvaluationResult as ResumeEvaluationResultType,
UserInfo
} from "@kokomen/types";
import { SEO } from "@/shared/seo";
import dynamic from "next/dynamic";
import { useState } from "react";
Expand All @@ -25,12 +29,13 @@ export default function ResumeEvalDemoPage({
userInfo
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
const [result, setResult] =
useState<CamelCasedProperties<ResumeOutput> | null>(null);
useState<CamelCasedProperties<ResumeEvaluationResultType> | null>(null);

return (
<>
<SEO
title="이력서 평가"
title="이력서 평가 데모"
pathname="/resume/eval/demo"
description="이력서와 포트폴리오가 채용공고와 직무에 얼마나 적합한지 평가해보세요."
image="/resume.png"
robots="index, follow"
Expand All @@ -53,7 +58,7 @@ export default function ResumeEvalDemoPage({
</Link>
</div>
{result ? (
<ResumeEvaluationResult result={result} />
<ResumeEvaluationResult report={result} />
) : (
<ResumeEvalForm setResult={setResult} />
)}
Expand Down