-
Notifications
You must be signed in to change notification settings - Fork 3
Home
사용자는 경험을 활동 타입–활동명–상세 경험 구조의 마인드맵과 STAR 기법으로 정리하고, 핵심 역량 태그를 통해 경험을 체계적으로 관리·조회할 수 있습니다.⛓️💥📑
지금 에피소드에서 경험을 구조화하고, 필요한 순간 바로 꺼낼 수 있는 준비를 시작해 보세요. .
-
[주요 기능]({위키 링크})
- [~~~]({위키 링크})
-
[FE 기술적 도전]({위키 링크})
- [~~~]({위키 링크})
-
[BE 기술적 도전]({위키 링크})
- [~~~]({위키 링크})
-
[기술 스택]({위키 링크})
-
[프로젝트 아키텍처]({위키 링크})
-
[프로젝트 Flow]({위키 링크})
-
[팀원]({위키 링크})
~~ 작성 예정
제시된 자기소개서 문항을 통해 사용자는 답변 가능 여부를 체크합니다. 사용자는 해당 답변을 기반으로 부족한 역량이 어떤 카테고리에 속하는 역량인지 확인할 수 있습니다.
본인의 활동 카테고리를 선택하여 기본 노드를 생성하고, 그 하위에
활동 명->에피소드 계층으로 이루어진 마인드맵을 그릴 수 있도록 공간을 제공해줍니다. 각각의 에피소드에 경험을 체계적으로 정리할 수 있는 기법인 star 방식을 차용하여 정리할 수 있는 창이 있으며, 해당 에피소드가 어떤 역량에 해당하는지 라벨링 할 수 있습니다. 정리해두었던 경험에서 원하는 역량에 해당하는 경험을 빠르게 찾을 수 있도록 마인드맵 내부에서 역량 별 필터링 기능을 제공합니다.
협업했던 경험에 대해 함께 정리할 수 있도록 공유 마인드맵을 제공합니다.
| 분류 | 기술 스택 |
|---|---|
|
프론트엔드 |
|
|
백엔드 |
|
|
배포 |
|
|
협업 |
|
sequenceDiagram
autonumber
actor User as 👤 사용자
participant FE as 🖥️ Frontend
participant Kakao as 🟡 Kakao OAuth
participant BE as ⚙️ Backend (Node/Spring)
participant DB as 🗄️ Database
participant Redis as 🔴 Redis (Cache)
participant S3 as 📦 AWS S3 (File)
%% 0. 공통 인증
rect rgb(240, 248, 255)
note right of User: 0. 공통 인증 (Authentication)
User->>FE: 카카오 로그인 시도
FE->>Kakao: 인가 코드 요청
Kakao-->>FE: 인가 코드 반환
FE->>BE: 로그인 요청 (인가 코드 전달)
BE->>Kakao: 토큰 발급 요청 및 사용자 정보 조회
BE->>DB: 사용자 정보 저장/갱신
BE-->>FE: JWT 발급 (HttpOnly Cookie)
end
%% 1. 마인드맵 서비스
rect rgb(255, 250, 240)
note right of User: 1-A. 마인드맵 생성 및 초기화
FE->>BE: 마인드맵 생성 요청
BE->>DB: 메타데이터 저장 (제목, 소유자)
BE->>S3: Presigned URL(POST) 생성 요청
S3-->>BE: URL 반환
BE-->>FE: Presigned URL 전달
FE->>S3: 초기 스냅샷(Yjs) 업로드
end
rect rgb(255, 245, 230)
note right of User: 1-B. 실시간 편집 (WebSocket & Redis)
User->>FE: 마인드맵 접속 & 편집
FE->>BE: WebSocket 연결 및 Update 패킷 전송
BE->>Redis: Update 패킷 임시 저장 (List)
BE->>FE: 다른 사용자들에게 변경사항 브로드캐스트
end
rect rgb(255, 240, 230)
note right of User: 1-C. 세션 종료 및 병합 (Node.js Worker)
BE->>BE: 모든 연결 종료 감지 (Presence 0)
BE->>S3: 기존 스냅샷 다운로드
BE->>Redis: 누적된 Update 패킷 조회
BE->>BE: 데이터 병합 (Merge Snapshot)
BE->>S3: 최신 스냅샷 덮어쓰기 (업로드)
BE->>Redis: 임시 데이터 삭제
end
%% 2. 자기 역량 진단 서비스
rect rgb(245, 255, 245)
note right of User: 2-A. 직무 선택 및 문항 수령
User->>FE: 직무 선택 (로그인/설정)
FE->>BE: 해당 직무 기출 문항 요청 (15개)
BE->>DB: 직무별/역량별 문항 조회
DB-->>BE: 문항 리스트 반환
BE-->>FE: 문항 데이터 응답
User->>FE: 답변 불가 문항 체크
end
rect rgb(235, 255, 235)
note right of User: 2-B. 결과 분석
FE->>BE: "답변 불가" 문항 ID 리스트 전송
BE->>DB: 문항 ID로 상세 역량 매핑 조회
BE->>BE: 부족 역량 집계 및 분석
BE-->>FE: 부족 역량 데이터 결과 반환
end
사용자가 마인드맵을 생성하고, 여러 명이 동시에 편집하며, 최종적으로 데이터를 동기화 및 백업하는 과정입니다.
- 생성 요청: 프론트엔드가 마인드맵 생성을 요청합니다.
- DB 저장: 백엔드는 마인드맵 메타데이터(제목, 소유자 등)를 DB에 저장합니다.
- S3 통로 확보: Yjs Snapshot 저장을 위한 **S3 Presigned URL(POST)**을 생성하여 프론트에 전달합니다.
- 초기 저장: 프론트엔드는 전달받은 URL을 통해 S3에 초기 Yjs Snapshot을 업로드합니다.
- 접속: 사용자가 특정 마인드맵 ID로 웹소켓 연결을 시도합니다.
-
데이터 변경: 편집 시 발생하는
Y.Doc Update패킷이 서버로 전송됩니다. - 브로드캐스트: 서버는 같은 룸(마인드맵 ID)에 접속한 다른 클라이언트들에게 해당 패킷을 즉시 전파합니다.
- 임시 저장 (Redis): 실시간 업데이트 패킷들은 S3에 매번 쓰기에는 무거우므로, Redis에 리스트 형태로 쌓아두어 유실을 방지하고 빠른 처리를 지원합니다.
- 연결 종료 감지: 특정 마인드맵의 모든 웹소켓 연결이 끊기면(Presence 0), 백업 로직이 트리거됩니다.
- 데이터 병합: Node.js 서버는 S3의 기존 Snapshot과 Redis에 쌓인 Update 패킷들을 가져와 하나의 최신 Snapshot으로 병합합니다.
- S3 백업: 최종 병합된 데이터를 S3에 덮어쓰고, Redis 내 임시 데이터는 삭제하여 정리합니다.
사용자의 직무 기반 데이터를 활용하여 부족한 역량을 분석하고 시각화하는 과정입니다.
- 직무 설정: 로그인 OR 희망 직무 변경 시 사용자가 관심 직무를 선택합니다.
- 문항 생성/조회: 선택한 직무의 상세 역량(Sub-skills)별로 분류된 기출 문항 15개를 백엔드에서 호출합니다.
- 사용자 응답: 사용자는 각 문항에 대해 "답변 가능" 또는 "답변 불가능" 여부를 체크합니다.
- 데이터 전송: 프론트엔드는 사용자가 "대답하지 못한" 문항들의 ID 또는 리스트를 백엔드로 전송합니다.
- 역량 매핑: 백엔드는 DB를 조회하여 해당 문항들이 어떤 상세 역량(예: "리더십", "창의성")에 속하는지 매핑합니다.
- 결과 도출: 대답 못한 문항이 많은 순서대로 사용자의 부족 역량 데이터를 가공하여 응답합니다. (이후 마인드맵 노드 생성 등에 활용 가능)
erDiagram
OCCUPATION ||--o{ JOB : has
JOB ||--o{ USERS : assigned
USERS ||--o{ DIAGNOSIS_RESULT : creates
JOB ||--o{ DIAGNOSIS_RESULT : target
COMPETENCY_TYPE ||--o{ QUESTION : categorizes
QUESTION ||--o{ DIAGNOSIS_WEAKNESS : referenced
DIAGNOSIS_RESULT ||--o{ DIAGNOSIS_WEAKNESS : contains
USERS ||--o{ EPISODE : writes
MINDMAP ||--o{ EPISODE : contains
COMPETENCY_TYPE ||--o{ EPISODE : tagged
USERS ||--o{ MINDMAP_PARTICIPANT : participates
MINDMAP ||--o{ MINDMAP_PARTICIPANT : shared_with
QUESTION ||--o{ QUESTION_JOB_MAPPING : mapped
JOB ||--o{ QUESTION_JOB_MAPPING : mapped
USERS ||--|| REFRESH_TOKEN : owns
OCCUPATION {
int id PK
varchar name
}
JOB {
int id PK
varchar name
int occupation_id FK
}
USERS {
bigint kakao_id PK
int job_id FK
varchar nickname
boolean has_watched_feature_guide
}
DIAGNOSIS_RESULT {
int id PK
bigint user_id FK
int job_id FK
datetime created_at
}
DIAGNOSIS_WEAKNESS {
int id PK
int diagnosis_result_id FK
int question_id FK
}
COMPETENCY_TYPE {
int id PK
varchar type_name
enum category
}
QUESTION {
int id PK
int competency_type_id FK
varchar content
varchar guidance_message
}
QUESTION_JOB_MAPPING {
int id PK
int question_id FK
int job_id FK
}
MINDMAP {
binary id PK
datetime created_at
datetime updated_at
boolean is_shared
varchar name
}
EPISODE {
int node_id PK
bigint user_id PK, FK
binary mindmap_id FK
int competency_type_id FK
varchar situation
varchar task
varchar action
varchar result
varchar content
datetime created_at
}
MINDMAP_PARTICIPANT {
int id PK
bigint user_id FK
binary mindmap_id FK
boolean is_favorite
}
REFRESH_TOKEN {
bigint id PK
bigint user_id FK
varchar token_hash
datetime expires_at
datetime created_at
datetime updated_at
}
기술적 도전 목적
이미지
- 설명
- 설명
이미지
- 설명
- 설명
[이미지]
- 설명
- 설명
이미지
- 설명
- 설명
| 기획 · 디자인 | 개발 | ||||||
| 김강민 | 강민서 | 김지윤 | 이주연 | 김현지 | 김우주 | 박세현 | 박은서 |
| 기획 | 디자인 | 디자인 | 디자인 | BE | BE | FE | FE |