1. 취업 특강
개발자 채용 현황과 취업 준비
•
이력서
◦
개발자가 되려는 이유
◦
나의 강점와 약점
◦
내가 가진 역량(전문성)과 부족한 역량
◦
내가 하고 싶은 직무와 분야
◦
어떤 개발자가 되고 싶은지
◦
앞으로 10년 후의 나의 모습
•
나를 알아보는 방법: 다양한 검사 활용
•
회사/취업 시장에서 필요한 역량
◦
채용 사이트에서 확인
•
회사/취업 시장에서 원하는 인재상
◦
채용과 관련된 기사, 회사 사이트
•
회사의 BM, 해결하고자 하는 문제, 이슈
•
채용 공고
◦
기업 홈페이지/관련 기사
◦
현업자 인터뷰
•
개발자 채용 시장
◦
백엔드: 26.5%
◦
프론트엔드: 22.4%
◦
풀스택: 10.3%
•
채용 트렌드
◦
조직문화 적합성 검증(인성, 협력, 책임감)
◦
직무중심채용(실무형 인재)
◦
면접관 역량 강화(교육, 자격제도)
◦
경력중심 수시채용
◦
경력직을 원하는 채용 시장
▪
바로 성과를 낼 수 있는 인력 필요
▪
기술이 복잡해지면서 어려운 문제 해결을 위한 인력 선호
◦
신규 채용 시 가장 중요한 평가 요소 - 직무 관련 업무 경험
▪
실제 업무하듯이 프로젝트 진행
•
문서 작성: WBS, 회의록, 간트차트 등
•
개발 프로세스: 애자일
•
회고: 배웠던 점, 개선점
•
보통의 취업 준비 (대부분에 해당)
◦
공부(이론 및 실습)
◦
프로젝트 진행
◦
이력서 및 포트폴리오 준비
◦
면접 준비
•
전략적인 취업 준비
◦
직무 분석을 통한 필요한 역량 진단
▪
공부(이론 및 실습) & 프로젝트 진행
▪
면접 준비 & 이력서 및 포트폴리오 준비
▪
Github Readme 관리 + 코드 관리
▪
가고 싶은 직무와 희망 분야/회사를 결정
▪
나와 채용 공고 분석 ⇒ 취업을 위한 구체적이고 실현 가능한 목표를 설정
•
예시
◦
원티드 취업성공스토리
◦
예시 - 취업활동 개요
▪
기간
▪
채널
▪
입사지원 기업
▪
구직활동 요약
•
1주차: 직무 구체화 시기
•
2추차: 구직서류 보완
•
3주차: 입사지원 시작
•
4~5주차: 인터뷰 준비
•
7주차: 역량-채용시장 적합 여부 확인
•
8주차
•
10주차
▪
취업활동현황
•
표, 그래프로 데이터화, 시각화하여 분석
•
서류준비 → 직무검증 → 인터뷰 준비 → 역량-채용시장 검증 → 취업
•
결과
•
소개 사례 - 생각보다 인터뷰에서 포트폴리오를 보지 않음 (참고)
•
원티드랩 입사 프로세스 확인 (참고)
▪
취업 활동 계획서 작성
•
나와 채용 시장 치열하게 연구
•
최대한 (간접) 직무 경험 많이 쌓기
서류 작성법: 이력서 & 포트폴리오
•
이력서
◦
채용의 첫 관문
◦
우선순위로 치면 이력서 준비가 우선이다.
◦
1페이지에서 2페이지가 제일 좋다.
◦
내 이력서는 수많은 서류 중 하나다.
◦
인사 담당자: 수십, 백 건의 이력서를 검토한다.
◦
면접관: 업무 + 팀 관리 + 이력서 검토
◦
30초 안에 중요 정보가 가독성 좋게 읽혀야 한다.
◦
인사 담당자/면접관이 알고 싶은 정보
▪
개발 기술의 숙련도
▪
개발자로서의 전문적인 경험
▪
교육 방법
▪
문제 해결 방법
▪
소프트 스킬
▪
업무 스타일 & 회사 문화 적합성
◦
이력서의 구성
▪
기본 템플릿이 있긴 하지만 그대로 작성하지 않아도 된다.
•
기술 스택
•
업무 경험
•
프로젝트
•
학력
•
교육
•
자격증
•
수상내역
▪
이력서 초안을 미리 만들어 놓고 차근차근 진행
◦
이력서 템플릿
▪
나를 잘 표현할 수 있는 것을 사용
•
그대로 사용하지 말고, 수정
•
이력서 샘플을 많이 보고 나와 맞는 것을 사용
▪
노션 이력서나 표 형식의 템플릿은 사용하지 않는 것을 추천
▪
지원 회사에 따라 규격화된 이력서 템플릿이 존재할 수도 있음
◦
이름 & 나를 표현하는 한 문장
▪
나의 강점과 역량이 잘 드러날 수 있는 한 문장
•
~~하는 프론트엔드 개발자
•
예비, 초급이란 단어는 쓰지 않음
•
예시
◦
열정으로 기술을 탐구하고 아이디어를 현실로 만드는 프론트엔드 개발자
◦
트렌드 모니터링 습관, 코딩은 결벽적 미니멀리즘, 함께 성장하는 팀웍
◦
사진
▪
나의 강점이 잘 드러날 수 있는 자연스러운 사진
▪
되도록 얼굴이 잘 보이는 사진이 좋음
•
정면 샷
▪
나를 인식시키는 데 도움을 주는 사진이 좋음
•
코딩 실력에 강점이 있다면 코딩하는 사진
•
발표 또는 토론하는 사진
◦
기본 정보
▪
이메일, Github, 블로그, 기타 SNS(선택) 등
▪
블로그는 관리하지 않으면 빼는 것이 좋음
◦
자기 소개
▪
이력서 전체 내용을 작성, 정리한 후에 적는 것도 좋음
▪
나의 강점, 역량, 경험, 성과, 성격, 열정 등을 잘 표현하는 3-5개의 문장
•
과거 경험, 기술 능력, 업무 방식: 성과 포함
•
채용 요건과 일치하는 핵심 역량/경험에 해당하는 키워드 포함
•
구체적인 직무 목표와 업무 성격
•
성격 또는 태도(열정): 소프트 스킬 강조
•
지원 동기 및 지원하는 회사에 대한 관심 표현
•
자기 소개 예시
◦
지속적으로 성장하는 개발자
◦
효율성을 극대화 하는 개발자
◦
협업을 중시하는 개발자
◦
기술 스택
▪
카테고리별로 정리하는 것이 좋음
▪
해당 기술 스택으로 어떤 것을 할 수 있는지 적는 것이 좋음
▪
1~2 번 사용한 것이나 배웠던 것은 적지 않는 것이 좋음
•
잘 활용할 수 있는 기술 스택 위주로 적음
▪
기술 스택 수준을 적지 않아도 됨
•
상/중/하
▪
만약 기술 스택이 부족하다면 러닝 커브를 강조
•
근거 필요: 블로그, Github 기록 등
◦
역량
▪
키워드별로 정리
•
개발 파트 매니징
•
포트폴리오
◦
포트폴리오는 이력서의 부록/근거 이다.
•
좋은 이력서와 포트폴리오
◦
첫 문단에서 승부를 봐야 한다.
◦
‘나’를 잘 드러내야 한다.
◦
나의 역량이 키워드로 잘 드러나야 한다.
•
하나의 메시지를 전달해야 한다.
◦
스토리텔링으로 하나의 메시지를 전달하는 것이 좋다.
▪
‘xxx한 개발자/엔지니어’ 와 같이 1문장으로 나를 표현
•
근거와 수치가 포함되어야 한다.
◦
추상적 단어보다 구체적인 근거로 표현한다.
◦
성과와 수치 포함
▪
신규 고객 방문이 늘었다.
▪
번들 사이즈를 줄였다.
▪
성능 개선을 하여 로딩 속도를 1.4초 앞당겼다.
•
읽는 사람을 배려해야 한다.
◦
전공자가 아닌 사람도 이해하기 쉽게 작성해야 한다.
▪
어려운 단어 사용을 지양한다.
▪
함축적인 표현 대신 구체적인 표현으로 작성한다.
▪
여러 번 문장의 의미를 생각하게 하지 말도록 한다.
•
키워드와 문장을 활용한다.
◦
채용 공고에서 사용한 키워드를 이력서/포트폴리오에 활용한다.
◦
회사 홈페이지에 소개한 인재상, 컬처핏 등의 용어를 활용한다.
▪
홈페이지에서 사용한 키워드를 활용하여 작성하는 것이 좋다.
•
자기소개서를 작성할 때도 마찬가지!
•
강조하고 싶은 부분 위주 - 꼭 시간 순으로 작성할 필요는 없음
◦
강조하고 싶은 부분을 먼저 배치
▪
항목(기술 스택, 경력, 프로젝트 등)
▪
프로젝트 순서
◦
문장은 두괄식으로 작성
•
이력서/포트폴리오는 동일한 항목과 구성으로 배치
◦
항목 이름과 순서를 동일하게 배치
▪
이력서의 내용을 상세하게 적은 것이 포트폴리오!
▪
이력서의 내용을 포트폴리오에서 바로 찾을 수 있도록 한다
•
짧은 분량과 일관된 구성
◦
이력서는 1-2장 내외로 작성, 포트폴리오는 4-6장
◦
깔끔하고 일관된 구성과 정렬
▪
일관된 구성과 형식, 적당한 줄간격
▪
제목과 소제목을 적절히 사용
◦
처음엔 마크다운으로 작성
▪
Word, keynote 등으로 변경
◦
줄글이 아닌 목록(불릿 포인트)으로 작성
•
가독성이 좋은 폰트를 사용한다.
•
맞춤법 검토는 필수이다.
◦
맞춤법, 띄어 쓰기, 문장 구조, 영어 대소문자 및 한영 일관성
◦
강조할 부분에는 볼드체
◦
밑줄은 링크에만 사용
•
파일 형식
◦
PDF
◦
워드/독스, PPT로 작성하여 PDF 변환 추천
◦
노션 템플릿 비추천
직무 분석 및 프로젝트 주제 도출 방법
•
사람인, 백엔드 신입 검색
◦
채용 공고 캡처하여 AI에게 문의
▪
캡처 사례
▪
AI
•
google AI Studio
▪
예시:
내가 지원하고자 하는 회사의 채용 공고야.
이 채용 공고를 기준으로 내 이력서를 작성할거야.
업무 역량, 기술 스택, 프로젝트 경험 사례로 정리해줘.
자기소개 및 기술스택 문장 작성 실습
•
자기소개
◦
클린 코드를 중시하며 애자일 업무 문화 경험을 보유한 백엔드 개발자 하민성입니다.
•
기술스택:
◦
Backend
◦
Database
◦
Infra
◦
Tool
•
AI 툴 활용한 검토 - ChatGPT
프로젝트
•
나의 핵심 역량을 잘 드러낼 수 있는 프로젝트 위주로 작성
•
프로젝트 제목과 역할은 나의 경험과 결과를 중심으로 재구성
•
나의 역량 및 성과, 문제 해결력이 드러나야 함
•
프로젝트 전체 내용보다 나의 역량이 잘 드러나야 함
◦
내가 해결한 문제
◦
문제 정의와 문제 해결 방법
◦
‘이유’를 중심으로 작성
•
Github 링크
◦
팀 프로젝트의 저장소를 포크 후 README를 수정
◦
README에 들어가야 할 항목
▪
저장소는 누구의 것인지
▪
어떤 문제가 있고 어떻게 문제로 정의한 것인지
▪
어떤 방법으로 해결했는지
▪
성능은 이전에 비해 얼마나 개선되었는지
▪
성능 개선과 직접 연결된 커밋의 링크
◦
저장소
▪
코드, 주석, 커밋 메시지
◦
중요하지 않은 부분은 뒤로 배치하거나 삭제
▪
학력
▪
교육
▪
수상 경력
▪
자격증
▪
작성 논문 및 저서
•
STAR(Situation, Target, Action, Result) 기법
2. Spring WebSocket + STOMP 채팅 서버 + redis
WebSocket 서버 수평 확장과 redis 기반 서버 부하 분산처리
진행내용
•
application.properties
spring.application.name=backendProject
#DB명 바꾸기! backend -> backendDB
#환경 변수에 값이 있으면 환경변수의 값을 쓰고
#환경 변수에 값이 없으면 : 뒤에 있는 defualt 값을 씀
db.server=${DB_SERVER:localhost}
db.port=${DB_PORT:3307}
db.username=${DB_USER:root}
db.password=${DB_PASS:1234}
spring.data.redis.host=${REDIS_HOST}
spring.data.redis.port=6379
spring.datasource.url=jdbc:mysql://${db.server}:${db.port}/backendDB?serverTimezone=Asia/Seoul&characterEncoding=UTF-8&rewriteBatchedStatements=true
spring.datasource.username=${db.username}
spring.datasource.password=${db.password}
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
Shell
복사
•
docker-compose.yml
services:
redis:
image: redis
container_name: redis
ports:
- "6379:6379"
database:
image: mysql:8
container_name: database
ports:
- "3307:3306"
environment:
MYSQL_DATABASE: backendDB
MYSQL_ROOT_PASSWORD: ${DB_PASS}
volumes:
- ./volumes/mysql-data:/var/lib/mysql #내가 지정한 경로
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD']
timeout: 20s
retries: 10
backend1: # 서비스 이름은 컨테이너간 통신하기 위한 이름
image: backend
container_name: backend1
environment:
PROJECT_NAME: 백앤드 서버1
DB_SERVER: ${DB_SERVER}
DB_PORT: ${DB_PORT}
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
REDIS_HOST: ${REDIS_HOST}
depends_on:
- database
- redis
backend2: # 서비스 이름은 컨테이너간 통신하기 위한 이름
image: backend
container_name: backend2
environment:
PROJECT_NAME: 백앤드 서버2
DB_SERVER: ${DB_SERVER}
DB_PORT: ${DB_PORT}
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
REDIS_HOST: ${REDIS_HOST}
depends_on:
- database
- redis
backend3: # 서비스 이름은 컨테이너간 통신하기 위한 이름
image: backend
container_name: backend3
environment:
PROJECT_NAME: 백앤드 서버3
DB_SERVER: ${DB_SERVER}
DB_PORT: ${DB_PORT}
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
REDIS_HOST: ${REDIS_HOST}
depends_on:
- database
- redis
nginx:
image: nginx:1.25
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- backend1
- backend2
- backend3
YAML
복사
•
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream spring_backend {
server backend1:8080;
server backend2:8080;
server backend3:8080;
}
server {
listen 80;
location / {
proxy_pass http://spring_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws-chat {
proxy_pass http://spring_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Plain Text
복사
•
주의사항
◦
•
http://localhost:80 에 접속하여 확인 (서로 다른 브라우저를 열어서 통신확인)