본문 바로가기

use try-with-resources or close "DefaultTransaction" in a "finally" clause 버그 수정 얼마 전에 시큐어 코딩하다가 다음과 같은 버그를 발견하게 되었습니다. 이런 버그는 처음 접해서 구글링해 본 결과 트랜잭션을 커밋하다가 예외가 발생했을 경우 처리하는 경우가 없어서 발생한 버그였습니다. 예를 들면 데이터베이스에 작업하다가 에러가 발생한 경우 지금까지 작업한 내용을 반영(commit) 하지 않고 작업하기 이전 상태로 롤백하는 경우라고 생각하시면 될 거 같습니다. (현재 작업 중인 트랜잭션 취소) 회사 소스 코드라 모자이크 처리한 거 이해해주시기 바랍니다. 위의 소스를 보게 되면 finally 안에 "transaction.close();"가 추가된 것을 볼 수 있습니다. 트랜잭션 작업 중간에 예외가 발생하거나 발생하지 않아도 트랜잭션이 해제되도록 수정했습니다. 앞으로 트랜잭션 관련 작업을 할 ..
자바스크립트 객체 생성 자바스크립트를 통해서 객체 생성하는 방법을 포스팅하겠습니다. class를 통해서 할 수 있지만 여기서는 function을 사용하겠습니다. (회사에서 자주 사용하고 있는 방법... 이 방법 말고도 다양하게 객체 생성할 수 있습니다.) 위의 소스를 보면 일반적으로 자바 클래스를 정의한 것과 비슷하게 속성과 메소드가 있습니다. (속성 : 2~3라인, 메소드 : 10~17라인) 그리고 생성자 역할을 하는 메소드도 정의 및 호출되고 있습니다.(5~8라인, 19라인) 마지막으로 정의한 메소드를 리턴하고 있습니다.(21~28라인) 메소드를 리턴하지 않으면 호출할 수 없기 때문에 리턴해야 합니다. 이제 객체가 제대로 생성이 되는지 확인해보겠습니다. 객체에 속성 값으로 전달할 options를 정의하고, 객체를 생성합니다..
callback 함수 사용 프로젝트를 하다 보면 callback 함수를 알게 모르게 사용하는 경우가 많이 있습니다. 제이쿼리 onClick 함수나 자바스크립트 setInterval 함수를 예로 들 수 있습니다. 하지만 제이쿼리나 자바스크립트가 기본적으로 제공하는 callback 함수가 아닌 직접 커스터마이징 한 callback 함수를 사용해야 할 때가 있습니다. 간단한 예를 보이겠습니다. 위 함수를 설명하면 파라미터 2개를 받습니다. 첫 번째 파라미터 data는 사용자로부터 입력받는 정수 파라미터로 1을 더해 callback 함수에 파라미터(val1)로 전달합니다. 두 번째 파라미터 callback은 커스터마이징 한 callback 함수가 호출될 때 실행하는 함수를 치환한 파라미터입니다. 주석으로 1번, 2번 표시된 부분은 cal..
스프링 프레임워크 개발 시작하기 신입사원인 분들에게 지금 당장 웹 프로젝트를 개발하라고 하면 아마도 어려워하실 분들이 계실 겁니다. 그래서 그런 분들 위한 진짜 간단하게 웹 프로젝트를 개발하는 방법을 포스팅하려고 합니다. 여기서 "간단하게"란 데이터 베이스 연동이나 스프링 시큐리티, 파일 업로드 등등 이런 거는 빼고 순수하게 mvc 패턴 기반 페이지를 띄우는 웹 프로젝트입니다. 데이터 베이스 연동이 없으니 model 없다고 봐야겠네요. 중간중간 자세한 설명은 생략하겠습니다. 웹 프로젝트를 개발하기 위해 Dynamic Web Project를 생성합니다. Maven Project로 하는 방법도 있으나 여기서는 Dynamic Web Project로 하겠습니다. 이클립스 마우스 오른쪽 클릭해서 new -> other를 선택합니다. Dynami..
custom annotation 사용법 얼마 전에 회사 프로젝트 개발하다가 custom annotation을 사용하게 되었습니다. 평소에 어렴풋이 알고 있었는데 막상 써보려고 하니 시간이 오래 걸렸습니다. 프로젝트에서 custom annotation을 클래스에 적용했습니다. 똑같은 인터페이스를 상속한 클래스 중에서 특정 클래스를 호출하는 기능을 개발했습니다. 먼저 annotation을 생성합니다. annotation을 적용할 타입을 클래스로 정하고(8라인) 사용 유지 범위를 운영환경까지로 정합니다.(9라인) "service"라는 속성을 추가했습니다.(12라인) 다음으로 annotation을 적용한 클래스들을 관리하는 클래스를 생성합니다. annotation을 적용한 클래스들의 정보를 저장하는 "tmpAnnoationList" 라는 map 객체..
컬렉션 별 iterator 사용법 자바 컬렉션 별 iterator 사용하는 방법을 포스팅하겠습니다. list, map, set은 자바 컬렉션인데 각각의 내용을 조회하려면 iterator을 사용해야 합니다. 먼저 소스부터 보겠습니다. 위의 소스를 보게 되면 13번째 라인에 iterator를 선언하고 있고 각 켈력션마다 itertator를 받아 순회하고 있습니다. (list : 15 ~ 25라인, map : 28 ~ 39라인, set : 42 ~ 52라인) while문을 보게 되면 hasNext() 메소드가 보이는데 컬렉션의 다음 요소가 있는지 확인하고 있으면 true, 없으면 false를 리턴하는 메소드입니다. 그리고 그 안의 next 메소드는 컬렉션의 다음 요소를 리턴합니다. 소스를 실행시키면 위와 같은 결과가 표출됩니다.
maven index 에러 maven dependency를 추가하려고 하는데 검색이 안되는 경우가 종종 있습니다. 이런 경우 대부분 maven index 업데이트가 되지 않아서 발생하는 에러입니다. 이클립스의 Window -> Preferences -> Maven에 가서 Download repository index updates on startup 항목을 체크하면 됩니다.
Max area of island 얼마 전에 알고리즘 문제로 섬의 최대 면적을 구하는 문제를 풀었습니다. 문제를 설명드리면 0과 1로 이루어진 2차원 배열이 있고 0은 바다, 1은 섬을 뜻합니다. 섬의 면적은 상하좌우로 연결되어있는 경우만 해당됩니다. (대각선은 포함 X) 위의 문제를 보면 2차원 배열 안에 섬이 여러 개가 있는데 그중에서 가장 큰 면적을 구하는 문제입니다. 예제에서 6이 가장 큰 면적입니다. 이 문제를 풀면서 고민이었던 부분은 이미 검색했던 지역을 다시 검색했을 때 어떻게 처리할지 고민이었습니다. 그래서 이미 검색한 지역 유무를 체크하기 위해 똑같은 크기의 boolean타입 2차원 배열을 만들어서 풀었습니다. 위의 소스 코드를 보게 되면 island라는 바다와 섬으로 이루어진 2차원 배열이 있고 (5라인) 그 2차원 배..