[CS] 10월 27일: 지식 정리

Jung·2021년 10월 27일
0

CS

목록 보기
1/2
post-thumbnail

API (Application Programming Interface)

응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스. 즉, 하나의 프로그램이 다른 프로그램(기능)을 사용할 수 있게 하는 인터페이스라고 할 수 있다.

API는 UI(User Interface)와 비슷한 상호작용 역할을 하며, 이는 서로 다른 시스템이 만나 동작하기 위한 의사소통 역할을 한다. 데이터를 전달 및 처리하며 사용자에게 여러 응용 프로그램의 작업을 수행하고 완료하는 데에 있어 언제 어디서나 정보를 제공한다. 반면 UI와는 달리 사용자의 눈에 보이지는 않는다.

특정 기능을 사용하기 위해서 꼭 지켜야하는 약속이다.
설계된 약속을 기록해둔 것이 API 문서

Web API

웹 서버 또는 웹 브라우저를 위한 API다. HTTP를 이용하고 다양한 클라이언트에서 접근이 가능하도록 설계되어 있다. 웹 환경을 통해 제공되는 CRUD 인터페이스를 제공한다.

  • CRUD: Create, Read, Update, Delete

REST API

예전에 작성한 TIL
https://velog.io/@rudwnd33/TIL-10%EC%9B%94-12%EC%9D%BC

Web Server

클라이언트가 웹 브라우저에서 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버다. (정적 컨텐츠: HTML, CSS, Javascript, 이미지, 파일 등 변경 없이 동일하게 유지 되는 컨텐츠)
웹 서버가 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할도 한다.

ex) Apache, Nginx

WAS(Web Application Server)

웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달한다.

웹 서버와 웹 컨테이너가 합쳐진 형태다.
웹 서버 단독으로는 처리할 수 없는 데이터베이스 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있다.

웹 컨테이너: JSP, Servlet을 실행시킬 수 있는 소프트웨어

ex) Tomcat

참고
“[10분 테코톡] 👩‍🦰희봉의 웹서버 vs Was.” YouTube, YouTube, 21 Aug. 2019, https://www.youtube.com/watch?v=NyhbNtOq0Bc.

웹 호스팅

웹 서버의 일부 공간을 할당 받아, 인터넷 상의 공간을 고객이 이용할 수 있도록 임대해 주는 서비스.

HTTP HTTPS

HTTP는 인터넷에서 서버/클라이언트 모델을 따라 데이터를 주고 받을 수 있는 프로토콜이며 80번 포트를 사용한다. WWW(World-Wide-Web) 기반에서 세계적인 정보를 공유하는데 큰 역할을 했다.

HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있다.

공개키 암호화: A 키로 암호화 하면 반드시 B키로 복호화할 수 있고, B키로 암호화 하면 반드시 A키로 복호화할 수 있다.

클라이언트- 공개키를 얻어 데이터를 암호화해서 전송
서버- 개인키를 이용해 복호화

반대로 서버가 정보를 제공하는 경우에는 개인키로 암호화한 정보를 전송하기 때문에 공개키가 있는 클라이언트(사용자)는 누구나 정보를 알 수 있다.

HTTP보다 검색엔진 최적화(SEO)에서도 유리하다.

Cloud

클라우드는 물리적인 관여 없이 인터넷을 통해 컴퓨터의 리소스를 사용하는 것이다.

온프레미스

온프레미스(on-premise)는 소프트웨어 등 솔루션을 클라우드 같이 원격 환경이 아닌 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식을 말한다. 온프레미스는 클라우드 컴퓨팅 기술이 나오기 전까지 기업 인프라 구축의 일반적인 방식이었기 때문에 "이전의" 또는 "전통적인"이라는 단어와 함께 사용된다.

Deployment

프로그램 등을 서버와 같은 기기에 설치하여 풀어놓다.

  • Release: 작업한 버전을 배포하는 것이다. 릴리즈는 공개 또는 비공개일 수 있으며 일반적으로 신규 또는 업그레이드된 애플리케이션의 초기 생성을 구성한다. 릴리즈에 앞서 소프트웨어의 알파 및 베타 버전이 배포된다.

  • Deploy: 소프트웨어 배포에는 사용자가 소프트웨어 시스템 또는 업데이트를 사용할 수 있도록 하는 데 필요한 모든 단계, 프로세스 및 활동이 포함된다. 오늘날 대부분의 IT 조직과 소프트웨어 개발자는 수동 프로세스와 자동화 프로세스를 조합하여 소프트웨어 업데이트, 패치 및 새로운 애플리케이션을 배포한다. 소프트웨어 배포의 가장 일반적인 활동에는 소프트웨어 릴리즈, 설치, 테스트, 배포 및 성능 모니터링이 포함된다.

  • Distribute: 개발자로부터 최종 사용자에게 소프트웨어 및 응용 프로그램을 전달하는 프로세스다.

