Weekly I Learned (5월 3주차)

YEON·2022년 5월 16일
0

Weekly I Learned (2022)

목록 보기
5/15
그 주의 화요일, 금요일을 지정 날짜로 업데이트 합니다

1. @Mock, @Mockbean 의 차이

@Mock 의 의존성 주입은 @InjectMocks 에 의해 동작되고,
@Mockbean 은 스프링 컨텍스트에 mock 객체를 등록하며 동일한 유형의 기존 Bean을 대체한다.
스프링 컨텍스트에 의해 @Autowired 가 동작할 때 등록된 mock 객체를 사용할 수 있도록 동작한다.

때문에, Spring Boot Container 가 테스트 시에 필요하고 Bean 이 Container 에 존재 해야 한다면 @MockBean 을 사용하고 그렇지 않다면 @Mock 을 사용할 수 있다.




2. OSIV

OSIV 란 Open Session In View, 말 그대로 영속성 컨텍스트를 뷰까지 열어두는 것이다.
OSIV 의 핵심은 뷰에서도 지연 로딩이 가능하도록 할 수 있다는 점이다.

  • 영속성 컨텍스트를 뷰까지 열어두어야할 상황은 언제인가?
    뷰를 렌더링하여 연관된 엔티티도 함께 사용해야할 경우가 있다.
    ex) 데이터를 조회해서 view에 반영하려고 controller에서 repository(DB)를 직접 접근하려는 경우

대부분 트랜잭션은 서비스 계층에서 시작하고 종료되므로, 서비스 계층이 끝나는 시점에 영속성 컨텍스트도 함께 종료된다.
때문에 컨트롤러와 뷰 상에서는 엔티티가 준영속 상태 로 존재하게 된다.
하지만, OSIV를 사용하게 되면 영속성 컨텍스트가 유지되어 엔티티도 영속 상태 로 유지된다.

그 얘기는 즉, 준영속 상태일때는 변경 감지와 지연 로딩이 동작하지 않아 문제(LazyInitializationException)가 발생될 수 있지만 OSIV를 통해 영속성 컨텍스트가 살아있게 된다면 뷰에서도 지연 로딩이 가능해진다.

OSIV는 스프링 프레임워크가 제공하는 OSIV 라이브러리를 통해 사용할 수 있다.
스프링 OSIV트랜잭션을 비즈니스 계층에서만 사용한다. 그러므로 엔티티 수정은 트랜잭션이 있는 계층에서만 동작(반영)하고, 트랜잭션이 없는 프리젠테이션 계층은 지연 로딩을 포함하여 조회 만 가능하다.

다만, 만약 엔티티를 수정한 직후에 뷰가 아니라 트랜잭션을 시작하는 서비스 계층을 호출한다면 변경 감지가 동작하여 수정 사항이 DB에 반영될 수 있다는 주의점이 있다. 그 이유는 같은 영속성 컨텍스트를 여러 트랜잭션이 공유할 수 있기 때문이다.




3. 통신망 / 네트워크

AWS에서 Region, Availability Zone, VPC 과 같은 망들을 통신망으로 보며,
통신망이란 노드들과 이들 노드들을 연결하는 링크들로 구성된 하나의 시스템이다.

망을 분리해야하는 이유는 무엇일까?
망을 분리하는 것의 가장 큰 이유는 외부 악성코드를 원천적으로 차단하는 것에 의미를 두고있다.
망분리는 크게 두가지로 나뉘어 진다.

  • 물리적 망분리 (CBC 방식 ): 물리적으로 망을 분리하는 것이다.
  • 논리적 망분리 (SBC 방식 ): 통신망을 소프트웨어적으로 업무용과 인터넷용으로 사용할 수 있도록 논리적으로 분리된 망을 뜻한다.

망 구성하기 미션
웹 서비스를 운영하기 위해 AWS를 사용하여 네트워크 망을 구성해보았다.
위의 설명에 대한 추가적인 내용과 이에 관한 자세한 설명을 → 포스팅 을 통해 정리해놓았다.




4. Bastion Server

Bastion Server 란?
보안에 문제가 생겼을시 서비스에 심각한 문제를 방지하고자 피해를 보더라도 Bastion Server만 재구성하여 서비스에 영향을 최소화하도록 다른 서버들과 구분하여 보안을 위해 고안된 서버이다.
또한, 보안에 문제가 생겨 서비스용 서버에 접근이 어려울때 서비스 정상 트래픽과 관리자용 트래픽을 구분하여 별도의 경로를 확보할 수 있다.

추가적인 설명은 포스팅을 참조하면 된다.







[참고]
http://www.incodom.kr/Mock
https://www.crocus.co.kr/1555
https://seondongpyo.github.io/infra%20workshop/infra-workshop-week1-step1/

profile
- 👩🏻‍💻

0개의 댓글