본문 바로가기

Happyer16

(314)
Prototype, Object 이해하기 Prototype이란 무엇인가?Java에서와 다르게 Javascript는 프로토타입 기반의 언어라고 한다. 항상 귀동냥으로 자바는 객체지향 언어이고 이는 자바스크립트에서 지원이 되지 않는다고만 알고 있었다. ( ECMA2016에서 class 키워드가 등장하긴 했지만... ) 공부를 하다보니 Object가 무엇인지도 제대로 안 되어 있음 Object란 무엇인가?Object란 객체이다. 객체란 Java에서 배웠던 것 처럼 데이터(주체)와 행동(데어터에 관련된 동작)을 정의하고 있는 것이다. 자바스크립트는 객체 그 자체라고 하는데, 이것이 어떠한 의미인지는 아직 와닿지는 않는다. 위에서 정의한 것처럼 흔히 데이터는 프로퍼티라 칭하고, 행동은 메소드라 칭한다. Property 프로퍼티는 객체의 속성을 나타내는 ..
[Docs번역-Tutorial]#3.Master.Detail(리스트만들기) 이번에는 영웅들의 리스트를 보여주고, 사용자가 영웅을 선택하여 상세내역을 확인할 수 있도록 만들어 볼 것입니다. 코드는 다음과 같습니다. ( https://embed.plnkr.co/?show=preview ) 파일 디렉토리angular-tour-of-heroessrcappapp.component.tsapp.module.tsmain.tsindex.htmlstyles.csssystemjs.config.jstsconfig.jsonnode_modules ...package.json heroes 보여주기프로젝트를 만들기 영웅들의 리스트를 보여주기 위해서는 view template를 추가하자. Mock data로 사용할 10개의 heroes를 만들자.src/app/app.component.ts (hero arra..
[Docs번역-Tutorial]#2.The Hero Editor(양방향 바인딩) 개발 환경 로컬에 구성하기 angular-tour-of-heroes 프로젝트를 만들기 위해 해당 링크(https://angular.io/guide/setup)를 따라하자. angular-tour-of-heroessrcappapp.component.tsapp.module.tsmain.tsindex.htmlstyles.csssystemjs.config.jstsconfig.jsonnode_modules ...package.json 우리가 이 모든것을 완성하고 나면 다음과 같은 화면(https://embed.plnkr.co/?show=preview)을 볼 수 있다. 앱을 compile하고 실행하자.터미널에 다음과 같은 명령어를 입력하자. npm start 이 커맨드는 TypeScript 컴파일러가 "watch ..
[Docs번역-Tutorial]#1.Introduction 이 튜토리얼에서는 영웅들의 인력관리를 위한 앱을 만들 것이다. 이 앱은 Angular의 핵심 기반들을 다룰 것이다. 우리는 data-driven app에 기대하는 다양한 특징들을 가진 앱을 만들것이다. ( 영웅들의 리스트를 얻고 보여주며, 선택된 영웅들의 세부내역을 편집하고, 영웅들의 데이터를 다양한 관점에서 보여줄 수 있는 ) 우리는 영웅들의 데이터를 보여주고, element들을 보여주고 숨기기 위해 build-in directive(지시자)를 사용할 것이다. 우리는 영웅들의 상세 내용과 영웅들을 배열로 보여주기 위해 component 들을 만들 것이다. 우리는 read-only 데이터를 위해 one-way data binding을 사용할 것이다. 우리는 편집가능한 필드를 위해 2-way databin..
이클립스 RCP 개념 우리는 Java Application 개발을 편하게 하기 위해 Eclipse IDE를 사용하고 있다. 그렇다면 Eclipse IDE는 무엇으로 개발이 된 것일까? 위의 그림을 살펴보면 RCP(Rich Client Platform) 위에서 개발된 것을 확인할 수 있다. RCP 어플리케이션은 플러그인의 집합(SWT, JFace, Workbench UI)과 플러그인을 실행하기 위한 런타임(Platform Runtime - based on OSGi) 으로 구성된다. 그렇다면 우리가 궁금해야 할 것들은 이클립스가 플러그인을 어떻게 관리하는지? 플러그인은 스스로에 대한 정보를 가지고 있다. 그리고 함께 동작해야 할 다른 플러그인에 대한 정보를 지정한다. -> 런타임이 이걸 보고 의존성 해결해주고 플러그인을 결합해준..
#java.util.ConcurrentModificationException 이슈 상황 단순히 enhanced for loop ( 15줄과 같은 반복문 ) 를 쓰면서 제거하는 예제인데, 멀티쓰레드에서나 보던 ConcurrentModificationException이 발생하였다. 도대체 왜??? remove() 함수를 따라가다 보면 checkForComodification() 이라는 함수를 확인할 수 있다. expectedModCount는 리스트의 데이터 변경 여부를 체크하기 위한 변수이다. remove()에서 호출하는 fastRemove()에서 modCount를 증가시킨 상태에서 Iterator의 next()가 호출 되면 위의 예외를 던지게 된다. ( fail-fast???) ConcurrentModificationException의 정의 This exception may be thr..
인덱싱(Indexing)이란? Entry Sequenced File 레코드가 입력되는 순서대로 저장되는 파일이다. 레코드가 입력되는 순서대로 저장되어 있기 때문에 정렬이 되어 있지 않다. 어떤 레코드를 찾기 위해서는 파일의 앞쪽부터 순차적으로 레코드를 읽어야 한다. 파일에 입력하는 레코드가 파일의 어느 위치에 입력되어야 하는지 찾는 것 또한 하드디스크의 데이터를 읽기 때문에 오버헤드인덱스를 이용한 구조 인덱스는 키와 참조필드로 구성되어 있는 데이터 구조로써, key값에 따라 정렬이 되어있다. 인덱스와 데이터 파일간의 관계를 나타내면 아래의 그림과 같다. 인덱스는 실제 데이터보다 크기가 매우 작기 때문에 메모리에 유지할 수 있다.
#4일차. 지도 API 연동하기 위치 정보를 통해 저장하고 조회하는 서비스를 만들고 싶다. 구글 지도 API와 내가 알아야 할 게 무엇이 있을까? 위치 기반 서비스 서버? 일반 웹서버에서 데이터를 받아 알아서 처리하면 되지 왜 굳이 위치 기반 서비스 서버를 따로 두는 것일까? ( 설계상 HTTP 통신을 여기로 하는 것인가? 웹서버가 두개인것인가? ) 위치 정보는 경도와 위도 좌표를 사용하는데, 이 두가지 숫자 값을 데이터베이스에 그대로 저장하면 데이터 양도 늘어나고, 한꺼번에 비교하여 조회하는 경우 검색속도는 현저하게 떨어진다고 한다. 위치 정보는 공간 데이터(Spatial Data)라고 한다. 그리고 검색속도를 떨어지지 않도록 공간 인덱싱 방법을 사용한다. ( 보통 일반 데이터는 데이터베이스에서 B-Tree 인덱싱 방법을 사용함,) ..
#3일차. GitHub에서 지도 프로젝트 소스를 관리해준다. 나는 여기서 merge가 되면, project를 알아서 빌드해주고 테스트해서 보고해주는 자동화 기능이 있었으면 좋겠다. 만약 빌드가 실패하면 바로 책임자를 찾을 수도 있을 것이다. 그래서, JenKins를 사용하려 했는데, 우리가 테스트할 DataBase도 공유가 되어야 한다. 이 모든 것을 갖춘 환경을 만들고 싶다. 설치 중 1) linux 설치1. VirtualBox 설치 2. Linux 설치 https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.4/x86_64/product-software Red Hat Enterprise Linux 7.4 Binary DVD 3. VirtualBox 새로 ..
#4. 빌드는 어떤 방식으로 진행되는가 ( 메이븐 라이프 사이클 ) 빌드는 어떻게 진행되는 걸까? 메이븐의 라이프사이클과 페이즈 일반적으로 프로젝트를 빌드할 때의 과정 빌드 결과물 삭제컴파일에 필요한 자원 복사소스 코드 컴파일테스트압축배포메이븐은 이와 같이 미리 정의하고 있는 빌드 순서를 라이프사이클이라 한다. 그리고 라이프사이클의 빌드 단계를 페이즈라 부른다.기본 라이프 사이클compile : 소스코드 컴파일test : JUnit과 같은 단위 테스트 프레임워크로 단위 테스트를 한다. 테스트가 실패되면 빌드 실패로 간주한다.package : pom.xml의 packaging 값에 따라 압축한다. ( jar,war 등 )install : 로컬 저장소에 압축한 파일을 배포한다.deploy : 원격 저장소에 압축한 파일을 배포한다.clean 라이프 사이클빌드를 통하여 생성된 ..