Web 15

Intellij에서 spring boot multi module 사용시 jsp 못찾는 이슈 해결방법

기존에 공부삼아서 개발중이던 wedulpos에 spring batch를 추가해보려고 했다. 그래서 공통으로 mono 프로젝트로 되어있던 wedulpos를 multi module로 수정했다. 그랬더니 이상하게 servlet context에서 jsp를 로드하지 못했다. 그래서 계속해서 ServletException not include... jsp 또는 ServletException not jsp found 오류가 발생했다. 그래서 엄청난 구글링을 2틀동안했다. 집에서 그리고 약속장소에서 기다리면서 노트북으로 그리고 퇴근하고 오늘.. 정말 가지가지한 방법을 다해봤었다. 기본적으로 embed-tomcat의 경우 jasper를 가지고 있지 못해서 별도의 모듈을 추가하고 servlet jspl 추가했고, comp..

web/Spring 2019.04.10 (4)

nginx 정리와 설치 및 기본 설정방법

Ngnix 설명nginx는 기존 웹서버에서 많은 트래픽을 감당하기 위해서 확정성을 가지고 설계된 비동기 이벤트 드라이븐 방식의 웹서버를 칭한다. Nginx 설치nginx를 맥이 있으면 brew를 통해서 간단하게 설치가 가능하다.1brew install nginxcs Nginx 프로세스nginx는 하나의 마스터 프로세스와 여러 worker 프로세스를 가진다. 마스터 프로세스의 주요 목적은 read 권한 그리고 성능 측정과 worker 프로세스 관리이다. worker 프로세스는 요청을 처리한다. nginx는 event-based 모델을 사용하고 worker 프로세스 사이에 요청을 효율적으로 분배하기 위해서 os에 의존하는 매커니즘을 사용한다. worker 프로세스에 개수는 설정 파일에서 정의되며 정의된 프로..

IT 지식/nginx 2019.02.15

Spring Context 종류 및 특성

Spring Context 종류 및 특성 Spring 프로젝트를 처음 생성할 시 root-context.xml과 servlet-contex.xml 두 개가 생성됩니다. 이 두개가 각각 하는일이 지정되어 있는데 무심코 사용하는 경우가 많습니다. 이 둘의 차이점에 대해서 설명하겠습니다. spring은 multi context 환경을 제공해주는데 기본적으로는 root context와 servlet context로 구분됩니다. 1. servlet-context web application의 client의 요청을 받기 위한 entry point 입니다. 따라서 해당 context의 설정에는 요청에 대한 처리를 해줄 controller의 매핑설정(handler mapping)과 요청처리 후 view처리를 어떻게 할..

web/Spring 2018.05.27

