You will be fine

<Interview> 6. 기타 정리

by BFine
반응형

1. 디자인패턴

  • 코딩을 할때 효율적인 구조 & 방법으로 코딩을 하는 방법론

  • 코드명확, 모듈화, 유지보수, 리소스 최소화

    가. 싱글턴

    • 인스턴스를 하나만 만들어서 사용하기 위한 방법, 인스턴스를 여러개 생성하는 리소스 낭비를 막기 위한 방법
    • 메서드와 변수를 static으로 선언하여 사용한다. 이때 멀티스레드 환경에서 동시 접근 문제가 발생하는데 동기화 처리가 필수적이다.

    나. 옵저버

    • 하나의 객체가 상태가 변하면 그와 연관 되어있는 객체들이 갱신이 되는 일대다로 변경하는 방법
    • 어떤 페이지에 새글이 올라오면 모든 구독자에게 알려주는 것을 예로 들 수 있다.

    다. 스트레지티(전략)

    • 어떤 작업을 수행하기 위해 능동적으로 알고리즘을 변경할 수 있는 방법
    • 동작파라미터화의 방법을 통해서 알고리즘을 바꿔주는 형태이다.

2. 서버사이드 렌더링 , 클라이언트사이드 렌더링

  • 렌더링이란 웹페이지 접속시 그 페이지를 화면에 그려주는 것이다.
  • SSR은 요청이 있을때마다 서버에서 처리한 후 새로고침으로 다시 페이지를 보여주는 것을 말한다.(JSP) 성능문제
  • 클라이언트의 쿠키의 보안문제를 세션으로 처리한다는 장점이 있다.
  • CSR은 SPA(싱글페이지)라고 불리며 페이지가 로드되고 나면 요청에 따라 데이터만 변경하는 것을 말합니다.
  • 서버는 데이터만 보내고 화면을 다시 그리는 것은 JavaScript가 처리하기 때문에 일관성있는 코드 작성가능
  • 관련 데이터를 가져오고 화면에 보여주는 부분 등 때문에 초기 구동 속도가 느린 단점이 있다.

3.BOM & DOM

  • BOM(Brower Object Model)로 브라우저와 관련된 객체들의 집합을 이르는 말이다. DOM은 BOM중 하나이다.
  • BOM의 최상위 객체는 window 이고 DOM은 하위 객체들이다.
  • DOM(Document Object Model)은 XML이나 HTML문서에 접근하기 위한 일종의 인터페이스 이다.
  • 예를 들어 HTML에 있는 head, body 와 같은 태그들은 하나의 요소가 된다.
  • 문서의 구조화된 표현방법을 제공하여 프로그래밍언어가 접근할 수 있는 방법을 제공한다는 뜻이다.
  • 브라우저가 HTML페이지를 인식하는 방법이라고 할 수 있다. Document객체와 그 하위 객체들의 집합이다.

4. JavaScript

  • 스크립트 언어로 브라우저가 직접 해석하여 실행하는 인터프리터 언어이다.

  • 변수형 선언없이 사용가능, 객체기반, 라이브러리(JQuery)

    가. Promise

    • javascript는 비동기 형태로 처리되고 실행된다.(어떤 로직이 끝나기 전에 다음 것이 실행, javascript는 기다려주지 않는다.)
    • 원치 않는 비동기를 해결하기 위해서 콜백함수를 이용한다. 이를 사용하면 로직이 끝난 후에 처리가 된다.
    • 처리해야 하는 부분이 많이질수록 콜백함수도 늘어나게 되는데 이를 콜백지옥이라고 한다.
    • 이 콜백지옥을 해결하는 API를 Promise이다.

    나. 스코프

    • 프로그래밍에서 변수와 함수에 접근하려면 이름:값으로 된 대응표가 필요한데 이게 겹칠수 있기 때문에 규칙을 정한 것이 스코프이다.(유효한범위)
    • 자신의 스코프에 해당 함수나 변수가 없으면 외부참조하고 있는 스코프를 찾아서 사용한다. (가장 밖에 있는 것이 글로벌 스코프)
    • 함수 레벨 스코프 : var나 함수선언식으로 만들어진 함수가 가지는 스코프레벨, 함수내부에서 유효한 스코프(이 부분때문에 ES6에서는 쓰지 않는다.)
    • 블록 레벨 스코프 : ES6의 let, const로 만들어진 변수가 가지는 스코프레벨 , 블록내부에서 유효한 스코프
    • 렉시컬 레벨 스코프 : 소스코드가 작성된 문맥을 통해 스코프레벨이 결정, 호출이 중요한게 아닌 위치가 어디 있는지가 중요하다. (반대는 동적레벨스코프) NOTE: 스코프 레벨을 끌어올리는 것을 호이스팅이라 한다.(var a; a=2; 따로 정의)
      var x = 1;
     
      function foo() {
        var x = 10;
        bar();
      }
     
      function bar() {
        console.log(x);
      }
     
      foo(); // 1
      bar(); // 1
     
     
      function foo() {
        var color = 'blue';
        function bar() {
            console.log(color);
        }
        bar(); // blue
      }
      foo();
     
      bar는 foo안에 속하기 때문에 foo스코프를 외부 스코프(outer lexical environment) 참조로 저장한다.
      그리고 bar는 자신의 렉시컬 스코프 체인을 통해 foo의 color를 정확히 참조할 것이다.

    다. 클로저

    • 생성 시점에 스코프 체인에 대한 것을 기억하고 있는 함수를 의미한다.
    • 클래스 형태를 사용하고 싶은 경우에 사용한다. (각각의 다른 인스턴스생성)
      var color = 'red';
      function foo() {
        var color = 'blue';
        function bar() {
            console.log(color);
        }
        return bar;
      }
      var baz = foo();
      baz(); // 'blue' --> foo 호출이 끝났는데도 foo의 스콮를 참조한다
     

    라. prototype

    • class 개념이 없는 javascript에서 그 역할을 하며 상속에 기능도 수행한다.
    • 프로토타입 연결과 프로토타입 속성 2가지 유형이 있다.

    마. ES6

    • 자바스크립트의 표준안으로 문법과 기능이 추가되었다.
    • => 키워드가 추가되어 익명으로 함수구현

    바. let & const

    • let은 블록레벨 스코프를 가지는 변수 선언 키워드 이고 const는 상수를 선언하는데 값이 변하지 않는 변수이어야 한다.
    • let은 같은 스코프에 중복선언, 호이스팅 불가능

