Java 개발자를 위한 Python 간단 정리Java 개발자가 손쉽게 Python 언어에 접근하기 위해 기본적으로 알아야 할 내용과 Python만의 특징들을 간략하게 설명하고자 합니다. 아래 내용만 숙지하여도 Python을 이용하여 필요한 script를 개발하는데 필요한 기본적인 지식은 습득할 수 있을 것이라고 생각합니다.기본 사항설치 Linux나 Mac의 경우 2.6 버전이 이미 설치되어 있습니다. 다른 버전 사용을 원할 경우 추가 설치 필요합니다.IDE eclipse의 경우 PyDev 플러그인을 사용 인텔리제이의 경우 Python 프러그인 사용 Atom editor로 개발하기 : http://reachlab-kr.github.io/python/2016/01/10/Python-Atom-Packages...
DevTools는 리소스 변경 시 자동으로 서버를 재시작 해주며, Context에 instance 정보들을 저장하고 재사용 하여 서버 재시작 속도를 향상시켜 주는 기능을 합니다. 하지만, DevTools는 object deserialize 시에 casting이 잘 안되는 오류를 가지고 있습니다. (참조: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-devtools-known-restart-limitations) "ClassCastException: MyObject cannot be cast to MyObject" 라는 굉장히 희안한 오류 메시지를 보실 수 있습니다. DevTools는 내부적으로 두 개의 co..
RequireJSRequireJS란?AMD(Asynchronous Module Definition) spec의 구현체AMD는 동적로딩, 의존성 관리, 모듈화를 구현하기 위한 API 디자인 동적로딩 HTML 페이지 상에서 script tag를 선언하여 script 파일을 로딩하는 전통적인 방식은 성능상의 문제가 있다. 브라우저는 script tag를 읽는 순간 script의 내용을 파싱해야 하고, 그동안 브라우저는 멈춰있게 된다. RequireJS는 페이지 랜덩링 이후에 script 태그를 동적으로 생성해서 삽입해 준다. 의존성 관리 Javascript는 의존성 관리가 되지 않는다. 가장 많이쓰이는 라이브러리를 위쪽에 배치하는 수 밖에....RequireJS는 의존성 관리를 명시적으로 선언하고, 명확하게 ..
Promise의 기초Promise의 장점Promise는 비동기 작업을 좀 더 편하게 구현할 수 있게 해준다. (콜백지옥에서 해방) 단순히 ajax를 하나만 사용한다면 Promise는 오히려 불편하게 느껴질수도 있다. 하지만, 여러개의 ajax를 직,병렬로 사용하게 된다면???예) 프론트 메인 페이지 메인 페이지 접근 시, 메인 화면 로딩과 회원정보 조회를 동시에 진행함. 회원 정보 조회 완료 시 (메인화면 로딩과 상관없이) 이벤트 정보 로딩하여 노출 위 모든 작업이 완료된 후에 버튼 이벤트 등록 (하나라도 미완료된 상태에서는 버튼 이벤트 등록하면 안됨)기본 구조new Promise(function(resolve, reject) { // 비동기 작업 완료 시 reslove 호출 // 비동기 작업 실패 시 ..
JPA 사용 시 DB에서 조회된 엔터티를 view 단에서 사용해야 할 경우가 많이 생깁니다. 보통 jackson을 이용하여 json으로 parsing 후 사용하게 되는데, 엔터티간의 관계가 복잡할 경우 문제가 생길 수 있습니다. 예를들어 순환관계(A > B > C > A)나 양방향 관계(A B)를 가질 경우 자칫 잘못하면 json parsing 시 무한루프에 빠지게 됩니다. (이클립스가 뻗어 버리더군요...) 이를 방지하기 위한 방법으로 몇 가지가 있지만, 제가 사용한 방법은 다음과 같습니다. 1. OSIV disableOSVI는 transaction 밖에서도 lazy loading을 사용할 수 있도록 해주는 기능입니다. 이 기능을 사용하면 개발 시 편리한 점이 있지만, 자신의 컨트롤 밖의 문제가 생길 ..
Restful API 개발 참고 사항 요약 1. URI 구성- URI를 통해 특정 리소스를 명확하게 표현한다. 컬렉션은 복수형, 도큐먼트는 단수형을 사용/members/1/bookmarks/products/321/comments/2- 행위는 HTTP method를 이용한다. URI에 행위를 표현하는 동사형 단어가 사용되어서는 안된다.POST : insertPUT : updateGET : readDELETE : delete- 소문자만 사용하며, 가독성을 위해서 '-' (하이픈)을 사용할 수 있다. 2. HTTP Header 사용하여 응답 형태 구성- Accept-Header응답 파일 형태 (json, xml, text)- User-Agent접속 Client (PC / Mobile) 확인- Accept-La..
Method Overriding Overriding이란, 부모 class의 method를 자식 class에서 재정의 하여 사용하는 것을 말합니다. Overriding을 사용하는 이유는 부모 class 형으로 선언된 자식 인스턴스를 통일된 방식으로 사용하기 위함이라고 볼 수 있습니다. 대표적인 예로 도형을 그리는 로직이 있습니다. public class Test { public static void main(String[] args){List shapes = new ArrayList();shapes.add(new Circle());shapes.add(new Circle());shapes.add(new Rect());shapes.add(new Rect());for(Shape s : shapes) {s.dra..
String 객체 비교 Java에서 객체의 동등성을 비교하는 방법은 두 가지가 있습니다. 하나는 Object.equals 함수를 이용하는 것이고, 다른 하나는 == 연산자를 이용하는 방법입니다. == 연산자를 이용해서 두 개의 객체를 비교할 때에는 두 변수가 힙 메모리 상에 동일한 주소를 가르키고 있는지를 확인합니다. 그래서 같은 내용을 가진 객체라도 힙 메모리 상에 각자 올라가 있는 상태라면 == 연산자 비교시 false 값을 가지게 됩니다. String a = new String("hello");String b = new String("hello");a == b; //false new 키워드를 사용해서 객체의 인스턴스를 생성할 경우 힙 메모리 상에 해당 객체정보가 올라가고, 할당하고자 하는 변수에 그..
Java String #1 String은 Java에서 굉장히 많이 사용되는 변수 타입 중에 하나이며, 또한 관리되어야 할 리소스의 한 종류라고 할 수 있습니다. String은 Primitive 타입과 비슷한 성질을 가지기도 하고, 반면 일종의 class 처럼 동작하기도 합니다. 이런 특이상 성질을 가지고 있고, 잘못 사용하면 service에 잘못된 영향을 줄 수도 있는 String에 대하여 한번 알아보고자 합니다. - String은 변경 불가능 객체이다 (immutable) String 객체의 내부 값을 변경하는 것은 불가능하기 때문에, 문자열을 수정하는 모든 mathod는 수정된 새로운 문자열을 반환해 주는 방식으로 동작합니다. String으로 선언된 변수는 해당 변수에 새로운 String을 할당해 주..
Javascript 동일성 비교 시 ==, === 차이점 ==는 두 개의 입력값을 같은 type으로 변환하여 같은 값을 가지고 있는지 비교작업을 수행합니다. 이는 의미론적 비교방법이라고 할 수 있습니다. 반면, ===는 type 변환을 하지 않은 상태로 비교작업을 수행하며 type이 틀릴경우 false를 반환합니다. "1" == 1// true"1" === 1// falsenull == undefined// truenull === undefined// false 동일성을 비교하는 방법중에 또다른 방법이 있습니다. 일부 최신 브라우저에서 지원하고 있는 Object.is 라는 함수 입니다. 기본적으로 === 와 같다고 볼 수 있지만, 일부 특수한 값에 대하여 다르게 동작합니다. NaN(Not a Number..