테스트케이스 개발한 기능이 정상적으로 돌아가는지 테스트하려고 할때 main 메서드를 통해 웹을 접속하여 화면에서 직접 테스트 하는 경우가 일반적이였다. 이 방법은 준비하고 실행하는데 오래걸리고 무엇보다도 반복적으로 테스트 하기가 어렵다. 하지만 스프링부트에서는 코드로 테스트 할수가 있다. 이 코드를 테스트케이스라고 한다. 또 TDD방식이라고 해서 테스트코드를 먼저 작성하고 구현을 한다고 한다. 몇만 몇십만 소스코드를 짜야한다고 할때 테스트코드 없이 개발하면 정말 많은 문제가 일어난다고 한다. 에러사항을 구현 초반에 알아야 해결하기 쉽듯이 말이다. 예제 아래 예제는 id와 이름을 가지고 있는 Member 객체를 저장하는 save(), find() 가 정상적으로 실행되는지를 확인 하는 예제이다. public..
웹 개발 방식 3가지 웹을 개발하는것은 크게 3가지 방법이 있다. 첫번째로는 정적 컨텐츠가 있는데 이것은 정적 파일을 웹 브라우저에 그대로 내려주는 것이고, 두번째로는 MVC와 템플릿 엔진이 있는데 템플릿 엔진은 PHP, JSP 등 html을 서버에서 처리를 한 후 웹 브라우저에 내려주는 것이다. 그리고 API는 html을 내려주는 것이 아니라 json, xml 형식의 데이터 구조 포맷을 클라이언트 에게 내려주고 화면은 클라이언트 에서 그린다. 대표적으로 React, Vue 가 있다. 그리고 서버끼리 통신할때 데이터만 주고 받으면 되니 API 방식을 사용한다. 1. 정적 컨텐츠 https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/sp..
프로젝트를 서버에 배포하기 위해서는 빌드하여 jar파일을 생성해야 한다. 예전에는 서버에 WAS 세팅을 했어야 했는데 스프링부트 프로젝트는 jar파일을 서버에 올리고 실행만 해주면 된다. 방법은 간단한다 프로젝트 폴더로 이동해서 "./gradlew build" 명령어를 통해 build 를 하면 build 폴더가 생성된다. 그리고 "cd build/libs" 명령어로 libs 폴더로 이동 후 "java -jar 자르파일" 명령어로 실행을 해주면 된다. ctrl+c를 하면 실행취소가 되며, 만약에 빌드를 다시하고 싶을땐 "./gradlew clean build" 명령어로 clean 후 다시 빌드를 해주면 된다. 커맨드창에서 실행을 시키는것과 인텔리 제이나 이클립스에서 실행을 하는것이 같은 포트를 사용한다면 ..
라이브러리 Grdle, Maven 같은 빌드 툴들은 의존관계를 다 관리해준다. 즉 한 라이브러리를 땡겨올때 그 라이브러리안에 필요한 라이브러리들을 자동으로 다 땡겨온다는 것이다. 그래서 스프링부트와 관련된 라이브러리를 땡겨오면 spring-core까지 다 땡겨오기 때문에 스프링과 관련된 라이브러리가 자동으로 다 세팅이 된다. 그리고 spring-boot-starter-web 라이브러리를 땡겨올때 자동으로 톰캣 라이브러리를 가져오기 때문에 톰캣 설치없이 웹서버를 띄울수 있는것이다. 로그는 spring-boot-starter-logging 라이브러리의 logback, slf4j를 많이 사용하며 테스트 라이브러리는 spring-boot-starter-test 라이브러리의 junit(테스트 프레임워크), moc..
시작전에 Java 11과 IntelliJ가 설치 되어있어야 한다. Java 11, IntelliJ 설치방법 : https://deftkang.tistory.com/186 스프링 부트 스타터 사이트에서 스프링 프로젝트 생성. 예전에는 스프링 프로젝트를 밑바닥부터 생성했다면 요즘에는 스프링 부트를 이용해서 스프링 프로젝트를 만든다. 아래 사이트 들어가서 스프링 프로젝트를 생성할 수 있다. 스프링에서 운영하고 있는 사이트이다. https://start.spring.io Project에서 Maven과 Gradle이 있는데 이는 필요한 라이러리를 땡겨오고, 빌드해주는 라이프 사이클을 관리해주는 툴이다. 예전에는 Maven을 많이 사용했지만 지금은 Gradle을 많이 사용하여 Gradle을 선택한다. Maven은 ..
기본적으로 맥북키보드는 control - option - command - space bar - commnad - option 이 순서이다. 하지만 윈도우 키보드는 일반적으로 ctrl - window - alt - space bar - alt - fn 이 순서이다. 나는 레오폴드 키보드를 사용하고 있어 이 순서를 바꾸려고 딥스위치 2번을 온으로 하여 사용하였는데 문제는 한영키를 오른쪽 command로 사용하려고 할때 발생했다. 맥북에서의 오른쪽 command위치는 alt여서 오른쪽 command 를 f18로 변경하여도 이는 먹지 않았다. 그래서 오른쪽 alt를 f18로 변경할 필요가 있었고 이 방법을 찾던중 키매핑 생성유틸 hidutil을 알게 되었고 이를 활용하였다. [셋팅 방법] 방법은 먼저 아래 파..
이클립스에서 오른쪽 위 open perspective를 클릭하고 SVN Repository Exploring을 선택한다. 만약 없다면 마켓플레이스에서 SVN 플러그인을 다운받아야 한다. "Add SVN Repository" 버튼을 클릭하고 svn+ssh://URL을 적어준다 URL의 프로토콜은 단순 조회용으로 생성할 경우 “svn” 사용하고, 소스 관리용으로 생성할 경우는 “svn+ssh” 를 사용해야 한다. 즉 ssh가 없으면 소스를 커밋할 수 없다. Repository를 추가하고 체크아웃 받는다. 기존 Workspace에 프로젝트를 추가하는 식으로 체크아웃받는거면 아래 처럼 위 옵션을 선택한다. 톰캣을 이용한 동적웹 프로젝트면 아래처럼 Dynamic Web Project 선택 프로젝트 네임을 지정하고..
화면을 개발하고 나서 검색기능을 만들고 그 검색기능을 이용해 DB에서 데이터를 조회하려고 할때 아래처럼 한글이 깨지는 현상이 있었다. 이는 DB에서 조회하는 기능을 가진 WAS가 DB와 커넥터 할때 인코딩 방식을 세팅하는데 기본으로 세팅된 인코딩 방식이 한글을 지원 안하기 때문이다. 그래서 아래처럼 Tomcat설정파일 Server.xml에서 Connector 세팅 속성에 인코딩을 세팅해줘야 한다. URIEncoding="UTF-8"
ORA-04031 에러는 Shared Pool 내에 메모리가 단편화됨에 따라 연속된 parsing 공간을 제공하지 못해 발생하는 에러이다. 메모리가 단편화되는 이유는 리터럴 SQL을 많이 사용하는 경우에 그럴 수 있는데, 해결 방안으로는 리터럴 SQL을 줄이거나 Shared Pool size를 늘리는 방안이 있다. 나는 시스템 운영중에 ORA-04031 에러가 발생하였고 해결 방법을 찾아 다녔는데 ORA-04031 에러가 아무리 발생시키려고 해도 발생하지가 않았다. 그래서 확인해보니 에러가 난 시간에 Shared Pool이 자동 조정되어 반영이 되어 그 뒤에 똑 같은 에러가 발생하지 않은것이다. 에러 원인을 파악하고 해결하기 위한 방안 3가지 방법 1. 오래된 세션을 끊어서 shared pool에 잡고 ..
협력사와 같이 방화벽을 오픈 하고나서 Telnet으로 접속을 시도 하였을때 연결이 돼지 않았을때 Tracert 기능을 이용하면 어디까지 연결이 되고 어느 IP에서 막히는지 확인할 수 있다. tracert 명령어를 사용했을때 아래처럼 Request timed out 메시지만 뜬다면 이건 Tracert 명령어가 아에 막혔다는 뜻이다. 이를 해결하려면 Tracert 명령어를 사용할 수 있게 ICMP 프로토콜이 아웃바운드 규칙에 열려 있어야 한다. 아웃바운드 규칙에서 ICMP 프로토콜을 열어주었고 다시 Tracert 명령어를 사용하였더니 정상적으로 명령어가 실행 되었다.
PL/SQL 스크립트를 짜고 테스트를 해볼때 퍼포먼스가 낮다고 생각이 들면 SELECT문을 먼저 봐바야 한다. 생각없이 코딩하다가 놓치기 쉽고 고치기 쉬운 실수는 WHERE절에서 함수를 사용할때 조회한 테이블의 데이터를 함수로 변환하여 비교하는 실수이다. 아래 쿼리문 빨간박스에서 tDATE값은 상수이고 DAY_CODE2는 테이블의 컬럼인데 이 컬럼에 함수를 적용하면 라인별로 함수가 사용되고 비교가 되기 때문에 건수가 많을수록 퍼포먼스는 상당히 저하된다. 만약에 10만개의 레코드가 있다면 10만번의 함수가 돌아간다는 뜻이다. 그래서 상수쪽에 함수를 적용하여 비교하여야 한다. 아래 쿼리문 처럼 테이블 컬럼이 아니라 상수쪽에 함수를 적용하여 딱 한번만 함수가 실행되게 해야 한다. 레코드가 많을수록 꼭 신경을 ..
실무를 하면서 데이터를 비교해야 할 경우가 굉장히 많은데 가장 간편하게 UNION ALL을 사용하여 비교하는 방법이 있다. UNION ALL은 여러개의 SELECT 문을 합치는 것이고 컬럼 명은 맨 위에있는 SELECT 문으로 통일되며 합쳐질때 데이터 타입이 같아야 한다. [쿼리 만드는법] 1. 먼저 기준이 되는 SELECT문을 만드는데 비교할 데이터가 들어갈 컬럼에는 NULL을 넣어주고 컬럼명을 지어준다. 2. 비교 대상인 SELECT문을 만들어준다. UNION ALL은 컬럼개수가 같아야 하므로 NULL로 임의로 컬럼을 생성해줘야 한다. 3. 2개의 SELECT문을 UNION ALL 해준다. 그러면 아래처럼 데이터가 비교할 데이터가 한 테이블에서 조회가 된다. 4. UNION ALL한 SELECT문을 ..