# 01. 자바 백엔드 개발자가 알아두면 좋은 지식

Ogu·2024년 1월 2일
0

1.1 서버와 클라이언트

클라이언트?

클라이언트(client)란 서버로 요청하는 모든 프로그램을 일컬어 말합니다.

가장 대표적인 예로 우리가 사용하는 프로그램인 웹 브라우저가 있습니다. 우리는 웹 브라우저로 해당 주소를 입력하고 화면을 띄웁니다. 이 때, 주소를 입력하고 enter를 눌러 서버에 정보를 요청하고, 서버는 그 주소에 맞는 화면을 응답합니다.

서버?

서버(server)는 클라이언트의 요청을 받아 처리하는 주체입니다. 클라이언트에서 데이터를 요청하면 데이터를 응답으로 보내기도 하고, 단지 무언가 서버 내에서 처리만 요청하면 해당 요청만 처리하기도 합니다.

웹브라우저에서 주소를 입력하고 화면을 확인하는 것은 ‘새로운 화면을 그리기 위한 데이터를 달라’는 데이터 요청에 해당합니다.

1.2 데이터베이스

데이터 베이스는 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터 저장소입니다.

흔히 말하는 MySQL, 오라클, 포스트그레SQL 등은 데이터베이스가 아닌 데이터베이스를 관리하기 위한 시스템의 이름으로, DBMS(데이터베이스 관리 시스템)입니다.

RDB란?

데이터베이스 종류에는 RDB, NoSQL, NewSQL 등이 있습니다. 그 중 가장 많이 사용하는 형태는 RDB(Relational Database) 로, 관계형 데이터베이스입니다. 관계형 데이터 베이스는 데이터를 행(row)과 열(column) 로 이루어진 테이블로 관리하며, 기본 키(primary key)로 각 행을 식별합니다.

유명한 RDB DBMS들로 Oracle, MySQL, SQl서버, 포스트그레스큐엘 등이 있습니다.

SQL이란?

SQL은 Structured Query Language의 약자로 대부분 RDB의 DBMS에서 데이터 조작 및 검색을 위한 표준 언어로 사용합니다. SQL에서도 ANSI 표준 SQL과 각 RDB별 방언 등이 있지만, 전문가가 아니라면 ANSI 표준 SQL로 대부분의 DBMS를 다룰 수 있습니다.

NoSQL이란?

최근에는 Not Only SQL의 의미로 비 관계형입니다. RDB는 데이터의 CRUD에 용이하지만 데이터 양이 많아질 경우 그 성능을 끌어올리긴 어렵습니다. 높은 확장성 및 가용성이 주요 장점인 NoSQL 은 실시간 웹 어플리케이션 및 빅데이터에 널리 사용됩니다.

NoSQL은 대부분 Key-Value 개념을 지원하며 데이터 모델링에 따라 몽고디비, 다이나모디비, 카우치베이스 등과 같은 DB들이 있습니다.

IP와 포트

IP

아이피(IP)는 Internet Protocol의 줄임말로, 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위해 사용하는 주소입니다. 인터넷에 연결된 모든 PC는 IP주소체계에 따라 네 덩이의 숫자로 구분하는데, 이러한 주소 체계를 IPv4 라고 합니다.

Port

하나의 컴퓨터에는 여러 개의 서버가 있을 수 있습니다. 클라이언트가 컴퓨터의 어떤 서버와 접속하려고 하는지 구분이 필요합니다. 이때 포트(Port)라는 개념이 활용되는데, 해당 IP에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호입니다.

쉽게 말해 IP가 아파트라면, 포트는 각각의 동호수와 같습니다. 이미 사용 중인 포트는 중복해서 사용할 수 없습니다.

또한 0~1023 까지의 포트를 잘 알려진 포트(well-known-port) 로 이미 어떤 통신이 해당 포트를 사용할 것인지 정해져 있습니다.

  • 0번 ~ 1023번 : Well-known port, 잘 알려진 포트
  • 1024번 ~ 49151번 : registered port, 등록된 포트
  • 49152번 ~ 65535번 : dynamic port, 동적 포트

잘 알려진 포트는 URI등에 명시하지 않지만, 잘 알려지지 않은 포트는 반드시 URI에 포함합니다.

  • 22 : SSH
  • 80 : HTTP
  • 443 : HTTPS

라이브러리와 프레임워크

라이브러리

