개발자상식 <백엔드 개발자> (1)
[책리뷰 & Book review]
백엔드 개발자의 역활이란 무엇인가?
백엔드 개발자: 백엔드 개발자는 웹사이트의 서버, 데이터베이스, 그리고 그들을 연결하는 API와 같은 서버 사이드 애플리케이션을 만드는 역할을 합니다.
이들은 사용자 인터페이스를 제외한 모든 것을 담당하며, 사용자가 웹사이트에서 요청하는 모든 데이터를 처리하고 적절한 응답을 반환합니다.
백엔드 개발자는 보통 서버 언어(예를 들어 파이썬, 자바, PHP 등)를 사용하며, 데이터베이스(SQL 등)와
웹서버(Apache, Nginx 등)에 대한 지식이 필요합니다.
백엔드 개발자의 주요 책임 중 하나는 '기능 구현'입니다.
백엔드 개발자의 주요 책임 중 하나는 '기능 구현'입니다.
이는 사용자의 요청에 따라 서버에서 알맞은 동작을 수행하고 결과를 반환하는 기능을 프로그래밍하는 것을 의미합니다. 즉, 사용자가 특정 액션을 취했을 때 그에 상응하는 서버의 반응을 결정하는 것이죠.
기능 구현에는 여러가지가 있지만, 대표적인 예시는 다음과 같습니다:
데이터 처리: 사용자가 입력한 데이터를 받아서 적절하게 처리하고, 그 결과를 사용자에게 반환하는 기능을 구현합니다.
예를 들어, 사용자가 웹사이트에서 폼을 통해 정보를 입력하면, 백엔드 개발자는 해당 정보를 받아서 데이터베이스에 저장하거나, 다른 서비스와의 통신을 통해 필요한 작업을 수행하고 그 결과를 사용자에게 보여주는 기능을 구현합니다.
인증 및 권한 관리: 사용자의 로그인, 로그아웃, 회원 가입 등의 인증 관련 기능과, 사용자의 권한에 따른 서비스 접근 제어 기능을 구현합니다.
예를 들어, 특정 페이지는 로그인한 사용자만 볼 수 있도록 하거나, 관리자 권한을 가진 사용자만 특정 기능을 사용할 수 있도록 하는 것입니다.
API 개발: 다른 서비스와의 통신을 위한 API(응용 프로그램 인터페이스)를 개발합니다. 이를 통해, 다른 서비스가 해당
서비스의 기능을 사용할 수 있게 합니다. 예를 들어, 다른 웹사이트에서 이 서비스의 데이터를 요청하면 그에 따른 데이터를 반환하는 API를 개발하는 것입니다.
이 외에도 백엔드 개발자는 서버의 성능 최적화, 보안, 에러 핸들링 등 다양한 기능을 구현하게 됩니다.
이 모든 기능은 사용자가 웹사이트를 원활하게 이용할 수 있도록 하는데 중요한 역할을 합니다.
백엔드 개발자는
기능구현
버그 수정
성능개선
보안 강화
테스트및 디버깅
문서화를 담당합니다.
기능 구현: 백엔드 개발자는 웹사이트나 애플리케이션의 핵심 기능을 구현하는 일을 담당합니다.
사용자가 서비스를 이용하면서 필요로 하는 기능(예: 로그인, 검색, 데이터 저장 등)을 서버 측에서 처리하고, 그 결과를 클라이언트 측에 전달하는 코드를 작성합니다.
버그 수정: 백엔드 개발자는 서비스 운영 중 발견되는 문제점이나 오류를 해결하는 역할도 합니다.
사용자의 피드백이나 테스트 과정에서 발견된 버그를 수정하여 서비스의 안정성을 유지합니다.
성능 개선: 서비스의 반응 속도나 데이터 처리 효율을 높이는 작업을 합니다.
쿼리 최적화, 캐싱 전략 적용 등을 통해 사용자가 서비스를 더 빠르고 효율적으로 이용할 수 있도록 합니다.
보안 강화: 사용자의 개인정보와 서비스의 중요 데이터를 보호하기 위한 보안 강화 작업을 담당합니다.
인증/인가 시스템 구현, 암호화 적용, SQL 인젝션 등의 공격을 방어하는 등의 작업을 통해 서비스의 안전성을 높입니다.
테스트 및 디버깅: 개발한 기능이 제대로 작동하는지 검증하고, 문제가 발생한 경우 그 원인을 찾아 수정하는 작업을 합니다. 단위 테스트, 통합 테스트 등 다양한 테스트 방법을 사용하며, 디버깅 도구를 활용해 문제를 해결합니다.
문서화: 개발한 코드나 시스템에 대한 설명을 작성합니다. 이는 다른 개발자가 코드를 이해하거나 유지보수를 할 때 도움이 되며, API를 사용하는 사용자가 해당 API를 제대로 이해하고 사용할 수 있도록 하는 역할도 합니다.
코드 주석, 개발 가이드, API 문서 등 다양한 형태의 문서를 작성합니다.
웹 프레임 워크로는
Django(Python)
Ruby on Rails(Ruby)
Spring(java)
Laravel(PHP)이 있다.
Django (Python): 파이썬에서 가장 인기 있는 웹 프레임워크 중 하나입니다.
"배터리 포함"이라는 철학을 가지고 있어, 개발자가 웹 개발에 필요한 대부분의 기능을 제공합니다.
이에는 인증 시스템, URL 라우팅, 템플릿 엔진, ORM(Object-Relational Mapping), 관리자 패널 등이 포함됩니다.
또한, 대형 프로젝트에 적합하며, 코드의 재사용과 모듈화를 중요시합니다.
Ruby on Rails (Ruby): 'Rails'라고도 불리는 이 프레임워크는 Ruby 언어를 기반으로 합니다. 'Convention over Configuration'과 'DRY(Don't Repeat Yourself)'라는 원칙을 따르며, 많은 기능들이 이미 구현되어 있어 개발 속도가 빠른 것이 특징입니다. Github, Airbnb 등 많은 유명 서비스에서 사용되었습니다.
Spring (Java): 자바 언어를 기반으로 하는 대표적인 웹 프레임워크입니다.
엔터프라이즈급 애플리케이션 개발에 널리 사용되며, 특히 Spring Boot라는 프로젝트를 통해 빠른 개발과 쉬운 배포를 지원합니다. 또한, 테스트, 보안, 트랜잭션 관리 등 많은 기능을 제공합니다.
Laravel (PHP): PHP 언어를 기반으로 하는 웹 프레임워크로, 특히 개발의 편리성과 가독성에 초점을 둡니다. MVC(Model-View-Controller) 패턴을 따르며, 라우팅, 세션 관리, 인증, 캐싱 등 다양한 기능을 제공합니다. 또한, Composer라는 PHP의 의존성 관리 도구와 잘 통합되어 있습니다.
HTTP 프로토콜엥 대한 이해
HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받는 방법을 정의하는 프로토콜입니다.
클라이언트(보통 웹 브라우저)와 서버 간에 정보를 교환하는 데 사용되며, 주로 HTML 문서를 주고받는 데 사용되지만 이미지, 비디오, 오디오 등 다양한 형태의 미디어도 전송할 수 있습니다.
HTTP는 요청(request)과 응답(response)의 형태로 이루어집니다.
클라이언트는 서버에 요청을 보냅니다.
이 요청에는
HTTP 메서드(GET, POST, PUT, DELETE 등),
요청하는 리소스의 URL, 버전 정보,
헤더(추가 정보), 그리고 필요한 경우 본문(body)이 포함됩니다.
서버는 요청을 받아 처리한 후, 클라이언트에게 응답을 보냅니다.
이 응답에는 상태 코드(200, 404, 500 등), 버전 정보, 헤더, 그리고 요청한 리소스의 내용이나 에러 메시지 등이 포함됩니다.
[요청]
GET /index.html HTTP/1.1
Host: www.example.com
[응답]
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to My Website</h1>
<p>This is the home page.</p>
</body>
</html>
서버는 200 OK 상태 코드를 통해 요청이 성공적으로 처리되었음을 알립니다.
HTTP는 상태를 유지하지 않는(stateless) 프로토콜이므로, 각 요청은 독립적으로 처리됩니다. 따라서 로그인 상태와 같은 정보를 유지하기 위해서는 쿠키나 세션과 같은 기술을 사용해야 합니다.
또한, HTTP는 텍스트 기반의 프로토콜이므로, 원시 데이터를 직접 보거나 수정하는 것이 상대적으로 쉽습니다.
하지만 이로 인해 데이터의 보안성이 약할 수 있어, 보안이 중요한 경우 HTTPS(Hypertext Transfer Protocol Secure)를 사용하게 됩니다. HTTPS는 SSL/TLS 프로토콜을 이용하여 데이터를 암호화합니다.
대표적 보안 기술로
SSL/ TLS 암호화
웹 방화벽이 있다
SSL/TLS 암호화:
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 네트워크 통신의 보안을 담당하는 암호화 프로토콜입니다. SSL은 이전 버전이며, 현재는 TLS가 더 많이 사용됩니다. 그러나 일반적으로 두 용어는 같은 의미로 사용되곤 합니다.
이 프로토콜들은 클라이언트와 서버 간의 통신을 암호화하여, 중간에서 데이터를 가로채도 이해할 수 없게 만듭니다.
주로 HTTPS, 메일 서버, VPN 등에서 사용됩니다.
아래는 HTTPS를 사용하여 클라이언트와 서버 사이에 안전한 연결을 만드는 과정을 간략하게 설명한 것입니다.
1. 클라이언트가 서버에 접속을 시도하며, 자신이 이해할 수 있는 TLS 버전과 암호화 알고리즘 목록을 보냅니다.
2. 서버는 이 중에서 선택하여, 선택한 TLS 버전과 암호화 알고리즘, 그리고 자신의 공개키가 담긴 인증서를 클라이언트에게 보냅니다.
3. 클라이언트는 인증서를 검증하고, 새로운 임시 키를 생성한 후 이를 서버의 공개키로 암호화하여 서버에게 보냅니다.
4. 서버는 자신의 개인키로 이를 복호화하여 임시 키를 얻고, 이후의 통신에서 이 임시 키를 사용하여 데이터를 암호화합니다.
이렇게 하면,
클라이언트와 서버 간의 모든 통신은 이 임시 키를 사용하여 암호화되어 중간에서 가로채도 이를 복호화할 수 없게 됩니다.
웹 방화벽:
웹 방화벽은 HTTP 트래픽을 필터링하여 웹 애플리케이션을 공격으로부터 보호하는 보안 기술입니다.
SQL 인젝션, 크로스 사이트 스크립팅(XSS), 크로스 사이트 요청 위조(CSRF) 등 다양한 공격을 차단할 수 있습니다.
웹 방화벽은 주로 서버와 인터넷 사이에 위치하여 모든 들어오는 요청을 검사합니다.
이때, 악성으로 판단되는 요청은 차단하고, 정상적인 요청만 서버에 전달합니다.
웹 방화벽은 보통 별도의 소프트웨어나 하드웨어 형태로 제공되며, 설정에 따라 다양한 보안 정책을 적용할 수 있습니다. 예를 들어, 특정 IP 주소나 국가에서 오는 요청을 차단하거나, 특정 문자열이 포함된 요청을 차단하는 등의 설정이 가능합니다.
웹 방화벽의 사용법은 제품마다 다르지만, 일반적으로 웹 인터페이스나 명령줄 인터페이스를 통해 설정합니다. 이때, 어떤 요청을 차단할 것인지 결정하는 것은 매우 중요한데, 너무 많은 요청을 차단하면 정상적인 서비스 이용이 어려워질 수 있습니다. 따라서, 보안과 사용성 사이에 적절한 균형을 찾는 것이 중요합니다.
'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
개발자상식 <백엔드 개발자> (3)[책리뷰 & Book review] (1) | 2024.01.15 |
---|---|
개발자상식 <백엔드 개발자> (2)[책리뷰 & Book review] (2) | 2024.01.13 |
프로그래밍 면접 이렇게 준비한다 (9)[책리뷰 & Book review] (1) | 2024.01.04 |
프로그래밍 면접 이렇게 준비한다 (8) [책리뷰 & Book review] (2) | 2024.01.04 |
댓글