클라우드 스쿨/강의 정리

10주차 - Spring Boot, AWS

qqlzzb 2023. 11. 28. 17:40
기간 230710 - 230714
배운 내용 Spring Boot, AWS

 Spring Boot

Spring Boot는 의존성 세트라고 불리는 Starter 를 사용해 간편하게 의존성을 사용할 수 있다.

비즈니스 로직에만 집중할 수 있도록 만들어 주는 도구.

 

1. 특징

- Starter : 의존관계(dependency)를 간단하게 정의하는 모듈

- 빌드 도구 : 버전 해결 등 개발을 효율화하는 플러그인 (Maven, Gradle)

- Config 클래스 : XML이 아닌 애너테이션과 자바로 설정

- 자동 구성 : 디폴트 구성이 적용되고, 필요한 부분만 설정 (항상 등록하는 것들 자동 구성)

- Main Application 클래스 : 자바 명령으로 내장된 톰캣을 실행

- 설정 파일

 

 

2. Spring Boot Layer

- 프리젠테이션 계층

Http 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할 (컨트롤러)

 

- 비즈니스 계층

모든 비즈니스 로직을 처리. 서비스를 만들기 위한 로직 (서비스)

 

- 퍼시스턴스 계층

모든 데이터베이스 관련 로직을 처리 (DAO)

 

 

3. OR Mapper framework

java - 오브젝트 언어 => 데이터를 오브젝트에 담음
DB - RDB => 데이터를 테이블에 담음

이를 구조적으로 매핑시켜 주는 것 = ORM(OR Mapper) 예) MyBatis..
Spring에서는 OR Mapper로 Spring Data JPA 제공


 Spring Data JPA = 하이버네이트를 쓰든 마이바티스를 쓰든 동일하게 사용할 수 있도록 공통 인터페이스 제공

- CRUD 처리를 위한 공통 인터페이스 제공

- repository 개발 시 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입

- 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있도록 지원

 

 lombok = 어노테이션으로 getter setter 만들 수 있음

Java 라이브러리로 반복되는 gettersettertoString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리.
@Getter, @Setter 쓰면 자동 생성
@Data하면 Getter, setter, ToString, NoArgsConstrutor, AllArgsConstructor 한 번에 5개 다 생김


4. Spring Boot 테스트

spring-boot-starter-test 스타터에 포함된 테스트 목록

 

- JUnit : 자바 언어를 위한 단위 테스트 프레임워크

- Spring Test & Spring Boot Test : 통합 테스트

- AssertJ : 검증문 작성하는 데 사용되는 라이브러리

- Mockito : 가짜 객체인 목 객체 생성 관리 테스트 프레임워크

 

Junit
@Test가 붙은 메소드가 테스트 수행하는 메서드
이 메서드 안에는 특정 함수의 리턴 값 받아서 우리가 기대하는 값이랑 같은지 비교하는 내용 들어있음. 같으면 테스트 통과
@DisplayName = 테스트 이름
=> 함수 너무 많을 때 한 번에 테스트 가능


 AWS

1. VPC

VPC = virtual private cloud

리소스 격리하고 싶으면?
1. account 2개 쓰기
2. account 1개일 땐 vpc 사용

- CIDR (Classless Inter-Domain Routing)
VPC 생성 시 VPC의 IPv4 주소 범위를 CIDR 블록 형태로 지정해야 함

RFC 1918 규격에 따라 프라이빗 IPv4 주소 범위에 속하는 CIDR 블록을 지정하는 것이 좋음

RFC 1918 범위 CIDR 블록의 예
10.0.0.0 - 10.255.255.255 (10 / 8 접두사) 10.0.0.0 / 16
172.16.0.0 - 172.31.255.255 (172.16 / 12 접두사) 172.31.0.0 / 16
192.168.0.0 - 192.168.255.255 (192.168 / 16 접두사) 192.168.0.0 / 20



2. Subnet

Public Subnet : Internet Gateway를 통해 인터넷 간에 통신 가능한 서브넷