참고
Contributor, TechTarget. “What Is Release? - Definition from Whatis.com.” SearchSoftwareQuality, TechTarget, 31 Mar. 2008, https://searchsoftwarequality.techtarget.com/definition/release.

“What Is Software Deployment?” Sumo Logic, https://www.sumologic.com/glossary/software-deployment.

Techopedia. “What Is a Software Distribution? - Definition from Techopedia.” Techopedia.com, Techopedia, 1 June 2018, https://www.techopedia.com/definition/3263/distribution.

IP, Domain

IP는 인터넷에서 네트워크의 인터넷 프로토콜(IP)은 송신 호스트와 수신 호스트가 패킷 교환 네트워크(Packet Switching Network)에서 정보를 주고받는 데 사용하는 정보 위주의 규약이다.

IP 주소: 인터넷에 연결되어 있는 장치(컴퓨터, 스마트폰, 태블릿, 서버 등)들을 식별할 수 있는 주소

Domain은 ip 주소를 기억하기 어렵기 때문에 ip 주소에 이름을 부여한 것이다.

DNS, NameServer

DNS(Domain Name System)은 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소로 변환하는 것이다.

NameServer에는 도메인을 위한 DNS 레코드를 저장하는 서버로서, 수많은 IP 주소와 도메인이 저장되어 있다.

CDN(Content Delivery Network)

지리적으로 분산된 여러 개의 서버다. 웹 컨텐츠를 사용자와 가까운 곳에서 전송함으로써 전송 속도를 높일 수 있다.

Nginx

트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 이벤트 기반구조의 웹서버 소프트웨어다.

예전에는 Apache 서버를 많이 사용했지만 요즘은 Nginx를 더 많이 사용하는 추세다.

Apache

  • 쓰레드 / 프로세스 기반 구조로, 하나의 요청 당 쓰레드 또는 프로세스 하나가 처리하는 구조
  • 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심하다.
  • 하나의 쓰레드 : 하나의 클라이언트

Nginx

  • 비동기 Event-Driven 기반 구조 (프로그램 흐름이 이벤트에 의해 결정이 된다.)
  • 다수의 연결을 효과적으로 처리 가능
  • 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작 가능
  • 동시에 여러 개의 요청을 처리할 수 있다.

참고
Hwangdukhyun 글쓴이. “[Nginx] 개념 및 활용.” VigorFinTech, 19 Feb. 2019, https://vigorfintech.wordpress.com/2018/10/31/nginx-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/.

Firewall(WAF)

WAF(Web Application Firewall)는 웹 애플리케이션 보안에 특화되어 개발된 솔루션이다.
WAF의 기본 역할은 SQL Injection, Cross-Site Scripting(XSS) 등과 같은 웹 공격을 탐지하고 차단하는 것인데, 직접적인 웹 공격 대응 이외에도, 정보유출방지솔루션, 부정로그인방지솔루션, 웹사이트위변조방지솔루션 등으로 활용이 가능하다.

참고
“웹방화벽.” Wikipedia, Wikimedia Foundation, 7 Dec. 2020, https://ko.wikipedia.org/wiki/%EC%9B%B9%EB%B0%A9%ED%99%94%EB%B2%BD.

SQL Injection

응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.

SQL Injection 예시
https://blog.daum.net/techtip/12415199

XSS(Cross-Site Scripting)

관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다.
공격자는 사용자를 가장하여, 쿠키와 세션 토큰, 사이트에 민감한 정보들에 접근이 가능해지며 클라이언트 코드를 재작성하여 해킹하기도 한다.

CSRF(Cross-Site Request Fogery)

사용자가 특정 웹사이트에 자신의 의지와는 무관하게 공격자가 의도한 행위(CRUD)를 요청하게 하는 공격 기법이다. XSS 공격으로 탈취한 정보를 이 때 사용할 수 있다.

profile
97kim.github.io

0개의 댓글