백엔드 개발자는 웹 애플리케이션과 서비스의 기반 인프라 개발에 중점을 두는 역할로, 데이터베이스 관리, 서버 스크립팅, API 통합 등의 작업을 포함합니다. 백엔드 프로그래머가 갖춰야 할 주요 역량은 다음과 같습니다:
1. 프로그래밍 언어
백엔드 개발자는 하나 이상의 서버 사이드 프로그래밍 언어에 능숙해야 합니다. 일반적으로 사용되는 언어로는 다음이 있습니다:
- Python: 읽기 쉽고 방대한 라이브러리를 자랑하며, 웹 개발, 데이터 분석, 인공 지능 등에 사용됩니다.
- Java: 플랫폼 간 이식성이 뛰어나 대기업 환경에서 광범위하게 사용됩니다.
2. 데이터베이스 관리
데이터베이스 관리 능력도 필수적이며, 다음과 같은 지식이 요구됩니다:
- 관계형 데이터베이스: MySQL, PostgreSQL, Oracle 등이 있으며, 데이터를 테이블과 행에 저장합니다.
- NoSQL 데이터베이스: MongoDB, Cassandra, Redis 등으로, 대량의 비정형 데이터를 다루는 데 유용합니다.
- 데이터베이스 쿼리 언어: SQL 같은 쿼리 언어는 관계형 데이터베이스와 상호작용하는 데 필수적입니다.
관련면접질문
정규화와 반정규화에 대해서 설명해주세요.
반정규화 후 변경/삭제 이상 발생시 어떻게 대처하실 건가요.
Double-checked locking이 무엇이며, 쓰는 이유가 무엇인가요.
DB 내부 구조에 대해서 설명해주세요.
transaction이 뭔지 설명해주세요.
isolation level에 대해서 설명해주세요.
DB에 배치 처리를 할 때 DB에 들어오고 있는 데이터는 어떻게 처리할지 생각해보신 바 있나요.
mongo에서 어떻게 eventually consistency를 보장하는지.
DB 설계 해보신 경험 있는지, 만약 있다면 정규화는 어떤 식으로 고려해보셨나요.
DB 락의 종류에 대해서 설명해주세요.
MongoDB가 왜 성능이 빠른지 아시는 만큼 설명해주세요.
index가 뭔지 설명해주세요.
index에서 왜 B+ tree를 사용하는지 설명해주세요.
RDBMS와 NoSQL의 차이에 대해서 설명해주세요.
트래픽이 많은 SNS 서비스에는 어떤 데이터베이스가 더 적합 할까요.
3. API (Application Programming Interfaces)
API를 효과적으로 사용하고 설계하는 능력은 필수적입니다. REST와 GraphQL은 일반적인 API 설계 모델입니다.
4. 버전 관리 시스템
코드베이스의 변경을 관리하고 다른 개발자와 협업하는 데 필수적인 버전 관리 시스템에 대한 지식이 필요합니다. Git이 가장 널리 사용되는 시스템입니다.
5. 프레임워크
Express.js (Node.js), Django 및 Flask (Python), Laravel 및 Symfony (PHP), Spring Boot (Java)와 같은 언어 관련 프레임워크에 익숙해야 개발 과정을 상당히 가속화할 수 있습니다.
관련면접질문
Gradle, gradle.wrapper의 차이와 각각을 왜 쓰는지 설명해주세요.
gradle에서 implement와 api(compile)의 차이를 설명해주세요.
6. 서버, 네트워크, 호스팅 환경
서버 작동 방식, 네트워크 보안 문제, 서버 관리 및 구성 방법에 대한 이해가 필요합니다.
7. 소프트 스킬
문제 해결 능력, 커뮤니케이션 능력, 시간 관리 능력 등의 소프트 스킬도 중요합니다.
8. 보안 관행
데이터를 보호하고 취약점을 방어하기 위한 웹 보안 관행에 대한 탄탄한 이해가 필요합니다.
지속적인 학습
기술이 빠르게 진화함에 따라 백엔드 개발자는 새로운 언어, 도구, 프레임워크 및 소프트웨어 개발에 대한 최선의 관행을 지속적으로 학습하고 최신 상태로 유지해야 합니다.
면접질문 리스트
브라우저에 naver.com을 치면 일어나는 일은 무엇인가요.
지진 같은 사건이 발생하면 특정 검색어로 트래픽이 갑자기 몰리게 됩니다. 이 때 이 부하를 줄이기 위해 할 수 있는 일들에 대해서 설명해주세요.
동기 비동기 방식으로 웹을 어떻게 구현할 수 있을지 설계해주세요.
Error와 Exception의 차이를 설명해주세요.
Checked Exception과 Unchecked Exception의 차이를 설명해주세요.
로그인 설계해보셨나요. 어떤 방법들이 있고 각각의 장단점은 어떤게 있을까요.
웹 스토리지의 종류에 대해서 설명해주세요.
API 설계 질문: parameter로 boolean과 ENUM 중 어떤 것을 사용하는게 좋을지 이유와 함께 설명해주세요.
Java에서 enum타입을 설계할 때 어떤 것들을 신경쓰시는지 설명해주세요.
프로젝트를 진행하면서 오픈소스를 분석해가며 진행했다고 하셨는데, 인상 깊은 부분이 있으셨나요.
<면접질문>
Java
객체지향의 개념과 객체지향의 3가지 특징
GC는 무엇인지? 어떤 알고리즘이 있는지? Stop the world에 대한 개념
Spring
Spring의 장점과 단점
DI와 AOP는 무엇이고 왜쓰는지?
vo, dto, bean은 무엇인지? (비추천, 후순위공부)
Thread
쓰레드와 프로세스의 차이
쓰레드의 메모리구조
쓰레드 간 공유되는 공간과 공유되지 않는 공간의 차이
메소드 내에서 선언된 변수가 위치하는 공간
컨텐스트 스위칭이 어떤 개념이고 스레드를 무작정 많이 생성하는게 도움이 되지 않는 이유
자료구조
해쉬라는 것은 무엇인지?
해쉬함수가 무엇인지?
해쉬충돌이 무엇인지 (비둘기집 원리)
해쉬충돌을 해결하기위해서 어떤 방법을 쓸수있고 A는 어떤 장점과 단점, B는 어떤 장점과 단점
시간복잡도 개념으로 베이스해서 설명하기
배열과 연결리스트는 무슨 차이가 있고 어떤 연산들의 장단점
데이터베이스
인덱스란 어떤 자료구조고 어떤 특징과 장단점이 있는지
트랜잭션이나 아이솔레이션 레벨
네트워크
Rest api와 특징
status code에 대한 설명 (각 00번대의 의미
http protocol에 대해서 설명, post와 get에 대한 차이
그 외 각각의 메소드가 어떤 설명이 있는지
header와 body는 어떻게 구성되어있는지
cookie와 세션이 어떤차이가 있고 어떻게 쓸수 있는지
Reddis
다른 스토리지와 비교해서 어떤 특징이 있는지
대칭키와 비대칭키가 어떤 차이가 있고 어떤 의미가 있는지
프로젝트 경험
프로젝트에서의 기술적 이슈과 해결경험
어떤 부분을 개선시킬 수 있는지
프로젝트시 팀원과의 갈등은 어떤게 있었고 어떻게 해결하는지
'커리어일반 > 비전공개발자전직기' 카테고리의 다른 글
개발취업 관련 조언정리 (0) | 2024.08.24 |
---|---|
개발자로서 개인의 강점 (0) | 2024.08.07 |
앞으로의 백엔드 공부 계획 (0) | 2024.05.31 |
백엔드 커리어 로드맵 - 나는 어떤 백엔드 개발자가 되고 싶을까? (0) | 2024.05.24 |
제로베이스 1개월차 노광고 솔직후기 (0) | 2024.05.24 |