일개미 : 일상과 개발의 미학

[5주차 개인 과제] Spring 심화 주차 키워드 본문

Innovation Camp

[5주차 개인 과제] Spring 심화 주차 키워드

9low_28 2022. 8. 26. 21:54

[예제 1~5번]

 

💡 Q1. API란 무엇인가?

 

Application Programming Interface의 약어로 애플리케이션(응용프로그램)에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 즉, 애플리케이션이 어떤 프로그램이 제공하는 기능을 사용할 수 있게 만든 매개체이다. 컴퓨터와 인간을 연결시키는 사용자 인터페이스(UI)와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다. 서버와 클라이언트의 통신을 이어주는 매개체라고 이해하면 된다.

*그렇다면 HTTP API란?

HTTP를 사용하여 프로그램끼리 소통하는 API를 말한다. 보통 우리가 흔히 보는 OPEN API, facebook API, kakao API 등 대부분의 API는 HTTP이라는 통신 규칙으로 소통하는 API 이다.

 


💡 Q2. ClientServer란 무엇인가?

 

Client 란 유저가 직접 사용하는 웹 또는 앱을 말한다. 서비스의 앞단이라고 해서 프론트엔드(frontend)라고 불린다. 유저가 Client에 접속하면 그때 필요한 동작과 데이터를 처리하고자 서버에 요청한다. 이를 의미 그대로 Request라고하며 이때 Server에 직접 접근 하는 것이 아니라 API를 통해 요청하게 된다.

 

Server 란 서비스에 필요한 데이터를 저장하는 공간을 말한다. 서비스의 뒷단이라고 해서 백엔드(Backend)라고 불린다. Client에서 요청한 내용을 토대로 응답해주는데, 이를 의미그대로 Response라고 한다. IT서비스에서는 목적에 따른 다양한 Sever를 운영하며 이 때도 역시 Client에 API를 통하여 응답하게 된다.


💡 Q3. WAS란 무엇인가? Web Server와 차이점은 무엇인가?

 

WAS
DB조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다. “Web Container 혹은 “Servlet Container"라고도 불린다. Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어(환경)를 말한다. 즉, WAS는 JSP, Servlet 구동 환경을 제공한다. 주요 기능으로는 다음과 같다.

 

1. 프로그램 실행 환경과 DB 접속 기능 제공
2. 여러 개의 트랜잭션(논리적인 작업 단위) 관리 기능
3. 업무를 처리하는 비즈니스 로직 수행

 

 Web Server
소프트웨어와 하드웨어로 구분된다. 하드웨어는 Web 서버가 설치되어 있는 컴퓨터이며, 소프트웨어는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램이다. 요청에 따라 아래의 두 가지 기능 중 적절하게 선택하여 수행한다.

 

1. 정적인 컨텐츠 및 WAS를 거치지 않고 바로 자원을 제공
2. 동적인 컨텐츠 제공을 위한 요청 전달 (클라이언트의 Request를 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 Response)


Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.

WAS가 필요한 이유는 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 하지만 Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야한다.
이렇게 수행하기에는 자원이 절대적으로 부족하기 때문에 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.

 

만약 기능을 분배하지않고 WAS에서 Web Server의 기능을 모두 수행한다면, 서버에 부하가 커지게 되고 컨텐츠의 처리가 지연됨에 따라 수행속도가 느려져 페이지가 나타나는데까지 많은 시간이 필요할 것이다.

또한 물리적으로 분리하여 보안을 강화하고 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다. 예를 들면 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후에 WAS를 재시작하여 사용자에게 오류를 반환하지 않도록 한다.


💡 Q4. HTTP 프로토콜이란 무엇인가?

 

Web Server와 Web Client 간의 통신 규약이 HTTP 프로토콜(protocol)이다. 앱이나 웹을 구현할 때 사용하는 국제표준기술이다. 

 

HTTP 통신 프로토콜

1. 전송하는 파일 : html, text, image, 음성, 영상, 파일, json, xml(api) ,서버간 데이터 통신시

2. 전달형태 : HTTP messege