라이브러리는 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드 모음을 말합니다. 소프트웨어를 만들 때 필요한 기능을 제공하는 라이브러리만 활용하여 원하는 기능을 더 빠르게 개발할 수 있습니다. 또한 라이브러리는 독립적으로, 서로에게 크게 영향을 주지 않습니다.

프레임워크

프레임워크는 frame(틀)과 work(일하다)의 합성어로, 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경입니다.

프레임워크는 개발에 있어 전체적인 구조를 잡기 위해 사용하고, 라이브러리는 개발 과정에 필요한 기능을 구현하기 위해 사용합니다.

백엔드 개발자의 업무

백엔드 개발자의 주된 업무는 서버 측 애플리케이션을 개발하는 것입니다.

대개 아래와 같은 순서로 진행합니다.

**과제 할당 → 과제 분석 → 개발 → 테스트(리뷰) → QA 및 버그 수정 → 배포 → 유지보수**

  • 과제할당 : 사업부, 마케팅, 개발 팀 등에서 개발 과제를 할당하면, 개발자는 해당 과제를 분석합니다.
  • 과제분석 : 예를들어 친구 초대 이벤트 와 같은 과제가 주어지면, ‘친구’는 무엇인지, ‘초대’는 무엇인지, ‘이벤트’의 조건, 보상 등에 대해 정의를 해야합니다.
  • 개발 : 과제 검토 후에는 기능 개발 및 버그 수정을 포함해 개발을 진행합니다. 깃허브 등의 프로그램으로 코드 리뷰를 통해 코드의 완성도를 높입니다.
  • 테스트 : 로직상의 문제, 성능 한계, 코드가 읽기 편한지 등의 테스트를 하고 과제 분석 → 개발 → 테스트 과정을 반복하며 완성도를 높입니다.
  • QA : 개발과 테스트를 어느 정도 마무리 이후 애플리케이션의 품질 보증을 위해 QA(Quality Assurance)를 신청합니다. QA팀이 없는 회사라면 개발 조직에서 담당합니다.
  • 배포, 유지보수 : QA 완료 이후 서버에 배포를 진행합니다. 여러 과제를 한번에 병합해 배포를 하거나 새로운 기능이 추가될 때 마다 배포를 진행하기도 합니다. 쉽고 안전하게 배포하고, 문제 발생 시 쉽게 이전 버전으로 되돌릴 수 있도록 준비해야 합니다.
    • 롤링 배포 : 특정 개수의 서버들을 돌아가며 배포
    • 블루 그린 배포 : 똑같은 서버 인스턴스를 두고 로드밸런서 설정 변경
    • 카나리 배포 : 전체 서버의 특정 비율만큼 배포해보고 문제 없는 경우 점점 배포를 늘림

CI/CD

  • CI : (Continuous Integration)지속적인 통합, 새로운 코드 변경이 정기적으로 빌드 및 테스트되어 저장소에 반영
  • CD : (Continuous Delivery)지속적인 배포 (실제 프로덕션 환경까지 변경된 코드 반영)

백엔드 프로그래밍 언어

  • 파이썬
    • 플라스크, 장고, FastAPI
  • C++ : 성능이 중요한 게임 서버 개발에 많이 사용
  • 자바 : 스프링, 스프링부트
  • C# : 미국에서 많이 사용, 닷넷 프레임워크
  • 자바스크립트 : Express, NextJS

자바 어너테이션

자바 애너테이션은 사전적 의미로는 주석이란 뜻이며, 자바로 작성한 코드에 추가하는 표식입니다. 보통 @ 기호를 사용하고, JDK 1.5 버전부터 사용가능하고, 클래스 파일에 임베드되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작합니다.

다양한 목적으로 사용하지만 보통은 메타데이터로 쓰이는 경우가 가장 많습니다.

메타 데이터란, 어플리케이션이 처리하는 데이터가 아닌, 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야 하는 지를 알려 주기 위한 추가 정보입니다.

어너테이션의 종류

  • 표준 어노테이션 : 자바가 기본적으로 제공하는 어노테이션
    • @Override : 선언된 메서드가 오버라이드 되었음
    • Deprecated : 더이상 사용되지 않거나 앞으로 사용하지 않을 것을 권장
    • SupressWarnings : 컴파일 경고 무시
  • 메타 어노테이션 : 어노테이션을 위한 어노테이션
  • 사용자 정의 어노테이션 : 사용자가 직접 정의
profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글