Q1. Class는 대체로 추상화를 위해 사용됩니다. ES5 자바스크립트에서 Class는 어떻게 동작할까요?
- 프로토타입 기반 객체지향 언어는 사실 클래스가 필요 없는 객체 지향 프로그래밍 언어이다. 그렇기에 ES6가 나오기 전인 ES5에선 클래스를 사용하지 않고 기존 생성자함수를 사용하여 추상화를 진행했다.
- 생성자 함수란 객체 인스턴스를 생성할 수 있는 함수로 전역 코드 단에 있고 함수의 프로토타입을 가지고 있는 함수만이 객체 인스턴스를 생성할 수 있다. 즉 생성자함수는 함수.프로토타입이란 숨은 객체를 가지고 있는데 이 객체가 없는 함수는 생성자 함수가 될 수 없다. (나는 화살표 함수가 생성자 함수가 될 수 없는 것으로 알고 있다.)
생성자 함수는 일반 함수와 기술적으로 차이가 없는데, 두가지 관례로 구분 짓는다고 한다.
- 함수 이름의 첫글자는 대문자로 시작한다(파스칼케이스)
- 실행시 반드시 new 연산자를 붙인다. - 클래스는 안에 프로퍼티와 메서드를 가진다. 생성자 함수로 객체 인스턴스를 생성할 경우 생성자함수의 프로토타입을 이용해서 메서드를 생성한다.
- 메서드 생성 방법 : 생성자함수.prototype.메서드이름 = function (...){....} - 또한 클래스는 인스턴스에선 사용하지 않고 오직 클래스만 사용하는 정적 메서드를 가지고 있는데, 생성자 함수에서 프로토타입을 사용하지 않고 함수에 직접 메서드를 넣는다.
- 클래스에서 정적 메서드 생성 방법 : static 키워드 사용
- 생성자 함수에서 정적 메서드 생성 방법 : 생성자함수이름.메서드이름 = function (){}
Q2. Class는 var 변수처럼 호이스팅이 일어날까요?
- 클래스 또한 함수로 평가되기에 클래스 선언문으로 정의하였다면 함수 선언문과 같이 소스코드 평가 과정, 즉 런타임 실행되기 전에 먼저 평가되어 함수 객체를 생성하고 그 시점에서 프로토타입도 같이 생성된다. 앞서 말한 생성자 함수는 단독으로 존재할 수 없고 프로토타입과 같이 존재하는 것처럼 객체만을 생성하기 위해 태어난 클래스 또한 단독으로 존재할 수 없고 프로토타입과 같이 존재한다.
- 클래스 선언문 또한 호이스팅이 발생하지만 let, const와 같다. TDZ가 존재하기에 호이스팅이 발생하지 않는 것처럼 동작한다.
Q3. 현재 백엔드에서 가장 일반적으로 사용되는 테스팅 기법은 어떤게 있으며, 가장 효과적인 테스팅 방법은 무엇인가요?
- TDD와 단위테스트 : Test Driven Development로 소프트웨어를 개발하는 방법 중 하나이다. 코드 개발과 별개로 테스트 코드를 먼저 작성하여 코드 개발 과정에서 오류가 발생했을 경우 기능별로 원인이 무엇인지 판단할 수 있다.
그렇기에 기능 별로 테스트를 하는 단위테스트를 통해 테스트코드를 작성한다. - 통합 테스트 : 단위테스트로 기능별로 테스트를 했다면 통합테스트는 기능들이 가지고 있는 유기적인 관계를 테스트 한다. 기능 각자에서 문제가 아닌 모듈 간의 상호작용이 정상적으로 작동되는가를 판단한다.
- 인수 테스트 : 이미 배치된 시스템을 대상으로 사용자의 관점에서 테스트하는 것.
Q4. 각 객체 간 의존성/결합도가 높을수록 예상치 못한 문제(Side effect)가 발생할 가능성이 높아집니다. 이를 해결할 수 있는 Decoupling이라는 개념이 존재하는데 Decoupling을 위한 디자인 패턴은 어떤게 존재할까요?
- 모듈화란? 모듈화란 소프트웨어를 각 기능별로 나누는 것을 말한다. 객체간 상호 의존성/결합이 높아지면 오류가 발생했을 경우 코드 수정에 어려움이 높아진다. 그렇기에 주어진 기능만 독립적으로 수행할 수 있게 모듈화를 진행하는 것이다.
- 설명이 잘 되어 있는 페이지들....ㄷㄷ
- https://sangcho.tistory.com/entry/%EC%9B%B9%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80%EC%95%8C%EC%95%84%EC%95%BC%ED%95%A07%EA%B0%80%EC%A7%80%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4
- https://yceffort.kr/2021/01/nodejs-4-design-pattern
Q5. 마이크로 서비스 아키텍쳐에서 서비스를 나눌 때 보통 각 서비스의 경계를 도메인으로 나눕니다. 도메인이란 뭘까요?
- 마이크로 서비스 아키텍쳐란?
- 대규모 서비스를 작은 자율 서비스로 나눠 독립적이고 제한된 단일 비즈니스 기능으로 구현한 것.
- 작고, 독립적이면서 느슨하게 결합되어 있게 구성하고 소규모 개발팀이 하나의 마이크로 서비스를 유지 관리할 수 있다.
- 또한 작고 독립적이라 각자의 마이크로 서비스를 독립적으로 배포할 수 있는 장점을 가지고 있다. 각자 다른 언어로 마이크로 서비스를 개발할 수도 있기 때문에 자율성이 보장되나 다양한 언어와 프레임워크로 인해 전체적인 유지 관리가 어려워질 수 있다. - 마이크로 서비스 아키텍쳐의 도메인이란?
- 각자 맡은 업무라 생각하면 된다. 각 마이크로 서비스가 담당하는 기능들이 도메인이고 이 기능들을 기준으로 작게 나눈 것이 마이크로 서비스이다.
- 마이크로 서비스의 가장 큰 해결 과제 중 하나는 개별 서비스의 경계를 잘 정의하는 것이다.
그렇기에 비즈니스 도메인을 모델링하고 도메인 모델을 만들어 기술 한계나 선택에 의해 설계가 끌려가는 상황을 방지할 수 있다.
'back-front end' 카테고리의 다른 글
Nginx를 이용한 https구현하기(aws ec2 - linux ubuntu-20.04 LTS) -2 (1) | 2022.09.17 |
---|---|
Nginx를 이용한 https구현하기(aws ec2 - linux ubuntu-20.04 LTS) -1 (0) | 2022.09.16 |
[항해99] require() (0) | 2022.07.30 |
[항해99] Express.js의 미들웨어 (0) | 2022.07.30 |
[항해99] ORM (0) | 2022.07.30 |
댓글