Private Subnet : VPC 내에서만 통신 가능한 서브넷

 

- Private Subnet의 2종류
1) Nat GW와 연결되는 서브넷
2) Nat gateway와도 연결 안 되는 서브넷


Public Subnet은 들어가고 나가는 거 가능
Private Subnet에 있으면 Nat GW 통해서 나갈 순 있음. 들어오는 건 안 됨(밖에서 못 찾음)

Private Subnet도(사내망..) 특정 사이트만 열어둘 수도 있고,

아예 막을 수도 있고, 안 막고 인터넷 가능하게 할 수도 있음

=> Public Subnet은 IGW와, Private Subnet은 nat와 연결되거나, 아니거나(IGW와는 연결되지 않음)


3. 보안그룹 / NACL

- 보안그룹
리소스 수준(EC2 instance)에서 특정 인바운드 및 아웃바운드 트래픽을 허용하거나 거부함
허용규칙만 지원 : 허용되지 않는 거 다 거부 
상태 저장 : 규칙에 관계없이 반환 트래픽이 허용됨
나가는 거 허용-> 리턴돼서 들어오는 건 그냥 통과
외부에서 들어온다 -> 들어온 애가 반환되어 나갈 때도 그냥 통과(들어올 때 통과였으면 나갈 때도 통과)

- NACL (Network ACL)
서브넷 수준에서 특정 인바운드 또는 아웃바운드 트래픽을 허용하거나 거부함
허용 및 거부 규칙 지원
DDOS 가 특정 ip로 들어오니까 다 막으려면 NACL로(거부 가능하니까)
상태 비저장 : outbound inbound 규칙 따로 있음(서브넷 나갈 때/들어올 때 허용할지 말지) 들어올 때 나갈 때 다 검사. 
트래픽 허용 여부 결정할 때 가장 작은 번호의 규칙부터 평가해서 위쪽에서 거부하면 거부


4. AWS 상에서 고가용 아키텍처 구축 (ELB)

가용성 = 필요할 때 사용 가능한 성질(s3에선 99.9%)
내구성 = 시스템 깨지지 않는 성질(s3에선 99.999999999%)

- 이중화 옵션 (아래로 갈수록 고가용. 단점은 관리가 어려움)
1) 하나의 리전에 단일 가용영역
2) 하나의 리전에 멀티 가용영역(가용영역 다르게) <<- 가장 권장
3) 여러 리전
4) 여러 퍼블릭 클라우드에 이중화

로드밸런서 = 부하분산. 헬스체크(핑 날리거나, 요청날 려서 응답 정상적으로 오는지 체크)

-> 서버 죽었는지 판단해서 죽었으면 다른 데로 요청

- ELB (Elastic Load Balancing)

수신되는 애플리케이션 트래픽을 여러 Amazon EC2 인스턴스, 컨테이너 및 IP 주소에 걸쳐 분산하는 관리형 로드 밸런싱 서비스

 

- ELB 기능

1) HTTP, HTTPS, TCP, UDP 및 SSL(보안 TCP, UDP) 프로토콜을 사용함

2) 외부 또는 내부에 위치할 수 있음

3) 각 로드 밸런서에 DNS 이름이 부여됨

4) 비정상 인스턴스를 인식하고 이에 대응함

- ELB의 종류

1) NLB

- L4단의 로드밸런서 지원

- 애플리케이션에 대한 탁월한 성능 및 정적 IP

- TCP, UDP 트래픽의 로드 밸런싱

 

2) ALB

- L7 단의 로드밸런서 지원

- 유연한 애플리케이션 관리

- HTTP 및 HTTPS 트래픽의 고급 로드 밸런싱 (http 프로토콜 이해, url 읽고 해석, url 별로 부하 분산 가능)

 

'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글

13주차 - 리눅스, 도커  (0) 2023.11.30
11주차 - AWS  (0) 2023.11.29
9주차 - 프로시저, 트리거, 스프링  (0) 2023.11.27
8주차 - DB  (0) 2023.11.24
7주차 - JAVA  (0) 2023.11.23