수학을 좋아하시나요?
딥러닝에 관심이 많으시나요?
협업이 두렵지 않으시나요?
책임감이 강하시나요?
그렇다면 백엔드 개발자는 어떠세요?
직무 커리어를 쌓아 나가기 위해 어떤 경험을 쌓아야 할 지 궁금할 때,
대외활동, 인턴, 취업 준비를 위해 무엇을 해야 할 지 고민될 때,
자기소개서, 면접에서 어떤 역량을 강조해야 하는지 궁금할 때,
레디미의 <채용공고 톺아보기>를 찾아주세요!
레디미가 원티드에 등록된 모든 채용 공고를 분석해드리니까요.
오늘은 백엔드 개발 직무에 대해 함께 알아보려 해요.
평소 컴퓨터 동작 원리에 관심이 많았다면
오늘 준비한 콘텐츠, 절대 놓치지 마세요!
백엔드는 웹사이트나 웹 애플리케이션 또는 모바일 솔루션의 프로세스와 관련된
서버 측(Server-side)과 데이터베이스를 관리해 주는 테크놀로지예요.
눈에 직접 보이는 영역인 프론트엔드와 달리,
백엔드는 눈에 보이지 않는 서버에서 작용하는 기술을 다뤄요.
또한 백엔드 개발이란 용어는 웹 개발분야에서 프론트엔드 개발의 상대적인 개념으로,
서버 개발과 거의 같은 의미로 사용되고 있어요.
백엔드는 소프트웨어 개발 프로세스에서 서버 측 개발 분야예요.
데이터를 저장하고 관리하며, 웹사이트의 클라이언트 측(Client-side)에서
여러 기능들이 매끄럽게 작동할 수 있게 해줘요.
백엔드는 사용자들이 직접 보거나 상호작용할 수 없는 영역으로,
프론트엔드에 있는 사용자들이 취하는 행동들을 처리해요.
사용자들은 백엔드에 간접적으로 액세스한다고 볼 수 있어요.
백엔드 개발에는 사용자 인터페이스가 없는 시스템 컴포넌트 작업,
API 작성, 라이브러리 생성, 데이터베이스 통합 등 다양한 활동들이 포함되어 있습니다.
쉽게 말해서 프론트엔드는 주로 사람들이 화면을 통해서
보고 사용하는 웹 브라우저의 페이지를 만드는 일을 하고,
백엔드는 화면에서 요청한 일을 처리하는 부분을 만든다고 볼 수 있어요.
이러한 프론트엔드와 백엔드 개발을 모두 할 수 있는 사람은 풀스택 개발자라고 부릅니다.
백엔드는 프론트엔드에 비해 프로그래밍 언어 선택의 폭이 넓다고 해요.
어떠한 언어라도 개발이 가능한 편이기 때문에 언어에 크게 좌우되는 편은 아닌데요.
그렇기 때문에 백엔드에서는 해당 언어가 가진 특성과
작업물 및 작업 방향과의 일치성 등을 고려하여 선택하는 것이 좋다고 합니다.
PHP는 개발을 위해서 고안된 서버 측 스크립트 언어이자
수많은 웹 시스템의 기반이 되는 언어로,
브라우저가 서버에 웹 페이지를 요청하여 서버가 그 웹 페이지를 보낼 때 필요한 언어입니다.
수신한 HTML 문서를 해석하여 화면에 띄울 때 필요한 게 JavaScript였다면,
PHP는 브라우저에서 요청한 웹 페이지
즉 서버에 있는 데이터가 사용자와 상호작용하는 웹 어플리케이션으로 진화하여
브라우저로 넘어가도록 처리하는 데 필요해요.
PHP로 작성된 코드를 HTML 코드 안에 추가하면
웹 서버는 해당 코드를 해석하여 자동으로 HTML 문서를 생성하기에
동적으로 빠르게 HTML 문서를 만들 수 있어요.
이처럼 PHP는 HTML을 프로그래밍적으로 생성해 주고,
데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현하는
서버와 브라우저 간의 다리 역할을 수행합니다.
노드는 크로스 플랫폼의 오픈소스 런타임(run time) 환경으로써,
브라우저의 외부에서 자바스크립트 코드를 실행할 수 있게 만들어요.
노드가 개발됨으로써 자바스크립트가 웹 브라우저를 벗어나
모바일이나 웹 애플리케이션용 API와 같은 백엔드 서비스 개발에도 사용되는
범용 프로그래밍 언어가 될 수 있었는데요.
노드는 내장 HTTP 서버 라이브러리를 포함하고 있어
웹 서버에서 별도의 소프트웨어 없이 동작하는 것이 가능해요.
확장성이 뛰어나고 반응속도가 빠르며 많은 양의 요청도 처리 가능하기에
웹서버의 동작을 더욱 효과적으로 통제할 수 있지만,
노드는 언어가 아닌 소프트웨어 플랫폼이기 때문에
그 자체로는 아무것도 하지 못하고 서버를 직접 구현해야 한다는 특징이 있습니다.
자바스크립트는 백엔드와 프론트엔드 모두에서 사용할 수 있어요.
웹은 물론 모바일 하이브리드 앱, 서버 사이드(Node.js), 데스크톱, 머신러닝(TensorFlow.js) 등에서 다양하게 활용되며 크로스 플랫폼에서 중요한 역할을 하는
세계에서 가장 인기 있는 언어예요.
C++은 C언어의 문법과 기능을 모두 사용할 수 있는 C언어 기반 프로그래밍 언어로,
C언어에 여러 가지 기능을 추가한 버전에 가까워요.
객체지향과 일반화 프로그래밍을 사실상 거의 주된 패턴으로 사용하기 때문에
객체지향 프로그래밍 언어라고 알려져 있기도 하지만
사실은 객체지향은 물론 절차지향도 가능한 멀티 패러다임 언어랍니다.
요즘에도 경쟁력을 갖추기 위해서 가장 널리 사용되는 프로그래밍 언어로서
백엔드 언어로도 많은 인기를 얻고 있습니다.
자바는 가장 인기 있는 프로그래밍 언어 중 하나이자 객체지향 프로그래밍 언어로
플랫폼 종속성이 낮다는 특징을 지녀요.
운영체제에 Java Virtual Machine(JVM)을 설치하면
Java 기반 프로그램은 어떤 환경에서도 완벽하게 똑같이 동작해요.
이는 가상머신이 각각의 운영체제에 맞춰서 돌아갈 수 있도록 제작되었기 때문이라고 합니다.
자바스크립트는 HTML과 CSS가 존재한다는 가정하에 실행되지만,
자바는 특정 플랫폼에 의존하지 않는 독립성을 갖추고 있어요.
생산성과 안정성, 기기 호환성이 높고 소스코드 가독성이 좋아
개발자 커뮤니티에서 널리 사용되고 있습니다.
파이썬은 개발자들이 시스템을 효율적으로 통합하고, 빠르게 작업할 수 있게 해 주는
최고의 프로그래밍 언어로서 딥러닝, 데이터 사이언스, 인공지능 분야에서 많이 사용돼요.
파이썬은 문법이 매우 배우기 쉽고 응용력이 좋은 장점을 지녔어요.
언어 자체가 64bit를 넘어가고 허수를 기본 지원하며
소수점과 유리수를 정밀하게 다룰 수 있는 등
과학과 공학 분야에서 필요한 여러 기능을 기본적으로 제공하죠.
게다가 접근성이 좋고 문법이 통일되어 있어서
결과물에 대한 피드백이 활발하게 이루어지고, 생산성 향상에도 큰 도움을 주고 있어요.
현업에서도 사용하기 쉽고 입문하기도 쉬워 교육과 실무 현장 모두에서 인기 있는 언어입니다.
백엔드에서는 다음과 같은 테크놀로지가 주로 사용되어요.
익스프레스는 웹 애플리케이션 구축에 사용되는 노드(Node.js)용 무료 오픈소스 프레임워크예요. MIT의 라이선스에 의해 공개되고 있으며, API를 만들고 웹 애플리케이션을 구축할 수 있게 해줘요.
라라벨은 오픈소스인 PHP 웹 프레임워크로,
캐싱(caching), 라우팅(routing), 인증(authentication), 세션(session)과 같은
대부분의 웹 개발에서 사용되는 공통 작업들을 심플하게 만들어줍니다.
또한, 어플의 기능에 영향을 주지 않으면서 프로그래머에게 개발 프로세스를 간단하게 해주죠.
C#은 유연하면서도 강력한 프로그래밍 언어로,
다양한 종류의 애플리케이션을 만드는 데 사용될 수 있어요.
또한 개발 도구, 웹사이트, 컴파일러와 같은 다양한 프로젝트에 사용되고 있으며,
C#은 객체지향(object-oriented) 프로그래밍 언어를 만드는 데 도움이 됩니다.
백엔드 개발자는 웹, 앱 서비스 기반 제품 군들의 Backend 개발 작업을 진행하며
자사 플랫폼을 유지 보수하며 Open API를 개발하고,
그밖에도 서비스 백엔드 인프라와 아키텍쳐 설계 및 개발의 업무를 맡고 있어요.
또한 백엔드 개발자의 세부 업무를 정리하자면 다음과 같아요.
- 자사 서비스 관련 Kotlin Spring 기반 Restful API 백엔드 서버 개발 및 유지 보수
- 클라우드 환경(GCP, AWS, Azure)에서의 서비스 설계 및 개발
- 클라우드 환경 기반의 백엔드 구축 및 운영
- StanWorld Database(AWS RDS, Redis 등) 운영, 이를 기반으로 한 대시보드 개발 및 기술 지원
- 백오피스 개발 관리
- Unit Test 와 BDD 기반으로 안정성있는 어플리케이션을 지향
- 크롤링 중심의 웹 서비스 백엔드 개발
- 클라이언트 및 내부 어드민 화면과 기능 개발
- Java + Spring Framework, PostgreSQL, AWS 등을 이용한 RESTful API 개발/운영
- LMS 서비스 설계 및 개발
- 최적의 상태를 유지하기 위해 최적화 및 모니터링, 트러블슈팅 등 개선 업무
- 운영 중인 인프라 관리, 유지보수 및 디버깅
- 쿠버네티스 환경(AWS EKS)에서 마이크로서비스 운영과 모니터링
- 채팅 / WebRTC / Notification 등 컨텐츠 딜리버리 분야의 핵심 기능을 담당하는 Microservice 개발
- SaaS / PaaS 형태의 Microservice 에 대한 사용량 계측 및 모니터링 시스템 개발
- RabbitMQ, Kafka 등 MQ를 활용한 Event Sourcing 시스템 구축
- 실시간으로 협업 가능한 WebSocket 기반 코드 에디터 개발 및 유지 보수
- Django Admin 개선 및 신규 기능 개발
- Jenkins, Docker, AWS 기반 서비스 배포 및 운영
- NodeJS 기반으로 백엔드 비지니스 로직 개발/배포
- 데이터 성격에 맞게 PostgreSQL과 Redis에 데이터를 적재하고 이용하는 코드를 작성
- NewRelic, CloudWatch 등을 통해 시스템에서 발생하는 모든 이슈 사항에 대해서 추적하고 해결
- 팀 내외의 확장성 있는 API 설계 및 개발
- Spring boot, Python-Django를 사용한 API 개발
- 사내 광고 플랫폼에 API를 제공하고 외부 광고 플랫폼이 제공하는 기능을 연동하는 개발
- NoCode 툴을 이용한 어드민 구성과 API 연동
- 서비스 목적에 맞는 데이터 스토어 구축 및 API 제공
- 메인넷 별 업데이트와 각종 API 등 개발 및 관리
- MSA 기반의 Back-end RESTful API 개발
- REST API 개발 및 유지 보수
- 클라우드 서비스 Open API 연동 설계 및 개발
• 다양한 Cloud Service API 활용 서비스 개발
• OAuth 2.0, Google Drive API, MS Teams API 등
- API 서버 성능 개선 (로그 기반 쿼리 최적화, 코드 리펙토링, 아키텍쳐 개선 등)
- 다양한 플랫폼과의 연동 시스템 개발 및 운영
- Server Rendering과 Client Rendering을 위한 API를 설계하고 개발
- 유저 오피스, 백 오피스 서버 개발
- 데이터베이스 서버 개발 및 운영
- CRUD 기반으로 모바일 서비스를 위한 웹 서버 개발 및 운영
- 웹/앱 서비스 서버 개발 (AWS / Node.js 기반)
- 클라우드 인프라 및 서버 구성
- 대규모 서비스의 서버 운영 및 개발
- MongoDB, MySQL 운영과 관리
- 서비스의 백엔드 서버 개발 (django)
- Python, Django, Django Rest Framework를 사용하여 API 서버 개선
- 수집된 데이터를 처리하기 위한 워커 개발
• 수집된 데이터를 가지고 푸시, WEB HOOK, 공지 팝업등의 액션을 위한 서버 및 워커 개발
- SaaS 기반 신규 서비스 설계 및 개발
- 인프라 자동화 및 퍼포먼스 개선
- 사내 업무 자동화
- 특정 시간대에 급증하는 트래픽을 위한 확장성있는 아키텍처 설계
- AWS 기반 인프라 기획 및 운영
- AWS 클라우드 시스템 인프라 구축 및 모니터링
- 플랫폼 서비스 인프라 아키텍처 고도화
- devops 수준의 인프라 운영.
- AWS 아키텍쳐 설계
- 서비스 및 인프라의 안정성, 확장성 효율성을 개선
- AWS 및 Kubernetes 기반의 CI/CD 작업
- Database 고도화를 위한 시스템 구축 및 운영
- 서비스 DB 설계 및 개발
- MySQL을 활용한 DB 설계
- 기존 환경을 파이썬 기반으로 데이터 마이그레이션
- 빠르고 안정적인 서비스를 제공을 위해서 효율적인 DB modelling 을 수행하고, Slow query 모니터링 및 개선을 수행
- 회의를 거쳐 스케줄 관리와 기술 부분을 공유
- 매일 스크럼 회의를 통해 개발 이슈사항이나 진행상황을 공유
- 매주 스프린트 단위로 task management
- 최적화와 질 좋은 코드를 위해 끊임 없이 고민하고 토론하는 자세
- 기술 연구소, 서비스 기획, 개발팀, 유관부서와 협업하여 복잡한 비지니스 문제를 해결
- GITHUB 를 통해서 동료들과 수평적으로 Pull Request 에 대해 적극적인 피드백 및 개선
- 여러 백엔드 개발자들이 협업하기 좋은 코드로 지속적으로 리팩토링
- Python, Flask, Linux, Go, C#(.Net core), gRPC, NginX, Redis, Java, js, jquery, spring, nodejs, DBMS(oracle, mysql, mssql, mariadb), golang, rabbitmq, teamcity, google bigquery, google storage, protobuf, influxdb, kubernetes (GKE), google cloud logging, restapi, google compute engine, Django, PostgreSQL, Airflow, TypeScript, NetJS(Node.js), GraphQL, TypeORM, PostgreSQL, Ruby on Rails, GraphQL Mesh, Express, PHP, go, Redis, DynamoDB, Elasticsearch, Lambda, S3, Cloudfront, Gitlab, Javascript, Fastify, Postgresql, Kafka, RabbitMQ, Elastic Search, Terraform (laC), Fargate, Elastic Beanstalk, Docker, Bitbucket, Bitbucket Pipeline (CI/CD), Laravel, Kubernetes, Istio, MongoDB, AWS SNS, MediaConvert, AWS CDK
(Node.js / MySQL / Amazon AWS / Back-end / GitHub / 서버관리 / GraphQL API / Typescript / ORM), Nest.js, TypeORM, Apollo GraphQL, PostgreSQL, Ubuntu, EC2, S3, ECS, CodeDeploy, Cloudfront, Route53, Github-Actions, Terraform, ELK Stack, Amazon Aurora, aiohttp, django, flask, tornado, Git, GitLab, GitLab CI, flask, git, jenkins, uwsgi, nginx, docker, AWS, EBS, S3, Lambda, AWS VPC, API Gateway, Nginx, Selenium, .NET Core (EF Core), .NET Framework, React.js, vanilla js, Azure DevOps, BitBucket / GIT
- 범용(Jetbrains License 제공), IDE(무관 (Visual Studio 제공)), 운영체제(무관), 클라우드 서버 서비스(AWS-RDS, S3, API Gateway, Kinesis, DynamoDB)
- 형상관리(Github), 프로젝트/테스크 관리(Jira, Confluence), 기타(Slack, Zoom, Hangout), Jenkins(CI/CD), Trello, Flow, Zeplin, G Suite
레디미는 '신입' 채용공고에 포함된 자격 요건과 우대 사항을 분석하여 직무 역량을 파악했습니다.
먼저 자격요건 사항을 정리했어요.
- Spring(Java/Kotlin), Rails, Node.js, django, flask 중 하나 이상을 활용한 서버 개발 경험
- 리눅스 서버 개발 및 운영 경험
- 하나 이상의 웹 서버 구축 프로젝트를 개발한 경험
- 백엔드 서버 운영(DevOps) 관심이나 흥미
- Restful / GraphQL API 서버 설계 및 개발 경험
- Linux 서버 개발 환경에 대한 적응
- Django/Express 등의 웹 프레임워크 활용 경험
- JPA(Hibernate) 및 Mybatis 개발 경험
- Git/Github Flow에 대한 이해 및 적용 경험
- Mysql 또는 Postgresql 사용 경험
- 퍼블릭 클라우드 기반의 개발 경험
- AWS 클라우드 시스템을 이용하여 운영해본 경험
- AWS 환경에서의 개발 및 운영 경험
- Java, Spring Boot 사용경험 및 이해
- Java, Spring Boot, Ktor, Django, Flask, Spring, Laravel 등 Framework 기반 서비스 개발 경험
- JAVA, Spring Web MVC, SpringBoot 2.x
- 빌드/테스트/배포 경험
- Java, Python, Node.js 중 하나의 언어로 개발하여 서비스를 운영해본 경험
- Cloud Infra 활용 능력(AWS)
- 아키텍쳐 설계 능력
- Python(Jango), Go 사용 경험
- Flask, FastApi 등 Python 기반 웹어플리케이션 서버 개발 경험
- Python Web Framework 기반 Backend service 개발 경험
- C/C++/C# 개발 경험 및 이해
- C# 혹은 Typescript를 활용한 객체지향적인 설계 및 개발 경험
- Kotlin 사용 경험
- php, mariadb, node.js 사용 능력
- Node.js, Typescript 기반의 개발 경험
- Java 기반의 객체지향 설계 및 개발 능력
- 소켓서버 구현 및 운용 경험
- JPA, Hibernate 등 ORM 사용과 도메인 모델링 경험
- 자바 언어 및 JDBC 응용 개발 경험
- Linux 시스템 운영 경험
- UNIX(Linux) 기반 개발/운영 경험, LEMP 개발 경험
- 리눅스, Mac 등 Unix-like 운영체제 사용 경험
- 고가용성의 확장 가능한 시스템 설계/운영 경험
- 대규모의 실시간 트래픽을 처리하는 시스템 개발 경험
- 비지니스 요구사항에 따른 RDBMS, Cache, Data Structure 설계 경험
- Docker에 대한 이해 및 사용 경험
- Docker, Kubernetes 등 컨테이너 기반 개발 경험, 운영 자동화 능력
- Java/Kotlin/SpringBoot/JPA 환경에서의 개발 능력
- NodeJS로 백엔드 서버 구축 및 실 서비스 경험
- Javascript (Node.js) 기반 서버 개발 경험
- 클린 코드 작성 능력
- 백엔드 프레임워크를 사용한 상용 서비스 개발 및 운영 경험
- 테스트 자동화 및 테스트 주도 개발에 대한 경험
- 코드리뷰와 테스트코드 작성 능력
- .NET Core 혹은 .NET Framework를 사용한 웹 애플리케이션 개발 경험
- PHP 활용 능력
- Shell script 사용 능력
- 서버 사이드 언어 및 프레임워크 사용 경험
- Version Control, CI/CD 도구 사용 경험
- HTML5, CSS, jQuery 사용 경험
- 비동기 (Multi Thread, Multi Process, Async & Await) 혹은 이벤트 기반 프로그래밍 경험
- MSA, SOA 기반 백엔드 개발 능력
- 웹 크롤링을 통해 정보를 가공해본 경험
- JPA를 사용해본 경험
- ES6+ 에 추가된 기본 스펙들을 사용해본 경험
- 오픈 소스 기술 스텍 활용 능력
- MySQL, MariaDB, Postgresql, Oracle 등 관계형 DBMS(RDBMS)를 사용해본 경험
- RDBMS로 시스템을 설계하고 서비스를 운영해본 경험
- Database 성능 튜닝 및 Query 튜닝 능력
- Database Monitoring 계획 수립 및 운영 경험
- 이 기종 Database 마이그레이션 경험
- Redis, Mongo DB 등 NoSQL 사용 경험
- SQL 구문을 작성하고 Query Tuning을 할 수 있는 능력
- ElasticSearch 사용 경험
- 비즈니스 요구사항에 따른 RDBMS, Cache, Data Structure 설계 경험
- 데이터베이스 설계 및 튜닝에 대한 이해
- RDBMS/NoSQL 기본을 이해하고, 데이터를 모델링하고 애플리케이션과 연동해서 개발할 수 있는 능력
- 웹 프론트엔드 개발 경험 (Vue.js, php - Laravel 등)
- REST API에 대한 설계 및 개발 경험
- Scalable한 데이터 구조에 대한 이해
- RESTful API 설계 및 구현 능력
- Restful API 연동 경험
- 사용자, 사업자, 관리자를 위한 플랫폼의 API 개발 및 운영할 수 있는 능력
- API/DB 설계 능력
- GraphQL이나 RESTful API에 대한 설계와 개발 경험
- 외부 Library나 API 사용 능력
- Github 사용 경험
- Git을 활용한 버전관리 능력
- Git을 이용한 협업 경험
- Git을 통한 프로젝트 관리경험
- GitLab, GitHub 등의 이슈 트래커 기반 프로젝트 개발 경험
- 웹 서비스 개발 전반에 대한 이해
- 웹 서비스 아키텍처에 대한 전반적인 이해
- 데이터베이스 설계에 대한 이해, 경험
- AWS, GCP 등 클라우드 서비스를 이해하고 사용해본 경험
- RESTful API의 동작 방식에 대한 이해 및 서버와의 연동 개발 능력
- MSA(마이크로서비스 아키텍처)에 대한 이해
- Public Cloud(AWS) 환경에 대한 이해 및 경험
- StanWorld Database(AWS RDS, Redis 등)에 대한 경험
- 기본적인 데이터모델링 지식
- .Net Framwork에 대한 이해
- 웹/앱 서비스 대한 이해
- EF나 DML,DDL에 대한 이해
- rpc, mq 에 대한 이해
- 단위/통합 테스트코드 작성 능력
- Nest 또는 Express에 대한 이해
- TDD에 대한 이해
- 리팩토링과 테스트의 중요성에 대한 인지
- HTTP 통신에 대한 기본적인 이해
- 개발 기본 지식과 클라우드 서비스 사용 경험
- CI/CD 및 개발자 플로우에 대한 경험과 지식
- JPA, Hibernate 등 ORM 에 대한 이해
- OOP(Object Oriented Programming), Python, C#에 대한 이해
- 자료구조, 알고리즘에 대한 이해
- 성능 최적화와 운영 자동화에 대한 이해
- HTTP 및 웹 기본 이해도
- 기본 CS 지식(OS/Network/DB/Data Structure/Algorithm등)
- Unix/Linux 시스템의 이해
- Linux 기반 운영체제에 대한 기본적인 이해
- Modern Javascript(ES6+)에 대한 깊은 언어적 이해
- 서버-클라이언트 및 API 개발에 대한 이해
- MSA, 컨테이너 (Docker, kubernetes)에 대한 기본적인 지식
- docker/k8s에 대한 관심
- HTML5, CSS, Javascript에 대한 전반적인 이해
- 비동기 메시지 큐 시스템과 분산 시스템 아키텍처에 대한 이해
- 자유롭게 의견을 내고 지적으로 정직한 토론을 좋아하는 성향
- 열정적이고 책임감 있는 성격
- 둥글둥글한 화법
- 어려운 문제를 만나도 끈기 있게 원인을 파악하고 해결할 수 있는 성격
- 성취 욕구가 높은 성향
- 목적 지향적인 자세
- 꾸준하게 학습하고 새로운 기술을 도입하는 것을 선호하는 태도
- Laravel 학습을 통해서 멋진 코드로 배포하고자하는 의지
- 새로운 지식 습득을 즐기고 변화에 빠르게 적응하는 성향
- 새로운 기술에 관심이 많고 꾸준히 스스로 학습하는 태도
- 도전정신, 사람을 생각하는 따듯한 마음
- 문제 해결을 위해 다양한 환경이나 도구, 언어를 배우며 사용하는 것에 두려움이 없는 성향
- 코드 너머의 설계와 시스템 구조에 대해 생각하는 태도
- 문제 정의 능력, 문제 해결 능력, 학습력
- 유저가 겪는 문제점을 찾고 기술로 해결하는데 관심 있는 태도
- 논리적이고 체계적인 문제 해결 능력
- 비즈니스 요구사항을 이해하여 문제를 주도적으로 해결하는 능력
- 창의적인 문제 해결 능력
- 사용자 스토리로부터 기술적 요구사항을 파악하고 High-level에서 문제 해결책을 찾을 수 있는 능력
-반복되는 작업과 비효율을 끊임없이 제거하고자 하는 태도
- Trello, Confluence, Zeplin와 같은 협업 툴 사용 능력
- 협업을 우선 가치로 여기는 태도
- 원만한 커뮤니케이션 및 협업 능력
- 간단 명료한 커뮤니케이션 능력
- 비즈니스 요구사항을 이해하고, 협업 할 줄 아는 능력
- 프론트엔드 개발자, 프로덕트 매니저, 프로덕트 디자이너 등 동료와의 협업 경험
- Technical 요소를 담은 내용을 글 또는 대화로 의사전달 하거나 문서화를 할 수 있는 능력
- 코드와 문서를 이용한 커뮤니케이션 능력
- 코드 리뷰와 지식공유에 적극적인 태도
- 컴퓨터공학 전공
- CS(Computer Science) 전공자
- 전산학 관련 분야 전공
- 스택오버플로우 등의 영어로 된 레퍼런스 문서를 읽고 이해하는 능력
다음은 우대사항을 정리했어요
- Kotlin, Spring을 활용한 서비스 개발 경험
- 클라우드 기반의 모바일 서버 환경의 프로젝트 운영 경험
- 클라우드 환경(AWS/Azure/GCP 등)에서 컴포넌트 연동 서비스 개발 경험
- Docker/Kubernetes 등 앱 빌드 및 배포 시스템 구축 능력
- Docker 적용 웹 서버 개발 경험
- Docker 환경에서 개발 경험
- 풀스택 웹 개발 경험
- NoSQL DB(Redis, MongoDB 등)을 활용한 기능 개발 경험
- 실시간 대규모 트래픽을 처리할 수 있는 서버 시스템 아키텍쳐 설계 및 운영 경험
- 로그 수집 및 분석 시스템 구축 경험
- 리눅스 서버 구축, 배포 경험
- Linux 기반 시스템 프로그래밍 경험
- Go 혹은 C# 언어를 활용한 프로젝트 경험
- 대용량 트래픽을 처리/대응 하는 서비스 개발 경험
- FastAPI, Flask 또는 Django등 웹 프레임워크를 사용한 서비스 개발 경험
- Python 또는 Go를 이용한 서버 개발 경험
- Golang, asp.net 사용 경험
- 빌드/테스트/배포 자동화(CI/CD) 경험
- 빌드, 테스트, 배포까지 AWS CodePipeline을 통해 자동화해본 경험
- Fabric SDK 를 이용한 백엔드 개발 및 운영 경험
- 하이퍼레저/이더리움/EOS 기반 dApp 개발 경험
- Microservices 아키텍처 기반의 시스템을 개발한 경험
- Open API 기반의 서비스 개발 경험
- OAuth 2.0 기반의 권한 관리 및 Spring Security 연동 개발 경험
- 마이크로서비스 아키텍쳐 개발 경험
- 인프라 설계 경험
- 대규모 사용자 서버 운영 경험
- 클라우드 서비스 인프라 운영 경험
- NodeJS, Typescript, NestJS, GraphQL 사용 경험
- mysql, javascript, Linux,TypeScript 사용 경험
- Web Services / API design(Restful or gRPC) 및 개발 경험
- OSGi, Maven, Jenkins 기반 개발 및 배포 경험
- 단위 테스트 개발 기반의 견고한 코딩 작성 능력
- RESTful API 설계 및 개발 경험
- Cache, MQ, gRPC, NoSql 시스템을 이용한 대용량 트래픽에 대한 성능 개선 경험
- DynamoDB와 같은 NoSQL을 사용한 상용 서비스 개발 및 운영 경험
- GraphQL 로 API 설계 및 개발을 한 경험
- gRPC, Protocol buffer 개발 경험 및 지식
- SaaS 개발 및 운영 경험 있으신 분
- Edge computing 경험 (NVIDIA Jetson 등)
- Python 기반의 웹개발 경험 (Flask, Django 등)
- Crawling 시스템 개발 경험
- 언어와 환경에 구애 받지 않고 가장 적합한 플랫폼을 기반으로 서비스를 구축할 수 있는 능력
- 비동기 네트워크 프로그래밍 (TCP, UDP등) 경험
- 서버 (게임서버, WAS서버, 기타 Server-Client 구조) 프로그램 경험
- API 설계 / 시스템 자동화 설계 경험
- 비즈니스 솔루션 개발 경험 (CRM, ERP 등)
- Multi-Tenant SaaS 소프트웨어 개발 경험
- GraphQL을 이용한 API 설계 및 구현 경험
- 코드 품질 향상을 위한 분석 및 리팩토링 경험
- 프론트엔드 서비스 개발 경험 (React.js)
- AWS 등 클라우드 컴퓨팅 관련 경험
- AWS 상에서의 인프라 구축 및 운영 경험
- AWS 환경 내 서비스 배포 경험
- AWS, nCloud, KT Cloud 사용경험
- Docker 등 컨테이너 가상화 플랫폼 관련 경험
- PyTorch, SageMaker를 이용한 AI 서버 배포 경험
- 대용량 데이터 처리 플랫폼에 대한 경험
- 대용량 트래픽을 안정적으로 핸들링하기 위하여 시스템을 개선해본 경험
- TDD, BDD 등의 개발 방법론 경험
- 다양한 서비스 장애 상황을 주도적으로 해결해본 경험
- 비효율적인 반복 작업을 자동화하여 개선해본 경험
- 데이터 모델링 및 지원 경험
- 다양한 환경에서의 Failover 처리에 대한 경험
- Open API 활용 경험
- nGrinder, Jmeter 등을 활용한 API 성능 측정 경험
- 유지보수와 성능 최적화를 위한 지속적인 노력
- 오픈 소스 검색엔진 (ElasticSearch/Solr/Lucene 등) 경험
- 마케팅플랫폼(Eloqua, Salesforce) 연계개발 경험
- 운영 환경의 JVM GC 원인 분석 및 성능 최적화 경험
- Event-driven system, 대용량 데이터 처리 등을 위한 Kafka 기반의 메시지 큐 구축 및 운영
- MSA 아키텍처 설계 또는 운영 경험
- Vue.js/Nuxt.js SPA/SSR 설계, 개발, 운영 경험
- Object에 대한 Cloud Rendering, Cloud Modeling, Cloud Simulation, Cloud Evaluation 구현 경험
- Market Place or Media Processing or Game or Communication Tool or AR/VR/MR 관련 경험
- Agile SW 경험
- Docker Container, Container Orchestration(Docker Swam, Kubernetes..) 경험
- Kafka, Spark, Hbase, Cassandra, and Redis 경험
- DW/DM, ETL 등 데이터 엔지니어링 경험
- ElasticSearch 실무 활용 경험
- 다양한 환경에서의 Failover 처리에 대한 경험
- 애자일 프로세스에 대한 경험
- EFK/ELK 경험
- Terraform 또는 CircleCI와 같은 DevOps 중심 기술 사용 경험
- CI(Continuous Integration) & CD(Continuous Deployment) 구축 경험
- 오픈소스 참여 경험
- Pytorch, TensorFlow 등의 ML 프레임워크 사용 경험
- AWS, Azure, GCP 를 사용해서 ML 파이프라인을 구축해본 경험
- 오픈소스 워크플로우 (Kubeflow, Airflow, Argo workflow) 또는 MLOps 도구 사용 경험
- TypeScript를 실무에 적용한 경험
- JPA, EF 와 같은 ORM 프레임워크 사용과 도메인 모델링 경험
- 비동기 시스템 도입 및 활용 경험
- Over, Under Engineering을 능동적으로 파악하며 대응이 가능한 능력
- Service Mesh 등을 활용하여 Microservice 아키텍처를 효율적으로 운영해본 경험
- Kafka, RabbitMQ 등 메시지 큐 기술 활용 경험
- 대용량 트래픽, High Availability / Fault Tolerant 아키텍처 설계 경험
- ELK(Elasticsearch, Logstash, Kibana)를 이용한 로그 수집, 데이터 처리/분석 시스템 구축 경험
- Jenkins, Git action 등 CI/CD 도구 사용 경험
- 퍼포먼스 분석 및 최적화 경험
- JIT 컴파일 처리 경험
- DB 스키마 구축 및 활용 능력
- RDBMS에 대한 이해도 및 테이블 구조 설계 경험
- NoSQL Storage(MongoDB) 구축 경험
- DBMS 튜닝에 대한 경험
- 데이터 모델링 및 SQL 쿼리 최적화 경험
- DB 쿼리 최적화 경험, 데이터베이스 운영 경험
- NoSQL (Redis/MongoDB/DynamoDB 등) 경험이나 지식
- 비즈니스 요구사항에 따른 RDBMS/Cache/Data Structure 설계 경험
- RDB(MySQL, MariaDB, Postgre) 설계 및 구축 경험
- 데이터베이스 (Redis, Oracle, Mssql, Mysql) 중 한가지 이상의 데이터베이스 설계 및 쿼리 최적화 경험
- 서비스 개선을 위해 적극적으로 동료와 소통하는 능력
- 데이터 관련 직군과 함께 협업한 경험
- 슬랙을 이용한 커뮤니케이션 경험
- Jira, Wiki, Confluence 사용 경험
- QA 팀과 함께 개발해본 경험
- 형상관리 툴(Git) 사용 경험
- git, github 등을 통한 버전관리 및 협업 경험
- Git Flow를 이해하고 사용하는 능력
- git 및 프로젝트 세팅/ 배포/ 운영 경험
- MongoDB 등 NoSql 사용 경험
- SQL 쿼리 최적화 경험
- 컴퓨터 공학 관련 전공
- 컴퓨터학과 / 소프트웨어학과 / 통계학과
- 컨테이너 환경에 대한 이해
- 마이크로 서비스 구조에 대한 이해
- 비동기 통신에 대한 이해(Webflux)
- 디자인 패턴에 대한 관심
- Front/Back-End 시스템에 대한 이해
- RESTful API에 대한 기본적인 이해 및 개발 경험
- 시큐어 코딩(Secure Coding)에 대한 이해
- 테스트 코드 사용 및 환경에 대한 이해
- 컴퓨터구조, 운영 체제, 네트워크, 데이터베이스, 알고리즘, 자료구조, 파일 시스템에 대한 이해
- DDD(도메인 주도 개발)에 대한 이해
- OAuth 2.0과 OIDC에 대한 이해
- 애자일 기반 개발 문화에 대한 이해
- CleanCode, Refactoring, TDD에 대한 이해와 실천
- 멀티스레드 동시성 제어 및 비동기 프로그래밍의 이해
- MSA / DDD / EDD / TDD / Clean Architecture 등 다양한 Architecture 및 방법론의 개념 이해
- 다양한 처리 방식(Asynchronous / Multithreading / Multiprocessing / Synchronized / Parallel등)에 대한 이해
- DevOps에 대한 이해
- OOP 설계 및 개발 경험과 이해
- Code Analysis & Test Automation, Framework 이해 (Lint, Prettier, Puppeteer)
- Unix, Linux, Windows Server 중 한가지 이상의 서버 OS 운영에 대한 이해
- Kafka/RabbitMQ 이해
- javascript에 대한 이해
- 객체의 역할 / 책임 / 협력과 객체간의 메세지 등에 대해 이해
- FP에 대한 기본적인 이해
- 새로운 개발 환경, 언어, 기술을 익히는 것에 대한 두려움이 없고 learning curve가 가파른 성향
- 수평 커뮤니케이션를 중시하고 유연한 생각으로 구성원들과 원활히 소통하는 태도
- 문제를 파악, 정의하고 해결 방안을 제시하는 성향
- 실패를 두려워하지 않고 빠르게 실행하고 효율을 분석하는 태도
- 진취적이고 성실하며 활달한 성격
- 서비스 지향으로 고객과 전체 시스템을 바라보는 마인드
- 새로운 기술 및 최신 트렌드에 관심이 많고 찾아서 일을 하는 태도
- 경험해보지 않았던 새로운 것들을 배우고, 서비스에 적용하는 것을 좋아하는 태도
- UI에 대한 기본 지식 및 경험
- 정보처리 기사 자격증
- 기술 블로그, Github 운영 경험
- 본인의 주장을 깔끔하게 도식화하여 회의 시간을 크게 줄인 경험
- 기술 문서에 대한 작성 능력
- 코드리뷰 및 Pair Programming에 대한 경험
- 스크럼 기반의 업무 프레임워크 경험
- 페어 프로그래밍 경험
원티드에서는 '백엔드 개발자'라는 분류 없이 언어별로 개발직이 분류가 되어있어,
백엔드 개발로 채용 공고를 검색하여 그 수를 파악했는데요.
백엔드 개발자는 신입~2년차보다는 3년차 이상의 경력직 채용이 많았습니다.
좀 더 자세하게 설명드리자면,
신입 113건
1년차 184건
2년차 307건
3년차 579건
4년차 580건
5년차 682건
6년차 604건
7년차 608건
8년차 547건
9년차 491건
10년차 481건으로
가장 많은 채용은 5년차 이상의 경력직 채용이었으며, 이후에는 7년차, 6년차, 4년차, 3년차순이었습니다.
원티드에서 제공하는 자료에 따르면 신입 백엔드 서버 개발자의 예상 연봉은 약 3,393만원이에요.
해당 데이터는 채용 정보에 포함된 직무별 요구 경력과 연봉을 바탕으로 추정한 예상 연봉 데이터라고 합니다.
연차가 쌓일수록 연봉은 올라가게 되는데,
1년차 백엔드 개발자의 예상 연봉은 3,581만원
2년차 백엔드 개발자의 예상 연봉은 3,912만원
3년차 백엔드 개발자의 예상 연봉은 4,180만원
4년차 백엔드 개발자의 예상 연봉은 4,574만원
5년차 백엔드 개발자의 예상 연봉은 4,807만원
6년차 백엔드 개발자의 예상 연봉은 5,223만원
7년차 백엔드 개발자의 예상 연봉은 5,576만원
8년차 백엔드 개발자의 예상 연봉은 5,752만원
9년차 백엔드 개발자의 예상 연봉은 6,166만원
10년차 백엔드 개발자의 예상 연봉은 7,292만원이라고 해요.
또한 그 외 세부 언어에 관해서는 다음과 같은 차이가 있었습니다.
'백엔드 개발자'가 담당하는 일은 범위가 넓습니다.
사용자에게 보이는 웹 어플리케이션 개발뿐만 아니라
데이터 분석을 위한 엔지니어링, 분산파일시스템이나
DBMS와 같은 제품을 만드는 개발자들도 백엔드 개발자라 불리기도 하기 때문이죠.
어플리케이션을 개발하는 백엔드 개발자는
프로젝트에 따라서는 서버관리, DB관리, 프런트엔드 개발까지 모두 담당하기도 해요.
그렇기 때문에 백엔드 개발자는 SE(System engineer), FE(Front End) 등
인접한 분야의 개발자와 소통할 수 있는 기회가 많아요.
따라서 인접 분야에 대한 전문성을 키울 수 있는 기회를 만나기도 쉬운데요.
통계 모듈을 개발하다가 대용량 데이터를 다루는 데이터 엔지니어로 성장하기도 해요.
물론 이후에 특화된 분야의 전문가로 성장하더라도
다른 개발자가 사용하는 플랫폼이나 라이브러리의 개발도 어플리케이션 개발의 특성을 이해해야
적용하기가 편리한 인터페이스를 설계할 수 있기 때문에 개발 역량은 늘 중요해요.
자신만의 특화된 전문 분야와 더불어 개발 능력을 갖춘다면
프론트엔드, 풀스택 개발자, 시스템 엔지니어, 데이터 엔지니어 등 다양한 길로 나아갈 수 있습니다.
백엔드 개발자의 경우 개발 분야에 대한 폭넓은 지식과 경험을 갖추고 있어야 해요.
프론트엔드와 연동을 위한 API 개발 부터, DBMS, 파일스토리지, 네트워크 및 인프라 구성 등
서비스 동작을 위한 기본적인 서버 관련 업무 뿐만 아니라
서비스 운영을 위한 로그수집, 서버 모니터링, 캐싱, 데이터 분석 시스템, 빌드 및 배포 환경 구축 등 운영을 위한 여러가지 업무들에 대해서도 숙지해야 해요.
이를 위해 백엔드 개발자는 다음과 같은 지식을 갖춰야 합니다.
API 개발 (REST API), 개발 언어와 웹 프레임워크, 서버 기본 지식, 네트워크 기본 지식, 데이터베이스, 분산 스토리지, 기본적인 프론트엔드 기술을 큰 가지로 잡고 공부를 해 나가는 것이 좋아요.
이와 관련해 다음의 글들을 추천해요 :)
백엔드 개발자를 꿈꾸는 학생 개발자에게 https://d2.naver.com/news/3435170
백엔드 개발자(Backend Developer)가 되기 위해 필요한 지식들 - 초급(Basic) https://www.howcooliscoding.com/backend/things-to-know-for-backend-developer-basic/
백엔드 개발자 로드맵 https://ebbnflow.tistory.com/262
백엔드 개발자 로드맵 https://github.com/devJang/developer-roadmap
개발자 공부 방법 https://okky.kr/article/564382
개발자 포트폴리오 예시 https://okky.kr/article/397774
프로그래머를 위한 공부론 https://okky.kr/article/398880
개발자가 지양해야 할 공부법 https://pronist.tistory.com/83
개발자와 관련된 글들 https://okky.kr/article/505087
초보 개발자를 위한 스택트레이스 읽는 법 https://okky.kr/article/338405
개발자 직군의 경우 대부분의 기업에서 코딩 테스트를 진행해요.
코딩 테스트를 준비하기 위해서는 파이썬, 자바, C, C#등의 기본 개발 언어 공부,
단계별 문제 풀이, 자료 구조, 알고리즘 학습이 필요해요.
프로그래머스 웹 사이트에서 스킬체크 level3가 안정적으로 나온다면
웬만한 기업에는 합격한다고 해요.
보통 기본 언어로는 파이썬을 많이 추천하며, 웹 개발의 경우에는 java를 추천한다고 해요.
최근에는 생활코딩과 같은 유튜브, 구글링을 통해서도 무료로 공부가 가능하니
자기와 맞는 방법을 찾아 공부하는 것을 추천해요.
또한, 개발자 직군의 경우 '기술 면접'이 존재하는데요.
이력서, 자기소개서와 관련된 질문 외에도
네트워크, 운영체제, 데이터베이스, 디자인패턴, 알고리즘,
포트폴리오에 사용된 기술 및 도구의 배경 지식 등
컴퓨터 공학 개념에 대해 숙지해야 해요.
이 때에는 github를 적극적으로 사용하며
주요 개념을 설명할 수 있는 수준으로 학습하는 것이 좋아요.
기술 면접은 특히 꼬리물기식 질문이 많다고 하니
꼼꼼한 준비가 필요하겠습니다.
더불어 직무 경험을 쌓기 위해서 인턴쉽에 지원하는 것이 좋아요.
여러 프로젝트에 참여하며 어떤 기준으로 접근해 어떻게 개발을 했는지 과정을 기록하며
포트폴리오를 만드는 것을 추천해요.
① 오브젝트 : 코드로 이해하는 객체지향 설계 (조영호 저, 위키북스)
② 클린 아키텍처 : 소프트웨어 구조와 설계의 원칙 (로버트 C 마틴 저, 인사이트)
③ 익스트림 프로그래밍 2판 (켄트 백, 신시아 안드레스 저, 인사이트)
④ Clean Code 클린 코드 : 애자일 소프트웨어 장인 정신 (로버트 C 마틴 저, 인사이트)
⑤ 조엘 온 소프트웨어 : 유쾌한 오프라인 블로그 (박재호 역, 에이콘출판사)
⑥ 리팩터링 2판 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (마틴 파울러 저, 한빛미디어)
⑦ 클린 코더 : 단순 기술자에서 진정한 소프트웨어 장인이 되기까지 (로버트 마틴 저, 에이콘출판사)
⑧ 켄트 벡의 구현 패턴 : 읽기 쉬운 코드를 작성하는 77가지 자바 코딩 비법 (켄트 백 저, 에이콘출판사)
⑨ 함수형 사고 : 객체 지향 개발자에서 함수형 개발자로 거듭나기 (닐 포드 저, 한빛미디어)
⑩ 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (이동욱 저, 프리렉)
⑪ DDD Start! (최범균 저, 지앤선)
⑫ 데이터 중심 애플리케이션 설계 (마틴 클레프만 저, 위키북스)
오늘은 백엔드 개발자 직무의 공고를 분석해보았는데요.
앞으로 궁금한 직무가 있다면 언제든 댓글 달아주시길 바랍니다.
도움이 되셨다면 공감, 댓글 많이 부탁드려요 �
*언더패스는 21년 9월 13일자 이후로 "레디미 온보딩"으로 리뉴얼 되었습니다.
참고 사이트
"[IT 기본 지식] 프론트엔드/백엔드 개발자의 차이점은?", 인천일보아카데미, 2020년 10월 19일 수정, 2022년 2월 4일 접속, https://www.icia.co.kr/community/board/view/2/3/61
"[IT 취업 가이드] 프론트엔드와 백엔드 차이점", 잡코리아, 2021년 3월 10일 수정, 2022년 2월 4일 접속, https://www.jobkorea.co.kr/goodjob/tip/view?News_No=18678&schCtgr=120002&Page=7
"프론트엔드 VS 백엔드, 개념과 차이점 그리고 사용되는 언어는?", 위시켓블로그, 2020년 8월 20일 수정, 2022년 2월 4일 접속, https://blog.wishket.com/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-vs-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90/
김용욱, 「[우리가 모르는 개발자 생태계] '프론트엔드와 백엔드' 개발자의 차이」, 2020.09.11, http://it.chosun.com/site/data/html_dir/2020/09/11/2020091100487.html
백엔드 개발자를 꿈꾸는 학생개발자에게, 네이버 D2, 2018년 6월 21일 수정, 2022년 2월 4일 접속, https://d2.naver.com/news/3435170
주니어 백엔드 개발자를 위한 추천 도서 목록, log.bluayer, 2021년 6월 8일 수정, 2022년 2월 4일 접속, https://bluayer.com/44
취준개발자들을 위한 추천 개발도서, Tech, 2017년 6월 3일 수정, 2022년 2월 4일 접속, https://okky.kr/article/395414
백엔드 개발자가 되기 위한 개발트리, 두드림의 기록, 2020년 8월 17일 수정, 2022년 2월 4일 접속, https://doodreamcode.tistory.com/30