5. TDD, DDD, DevOps, 애자일

  • Test-driven Development 테스트 주도 방법론으로 테스트케이스를 먼저 작성하고 코드를 개발하는 개발 방법론이다.
  • 장점으로는 실시간으로 코드의 결함을 확인, 테스트를 하면서 디자인 수정 피드백이 빠르다
  • Domain Driven Design 사용자를 위해 도메인에 관련된 문제를 해결하는 능력
  • DevOps 개발과 운영이 하나의 팀이 전체적인 프로세스를 협력하는 것을 의미한다(배포까지)
  • 애자일은 개발 단위로 짧게 짧게 리뷰하고 수정하고 개발하는 짧은 cycle time을 가지는 방법론

6. Build Tool

  • Build란 컴파일, 패키징, 테스팅, 배포까지의 부분을 처리하는 것을 의미하고 Build Tool은 이를 자동화 해주는 것

    가. Gradle

    • Groovy(DSL : Domain Specific Languge)를 기반으로 하는 Build 자동화 도구
    • 컴파일 필요없이 소스코드 그대로를 실행(스크립트 언어의 장점)
    • xml의 정적인 단점을 Groovy로 변경하여 동적인 빌드과정에 적합하게 만듬(직접 코드작성)
    • 설정 변경이나 Dependency 추가,삭제등이 간결해짐(Maven 프로젝트가 커질수록 커짐)

    나. Maven

    • XML(Extensible Markup Language)를 기반으로 하는 Build 자동화 도구(for Java)
    • POM(Project Object Model) 이용해 Build하고 다른 프로젝트와 공유할 수 있음
    • 파일, 트래킹 감지, 코드의 생명주기 등을 pom.xml 에서 관리

7. CI/CD

  • Continuous Integration는 Build , Test를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시해 주는 것을 의미한다
  • Continuous Deploy는 짦은 주기로 개발중인 소프트웨어를 배포하고 그 과정을 자동화 하겠다는 것을 의미한다.
  • Jenkins는 CI/CD서비스를 제공하는 툴이다. 소스코드관리, 자동빌드, 자동테스팅, 자동배포

8. 형상관리

  • 소스코드, 소스코드 버전과 히스토리를 관리하는 프로그램
  • SVN은 중앙컴퓨터에서 관리하는 방식으로 이 컴퓨터에 문제가 생기면 버전관리 작업을 할수없게 된다.(서버에 저장소:CVCS)
  • Git은 분산관리 방법으로 로컬에 저장소를 두고 원격저장소에 업로드하는 방식을 이용(로컬에 저장소:DVCS)
  • SVN은 커밋하면 바로 올라감, Git add commit push 단계를 거침