/과 /*의 차이점을 포함한 url-mapping 정리

web.xml에서 servlet-mapping 설정 시 url-pattern을 설정하는 것에 대해 정확한 정리가 되어 있지 않아서 정리해보았다. [url-pattern별 의미] 1. "/"로 시작하고 "/*"로 끝나는 패턴은 path로 인식 -> /wedul/list, /wedul/user 등 모든 URL 패턴을 매칭 2. "*."으로 시작하는 경우 확장자 매칭 -> 과거 확장자 *.do 또는 *.ajax와 같은 패턴 매칭 3. "/"만 정의한 경우 디폴트 서블릿 의미 -> default servlet은 servlet mapping에 걸리지 않은 나머지 매핑요소들을 처리한다. 4. 그 외의 경우는 정확하게 일치하는 매칭 /* Dispathcher servlet을 /*으로 했을때의 문제/*으로 매핑하였을 ..

web/Spring 2018.05.27

외부 properties 파일을 이용해서 스프링 빈을 생성하는 방법

1. XML에서 프로퍼티 설정 12345678910111213141516// xml // properties 파일db.driver=com.mysql.jdbc.Driverdb.jdbcUrl=jdbc:mysql://localhost/spring4fs?characterEncoding=utf8db.user=testdb.password=testColored by Color Scriptercs 태그는 location 속성으로 지정한 프로퍼티 파일로부터 정보를 읽어와 빈 설정에 입력한 플레이스 홀더의 값을 프로퍼티 파일에 존재하는 값으로 변경한다. # place holder는 ${로 시작하고 }로 끝나는 값. 주의 할 점은 서로 다른 xml에서 서로다른 위치에 프로퍼티 파일을 사용한다고 해도 먼저 열린 프로퍼티 값이..

web/Spring 2018.05.27

javascript로 여러 파일 다운로드 하기

회사에서 프로젝트를 진행하다가 자바스크립트로 여러 파일을 동시에 다운받게 할 일이 있었다. 기존에 다음과 같이 반복을 통해서 진행하였더니, 정상적으로 동작하지 않았다. 그 이유는 정확히 알지 모르지만 같은 요청을 동시에 요청하는 것을 막는 것 같다. 12345678 Colored by Color Scriptercs 코드에 두개를 요청하였으나, 하나만 다운로드가 되는 것을 알 수 있다. 실패에 원인이 제대로 출력되지 않아 정상적으로 확인하기는 어렵다. [해결법] 이를 바꾸기 위해서는 어느정도에 interval을 주어야 한다. 12345678910dd Colored by Color Scriptercs 이렇게 하면 해결이 되지만, 만약 서버에 request 응답 시간이 지연되면 마찬가지로 되지 않는다. 그럴 ..

web/javaScript 2018.05.27

var와 let 그리고 const 차이점과 사용법 소개

es5까지 Javascript에는 변수 선언할때 var를 사용하였었다. 하지만 var를 선언하여 변수를 선언할때 잘못된 사용으로 인해 문제가 발생하는 경우가 있었다. 하지만 자바스크립트 es6로 올라가게 되면서 let 그리고 const 가 추가되었다. 프로젝트를 진행하면서 es6를 처음 사용하게 되었는데 java8이 나와서 java 사용이 편해진 것 처럼 es6를 사용하면서 더욱 편하게 개발을 진행하였다. 그럼 es6의 특징에 대해 알아보자. [var와의 차이] var는 function-scoped이고, let 그리고 const는 block-scoped 이다. 함수 스코프는 모든 변수가 함수에 속하고 한수 전체에 걸쳐서 사용되는 개념이다. block-scoped는 선언된 변수를 둘러싼 블록의 스코프를 이..

web/javaScript 2018.05.27

Junit 정리 - MockMvc를 이용한 컨트롤러 테스트

입사 후 개발을 한지 벌써 3년 차가 되었다. 개발을 처음 접할 때는 어떻게 구현해야 할지 어떻게 만들어야 하는지에 대한 관심이 더 컸다. 하지만 요새는 개발 후 어떻게 테스트를 진행하여 먼저 버그를 예방(?)할 수 있는지 고민하기 시작했다. 성격이 덜렁거리거나 대충 하는 스타일은 아니었는데, 요즘 열정이 많이 식어서 그런지 단순한 부분에서 버그를 유발하는 것 같아서 TDD를 통해 고쳐보려고 Junit을 공부하기로 했다. 스프링의 각 영역인 Controller. Service, Dao에 대한 테스트를 총 3장에 걸쳐서 설명하겠다. 그리고 Mockito에 대한 설명을 추가로 진행하겠다. 0. 공통 우선 스프링에서 단위테스트를 진행하기 위해서는 몇가지 라이브러리가 필요하다. 123456789101112131..

web/Junit 2018.05.27 (6)

Mybatis의 동적 SQL

Mybatis의 동적 SQL Mybatis가 가지는 표현식은 다음과 같다. IfChoose(when, otherwise)Trim(where, set)Foreach 기능 사용 예 설명 if AND title like #{title} 코드로 작성할 때의 if 구문에 대한 처리 -> 참 거짓을 구별해서 사용할 때 처리한다. Choose, When, otherwise AND title like #{title"" AND author_name like #{author.name} AND featured = 1 switch와 같은 상황에 대한 처리 Trim, Where,set … 로직을 처리하면서 필요한 구문을 변경 foreach

web/Spring 2016.12.27

longpolling 방식 소개 및 comet 방식과의 차이점 설명

Comet 기존의 지속적인 갱신을 위해서는 Polling이라고 불리는 일정 간격으로 서버에 요청을 보내서 바뀐 내용을 조회하는 방식이였지만 이 방식을 리얼타임 수준으로 갱신하려면 간격을 줄여야 해서 불편하였다. 반면Ajax Push라고도 불리는 Comet은 Long Polling 과 Streaming 방식 두 가지를 제공한다.1) Long Polling클라이언트가 요청을 보내면 서버에서 이벤트가 발생할 때까지 응답을 하지 않고 가지고 있다가 이벤트가 발생하면 응답을 하고 다시 클라이언트에서 요청이오면 응답을 하는 구조로 되어있다.2) Streaming요청을 최초의 한번 보내면 Chunk데이터를 통해서 이벤트가 있을 때마다 계속 클라이언트에 데이터를 보내준다.

web/Web 2016.12.22