📜 TIL

프로젝트에 유용한 백엔드 기술스택 (feat. 자소서에 어필하기 좋음)

둥굴둥굴둥굴레차 2021. 12. 20. 14:21

레벨 1

SSAFY를 졸업한 수료생이라면 이것은 반드시!

 

JWT

 

  • 웹 표준으로서 두 개체에서 JSON객체를 사용해 가볍고 자가 수용적인 방식으로 정보를 안정성 있게 전달.
  • Stateless 하기 때문에 대용량 분산 구조에서 사용하기에 적합.
  • Mobile환경에서는 안전한 영역에 JWT를 보관함.
  • Redis에 JWT Token을 보관해 사용하는 경우가 많음.
  • 토큰 기반의 인증 시스템에서 주로 사용.
  • 주로 회원 인증이나 정보 전달에 사용된다.

 

 

Docker

  • 컨테이너 기반의 오픈소스 가상화 플랫폼.
  • 리눅스 컨테이너를 사용해 프로세스를 격리시키기 때문에 가볍고 빠르게 동작함.
  • 동일한 프로그램을 여러 서버에 배포하는 것이 가능함.
  • 이미지를 생성해서 공휴하는 것이 가능함.
  • Jenkins와 더불어 BE, FE배포에 사용할 수 있음.

레벨 2

프로젝트의 방향성과 같다면 써볼 수 있는 것들.
자소서, 포폴에 쓰면 좋을 기술들.

 

JPA

  • 대부분의 서버 개발에서 활용중.
  • 레거시에만 Mybatis를 사용하고 있고 JPA를 많이 넘어가는 정도.
  • Java를 위한 영속성 관리와 ORM을 위한 표준 기술.
  • SQL중심적 개발의 문제점을 해소.
  • 지루한 코드의 반복(Mybatis의 단점)을 없애 생산성을 높임.
    (쿼리의 95%는 지루하게 반복되는 CRUD)
  • 예) Mybatis를 사용하고 있었는데 새로운 칼럼이 한 개 추가되었을 땐 쿼리를 수정해야 하고,
    이때 잘못된 문법으로 수정하게 되면 오류 발생..
  • 자소서에 최근 트렌드에 대해 이해하고 있다는 강한 시그널을 보낼 수 있음.

 

면접관의 질문

Django와 Spring 사용해보셨네요? 두 개를 비교하여 답변해주세요.

 

 

Websocket

  • 동시성을 사용해야 할/실시간으로 상호작용하는 웹서비스 기능이 있을 때(예: 채팅) 사용하는 기술
  • 연결을 맺는 비용이 크기 때문에 연결을 만들어 두고 계속해서 사용하는 방법
  • 실제 회사에서도 자주 쓰는 기술
  • 지속적으로 서버와 통신이 필요한 기능(알림, 채팅 등)을 구현하기에 적합
  • 브라우저의 버전에 따라 Websocket을 지원하지 않는 경우가 있기 때문에 socket.io란 라이브러리를 주로 사용
  • Redis와 함께 쓰면 좋다
    빠르고 메모리 기반의 실시간성에 적합한 Redis기 때문에 적합. Redis의 subscribe와 publish라는 기능과 웹소켓을 함께 쓰면 좋다.
  • 면접관에게 어필하기 좋은 기술 스택

 

Redis

  • 메모리기반의 Key-value 데이터 베이스.
  • 메모리를 사용하고 Key-value 구조기 때문에 대단히 빠르다.
  • 만료일을 지정해서 저장하는 기능이 있기 때문에 JWT나 채팅을 저장할 때 사용하면 좋다.
    개발자가 만료일을 지정해서 저장하는 기능을 직접 만들 필요 없다.
  • 과도한 사용자의 요청을 count 해서 막는 방법은?

 

Jenkins

  • CI를 위한 도구.
  • Git과 같은 형상 관리 도구에서 변경이 감지되면 자동으로 빌드해주는 것이 가능.
  • 빌드 후 Pipeline을 통해 정적 분석/자동화 테스트를 수행한다.
  • 분석과 테스트가 종료되면 개발 서버에 Delpoy 하거나 개발 서버와 동일한 결과물로 상용 서버에 Deploy 한다.

 

Spring Batch

  • Batch(일괄처리) 작업을 수행해주는 Spring Module.
    예) 배달의 민족에서 매일 0시에 하루 매출을 정산.
  • Quartz나 Spring Scheduler등과 함께 사용한다.
  • 정기적으로 수행해야 하는 대용량 데이터 처리가 있다면 Batch를 사용해보자.
  • LINE에서 실제 Spring Batch를 사용하고 있음.