[로고가 들어갈 예정]
취업준비생들을 위한 이력서, 자소서 관리 서비스: Piccup
2024.12.16 ~ 2025.01.05
정지은 (팀장) GITHUB |
김수아 GITHUB |
박수연 GITHUB |
유보형 GITHUB |
허건 GITHUB |
정지은 (팀장) | |
김수아 | |
박수연 | |
유보형 | |
허건 |
평균 취업 준비 기간 약 1년, 취업 준비에 체계적인 관리 서비스가 필요하다!
Piccup 은 기업마다 다른 자기소개서 문항들, 이력서 요소들, 그리고 중구난방의 채용 일정들에 이리저리 치이는 취업 준비생들의 입장에서 시작했습니다. 자주 쓰이는 자기소개서 문항들을 보기 좋게 정리해놓고 싶다거나, 지원 직무 별 필요한 이력 사항들을 미리 작성해놓고 싶다는 마음은 취업 준비생들의 마음 한켠에 자리잡고 있을 것입니다.
Piccup은 이러한 취업 준비생의 한 자락의 불편과 물안을 해소해줄 수 있도록 취준 관리 프로젝트를 기획하여 탄생했습니니다. 뒤죽박죽인 채용 일정을 한눈에 정리하고 전형 단계를 확인해볼 수 있는 기능과 더불어, 자기소개서와 이력서를 정리하여 필요할 때마다다 꺼내볼 수 있는 기능을 제공하는 취업 준비생들에게 필요한 편리 서비스입니다.
📦piccup
┣ 📂src
┃ ┣ 📂main
┃ ┃ ┣ 📂java/com/ssafy/piccup
┃ ┃ ┃ ┣ 📂config // CORS, DB, Security 설정 파일
┃ ┃ ┃ ┣ 📂controller // 회원, 자소서, 이력서 기능 컨트롤러
┃ ┃ ┃ ┣ 📂filter // JWT 인증 필터
┃ ┃ ┃ ┣ 📂model
┃ ┃ ┃ ┃ ┣ 📂dao
┃ ┃ ┃ ┃ ┃ ┣ 📂coverletter // 자소서 및 지원서 Dao
┃ ┃ ┃ ┃ ┃ ┣ 📂mydata // 내 취준 데이터 Dao
┃ ┃ ┃ ┃ ┃ ┣ 📂resume // 이력서 Dao
┃ ┃ ┃ ┃ ┃ ┗ 📂user // 회원 Dao
┃ ┃ ┃ ┃ ┣ 📂dto
┃ ┃ ┃ ┃ ┃ ┣ 📂coverletter // 자소서 및 지원서 Dto
┃ ┃ ┃ ┃ ┃ ┣ 📂mydata // 내 취준 데이터 Dto
┃ ┃ ┃ ┃ ┃ ┣ 📂resume // 이력서 Dto
┃ ┃ ┃ ┃ ┃ ┗ 📂user // 회원 Dto
┃ ┃ ┃ ┃ ┗ 📂service
┃ ┃ ┃ ┃ ┃ ┣ 📂coverletter // 자소서 및 지원서 service
┃ ┃ ┃ ┃ ┃ ┣ 📂mydata // 내 취준 데이터 service
┃ ┃ ┃ ┃ ┃ ┣ 📂resume // 이력서 service
┃ ┃ ┃ ┃ ┃ ┗ 📂user // 회원 service
┃ ┃ ┃ ┣ 📂util // 인증 기능
┃ ┃ ┗ 📂resources
┃ ┃ ┃ ┣ 📂mappers
┃ ┃ ┃ ┃ ┣ 📂coverletter // 자소서 및 지원서 mapper
┃ ┃ ┃ ┃ ┣ 📂mydata // 내 취준 데이터 mapper
┃ ┃ ┃ ┃ ┣ 📂resume // 이력서 mapper
┃ ┃ ┃ ┃ ┗ 📂user // 회원 mapper
┃ ┃ ┃ ┣ 📂static // 파일 저장 경로, 정적 파일용 폴더
┃ ┃ ┃ ┃ ┣ 📂education_files
┃ ┃ ┃ ┃ ┣ 📂portfolio_files
┃ ┃ ┃ ┃ ┣ 📂profile_images
┃ ┃ ┃ ┃ ┣ 📂sql // sql table schema
┃ ┃ ┃ ┃ ┗ 📂work_files // 마스코트 이미지
┃ ┃ ┃ ┗ 📜application.properties // 설정
┗ 📜pom.xml // 의존성
📦front
┣ 📂public/icons // 아이콘
┣ 📂src
┃ ┣ 📂api
┃ ┃ ┗ 📜index.js // 백엔드 API 호출용 axios 설정
┃ ┣ 📂assets
┃ ┃ ┣ 📂css // 기본 CSS 폴더
┃ ┃ ┗ 📂fonts // 시스템 폰트 폴더
┃ ┣ 📂components // 하위 컴포넌트
┃ ┃ ┣ 📂CoverLetter // 자기소개서 컴포넌트 폴더
┃ ┃ ┣ 📂Main // 메인화면 컴포넌트 폴더
┃ ┃ ┣ 📂mydata // 마이데이터 컴포넌트 폴더
┃ ┃ ┗ 📂Resume // 이력서 컴포넌트 폴더
┃ ┣ 📂router // 라우터
┃ ┃ ┗ 📜index.js
┃ ┣ 📂stores
┃ ┃ ┣ 📜auth.js // 회원관리용 상태관리 파일
┃ ┃ ┣ 📜counter.js // 카운터 상태관리 파일
┃ ┃ ┗ 📜resume.js // 이력서 상태관리 파일
┃ ┣ 📂views
┃ ┃ ┣ 📜AuthView.vue // 회원가입/로그인 상위 컴포넌트
┃ ┃ ┣ 📜CoverLetterBoardView.vue // 자기소개서 목록 상위 컴포넌트
┃ ┃ ┣ 📜CoverLetterView.vue // 자기소개서 작성 상위 컴포넌트
┃ ┃ ┣ 📜FAQView.vue // FAQ 상위 컴포넌트
┃ ┃ ┣ 📜LoadingView.vue // 로딩화면 상위 컴포넌트
┃ ┃ ┣ 📜MainView.vue // 메인화면 상위 컴포넌트
┃ ┃ ┣ 📜MydataView.vue // 마이데이터 상위 컴포넌트
┃ ┃ ┗ 📜ResumeView.vue // 이력서 상위 컴포넌트
┃ ┣ 📜App.vue
┃ ┗ 📜main.js
┗ 📜index.html
- JAVA (JDK 17)
- Spring Boot 3.3.x (maven)
- JavaScript
- Vue.js 2.1.10 (ES6)
- CSS3
- HTML5
- Tailwind CSS
- Axios 1.7.9
- Pinia 2.3.0
- MySQL 8.0.40
- 사람인 API
- Window 10, 11/ Mac M2
- STS4 4.24.0 / 4.26.0
- VisualStudioCode
- Postman
- Git, GitHub
- Google Sheet, Discord
$ git clone https://github.com/doh3e/piccup.git
// Front
$ cd front
$ npm install
$ npm run dev
// Back
//// DB password 지정
//// username : ssafy
//// password : ssafy
$ Run As - Spring Boot App
⛓ 상세 API 명세서 확인
1. 회원가입
Request
Request Body
메서드 | 요청 url |
POST | http://localhost:8080/api/v1/user/signup |
{ "email": "[email protected]", "password": "password1234", "nickname": "별명1", "profileImg": "", "mobilePhone": "010-1234-5678" }Response
회원가입 성공
2. 로그인, 로그아웃
Login Request
Login Request Body
Logout Request
Logout Request Header
Logout Response
메서드 | 요청 url |
POST | http://localhost:8080/api/v1/user/login |
{ "email": "[email protected]", "password": "password1234" }Login Response
{ "refresh-token": "[refresh token]", "access-token": "[access token]" }Login Response Elements
필드 | 타입 | 설명 |
refresh-token | String | refresh 토큰 이후 header에 작성 필요 |
access-token | String | access 토큰 |
Logout Request
메서드 | 요청 url |
POST | http://localhost:8080/api/v1/user/logout |
파라미터 | 타입 | 필수 여부 | 내용 | 설명 |
Authorization | String | 필수 | Bearer [refresh-tokenn] | 유저 인증 키 |
로그아웃 되었습니다.
3. 이력서
3-1. 조회
Request메서드 | 요청 url |
GET | http://localhost:8080/api/v1/resume |
파라미터 | 타입 | 필수 여부 | 내용 | 설명 |
Authorization | String | 필수 | Bearer [refresh-tokenn] | 유저 인증 키 |
Response 예시
{ "resume": { "resumeId": 22, "userId": 1, "updatedAt": "2024-12-28 22:51:33" }, "personalInfo": { "infoId": 19, "resumeId": 22, "username": "Chris Park", "birthDate": "1988-04-10", "gender": "남", "email": "[email protected]", "homePhone": "02-2222-4444", "mobilePhone": "010-2222-4444", "address": "서울시 종로구", "addressDetail": "505동 606호", "postalCode": 45678, "profileImgPath": "c9e0156b-043c-4d3d-bce5-366ace4bf138.jpg", "profileImgName": "민지.jpg", "degree": "학사", "hobby": "등산", "specialty": "프로젝트 관리", "file": null }, "projects": [ { "projectId": 22, "resumeId": 22, "projectName": "E-learning Platform", "role": "Backend Developer", "startDate": "2022-01-01", "endDate": "2022-06-30", "description": "Developed a backend system for an e-learning platform using Node.js and MongoDB." } ], "languages": [ { "languageId": 30, "resumeId": 22, "languageName": "Russian", "testName": "TORFL", "score": "B2", "certCode": "RUS89012", "obtainedAt": "2020-05-30" } ], "preference": { "preId": 22, "resumeId": 22, "disLevel": "1급", "military": "군필", "protected": true, "disabled": true, "veteran": true, "agree": true, "isVeteran": true, "isProtected": true, "isDisabled": true, "isAgree": true }, "portfolios": [ { "portId": 22, "resumeId": 22, "portUrl": "https://github.com/user5/portfolio11001" } ], "trainings": [ { "trainingId": 22, "resumeId": 22, "trainingName": "Leadership Training Program", "institution": "Global Management Institute", "startDate": "2022-07-01", "endDate": "2022-07-15", "description": "Focused on developing leadership and project management skills." } ], "workExperiences": [ { "expId": 22, "resumeId": 22, "company": "LogiTech", "department": "Logistics", "startDate": "2016-07-07", "endDate": "2019-06-30", "position": "Logistics Coordinator", "salary": 55000, "description": "Coordinated supply chain activities.", "current": false, "isCurrent": false } ], "educations": [ { "eduId": 21, "resumeId": 22, "schoolType": "대학교(4년)", "schoolName": "한국외국어대학교", "major": "국제관계학", "startDate": "2014-03-01", "endDate": "2018-02-28", "status": "졸업", "gpa": 3.6, "majorGpa": 3.7, "gpaScale": 4.5, "qeYear": "2018", "transfer": false, "qe": true, "isTransfer": false, "isQe": true } ], "certifications": [ { "certId": 22, "resumeId": 22, "certName": "JLPT N1", "publisher": "일본국제교육지원협회", "obtainedDate": "2020-08-10", "certCode": "JLPT-N1-2020" } ], "papers": [ { "paperId": 22, "resumeId": 22, "paperTitle": "AI Ethics and Society", "journal": "Journal of Ethics in AI", "publishedDate": "2022-10-20", "description": "Explores ethical challenges in AI applications." } ], "overseas": [ { "overseaId": 22, "resumeId": 22, "country": "South Korea", "startDate": "2019-03-01", "endDate": "2019-08-31", "description": "Attended a university exchange program in South Korea." } ], "skills": [ { "skillId": 22, "resumeId": 22, "skillName": "JavaScript", "skillLevel": "전문가" } ], "activities": [ { "actId": 22, "resumeId": 22, "actType": "교내활동", "title": "교내 신문 기자", "startDate": "2018-09-01", "endDate": "2019-02-01", "description": "교내 신문 기자로 활동하며 기사 작성 및 인터뷰 경험." } ], "awards": [ { "awardId": 22, "resumeId": 22, "awardName": "Creative Solution Award", "awardOrganization": "Hackathon", "awardDate": "2021-10-05", "description": "Won first place for innovative solutions in a global hackathon." } ], "patents": [ { "patentId": 21, "resumeId": 22, "patentTitle": "Augmented Reality Glasses", "inventor": "Henry Black", "patentCode": "US7654321I", "description": "A new design for AR glasses with enhanced features." } ], "files": { "workFile": { "fileId": 0, "resumeId": 0, "updatedAt": null, "eduFileName": null, "eduFilePath": null, "portFileName": null, "portFilePath": null, "workFileName": "민지.jpg", "workFilePath": "caf07c6d-00d4-444c-98f4-23a8b5346d76.jpg" }, "portFiles": [ { "fileId": 0, "resumeId": 0, "updatedAt": null, "eduFileName": null, "eduFilePath": null, "portFileName": "민지.jpg", "portFilePath": "715e14a9-a766-4918-b764-fe6864879e21.jpg", "workFileName": null, "workFilePath": null } ], "eduFile": { "fileId": 0, "resumeId": 0, "updatedAt": null, "eduFileName": "민지.jpg", "eduFilePath": "90879cff-08af-41e6-b508-5c1fb38a48a6.jpg", "portFileName": null, "portFilePath": null, "workFileName": null, "workFilePath": null } } }
Response Elements
1. | 필드 | 타입 | 설명 |
resume | - | 이력서 정보 | |
userId | Integer | 이력서 작성한 회원 pk | |
updatedAt | TimeStamp | 이력서 작성 및 수정 날짜 | |
personalInfo | - | 개인 기본 정보 | |
infoId | Integer | 개인 기본 정보 pk | |
username | String | 이름 | |
birthDate | Date | 생년월일 | |
gender | String | 성별 | |
String | 이메일 | ||
homePhone | String | 전화번호 | |
mobilePhone | String | 휴대폰 번호 | |
address | String | 주소 | |
addressDetail | String | 상세 주소 | |
postalCode | Integer | 우편 번호 | |
profileImgPath | String | 취업사진 파일경로 | |
profileImgName | String | 취업사진 파일명 | |
degree | String | 학위 | |
hobby | String | 취미 | |
specialty | String | 특기 | |
file | String | 성적증명서, 포트폴리오 파일경로 및 파일명 |
2. | 필드 | 타입 | 설명 |
projects | - | 작성한 프로젝트 내용 | |
projectId | Integer | 프로젝트 pk | |
projectName | String | 프로젝트 이름 | |
role | String | 프로젝트에서 맡은 역할 | |
startDate | Date | 프로젝트 시작일 | |
endDate | Date | 프로젝트 종료일 | |
description | String | 프로젝트 활동 내용 |
3. | 필드 | 타입 | 설명 |
languages | - | 어학 | |
languageId | Integers | 어학 pk | |
languageName | String | 외국어 명 | |
testName | String | 시험명 | |
score | String | 점수 | |
obtainedAt | Date | 취득일자 | |
certCode | String | 자격번호 |
4. | 필드 | 타입 | 설명 |
preference | - | 취업 우대 사항 | |
preId | Integer | 취업 우대 사항 pk | |
disLevel | String | 장애 등급 | |
military | String | 병역 정보 | |
isVeteran | Boolean | 보훈대상 여부 | |
isProtected | Boolean | 취업보호대상 여부 | |
isDisabled | Boolean | 장애 여부 | |
isAgree | Boolean | 민감정보 동의 여부 |
5. | 필드 | 타입 | 설명 |
portfolios | - | 포트폴리오 | |
portId | Integers | 포트폴리오 pk | |
portUrl | String | 포트폴리오 url |
6. | 필드 | 타입 | 설명 |
trainings | - | 교육 | |
trainingId | Integer | 교육 pk | |
trainingName | String | 교육 명 | |
institution | String | 교육 기관 | |
startDate | Date | 시작 일자 | |
endDate | Date | 종료 일자 | |
description | String | 교육 내용 |
7. | 필드 | 타입 | 설명 |
workExperiences | - | 경력 | |
expId | Integer | 경력 pk | |
company | String | 회사명 | |
department | String | 부서명 | |
startDate | Date | 입사 년월일 | |
endDate | Date | 퇴사 년월일 | |
position | String | 직급/직책 | |
salary | Integer | 연봉 | |
description | String | 업무 내용 | |
isCurrent | Boolean | 재직 여부 |
8. | 필드 | 타입 | 설명 |
educatioins | - | 교육 | |
eduId | Integer | 교육 pk | |
schoolType | String | 학교 구분 | |
schoolName | String | 학교명 | |
major | String | 전공명 | |
startDate | Date | 입학 년월일 | |
endDate | Date | 졸업 년월일 | |
status | String | 졸업 상태 | |
gpa | Decimal | 총 학점 | |
majorGpa | Decimal | 전공 학점 | |
gpaScale | Decimal | 총점 기준 | |
isQe | Boolean | 검정고시 여부 | |
qeYear | Year | 검정고시 합격 년도 | |
isTransfer | Boolean | 편입 여부 |
9. | 필드 | 타입 | 설명 |
certificatioins | - | 자격증 | |
certId | Integer | 자격증 pk | |
certName | String | 자격증명 | |
publisher | String | 발행처 | |
obtainedDate | Date | 취득일 | |
certCode | String | 자격번호 |
10. | 필드 | 타입 | 설명 |
papers | - | 논문 | |
paperId | Integers | 논문 pk | |
paperTitle | String | 논문명 | |
journal | String | 저널명 | |
publishedDate | Date | 출판 년월일 | |
description | String | 논문 설명 |
11. | 필드 | 타입 | 설명 |
overseas | - | 해외 경험 | |
overseaId | Integers | 해외 경험 pk | |
country | String | 국가명 | |
startDate | Date | 시작 년월일 | |
endDate | Date | 종료 년월일 | |
description | String | 활동 내용 |
12. | 필드 | 타입 | 설명 |
skills | - | 스킬 | |
skillId | Integers | 스킬 pk | |
skillName | String | 스킬명 | |
skillLevel | String | 숙련도 | |
activities | - | 대내외 활동 | |
actId | Integer | 대내외 활동 pk | |
actType | String | 활동 유형 | |
title | String | 기관명/활동명 | |
startDate | Date | 시작 년월일 | |
endDate | Date | 종료 년월일 | |
description | String | 활동 내용 |
13. | 필드 | 타입 | 설명 |
awards | - | 수상 내역 | |
awardId | Integer | 수상 내역 pk | |
awardName | String | 수상명 | |
awardOrganization | String | 수여기관 | |
awardDate | Date | 수상 년월일 | |
description | String | 수여 내용 |
14. | 필드 | 타입 | 설명 |
patents | - | 특허 | |
patentId | Integer | 특허 pk | |
patentTitle | String | 특허명 | |
inventor | String | 발명자 | |
patentCode | String | 특허번호 | |
description | String | 설명 |
15. | 필드 | 타입 | 설명 |
fileId | Integer | 파일 pk | |
workFile | - | 경력증명서 파일 | |
workFileName | String | 경력증명서 파일명 | |
workFilePath | String | 성적증명서 파일경로 | |
portFiles | - | 포트폴리오 파일 | |
portFileName | String | 포트폴리오 파일명 | |
portFilePath | String | 포트폴리오 파일경로 | |
eduFile | - | 성적증명서 파일 | |
eduFileName | String | 성적증명서 파일명 | |
eduFilePath | String | 성적증명서 파일경로 | |
createdAt | Date | 생성 일자 | |
updatedAt | Date | 수정 일자 |
3-2. 이력서 생성
Request메서드 | 요청 url |
POST | http://localhost:8080/api/v1/resume |
파라미터 | 타입 | 필수 여부 | 내용 | 설명 |
Authorization | String | 필수 | Bearer [refresh-tokenn] | 유저 인증 키 |
Request Body
{ "personalInfo": { "username": "Chris Park", "birthDate": "1988-04-10", "gender": "남", "email": "[email protected]", "homePhone": "02-2222-4444", "mobilePhone": "010-2222-4444", "address": "서울시 종로구", "addressDetail": "505동 606호", "postalCode": 45678, "degree": "학사", "hobby": "등산", "specialty": "프로젝트 관리" }, "projects": [ { "projectName": "E-learning Platform", "role": "Backend Developer", "startDate": "2022-01-01", "endDate": "2022-06-30", "description": "Developed a backend system for an e-learning platform using Node.js and MongoDB." } ], "languages": [ { "languageName": "Russian", "testName": "TORFL", "score": "B2", "certCode": "RUS89012", "obtainedAt": "2020-05-30" } ], "preference": { "disLevel": "1급", "military": "군필", "protected": true, "disabled": true, "veteran": true, "agree": true, "isVeteran": true, "isProtected": true, "isDisabled": true, "isAgree": true }, "portfolios": [ { "portUrl": "https://github.com/user5/portfolio11001" } ], "trainings": [ { "trainingName": "Leadership Training Program", "institution": "Global Management Institute", "startDate": "2022-07-01", "endDate": "2022-07-15", "description": "Focused on developing leadership and project management skills." } ], "workExperiences": [ { "company": "LogiTech", "department": "Logistics", "startDate": "2016-07-07", "endDate": "2019-06-30", "position": "Logistics Coordinator", "salary": 55000, "description": "Coordinated supply chain activities.", "current": false, "isCurrent": false } ], "educations": [ { "schoolType": "대학교(4년)", "schoolName": "한국외국어대학교", "major": "국제관계학", "startDate": "2014-03-01", "endDate": "2018-02-28", "status": "졸업", "gpa": 3.6, "majorGpa": 3.7, "gpaScale": 4.5, "qeYear": "2018", "transfer": false, "qe": true, "isTransfer": false, "isQe": true } ], "certifications": [ { "certName": "JLPT N1", "publisher": "일본국제교육지원협회", "obtainedDate": "2020-08-10", "certCode": "JLPT-N1-2020" } ], "papers": [ { "paperTitle": "AI Ethics and Society", "journal": "Journal of Ethics in AI", "publishedDate": "2022-10-20", "description": "Explores ethical challenges in AI applications." } ], "overseas": [ { "country": "South Korea", "startDate": "2019-03-01", "endDate": "2019-08-31", "description": "Attended a university exchange program in South Korea." } ], "skills": [ { "skillName": "JavaScript", "skillLevel": "전문가" } ], "activities": [ { "actType": "교내활동", "title": "교내 신문 기자", "startDate": "2018-09-01", "endDate": "2019-02-01", "description": "교내 신문 기자로 활동하며 기사 작성 및 인터뷰 경험." } ], "awards": [ { "awardName": "Creative Solution Award", "awardOrganization": "Hackathon", "awardDate": "2021-10-05", "description": "Won first place for innovative solutions in a global hackathon." } ], "patents": [ { "patentTitle": "Augmented Reality Glasses", "inventor": "Henry Black", "patentCode": "US7654321I", "description": "A new design for AR glasses with enhanced features." } ] }
{ "message": "이력서 생성 성공하였습니다." }
3-3. 이력서 파일 등록
Request메서드 | 요청 url |
POST | http://localhost:8080/api/v1/resume/files |
파라미터 | 타입 | 필수 여부 | 내용 | 설명 |
Authorization | String | 필수 | Bearer [refresh-tokenn] | 유저 인증 키 |
Key | 타입 | Value | 설명 |
personalFile | File | {{파일 업로드}} | 파일 업로드 |
portFile | File | {{포트폴리오 파일 업로드}} | 포트폴리오 파일 업로드 |
eduFile | File | {{성적증명서 파일 업로드}} | 성적증명서 파일 업로드 |
workFile | File | {{경력증명서 파일 업로드}} | 경력증명서 파일 업로드 |
{ "message": "이력서 내 파일 저장 성공하였습니다." }
3-4. 이력서 삭제
Request메서드 | 요청 url |
DELETE | http://localhost:8080/api/v1/resume |
파라미터 | 타입 | 필수 여부 | 내용 | 설명 |
Authorization | String | 필수 | Bearer [refresh-tokenn] | 유저 인증 키 |
{ "message": "이력서 삭제 성공하였습니다." }
4. 자기소개서
5. 내 취준데이터
- 이메일을 아이디로 회원가입합니다.
- 프로필 사진과 전화번호를 선택적으로 기입할 수 있습니다.
- 회원가입 시 등록한 이메일과 비밀번호로 로그인합니다.
|
|
|
|
|
- 서비스 공지사항과 문의 게시판을 제공합니다.
- 문의 사항을 조회하고 직접 작성하여 문의를 남길 수 있습니다.
- 남긴 문의 사항에 대한 답변을 받을 수 있습니다.