3. HTTP 보완기술 : 무상태(stateless)의 성격이라 로그인의 경우는 상태유지가 필요한데 이 때, 브라우저의 쿠키와 서버 세션을 이용하여 최소한의 상태를 유지해야한다.

 

  • 장점 : stateless (서버에 클라이언트 요청값을 저장하지 않고 요청정보를 누적해서 한번에 서버에 보내줌, 중간 서버에서 한번에 보내주기 때문에 서버확장성 높음, 최대한 상태유지를 덜해야 (서버에 정보저장을 덜해야) 대용량트래픽에 대비할 수 있다.
  • 단점: 비연결성을, 한번 요청시 전에 저장되어 있던 정보를 기억하지 못한다.

💡 Q5. Restful API는 무엇인가?

 

► 먼저 REST란 Representational State Transfer 로 각각 표현, 상태, 전달을 뜻하는 단어들의 합성어로 "(무언가)를 표현하여 상태전달 한다"는 의미이다. 여기서 무언가는 자원이라고 생각하면 되는데 자원이란(resource)란 소프트웨어가 관리하는 모든 것으로 예를 들면 문서/그림/데이터 혹은 해당 소프트웨어 자체 등을 의미한다.

쉽게 이야기하면 자원을 명명(표현)하여 상태(json, xml 등의 형식)로서 전달한다 라고 이해하면 된다. 이러한 REST의 원리를 따르는 시스템을 Restful 하다 라고 하는데 그렇다면 Restful API 란 바로 REST API를 제공하는 웹서비스를 Restful 하다 라고 하여 Restful API라고 하는 것이다. 

 

 

 

 

 


 

 

 

 

 

[DIY Section]

 

💡 Q1. 테스트의 필요성은 무엇인가?

 

► 숨어 있는 오류를 발견할 목적으로, 개발 과정에서 생성되는 문서나 프로그램에 있는 오류를 여러 기술을 이용해 검출하는 작업'이라 할 수 있다. 그러나 큰 의미에서 보면 '개발된 소프트웨어가 고객의 요구를 만족시키는지 확인시켜주는 것'이다. 즉 개발자와 고객에게 사용하기에 충분한 소프트웨어임을 보여주는 것이다. 그러려면 실행된 프로그램의 결과가 명세서의 내용과 일치함을 보여야 한다. 결과적으로 테스트의 목표는 '개발된 소프트웨어에 신뢰성을 높여주기 위한 작업'이라 할 수 있다.

철저한 테스트 과정 없이 오류가 포함된 상태로 소프트웨어를 완성하여 사용한다면 이후에 그 오류를 찾기 위해서 훨씬 많은 비용과 인력이 들어간다. 그러므로 소프트웨어를 사용하기 전에 충분히 테스트해야 비용과 시간을 절약할 수 있다.

[네이버 지식백과] 테스트의 필요성과 특징 (쉽게 배우는 소프트웨어 공학, 김치수)

 

*테스트의 중요성 

1996년에 프랑스에서 쏘아 올린 상업용 우주선 아리안(Ariane) 5호는 발사된 지 불과 40여 초 만에 공중 폭발하였다. 사고 원인을 조사해보니 64비트 숫자 값을 16비트 정수로 변환하는 과정에서 오버플로(overflow)가 발생하였고 이 터무니없이 잘못 계산된 값이 자동 폭발 장치를 작동시키면서 사고로 이어진 것이다. 이 또한 아리안 4호 프로젝트에서 내버려둔 불필요한 데드 코드를 간과한 결과이다.

이처럼 소프트웨어의 사소한 결함은 큰 사고로 이어진다. 그리고 이 사소한 결함은 테스트를 통해 줄일 수 있다. 이 장에서는 소프트웨어 결함을 최대한 찾아내어 줄이고, 소프트웨어의품질을 높여 신뢰성을 확보할 수 있는 소프트웨어 테스트에 대해 설명한다.

 

[네이버 지식백과] 테스트와 소프트웨어 테스트 (쉽게 배우는 소프트웨어 공학, 김치수)


💡 Q2. 단위테스트와 통합테스트의 차이점은?

❓ 단위 테스트란
프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해준다. 

▪️ 하나의 모듈이나 클래스에 대한 세밀한 부분까지 테스트 가능
▪️ 모듈 간에 상호 작용까지는 검증 불가


❗️ 통합 테스트
단위 테스트가 끝난 모듈을 통합하는 과정에서 발생할 수 있는 오류를 찾는 테스트가 통합 테스트이다. 실제 업무에서는 단위 모듈이 개별적으로 존재하는 것이 아니고 여러 모듈이 유기적 관계를 맺고 있으므로 이러한 모듈들을 결합한 형태로 테스트를 수행해봐야 한다.

 

▪️ 두 개 이상의 모듈이 연결된 상태를 테스트
▪️ 모듈 간의 상호 작용에서 발생하는 에러 검증 가능


💡 Q3. ERD란 ?

 

► Entity Relationship Diagram의 약어로 시스템의 엔티티들이 무엇이 있는지 어떤 관계가 있는지를 나타내는 다이어그램이다.  주로 다음과 같은 영역에서 사용됩니다.

  • 데이터 베이스 모델링
    관계형 DB에서 주로 널리 사용되며 엔티티와 속성들을 테이블과 컬럼들로 변환할 수 있습니다. 테이블들과 관계들을 시각화할 수 있기 때문에 설계 문제점을 쉽게 파악할 수 있다.

 

  • 소프트웨어 엔지니어링소프트웨어 계획 단계에서 서로 다른 시스템 요소와 서로 간의 관계를 식별하는데 도움 됩니다. Data flow Diagram 의 기초로써 종종 사용됩니다. 

 


💡 Q4. 원격 repo와 로컬 repo 의 개념 (Git)

 

► 'Git으로 관리되는 프로젝트' 를 Git 에서는 repo(repository 리포지토리의 약자) 라고 부른다. 내 컴퓨터에 저장되어있는 리포지토리를 로컬repo라고 합니다. Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격repo 라고 한다. 

원격repo와 로컬repo의 반영방식


💡 Q5. AWS IAM 이란?

 

► IAM은 Identity and Access Management의 약자로, AWS의 리소스에 대한 개별적으로 접근제어와 권한을 가지도록 계정 또는 그룹을 생성, 관리하는 서비스이다. 어떤 IAM 계정은 EC2 서비스만 접근할 수 있도록 권한을 부여하고, 다른 IAM계정은 S3 서비스만 접근할 수 있도록 권한을 나눌 수 있다. IAM 계정이 없다면 AWS 계정 자체가 모든 서비스에 대한 권한이 있기 때문에 보안상 취약하다. 따라서 IAM 계정을 생성해서 각 IAM 계정에 필요한 권한만 갖도록 설정할 수 있다. 또한 IAM 계정은 access key를 개별적으로 관리할 수 있기 때문에 보안성이 높아진다.

*S3 Simple Storage Service : 사용하기 쉬우며 기능이 강력한 스토리지 서비스. 저장된 파일을 가져오거나 정적 웹사이트를 만드는데도 사용된다.