。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

프로젝트/BleuAuction

[BleuAuction 리팩토링] 11/30(목) 아직 시작도 안 했다,,!

quarrrter 2023. 11. 30. 23:15

[해온 것]

[REFACTOR, TEST] Menu 리팩토링 및 테스트 #98

https://github.com/NC7-BleuAuction/bleuauction_be/pull/110

 

[REFACTOR, TEST] Menu 리팩토링 및 테스트 #98 by seunghyun333 · Pull Request #110 · NC7-BleuAuction/bleuauction_be

작업 PR #98 작업내역 Menu Controller 및 Service Refactoring Menu기능의 TestCase제작 고려사항 지금까지 무조건 등록, 수정, 삭제 가능한 경우의 테스트 케이스를 만들어 보았습니다.. 안 되는 상황일 때 테

github.com

 

[다음 회의까지 해올 것]

Notice 컨트롤러, 서비스 수정 및 테스트 케이스 작성

 


그냥 좋은게 좋은거라서 테스트를 작성하는 줄 알았는데 ,, 아니었다.

테스트가 없으면 리팩토링 자체를 할 수가 없다네!?  

컨트롤러에서 서비스로 로직 옮기기가 거의 다 끝나가기 때문에 이제,, 해치웠나? 더 이상 할게 뭐 있지? 싶었는데 이 작업에 몰두하면서 본 작업에는 들어가지도 않았다는 걸 잊고 있었다. 리팩토링 과정에서  결과값을 똑같이 만들기 위해 테스트 케이스 준비한건데 잠깐 잊어버렸다. 다음 회의까지 맡은 부분을 끝내오고, 코드라인 줄이기를 얘기 해보기로 했다. 매일 조금씩 해야하는데 쉽지가 않다,,!! 

 

테스트 추가하기
  • 클래스가 해야 하는 모든 작업을 확인하고, 각각의 작업에 대해 클래스가 오류를 범할 수 있는 조건에 대해 테스트
  • 단순한 member 변수를 읽거나 쓰는 접근자(accessor)는 테스트 x
  • 문제가 생길만한 곳에 집중해서 추가

 

 


라우팅 식 분류 별로 라우트 ?

라우팅이란 무엇인가요?

라우팅은 네트워크에서 경로를 선택하는 프로세스입니다. 컴퓨터 네트워크는 노드라고 하는 여러 시스템과 이러한 노드를 연결하는 경로 또는 링크로 구성됩니다. 상호 연결된 네트워크에서 두 노드 간의 통신은 여러 경로를 통해 이루어질 수 있습니다. 라우팅은 미리 정해진 규칙을 사용하여 최상의 경로를 선택하는 프로세스입니다.

라우팅이 중요한 이유는 무엇인가요?

라우팅은 네트워크 통신의 효율성을 높입니다. 네트워크 통신 장애가 발생하면 웹 사이트 페이지가 로드될 때까지 사용자가 기다리는 시간이 길어집니다. 또한 웹 사이트 서버에서 많은 수의 사용자를 처리하지 못해 서버의 작동이 중단될 수 있습니다. 라우팅은 네트워크가 정체 없이 최대한 많은 용량을 사용할 수 있도록 데이터 트래픽을 관리함으로써, 네트워크 장애를 최소화해 줍니다.

라우터란 무엇인가요?

라우터는 컴퓨팅 디바이스와 네트워크를 다른 네트워크에 연결하는 네트워킹 디바이스입니다. 

경로 결정 - 라우터는 소스에서 대상으로 이동하는 데이터의 경로를 결정합니다. 지연, 용량 및 속도와 같은 네트워크 지표를 분석하여 최상의 경로를 찾으려고 시도합니다.

데이터 전달 -라우터는 선택한 경로의 다음 디바이스로 데이터를 전달하여 최종적으로 대상에 도달하도록 합니다. 디바이스와 라우터는 동일한 네트워크에 있거나 서로 다른 네트워크에 있을 수 있습니다.

로드 밸런싱 -경우에 따라 라우터가 여러 경로를 사용하여 동일한 데이터 패킷의 여러 사본을 전송할 수도 있습니다. 이 방법을 통해 데이터 손실로 인한 오류를 줄이고 이중화를 구현하고 트래픽 볼륨을 관리합니다. 

 

*로드 밸런싱: 애플리케이션을 지원하는 리소스 전체에 네트워크 트래픽을 균등하게 배포하는 방법.

최신 애플리케이션은 수백만 명의 사용자를 동시에 처리하고 정확한 텍스트, 비디오, 이미지 기타 데이터를 빠르고 안정적인 방식으로 사용자에게 반환해야 합니다. 이렇게 많은 양의 트래픽을 처리하기 위해 대부분의 애플리케이션에는 데이터가 중복되는 리소스 서버가 많이 있습니다. 로드 밸런서는 사용자와 서버 그룹 사이에 위치하며 보이지 않는 촉진자 역할을 하여 모든 리소스 서버가 동일하게 사용되도록 하는 디바이스입니다.

 

라우팅 유형에는 어떤 것들이 있나요?

라우터가 라우팅 테이블을 만드는 방식에 따라 라우팅은 2가지 유형으로 구분됩니다.

정적 라우팅

정적 라우팅에서는 네트워크 관리자가 정적 테이블을 사용하여 네트워크 경로를 수동으로 구성하고 선택합니다. 정적 라우팅은 네트워크 설계나 파라미터가 일정하게 유지될 것으로 예상되는 경우에 유용합니다.

