Backend
home

2025-6-19 (목)

생성일
2025/06/18 23:14
태그
취업특강
Docker
MySQL
WebSocket
Redis

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
예시:
내가 지원하고자 하는 회사의 채용 공고야.
이 채용 공고를 기준으로 내 이력서를 작성할거야.
업무 역량, 기술 스택, 프로젝트 경험 사례로 정리해줘.

자기소개 및 기술스택 문장 작성 실습

자기소개
클린 코드를 중시하며 애자일 업무 문화 경험을 보유한 백엔드 개발자 하민성입니다.
기술스택:
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
복사
주의사항
nginx.conf 에 설정한 upstream spring_backend를 통해 localhost:80 에 접속하여 새로고침을 하면 서버명이 바뀌는 걸 확인할 수 있다.
http://localhost:80 에 접속하여 확인 (서로 다른 브라우저를 열어서 통신확인)