2022.12.18 TIL

SUADI·2022년 12월 18일
0

대망의 실전 프로젝트 발표가 끝이 났다. 3달간의 대장정이 마무리되는 순간이였다. 열심히 달려오다가 마지막에 끝맺음이 좋지 않아서 아쉬웠지만 3달 전에 비해 눈에 띄게 성장한 것만은 분명하다. 지금까지 너무나도 힘들었지만 앞으로는 더 힘들 예정이다. 공부에 끝이 없다는게 막막하기도 하지만 긍정적으로 생각하면 성장 가능성도 무궁무진하다는 의미이니까 하루하루 열심히 살아나가야 겠다.

오늘은 실전프로젝트에서 사용한 기술 스택에 대해 정리해 보는 시간을 가지려고 한다. 각각의 기술들을 가져다가 사용만 해봤지 정확히 어떤 녀석들인지는 제대로 파악하고 있지 못하다. 하나 하나 공부해 보면서 이 기술을 왜 사용했는지 선 사용 후 공부를 해볼 생각이다.

[1] 기술 스택

{1} Spring


지금까지 스프링에 대해 잘 알지도 못하고 배워왔던 것 같은데 이번 기회에 스프링의 사용법이 아닌 스프링의 특징에 대해 알아보자.

(1) 스프링이란?

스프링은 자바 기반의 웹프레임워크로서 엔터프라이즈 급 개발을 하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다. 엔터프라이즈 급 개발이란 기업을 대상으로 하는 개발이라는 뜻으로 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로 부터 행해지는 매우 큰 규모의 애플리케이션을 개발하기에 최적화되어있다.

(2) 스프링 특징

제어 반전(IoC : Inversion of Control)을 지원한다.

프레임워크 없이 개발할 때에는 객체의 생성, 설정, 초기화, 메소드 호출, 소멸(이하 객체의 생명주기)을 프로그래머가 직접 관리한다. 하지만, 스프링 프레임워크를 사용하면 객체의 생명 주기를 모두 프레임워크에 위임할 수 있다. 즉, 외부 라이브러리가 프로그래머가 작성한 코드를 호출하고, 흐름을 제어한다.

특별한 객체에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어 간 것을 IOC, 제어의 역전이라고 한다.

의존성 주입(DI : Dependency Injection)을 지원한다.

객체의 의존성을 개발자가 아닌 외부(IOC Container)에서 주입함으로써 객체간의 결합을 약하게 해주며 유지보수가 좋은 코드를 만들어준다. 스프링에서는 스프링 컨테이너가 각 클래스의 의존관계를 Bean설정 정보를 바탕으로 자동으로 결정 및 연결해준다.

관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다.

AOP, 관점 지향 프로그래밍은 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법을 말한다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누고 관점을 기준으로 각각 모듈화하는 프로그래밍 기법이다.

{2} AWS EC2

Amazon Elastic Compute Cloud (Amazon EC2)는 Amazon Web Services (AWS) 클라우드에서 독립된 가상의 컴퓨터를 임대해 주는 웹 서비스이다. 물리적인 컴퓨터가 아닌 리눅스, 윈도우와 같은 OS가 설치된 가상 머신을 빌려주는 것이기 때문에 사용자는 원격으로 해당 컴퓨터(인스턴스)를 제어하여 사용할 수 있다.

EC2의 장점으로는

  • 용량을 늘리거나 줄일 수 있다. (탄력성)
  • 사용한만큼 지불하므로 저렴하다.
  • 사용자가 인스턴스를 완전히 제어할 수 있다.
  • 보안 및 네트워크 구성, 스토리지 관리 효과적이다.

{3} MYSQL


세계에서 가장 많이 쓰이는 관계형 데이터베이스 관리 시스템(RDBMS)이다. 표준 데이터베이스 질의 언어 SQL(Structured Query Language)을 사용하고, 매우 빠르고, 유연하며, 사용하기 쉬운 특징이 있다. 다중사용자, 다중 쓰레드를 지원하고, C, C++, 자바, Pyton 스크립트 등을 위한 응용프로그램 인터페이스(API)를 제공한다. 유닉스나 리눅스, Windows 운영체제 등에서 사용할 수 있다.

{4} S3


AWS Simple Storage Service(S3)는 인터넷용 스토리지 서비스입니다.

S3의 특징으로는

  • 제공하는 단순한 웹 서비스 인터페이스를 사용하여 웹에서 언제 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있다.
  • 높은 확장성과 신뢰성을 갖춘 빠르고 경제적인 데이터 스토리지 인프라에 액세스할 수 있다.
  • 단독 스토리지로도 사용할 수 있으며 EC2, EBS, Glacier와 같은 다른 AWS 서비스와도 함께 사용할 수 있어 클라우드 어플리케이션, 컨텐츠 배포, 백업 및 아카이빙, 재해 복구 및 빅데이터 분석을 포함한 다양한 사례에 알맞다.
  • 사용한 스토리지 만큼 요금이 청구되며 데이터 전송부분에서는 해당 리전 내에서는 데이터 송수신은 무료이고 S3에서 인터넷으로 데이터를 송수신 시에도 가격이 매우 저렴하다.

{5} Github Actions

GitHub Actions는 GitHub에서 제공하는 CI(Continuous Integration, 지속 통합)와 CD(Continuous Deployment, 지속 배포)를 위한 서비스이다.

GitHub Actions를 사용하면 자동으로 코드 저장소에서 어떤 이벤트(event)가 발생했을 때 특정 작업이 일어나게 하거나 주기적으로 어떤 작업들을 반복해서 실행시킬 수 있다. 예를 들어, 누군가가 코드 저장소에 Pull Request를 생성하게 되면 GitHub Actions를 통해 해당 코드 변경분에 문제가 없는지 각종 검사를 진행할 수 있다. 또 어떤 새로운 코드가 메인(main) 브랜치에 유입(push)되면 GitHub Actions를 통해 소프트웨어를 빌드(build)하고 상용 서버에 배포(deploy)할 수도 있다. 뿐만 아니라 매일 밤 특정 시각에 그날 하루에 대한 통계 데이터를 수집시킬 수도 있다.

{6} Web Socket

HTTP를 이용한 실시간 통신의 문제를 해결하기 위해 HTML5부터 웹소켓이 등장했다. 웹소켓은 실시간 양방향 통신을 지원하며 한번 연결이 수립되면 클라이언트와 서버 모두 자유롭게 데이터를 보낼 수 있다. 이는 채팅과 같은 연속적인 통신에 대해 계속 유사한 통신을 반복하지 않게 해주어 통신의 효율성도 개선하였다.

{7} Json Web Token

JWT는 JSON 포맷을 이용해 인증정보와 같은 사용자에 대한 정보를 저장하는 Claim 기반의 Web Token이며 RFC7519 표준이다.
JWT는 서버와 클라이언트간에 정보를 주고 받을 때 HTTP Request Header에 JSON 토큰을 넣은 후 서버는 별도 인증과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증 및 인가과정을 수행한다.

0개의 댓글

관련 채용 정보