9. OAuth

  • OAuth는 인증을 위한 프로토콜로 서비스의 기능을 다른 애플리케이션(웹, 모바일 등)에서도 사용할 수 있게 한 Access Token 인증방식이다.
  • 보안의 수준이 어느정도 검증된 사이트(OAuth provider(ex. google, facebook))의 API를 이용해서 인증을 받는 방법(OAuth)(로그인없이)
  • OAuth 1.0은 웹 애플리케이션이 아닌 애플리케이션에서는 사용하기 곤란하다는 단점이 있다. 또한 절차가 복잡하다.
  • OAuth 2.0에서는 보안 강화를 위해 Access Token의 Life-time을 지정할 수 있다.
  • OAuth에 의해서 발급되는 access_token은 random string으로 토큰 자체에는 특별한 정보를 가지고 있지 않는 일반적인 스트링 형태 이다
  • 이 토큰은 스코프 정보를 담고 있어 사용자의 인가를 처리할 수 있다.

10. JWT

  • 리소스를 사용할 수 있는 정보를 가진 Claim기반의 권한 토큰을 발급
  • 기존의 사용하던 세션은 서버부하와 로드밸런싱된 서버 접근 문제를 해결
  • REST의 stateless를 가장 잘 구현할 수 있음
  • 헤더.내용.서명으로 이루어져있고 서명은 해싱알고리즘을 이용한다.

11. Blocking & Non-Blocking

  • I/O이라는 제한적인 영역에서 발생
  • Blocking은 수행결과가 끝날때까지 제어권을 가지고 있은 것을 말한다.
  • Non-Blocking은 호출됬을때 호출한 쪽으로 제어권이 넘어가는 것을 의미한다.

12. 함수표현식 & 함수선언식

  • 표현식은 함수자체이고 선언식은 함수의 값을 받는 형태이다.
  • 선언식은 호이스팅이 되지 않는다.

13. 컴포넌트

  • 프로그램의 기본단위는 함수, 모듈은 함수들의 집합이고 함수들이 특정순서로 동작하면서 기능을 한다.
  • 이러한 모듈은 큰 기능을 할때 사용한다. 예를들어 결제, 화면 모듈 등
  • 컴포넌트는 이러한 모듈들을 가지고 있는 하나의 큰 주제이다.

14. 빅데이터

  • 다량의 데이터들이 발생하면서 기존의 처리하지 못한 정형데이터(연산, 스키마)나 비정형데이터(텍스트, 음성)을 분석해 패턴을 파악하는 것

15. 클라우드

  • 컴퓨터 자원이나 제품을 웹상에서 서비스 형태로 제공하는 것이다.

  • 종류로는 Saas Iaas Paas가 있다.

    가. Saas

    • Sofeware as a Service로 클라우드에서 서비스 형태로 어플리케이션을 제공하는 것(완성품)

    나. Iaas

    • Infrastracture as a Service로 인프라(가상머신, 스토리지, 네트워킹 등) 제공하는 것(AWS)

    다. Pass

    • Platform as a Service로 인프라를 신경쓰지 않고 개발에 집중할수있는 환경(자동 테스팅)을 제공(구글맵엔진)

16. 5G

  • 무선 네트워크 기술 LTE(300Mbps) ->5G(20Gbps, 1ms)

  • 대역폭은 단위 시간동안 얼마나 얼마나 많은양을 전송할 수 있나.

  • 처리량은 출발지부터 목적지까지 단위 시간동안 얼마나 많은 양을 전송할 수 있나. (짐)

  • 특징

    가. 밀리미터 대역

    • 현재 주요 주파수 대역에 장비들이 집중되어있어 간섭 등으로 속도가 떨어지는 것을 보안함
    • 최대 300Ghz 대역까지 점령하여 스펙트럼을 넓힘

    나. massive MIMO

    • 백개의 안테나를 사용하는 거대한 MIMO

    다. 양방향

17. 동기 & 비동기

  • A와 B작업을 처리할때 A가 끝나야 B가 실행되는 순차적인 것이 동기, 비순차적인 것이 비동기이다.

18. 프레임워크와 라이브러리

  • 프레임워크는 공통부분이란 구현된틀을 말하며 사용자가 이안에 들어가서 개발할 어플리케이션에 맞게 개발하는 것이다.
  • 라이브러리는 다른 개발자들이 만들어 놓은 기능들을 사용자가 가져와서 어플리케이션 개발할때 쓰는 것이다.

19. HTTP 폴링

  • 실시간 웹 통신을 구현하기 위해 사용하는 방식으로 시간간격을 두어 주기적으로 요청하여 통신하는 방식이다.
  • 주기가 짧으면 서버에 부하, 길면 실시간성이 떨어지게 된다.

가. 롱롤링

  • 요청시 서버에서는 긴 시간을 간격을 두고 변화가 생기면 응답, Timeout이 될경우 연결을 끊는 방식이다.
  • 업데이트할때만 응답하기 때문에 서버의 부하가 적다. 너무 업데이트가 빠르면 주기가 짧은 폴링이 되버린다.

참고 & 출처

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기