Skip to content

AI 자기소개서 구현 #136

@yyytir777

Description

@yyytir777

📌 기능 개요

  • AI 자기소개서 도메인 개발
  • 사용자는 제목, 문항, 선택한 경험, 키워드를 통해 ai 자기소개서를 생성함
  • 제목, 문항에 대해 참고할 경험을 추천받아 선택할 수 있음
  • 생성된 AI자기소개서는 저장되어 사용자가 수정, 삭제, 조회할 수 있어야 함

📝작업 내용

  • POST/api/resume : 자기소개서 저장
curl -X 'POST' \
  'http://localhost:8080/api/resume' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NDk5OTg0NzksImV4cCI6MTc0OTk5OTM3OX0.LHVfbWOs3zM9jLPvo2h7gsfkuTtQf6AcHgVY2V0TngQ' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "백엔드 인턴십",
  "question": "직무 관련하여 이룬 일을 서술하시오",
  "limit": 800,
  "experienceIds": [
    31
  ],
  "keywords": [
    "string"
  ],
  "structure": "1. 경험 배경 및 문제 인식\n2. 수행한 업무 및 역할\n3. 사용한 기술 및 방법\n4. 결과 및 성과",
    "content": "1. 카카오 백엔드 인턴십에서의 경험은 트래픽 급증으로 인한 서버 부하 문제를 해결하는 것이었습니다. 이 문제를 인식한 후, 로그인 서버의 안정성과 확장성을 확보해야 한다는 과제를 부여받았습니다.\n\n2. 저는 서버 개발 및 데이터베이스 관리 업무를 수행하며, 주어진 문제를 해결하기 위해 팀과 협력했습니다. 이 과정에서 효율적인 코드 최적화를 통해 시스템의 성능을 높이는 데 집중했습니다.\n\n3. Redis 기반의 세션 캐시와 JWT(Json Web Token)를 도입하여 인증 구조를 개선했습니다. 이를 통해 서버의 부하를 줄이고, 사용자 인증 과정의 효율성을 높였습니다.\n\n4. 이러한 개선 작업의 결과로, 트래픽 폭주 상황에서도 평균 응답 시간이 70% 감소하였고, 시스템 성능이 20% 향상되는 성과를 이루었습니다."
}'
  • PATCH/api/resume/{resume_id} : 자기소개서 수정
curl -X 'PATCH' \
  'http://localhost:8080/api/resume/1' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NDk5OTg0NzksImV4cCI6MTc0OTk5OTM3OX0.LHVfbWOs3zM9jLPvo2h7gsfkuTtQf6AcHgVY2V0TngQ' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string",
  "question": "string",
  "limit": 0,
  "keywords": [
    "string"
  ],
  "structure": "string",
  "content": "string"
}'
  • DELETE/api/resume/{resume_id} : 자기소개서 삭제
curl -X 'DELETE' \
  'http://localhost:8080/api/resume/1' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NDk5OTg0NzksImV4cCI6MTc0OTk5OTM3OX0.LHVfbWOs3zM9jLPvo2h7gsfkuTtQf6AcHgVY2V0TngQ'
  • GET /api/resume/{resume_id} : 자기소개서 조회

request

curl -X 'GET' \
  'http://localhost:8080/api/resume/6' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NTAwMDEwNjUsImV4cCI6MTc1MDAwMTk2NX0.1ZdX9IckcxpgQUi0HGl2nlJ4vDbYd0xd9DG0UGVjmrc'

response

{
  "httpStatus": 200,
  "message": "success",
  "data": {
    "title": "백엔드 인턴십",
    "question": "직무 관련하여 이룬 일을 서술하시오",
    "limit": 800,
    "experiecnes": [
      {
        "id": 31,
        "title": "카카오 백엔드 인턴십"
      }
    ],
    "keywords": [
      "string"
    ],
    "structure": "1. 경험 배경 및 문제 인식\n2. 수행한 업무 및 역할\n3. 사용한 기술 및 방법\n4. 결과 및 성과",
    "content": "1. 카카오 백엔드 인턴십에서의 경험은 트래픽 급증으로 인한 서버 부하 문제를 해결하는 것이었습니다. 이 문제를 인식한 후, 로그인 서버의 안정성과 확장성을 확보해야 한다는 과제를 부여받았습니다.\n\n2. 저는 서버 개발 및 데이터베이스 관리 업무를 수행하며, 주어진 문제를 해결하기 위해 팀과 협력했습니다. 이 과정에서 효율적인 코드 최적화를 통해 시스템의 성능을 높이는 데 집중했습니다.\n\n3. Redis 기반의 세션 캐시와 JWT(Json Web Token)를 도입하여 인증 구조를 개선했습니다. 이를 통해 서버의 부하를 줄이고, 사용자 인증 과정의 효율성을 높였습니다.\n\n4. 이러한 개선 작업의 결과로, 트래픽 폭주 상황에서도 평균 응답 시간이 70% 감소하였고, 시스템 성능이 20% 향상되는 성과를 이루었습니다."
  },
  "success": true
}
  • GET /api/resume : 자기소개서 목록 조회

