하루하루 개발일지

모프로젝트 1차를 마무리하며...

RAHM 2017. 8. 17. 17:46

1. 스크립트를 이용하여 동적으로 컴포넌트들을 그리고 해당 컴포넌트들을 컨트롤 해야 하는 경우가 있었음.


1) 문제점 발생.

1-a) n개의 컴포넌트들 중 한개의 컴포넌트에 대해서만 컨트롤 해야하는데, 컨트롤 시 컴포넌트의 수만큼 n번의 이벤트가 발생되었다.

예를 들어,n개의 input에 n개 만큼의 버튼이 있고 input과 버튼이 1:1로 매핑되어 있을 때, 버튼을 클릭하면 n개 만큼의 클릭 이벤트가 발생되었다. 정확한 원인은 파악하지 못했음.

$(document).on('.클래스명', function(){

생략...

});


2) 해결책

2-a) jQuery 함수 중에 off() 함수가 있는데, 이벤트를 제거해주는 함수이다. 해당 컴포넌트를 컨트롤할때 발생하는 이벤트를 제거한 후 다시 이벤트를 부여?하는 방식으로 처리했다.

2-b) 클릭 이벤트가 발생하는 해당 컴포넌트에 대해 정확한 처리를 하기 위해 click.클래스명을 사용했다.

$(document).off('click.클래스명').on('click.클래스명',function(){

생략...

});


2. ajax 요청을 최대한 줄인다. (프로젝트별 차이가 있음)


3. HttpServletRequest, HttpServletResponse는 되도록 비지니스 로직을 처리하는 부분(Service)으로 넘기지 말고 컨트롤러 또는 기타 부분에서 직접 처리를 한 후, 필요한 데이터들만 비지니스 로직을 처리하는 부분(Service)으로 넘긴다.

왜냐하면 테스트 시, 비지니스 로직 처리에 필요한 데이터들만 넣어주면 되기 때문. (HttpServletRequestHttpServletResponse를 세팅 할 필요 없음)


4. PC / 모바일 웹 / 하이브리드 앱 -> 이렇게 3가지로 구성되어 있을 경우, 하이브리드 앱에서 접속했을 때 앱으로 접속했다는 것을 알려주기 위해 앱으로 접속 시 Header > User-Agent에 앱으로 접속했다는 플래그 변수를 넘겨주었다.

이러한 방법도 있다는 것...


5. 요청된 파라미터들을 받아서 작업을 해야하는 경우 HttpServletRequest(getParameterNames메소드)를 Enumeration 클래스에 받아서 사용하는 방법도 있다.

-> 예를 들어 아래의 등록 프로세스가 있다고 가정한다.

- 하나의 행사에 N개의 회차가 존재한다. 

- 하나의 행사를 등록 할 때 N개의 회차도 함께 등록한다.

// 행사의 정보는 이미 위에서 Insert했음.

// 아래는 N개의 회차정보를 Insert하기 위해 정보를 추출 및 VO객체에 세팅


Enumeration enumeration = httpServletRequest.getParameterNames();
ArrayList<객체VO> 객체VOList = new ArrayList<>();

//회차를 등록했다면 회차등록 시작
if(회차수 > 0){
//등록한 회차 수만큼 회차생성 후 회차List에 저장
for(int i=0;i<회차수;i++){
회차VO vo = new 회차VO();
객체VOList.add(vo);
}
//등록한 회차의 정보들을 추출 및 세팅
if (enumeration.hasMoreElements()) {
while (enumeration.hasMoreElements()) {
String parameterName = enumeration.nextElement().toString();
Object values[] = httpServletRequest.getParameterValues(parameterName);
if(values!=null){
for(int i=0;i<values.length;i++){
if(!values[i].toString().isEmpty()){
switch (parameterName){
case "비교대상이름" : VO객체.setter(values[i].toString());
break;
}
}
}
}
}
}

}


6. IE에서 첨부파일 다운로드 시 한글이 깨지는 현상

boolean ie = (request.getHeader("User-Agent").indexOf("MSIE") > -1) || (request.getHeader("User-Agent").indexOf("Trident") > -1) || (request.getHeader("User-Agent").indexOf("Edge") > -1);
String originalFileName = "";

if(ie) {
originalFileName = URLEncoder.encode(첨부파일 원본명, "UTF-8").replaceAll("\\+","%20");
response.setHeader("Content-Disposition", "attachment; filename="+originalFileName + ";");
}else{
originalFileName = new String(첨부파일 원본명.getBytes("UTF-8"), "iso-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\""+originalFileName + "\"");
}