배경 스프링 부트를 사용하면 익셉션 발생시 기본적으로 White Label 페이지를 보여준다. 그러나 실제 서비스에선 상황에 맞는 페이지를 보여줘야 하기 때문에, 로컬 환경에서도 해당 페이지가 정상작동 하는지 볼 수 있도록 설정 하고자 한다. application.yml server: error: whitelabel: enabled: false include-stacktrace: always JSP 파일 위치 JSP 파일들의 최상위 디렉터리인 views 까지 생략하고 기록한다. 기본 에러 페이지 : /error.jsp그외 상태 코드에 따른 에러 페이지: /error/404.jsp 기본 에러 페이지는 최상위에 넣지 않으면 인식되지 않으며, 상태 코드에 따른 에러 페이지 또한 /error 하위에 넣지 않으면..
배경 스프링 부트 2.0.0으로 코딩중이며, 협업하는 개발자가 스프링 부트를 모르는지 외장 톰캣 환경에서 작업하고 PR을 줬다. 로컬환경에서 먼저 테스트를 하는데, ajaxSubmit 함수를 이용한 통신에서 error를 반환했다. 외장 톰캣에선 문제가 없었고, 내장 톰캣에선 문제가 생겼던 해당 이슈에 대해 정리하고자 한다. ++ 추가확인해보니, 외장 톰캣에서도 에러가 떴다. 기능엔 이상이 없어 해당 개발자가 에러를 못보고 지나친듯 하다.Cannot forward to error page for request [/xxx/xxx/xxx] as the response has already been committed. As a result, the response may have the wrong status ..
외주 작업중인 프로젝트에 계속해서 다양한 모듈이 붙으면서 여러 프로젝트의 세션을 공유할 필요가 생겼다. 협업 환경에 대한 사정으로 사용하지 못해, 정리 해둔 내용을 훗날 쓸지 몰라서 기록한다. 처음엔 관계형DB에 넣기 위해 JDBC 세션을 사용했다가 전부터 눈여겨보던 Redis를 도입하기로 결정했다. 가정 로컬에선 Embedded Redis를 사용하고, 테스트 환경에선 라즈베리파이 3에 독립형 Redis를 설치해서 사용한다고 가정한다. Dependency compile('org.springframework.boot:spring-boot-starter-data-redis') compile('org.springframework.session:spring-session-data-redis') compile g..
추후에 보기 편하도록 지금 생각한 내용을 정리하고자 한다. 가정. 1. 프로젝트 내부에 파일을 업로드할 경우, 프로젝트가 업데이트되어 소스를 교체하면 파일이 유지되지 않을 위험이 있다. 따라서 빌드된 프로젝트의 리소스와 사용자가 업로드한 리소스(프로젝트와 동일 레벨의 upload디렉터리로 가정)는 따로 관리하는 것으로 가정한다. 2. FileCopyUtils.copy(inputStream in, outputStream out)을 사용할 것이므로 파일을 inputStream으로 받는다. 다운로드 - 프로젝트에 기본으로 포함되는 리소스(ex. 양식) 들을 다운로드 하는 경우는 아래의 코드를 사용한다.InputStream in = getClass().getClassLoader().getResourceAsStr..
증상IDE에서 실행할 때는 이상없이 html 파일을 찾아가는데, 리눅스 환경에서 돌리니 아래와 같은 에러가 나오며, 파일을 찾지 못한다. (이전에도 같은 에러를 본적이 있는데, 템플릿 엔진이 찾는 파일이 없을 때 나타나는 메세지 였다.)org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/index", template might not exist or might not be accessible by any of the configured Template Resolvers 원인컨트롤러에서 '/'를 붙여 절대 경로를 사용하려 헀던 것이 문제가 된것으로 보인다. 해결'/index'를 'index'로 바꾸니 정상 작동한다.
1. 의존성 추가compile group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-jdbc4.1', version: '1.16' 2. application.yml 에 Datasource 정보 입력spring: profiles: default datasource: url: jdbc:log4jdbc:mariadb://localhost:3306/ driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy username: password: 3. resources 디렉토리에 log4jdbc.log4j2.properties 파일 생성 후, 아래 내용 입력log4jdbc.spylogdelegator.name=net.sf...
WYSIWYG Editor Summernote 도입 순서1. Summernote 다운로드2. 코드 집어넣기3. submit 할 때 값을 넘길 수 있게 설정. 1. Summernote 다운로드 공식 홈페이지에서 다운로드 2. 코드 집어넣기 js/css 삽입 에디터를 넣고 싶은 곳에 삽입Hello Summernote 실행 스크립트 ( 페이지 로딩이 끝나면 )$(document).ready(function() { $('#summernote').summernote(); }); 3. submit 할 때 값을 넘길 수 있게 설정. * 해당 내용은 form submit을 기준으로 작성. ㄱ. 에디터를 삽입한 윗쪽에 보이지 않는 textarea를 넣고, name="content" 설정 했다.Hello Summernot..
예외 내용 org.apache.catalina.LifecycleException: Failed to start component StandardEngine[Catalina].StandardHost[localhost].StandardContext[/controller] 해결(이클립스 기준) 1. 메이븐 저장소 문제이므로 Preferences > Maven > User Settings > Local Repository 경로의 모든 파일 삭제. 2. Servers > Tomcat > Clean & Clean Tomcat Work Directory 3. Menu > Project > Clean 4. Project Explorer > 프로젝트 우클릭 > Maven > Update Project 또는 프로젝트 클릭..
핵심 기능과 부가기능 - 업무 로직을 포함하는 기능을 핵심 기능 (Core Concerns) - 핵심 기능을 도와주는 부가적인 기능을 부가기능 (Cross-cutting Concerns) - 객체 지향의 기본 원칙을 적용하여도 핵심 기능에서 부가 기능을 분리해서 모듈화 하는 것은 매우 어려움. 출처 : Tacademy AOP(Aspect Oriented Programming)-관점 지향 프로그래밍의 개요 AOP는 어플리케이션에서의 관심자의 분리(기능의 분리) 즉, 핵심적인 기능에서 부가적인 기능을 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법 - OOP를 적용하여도 핵심 기능에서 부가 기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해준다고..
DAO 패턴 - 데이터 액세스 계층은 DAO 패턴을 적용하여 비지니스 로직과 데이터 액세스 로직을 분리하는 것이 원칙. - 비지니스 로직이 없거나 단순하면 DAO와 서비스 계층을 통합할 수도 있지만, 의미 있는 비지니스 로직을 가진 어플리케이션이라면 데이터 액세스 계층을 DAO 패턴으로 분리해야 함. - DAO 패턴은 서비스 계층에 영향을 주지 않고 데이터 액세스 기술을 변경할 수 있는 것이 장점. 커넥션 풀링을 지원하는 DataSource 커넥션 풀링은 미리 정해진 갯수만큼의 DB 커넥션을 풀에 준비해두고, 어플리케이션이 요청할 때마다 Pool에서 꺼내서 하나씩 할당해주고 다시 돌려받아서 Pool에 넣는 식의 기법. - 다중 사용자를 갖는 엔터프라이즈 시스템에서라면 반드시 DB 커넥션 풀링 기능을 지원..