request

curl -X 'GET' \
  'http://localhost:8080/api/resume' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NTAwMDEwNjUsImV4cCI6MTc1MDAwMTk2NX0.1ZdX9IckcxpgQUi0HGl2nlJ4vDbYd0xd9DG0UGVjmrc'

response

{
  "httpStatus": 200,
  "message": "success",
  "data": [
    {
      "id": 1,
      "title": "string",
      "createDate": "2025-06-12"
    },
    {
      "id": 4,
      "title": "수정",
      "createDate": "2025-06-12"
    },
    {
      "id": 5,
      "title": "백엔드 인턴십",
      "createDate": "2025-06-15"
    },
    {
      "id": 6,
      "title": "백엔드 인턴십",
      "createDate": "2025-06-15"
    }
  ],
  "success": true
}
  • POST /api/resume/ai-experience : AI 추천 경험 조회

request

curl -X 'POST' \
  'http://localhost:8080/api/resume/ai-experience' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NTAwMDEwNjUsImV4cCI6MTc1MDAwMTk2NX0.1ZdX9IckcxpgQUi0HGl2nlJ4vDbYd0xd9DG0UGVjmrc' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "백엔드 인턴십",
  "question": "경험한 트러블슈팅에 대해 서술하시오"
}'

response

{
  "httpStatus": 200,
  "message": "success",
  "data": [
    {
      "id": 31,
      "title": "카카오 백엔드 인턴십",
      "linkPoint": "트래픽 급증에 따른 서버 부하 문제를 해결하기 위해 Redis 기반 세션 캐시와 JWT 도입으로 인증 구조를 개선한 경험은 실제 상황에서의 트러블슈팅 능력을 잘 보여줍니다."
    },
    {
      "id": 34,
      "title": "2024 교내 알고리즘 대회",
      "linkPoint": "제한된 시간 내에 난이도 높은 문제를 해결하기 위한 최적의 알고리즘 설계 및 구현 경험은 문제 해결 능력과 트러블슈팅의 중요성을 강조합니다."
    },
    {
      "id": 38,
      "title": "KDT 백엔드 교육 과정 수료",
      "linkPoint": "실무 프로젝트를 통해 문제 해결 능력을 향상시킨 경험은 트러블슈팅 과정에서의 실질적인 적용 사례를 제공합니다."
    }
  ],
  "success": true
}
  • POST /api/resume/ai-generate : AI 자기소개서 생성

request

curl -X 'POST' \
  'http://localhost:8080/api/resume/ai-generate' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer eyJ0eXBlIjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIyIiwicm9sZXMiOiJST0xFX1VTRVIiLCJpYXQiOjE3NTAwMDEwNjUsImV4cCI6MTc1MDAwMTk2NX0.1ZdX9IckcxpgQUi0HGl2nlJ4vDbYd0xd9DG0UGVjmrc' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "백엔드 인턴십",
  "question": "직무 관련하여 이룬 일을 서술하시오",
  "limit": 800,
  "experienceIds": [
    31
  ],
  "keywords": [
    "서버"
  ]
}'

response

{
  "httpStatus": 200,
  "message": "success",
  "data": {
    "structure": "1. 경험 소개\n2. 문제 상황\n3. 수행한 작업\n4. 결과 및 성과",
    "content": "저는 카카오 백엔드 인턴십을 통해 서버 개발 및 데이터베이스 관리 업무에 참여하였습니다. 이 경험을 통해 실제 업무 환경에서의 문제를 해결하는 능력을 키울 수 있었습니다.\n\n인턴십 기간 동안 트래픽 급증으로 인한 서버 부하가 심각한 문제로 대두되었습니다. 이러한 상황에서 로그인 서버의 안정성과 확장성을 확보해야 하는 과제가 주어졌습니다.\n\n이에 따라 저는 Redis 기반의 세션 캐시와 JWT를 도입하여 인증 구조를 개선하였습니다. 이를 통해 서버의 성능을 최적화하고, 트래픽이 폭주하는 상황에서도 안정적인 서비스를 제공할 수 있는 기반을 마련하였습니다.\n\n결과적으로, 이와 같은 개선 작업을 통해 평균 응답 시간을 70% 감소시키는 성과를 거두었습니다. 이러한 경험은 저에게 실질적인 기술적 문제 해결 능력을 배양하는 데 큰 도움이 되었습니다."
  },
  "success": true
}

개선사항

  • AI 추천 경험 조회 API는 사용자의 경험을 프롬프트 입력으로 받는 로직을 사용
  • but, 사용자의 경험, 혹은 데이터의 양이 많아져 입력 가능한 길이를 초과할 시 대처 불가능
  • 이에 vector store를 사용하여 애플리케이션 레벨에서 n개의 경험을 미리 걸러 프롬프트로 사용하도록 하는 방식 고려

ref

Spring AI : vector store

  • Spring AI에서 제공하는 vectorstore 라이브러리에서 add, delete, similaritySearch 메서드를 통해 구현 가능

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions