전체 글

개발에 대한 내용을 주로 다루는 블로그입니다.
개발/Front End

ECMAScript6 길들이기 - 6 프록시

프록시는 객체에 임의의 동작을 넣기 위해 사용한다.자바스크립트에는 ES6부터 처음 도입되었다. 프록시란?프로퍼티 탐색, 할당, 생성자 호출 등 객체 기본 동작에 임의의 로직을 넣기 위해 사용하는 감싸미 용어 정리 - 타깃 : 프록시로 감쌀 객체- 트랩 : 동작을 가로채는 함수- 처리기 : 트랩이 있는 객체(처리기가 트랩을 가진다) 프록시 APIProxy 생성자로 생성하며 다음과 같이 생성함 var proxy = new Proxy(target, handler); - target : 프록시로 감쌀 객체- handler : 트랩이 있는 객체 트랩함수 동작을 가로채는 함수, 반환값을 가로채고 필터링해서 규칙에 부합하지 않으면 TypeError 예외를 발생시킴트랩 내부에서 this는 항상 처리기를 가리킴 get(..

개발/Front End

ECMAScript6 길들이기 - 5 리플렉트 API 구현

자바스크립트에도 자바처럼 리플렉션 기능이 있는데 ES6는 객체 리플렉션 가능한 새 리플렉션 API를 도입했음.ES5 시절에도 있었지만 체계가 없었고 실패하면 예외가 발생했다. ES6 리플렉션에서는 성공 여부로 true/false를 반환한다. Reflect 객체ES6 전역 Reflect 객체에 객체 리플렉션에 대한 모든 메소드가 있다.함수 객체가 아니므로 호출할 수 없고 new 연산자를 붙여 사용할 수도 없다. Reflect 객체의 메소드에 대해 하나씩 살펴본다. Reflect.apply(function, this, args)- function : 타깃 함수- this : 타깃 함수 내부의 this값- args : 타깃 함수의 인자를 지정한 배열 객체 주어진 this 값으로 타깃 함수 function을 a..

개발/병렬 프로그래밍

이펙티브 자바 동시성 챕터 요약

공유하는 가변 데이터에 접근 시 동기화 하자 쓰는 메소드 뿐만 아니라 읽는 메소드도 동기화 처리를 해야 한다.32비트 변수에 대한 할당 연산은 원자적으로 처리되기 때문에 동기화가 필요하지 않다.하지만 스레드 간에 공유되는 데이터라면 메모리 가시성을 위해서 동기화 처리가 필요하다.메모리 가시성만 확보하면 되기 때문에 volatile 키워드를 사용해도 된다.int 변수에 대한 ++ 연산은 단일 연산처럼 보이지만 실제로는 3단계로 나뉘어져 있기 때문에 동기화 처리가 필요하다. 지나친 동기화는 피하자 동기화 블록 안에서 외계인 메소드 호출을 하지 말아야 한다. wait와 notify 대신 동시성 유틸리티를 사용하자wait, notify를 사용할 이유가 거의 없다. 직접 사용하는 것은 "동시성 어셈블리 언어"로 ..

개발/리팩토링

자바 코드 리팩토링 시 주의해야할 점 몇 가지

레거시 코드를 리팩토링 하는 경우 코드를 읽기 쉽고 유지보수하기 쉽게 하는 것도 중요하지만 기존 기능을 유지하고 에러가 나지 않게 하는 것도 중요합니다. 리팩토링 시 주의해야할 점 몇 가지에 대해서 정리해봅니다. 1. 미사용 메소드 삭제할 때 call hierarchy만 확인하면 낭패를 당할 수 있다. java에는 리플렉션이 있기 때문이다. 어디에선가 리플렉션으로 호출하고 있을 수도 있다. 그렇게 사용하는 경우는 많지 않겠지만 call hierarchy 상에 없다고 해서 100% 쓰이는 곳이 없다고 단언할 수는 없는 것이다. 리플렉션을 사용했다면 메소드 호출을 위해 메소드명을 스트링으로 코드 어딘가에서 사용하고 있을텐데그런 경우라면 찾기 쉽지만 만약 그 데이터를 데이터베이스에서 관리하고 있다면 여간 곤욕..

개발/python

Django 오라클 연동 시 시퀀스값 이용해서 테이블 데이터 삽입

Django에서 오라클 연동을 하고 있는 상태에서 테이블에 데이터를 넣으려는 상황이다. Django에서 새로 생성한 테이블이 아니라 기존에 존재하던 테이블을 사용하는 것인데, 테이블 PK로 쓰이는 id값을 오라클 시퀀스를 이용해서 넣어야 한다. 이런 경우 cursor를 사용해서 쿼리문을 직접 입력하여 실행시킬 수 있으므로 이를 이용해서 id컬럼에 시퀀스 값을 넣을 수 있다. from django.db import connections cursor = connections['oracle'].cursor() cursor.execute(''''' INSERT INTO user ( id , user_id ) VALUES ( USER_SEQ.NEXTVAL , %s ) ''', [ self.user_id ]) cu..

개발

실용주의 디버깅 - 2부 큰 그림

7장 실질적인 무관용 - 버그 우선순위제품 개발 과정 중에 버그를 보자마자 고치는 팀도 있고 개발 주기 마지막까지 미뤄두는 팀도 있다.빠른 버그 수정은 불확실성을 줄여주기 때문에 훨씬 좋은 전략이고 다음 2가지 원칙에 따른다.1. 개발하는 동안 버그를 찾을 수 있는 과정(테스트, 코드 리뷰, 배포)을 계속 반복2. 무엇보다 버그 수정 우선순위가 높다. 개발 중에 계속 버그를 고쳐야 프로젝트 마감 일정을 정확하게 예측할 수 있다!미뤄두면 버그가 얼마나 많이 남아있는지 수정에 얼마나 걸릴지 감을 잡기 힘들다. - 디버깅할 때의 마음가짐버그를 피할 수 없는 것으로 받아들이고 두려워하지 말자는 입장이 있고완벽함을 위해 노력하는 버그 무관용 입장이 있다.가장 생산성이 좋은 마음가짐은 두 양극 단의 사이인 실질적인..

bebeside77
Spread your wings