이메일 형식 (exam@exam.com) 의 정규식 표현 @Pattern(regexp = "^[A-Za-z0-9_\\.\\-]+@[A-Za-z0-9\\-]+\\.[A-Za-z0-9\\-]+$")
NULL 변환 함수 1. NVL 함수 NULL 값을 다른 값으로 변환할때 사용하며, 모든 데이터 타입에 사용할 수 있다. SELECT NVL(col1, 0) FROM exam exam 테이블의 컬럼 col1이 null이라면, 0을 출력한다. 2. NULLIF 함수 NULLIF(col1, col2) 컬럼 col1의 값과 컬럼 col2의 값이 동일하면 NULL을 출력하고, 동일하지않으면 col1의 값을 출력한다. 3. COALESCE COALESCE(col1, col2, col3, ...) col1, col2, col3... 중에서 순서대로 비교하여 null이 아닌 첫번째 값을 가져오고, 모두 null이면 0을 출력한다.
스프링의 빈 오브젝트 스프링의 애플리케이션 컨텍스트는 IoC 컨테이너로써, 싱글톤을 저장하고 관리하는 싱글톤 레지스트리이다. 스프링은 여러 번에 걸쳐 빈을 요청하더라도 매번 동일한 오브젝트를 돌려준다. getBean() 메소드를 실행할 때마다 같은 오브젝트를 돌려준다. 스프링은 기본적으로 별다른 설정을 하지않으면, 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다. 왜 스프링은 싱글톤으로 빈을 만들까? 스프링이 주로 적용되는 대상은 자바 엔터프라이즈 서버환경이다. 자바 엔터프라이즈 서버환경이란, 서버 하나당 최대로 초당 수십에서 수백번씩 브라우저나 다른 시스템으로부터의 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경이다. 만약 매번 클라이언트에서 요청이 올때마다 각 로직을 담당하는 오브젝트를..
trim 사용하는 방법 UPDATE examTable exam1 = #{exam1}, exam2 = #{exam2}, WHERE idx = #{idx} mybatis에서 update 쿼리문을 사용하다보면 위처럼 조건문만 사용하게 되는 경우가 생긴다. 그때 콤마(,) 를 어떻게 사용해야 sql문 error가 발생하지 않을지 고민하게 된다. 그럴때는 위 예제처럼 trim 이라는것을 사용하자. +댓글내용 참고 (gyeongtae kim님) - prifix = tirm 안에있는 모든 문자열의 앞에 붙여줄 문자열을 입력하는 곳 - suffixOverrides = trim 안에있는 모든 문자열의 조건문을 판별해서 입력된 문자열의 맨 끝에서부터 찾아서 지워줄 문자열을 입력하는 곳 Oracle 에서 NVL 함수 사용하..
JAVA의 인스턴스화 JAVA의 인스턴스화 제한을 알아보기 전에, JAVA 인스턴스화에 대해 간단히 살펴보자. 자바에서 인스턴스란, 객체를 생성한다. 그리고, JVM이라는 자바 가상 머신이 관리하는 메모리에 적재된 상태를 뜻한다. Test 기본 클래스 public class Test() { private String a; private String b; public String getA() { return a; } public String setA(String a) { this.A = a; } } 우리가 자주 봐왔던 자바 예제에서의 아래 한 줄이 인스턴스를 생성함을 의미한다. 위 Test 클래스의 인스턴스를 생성해보자. 인스턴스 생성 Test test = new Test(); 위 한줄에는 많은 의미가 담..
관심사의 분리 (Separation Of Concerns) 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것이다. 어떠한 기준 없이 모으는 편이 처음엔 간단하고 쉽겠지만 언젠가는 여러 종류의 관심사(기준)를 적절하게 구분하고 따로 분리하는 작업을 해줘야한다. 관심사가 같은 것끼리 모으고 다른 것은 분리해줌으로써 같은 관심에 효과적으로 집중할 수 있게 만들어주는 것이다. 중복 코드의 메소드 추출 여러 메소드에 중복 코드가 구현되어있다고 가정해보자. 만약 메소드가 1~2개라면 어떠한 변경이 일어났을때 어려움이 없다. 하지만 만약 중복 코드를 가진 메소드가 몇 백개, 몇 천개라고 생각해보자. 중복 코드의 코..
개방 폐쇄 원칙 (OCP : Open-Closed Principle) 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나로, ‘클래스나 모듈은 확장에는 열려있어야하고 변경에는 닫혀있어야한다.’라고 할 수 있다. 이 말은 즉 확장성은 높고 미래의 변화에 대한 준비를 철저히 하고있다는 얘기와 같다. 인터페이스에 의해 제공되는 확장 포인트는 확장을 위해 개방되어있고, 인터페이스를 이용하는 클래스는 자신의 변화가 불필요하게 일어나지 않도록 폐쇄되어있다. 인터페이스를 사용하여 확장 기능을 정의한 대부분의 API가 개방 폐쇄 원칙을 따르고있다. 인터페이스의 사용 위 개방 폐쇄 원칙에서 인터페이스의 확장성을 얘기했는데, 이를 더 깊이 이해하기 위해서 인터페이스에 대해 좀더 알아보자. 우선 추상화란, 어떤 ..
org.apache.commons.fileupload.FileUploadException 에러발생 에러내용: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found 스크립트 총 10개의 파일업로드할 input을 생성하였다. $.ajax({ url: '/v1/model/modelInsertSave', data: formData, type: "POST", contentType: false, processData: false,..var formDat..
일반적은 프로그램의 흐름 1) mian() 메소드와 같이 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정한다. 2) 결정한 오브젝트를 생성한다. 3) 만들어진 오브젝트에 있는 메소드를 호출한다. 4) 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출한다. 이 4가지 단계가 반복적으로 일어난다. 이런 프로그램 구조에서 각 오브젝트는 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로 참여한다. 모든 오브젝트가 능동적으로 자신이 사용할 클래스를 결정하고, 언제 어떻게 그 오브젝트를 만들지를 스스로 결정한다. 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다. 제어의 역전 제어의 역전이란, 위에서 설명한 일반적인 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할..
의존관계란? 두 개의 클래스 또는 모듈이 의존관계에 있다고 말할 때는 항상 방향성을 부여해줘야한다. A가 B에게 의존하고있다. B가 변하면 A에 영향을 미친다. B의 기능이 추가, 변경이 일어나면 그 영향이 A로 전달된다. A에서 B에 정의된 메소드를 호출해서 사용하는 경우다. B에 새로운 메소드가 추가되거나 기존 메소드의 형식이 바뀌면 A도 그에따라 수정되거나 추가돼야 한다. B의 형식은 그대로지만 기능이 내부적으로 변경되면 결과적으로 A의 기능이 수행되는 데도 영향을 미친다. 방향성이 있다. B는 A의 변화에 영향을 받지 않는다. A가 인터페이스 B에게 의존하고있다. 인터페이스 B가 변하면 A에게 영향을 주겠지만, 중요한 것은 인터페이스 B를 구현한 클래스가 변하더라도 A에게 영향이 주지 않는다는 사..