이 라우팅 기법에서는 정적 특성으로 인해 네트워크 정체와 같은 단점이 나타날 수 있습니다. 링크에서 장애가 발생할 경우에 대비해 관리자가 대체 경로를 구성할 수도 있지만, 일반적으로 정적 라우팅은 네트워크의 적응성과 유연성을 저하시켜 네트워크 성능을 제한합니다.

동적 라우팅

동적 라우팅에서 라우터는 실제 네트워크 조건에 따라 런타임에 라우팅 테이블을 만들고 업데이트합니다. 동적 라우팅 테이블을 만들고 유지 관리하고 업데이트하는 규칙 집합인 동적 라우팅 프로토콜을 사용하여 소스에서 대상까지 가장 빠른 경로를 찾으려고 시도합니다.

동적 라우팅의 가장 큰 장점은 트래픽 볼륨, 대역폭, 네트워크 장애 등 변화하는 네트워크 조건에 대응한다는 것입니다.

 

클라우드 라우팅이란 무엇인가요?

클라우드 라우팅은 Border Gateway Protocol(BGP)을 사용하여 두 가상 클라우드 네트워크 간 또는 클라우드 네트워크와 온프레미스 네트워크 간의 연결을 동적으로 관리합니다. 클라우드 라우팅은 클라우드의 변화하는 네트워크 상태에 자동으로 대응합니다.  라우터의 기능을 가상화하는 소프트웨어인 클라우드 라우터는 클라우드 라우팅을 지원합니다.

DNS 라우팅이란 무엇인가요?

도메인 이름 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 시스템이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다. 이 이름 정보를 시스템 정보에 매핑하는 데이터는 DNS 서버에 별도로 저장됩니다. 웹 사이트로 데이터를 전송하기 전에, 라우터는 DNS 서버와 통신하여 데이터 패킷을 전송할 정확한 시스템 주소를 식별해야 합니다.

특히 많은 사용자가 동시에 웹 사이트를 방문하려 하는 경우, DNS 서버 통신은 병목 지점이 될 수 있습니다. DNS 라우팅은 DNS 서버와의 통신을 관리하는 다양한 라우팅 전략 및 알고리즘을 의미합니다. 지연 시간 기반 라우팅 및 지리적 위치 기반 라우팅과 같은 다양한 전략을 통해 DNS 서버 통신 로드를 관리할 수 있습니다.

 

 //https://aws.amazon.com/


자바파일에 제목 용량, 글자수 제한이 있었음, 그래서 줄임말이 중요했음

요즘엔 줄임말 말고, 풀네임 쓰는 추세


 

의존성 중요성

모듈간 의존성이 줄어든다.
모듈간 변경에 민감해지지 않아, SOLID 원칙 중 OCP(개방-폐쇄 원칙)을 만족하는 코드를 작성할 수 있다.

(기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙. 확장에 대해서는 개방적(open)이고, 수정에 대해서는 폐쇄적(closed) 의미로 정의한다.)
재사용성이 높아진다.
유닛 테스트를 쉽게 만들어준다.
가독성이 증가한다.


랜더링:

HTML, CSS, 자바스크립트 개발자가 작성한 문서가 브라우저에서 출력되는 과정을 말합니다.

 

클라이언트 사이드 랜더링(CSR)

  • 서버에서 전체 페이지(빈 페이지)를 최초 렌더링하고 사용자가 요청할 때마다 클라이언트 내(브라우저)에서 렌더링 
  • 사용자가 홈페이지를 접속한 경우(최초 접속) 클라이언트는 이를 확인하고 서버로 요청 >> 서버는 빈 페이지(HTML, CSS(JS링크 포함)를 클라이언트에게 전달 >> 전달받은 클라이언트에서 해당 화면을 그려주고 스크립트를 다운로드하여서 최종 화면을 출력 >> 사용자 요청에 따라 클라이언트 내에서 페이지 수행
  • 초기 페이지 랜더링 느림, 페이지간 이동 속도 빠름, 속도 빠름, 새로 고침이 없어 깜빡임 없음 

 

 

서버 사이드 랜더링(SSR)

  • 서버에서 사용자에게 보여줄 페이지를 모두 미리 구성한 뒤 페이지를 렌더링
  • 사용자가 브라우져에서 요청 >> 클라이언트에서는 이를 확인하고 서버로 요청 >> 서버에서 데이터를 포함한 미리 구성된 정적 파일(HTML, CSS)을 클라이언트에게 전달 >> 전달받은 클라이언트에서 스크립트가 수행하여 최종적인 화면을 브라우저에 그려 사용자에게 보여줌.
  • 초기 페이지 랜더링 빠름, 빈 페이지가 아닌 화면을 보여주기에 검색엔진 최적화(SEO) 강점
  • 새로고침하면 페이지 전체를 랜더링 해야해서 깜빡임 발생, 페이지 호출 시 구성하는 리소스를 모두 준비해 보내기 때문에 상대적으로 서버의 부하 발생 

효과적인 쿼리문 어떻게 짤까!? 

 

쿼리플랜 실행 : 어디 쿼리에서 얼마나 걸렸는 지 확인 가능 // 여기서 쿼리를 바꿔보면서 성능 높여보기

ex) 인덱스를 탈 수 있는 쿼리로 수정했더니 2초가 1초 됐다.

    • SQL문을 DB에서 어떻게 처리할 것인지!
    • 각 단계에서 DBMS가 사용하는 액세스 경로 확인 가능
    • 쿼리 실행에 필요한 리소스 비용 정보를 제공
    • 장점
      • 성능 문제를 식별하는 데 도움이 된다.
      • 실행 계획을 변경하여 쿼리 성능을 개선할 수 있다.
      • 쿼리 최적화를 위한 정보를 제공한다.