<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; 따로 정의)
다. 클로저
- 생성 시점에 스코프 체인에 대한 것을 기억하고 있는 함수를 의미한다.
- 클래스 형태를 사용하고 싶은 경우에 사용한다. (각각의 다른 인스턴스생성)
라. 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이 될경우 연결을 끊는 방식이다.
- 업데이트할때만 응답하기 때문에 서버의 부하가 적다. 너무 업데이트가 빠르면 주기가 짧은 폴링이 되버린다.
참고 & 출처
- https://jwprogramming.tistory.com/68
- https://asfirstalways.tistory.com/335
- https://jusungpark.tistory.com/8
- https://futurecreator.github.io/2018/06/04/java-observer-pattern/
- https://hjjungdev.tistory.com/13
- https://jaroinside.tistory.com/24
- https://m.blog.naver.com/PostView.nhn?blogId=city7310
- http://tcpschool.com/javascript/js_dom_concept
- https://shldhee.github.io/2018/04/08/DOM/
- https://m.blog.naver.com/magnking/220972680805
- https://meetup.toast.com/posts/86
- https://www.youtube.com/watch?v=MbYShFxp-j0
- https://joshua1988.github.io/web-development/javascript/javascript-asynchronous-operation/
- https://jojoldu.tistory.com/7
- [https://www.slideshare.net/ssuser2f0173/devops-41731364][https://www.slideshare.net/ssuser2f0173/devops-41731364?qid=6e0ea5cc-662a-4160-af5f-ae48b4deff63&v=&b=&from_search=2]
- http://woowabros.github.io/experience/2018/06/26/bros-cicd.html
- https://rojhw.tistory.com/27
- https://www.slideshare.net/einsub/svn-git-17386752
- https://d2.naver.com/helloworld/24942
- https://medium.com/@OutOfBedlam/jwt
- https://victorydntmd.tistory.com/8
- https://wikidocs.net/22345
- https://www.youtube.com/watch?v=GEx_d0SjvS0
- https://webclub.tistory.com/458
반응형
'공부(2018~2019) - 스킨변경전 > Interview' 카테고리의 다른 글
<Interview> 7. 데이터베이스 정리 (0) | 2019.05.14 |
---|---|
<Interview> 5. 운영체제 정리 (0) | 2019.03.06 |
<Interview> 4. 자료구조 정리 (0) | 2019.03.05 |
<Interview> 3. 네트워크 정리 (0) | 2019.03.04 |
<Interview> 2. Spring 정리 (0) | 2019.03.04 |
블로그의 정보
57개월 BackEnd
BFine