1. API(Application Programming Interface)
- 애플리케이션: 고유한 기능을 가진 모든 소프트웨어
- 프로그래밍: 프로그래밍 방식으로
- 인터페이스: 애플리케이션 간의 통신 규약
- 즉, 클라이언트 요청과 서버 응답의 구성 방법을 약속해 놓은 것이다
https://aws.amazon.com/ko/what-is/api/
2. Client / Server
- 클라이언트 서버 모델: 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자 네트워크 아키텍처
3. WAS(Web Application Server) / Web Server
- Web Server는 HTTP를 기반으로 정적 컨텐츠 요청을 받아 저장된 파일을 제공하며, 동적인 컨텐츠 요청은 WAS에 보내 WAS가 처리한 결과를 클라이언트에 제공한다
- WAS는 HTTP를 통해 DB 조회나 다양한 로직처리를 요구하는 동적 컨텐츠 제공을 위해 만들어진 미들웨어
- 웹 컨테이너 or 서블릿 컨테이너라고도 불린다 (컨테이너 = JSP, Servlet을 실행시킬 수 있는 소프트웨어)
- Web Server의 기능을 분리하여 서비스 성능을 최적화하기 위해 만들어졌다
- Web Server이 필요한 이유:
- 예) 이미지 파일 요청
- 정적인 이미지 파일을 DB에서 조회하여 불러오는 동안 클라이언트는 먼저 html 문서를 받을 수 있다
- WAS가 필요한 이유:
- 동적 컨텐츠 제공 시 Web Server만 사용한다면 클라이언트가 요청한 결괏값을 모두 완성한 후에 제공하게 된다
- WAS를 통해 요청에 맞는 데이터를 DB와 통신하며 비즈니스 로직에 맞게 그때그때 제공할 수 있다
- 이렇게 Web Server와 기능을 분리하여 자원을 효율적으로 사용하고 서버의 부하를 낮추는 것이다
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
4. HTTP(HyperText Transfer Protocol)
- 데이터를 주고 받는 양식을 정의한 통신 규약 중 하나, 대부분 http 사용
- 특징: 무상태, 비연결성
의사표현 수단 | 의사표현 방법 | |
인간 | 말 | 언어 |
컴퓨터 | 네트워크 | 통신 규약 |
- 웹 브라우저의 요청과 서버의 응답
- 클라이언트의 요청에 맞는 데이터 있다면 그 데이터를 기반으로 브라우저에 그려줌
- Header: method(GET, POST, PUT, DELETE...) + metadata(payload의 데이터에 대한 메타데이터)
- Payload: 실제 데이터
5. Restful API
- REST(Representational State Transfer): HTTP URI를 통해 자원을 식별하고, HTTP METHOD를 통해 해당 자원에 대한 작업을 적용하는 것
- REST 아키텍처를 따르는 API가 REST API이며 REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라 함
- HTTP를 사용하여 데이터 교환 -> 무상태
- 서버의 응답은 웹 페이지의 일반적인 그래픽 렌더링이 없는 일반 데이터
클라이언트 요청
- 고유 리소스 식별자 (URL): 목표 리소스 알려줌
- 메서드: 리소스에 수행해야 하는 작업을 서버에 알려줌
- 헤더: 식별자, 메서드를 표함해 요청 형식, 요청 상태 등에 대한 정보, 그리고 파라미터로 자세한 정보 담음
서버 응답
- 상태 표시줄: 3가지 상태코드
- 2XX: 성공
- 3XX: URL 리다이렉션
- 4XX: 클라이언트 오류
- 5XX: 서버 오류
- 헤더: 응답에 대한 메타데이터, 서버, 인코딩, 날짜 및 컨텐츠 유형 등에 대한 정보
- 본문: 표현 형식에 맞는 실제 데이터
https://aws.amazon.com/ko/what-is/restful-api/
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
6. S3(Simple Storage Service)
온라인 오브젝트(객체) 스토리지 서비스
- 온라인 -> 데이터 조작에 HTTP/HTTPS를 통한 API 사용
- 객체로된 파일을 다루는 저장소
- 객체: 데이터 + 메타데이터
- 버킷: 객체를 저장 및 관리
- 버킷에 객체를 저장하면 URL 생성
- 특징:
- 저장 용량이 무한대에 가까움
- 비용은 EC2와 EBS로 구축하는 것보다 훨씬 저렴
- 구조적으로 성능이 이미 좋아 EBS처럼 Auto Scaling이나 Load Balancing이 필요없다
- 별도의 클라이언트 설치나 Active X를 통하지 않고, HTTP로 업로드/다운로드 가능
- S3자체로 정적 웹 서비스 가능
- 동적 웹페이지는 EC2에서, 정적 웹페이지는 S3에서 처리하면 좋은 성능과 비용절감을 이뤄낼 수 있다
7. IAM(Identity and Access Management)
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
적합한 사람과 디바이스만 필요할 때 원하는 애플리케이션과 리소스 및 시스템에 접근할 수 있도록 허용하는 프레임워크
- 루트 사용자: AWS를 처음 생성할 때 받은 모든 AWS의 서비스 및 리소스에 완전한 액세스 권한이 있는 사용자
- IAM 사용자를 처음 생성할 때만 루트 사용자 권한을 사용하고, 이외의 일상적인 작업 및 관리 작업에는 사용하지 않는 것을 권장
사용자에 대한 신뢰 여부 인증 -> 액세스 수준에 따른 권한 인증
- 인증: 사용자가 맞는지 확인하는 절차
- 권한 인증: 해당 사용자가 특정 기능이나 리소스에 액세스할 수 있는지 확인하는 절차
- AWS SDK를 활용해 프로그래밍 방식으로 IAM을 사용할 수 있다
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html
https://www.okta.com/kr/blog/2021/04/what-is-identity-and-access-management-iam/
8. 객체 연관관계
객체와 테이블의 패러다임 차이를 중간에서 해소해주는 것이 ORM 기술이며, 이 기술을 활용하여 객체 연관관계를 객체 지향적으로 짤 수 있게 된다
- 객체는 참조를 이용하여 연관된 객체를 찾는다
- 테이블은 외래 키로 조인을 이용해 연관된 테이블을 찾는다
- 객체를 테이블 중심으로 모델링하면 객체 지향 언어의 장점을 활용할 수가 없다
1. 단방향 연관관계
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
private int age;
// 테이블과 같이 외래키 참조
// @Column(name = "TEAM_ID")
// private Long teamId;
// 객체 자체를 참조
@ManyToOne // 멤버 : 팀 -> N : 1
@JoinColumn(name = "TEAM_ID") // 테이블의 외래키 매핑
private Team team;
2. 양방향
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team") // 연관관계 주인 지정
List<Member> members = new ArrayList<Member>(); // 컬렉션 추가
- 객체 연관관계에서 실제로 양방향은 없고, 단방향 2개를 묶어서 그렇게 칭하는 것이다.
- 테이블에 외래키를 설정하면 양쪽으로 조인하여 양방향 모두 탐색 가능한 것과의 차이이다.
- 따라서 객체 양방향 연관관계에서는 그 관계의 주인을 설정해줘야 하고, 주인만이 외래키를 등록, 수정, 삭제가 가능
- 주인이 아닌 쪽은 조회만 가능 -> mappedBy 사용
- 외래키가 있는 테이블과 매핑되는 엔티티 쪽의 참조 필드를 연관관계의 주인으로 설정
- 양방향 다대일 관계에서는 다 쪽이 외래키를 가지며 연관관계의 주인
출처: 김영한님 JPA 프로그래밍 기본편
'이노베이션 캠프' 카테고리의 다른 글
[WIL] 5주차 (0) | 2022.09.04 |
---|---|
[TIL] 32일차 (0) | 2022.09.02 |
[TIL] 31일차 (0) | 2022.09.01 |
[TIL] 29일차 (0) | 2022.08.30 |
[WIL] 4주차 (0) | 2022.08.28 |