Whiteship's Note


[코딩] 데이터를 요청하지 말고 작업을 요청하라.

모하니?/Coding : 2009.11.12 18:45


어떤 컨트롤러 안에 다음과 같은 코드가 있습니다.

    @RequestMapping("/study/{studyId}/meeting/delete/{meetingId}")
    public String deleteMeeting(@PathVariable int studyId,
            @PathVariable int meetingId) {
        Meeting meeting = meetingService.getById(meetingId);
        meetingService.deleteMeeting(meeting);
        return redirectStudyView(studyId);
    }

안그래도 컨트롤러 코드를 보면 항상 무언가 미적지근한 것이 있었는데, 그 원인을 이제야 알겠네요. 이 글의 제목에 적혀있는 객체지향 원리(?)를 생각해볼때 위와 같은 코드의 문제점은 무엇일까요?

이상하죠.. meeting을 model에 주어 담을 것도 아닌데, 뭐하러 가져와서 다시 service쪽에 넘겨주는 걸까요. 저런 식으로 코딩한 부분이 한 두군데가 아닙니다. 죄다 고쳐야겠어요. 크헉!!!!;;;;;




top

TAG 코딩
  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.11.13 17:54 신고 PERM. MOD/DEL REPLY

    딱 형 스타일이네요 ;;ㅋㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.11.13 18:20 신고 PERM MOD/DEL

    ㅇㅇ내가 짠거야.ㅠ.ㅠ

Write a comment.


배치관리 및 실행 구현시 고려할 것.

모하니?/Coding : 2008.06.05 00:00


1. 배치들 간의 의존성

배치들 사이에도 dependency가 존재할 수 있다. 먼저 특정 배치가 돌아야 그 다음 배치를 돌릴 수 있는 그런 관계의 배치 작업. 선행하는 배치가 먼저 실행되었는지, 그 결과는 어떤지에 따라 현재 배치 작업을 실행해야 하는지 패스해야 하는지 알 수 있다.

2. 배치 실행

배치 실행은 쿼츠를 사용하여 주기적으로 배치가 실행되어야 하는 시간을 확인하여 실행한다. Ant로 빌드 스크립트 짜고 리눅스의 클론좝인가로 돌릴 수도 있고, 독립적으로 쿼츠를 실행할 수도 있는데, 스프링을 사용하면  applicationContext.xml에 간단한 빈 설정을 통해 애플리케이션 구동시 쿼츠 스케쥴러를 가동할 수 있다.

3. 배치 결과

배치 결과, 배치 시작 시간, 종료 시간, 시도 횟수, 에러 로그 정보를 기록한다. 이 때 배치작업이 예외를 던지고 뻗어도 배치 결과는 DB에 저장이 되어야하기 때문에, 두 개의 작업은 별도의 트랜잭션으로 다뤄져야 한다. 스프링을 사용한다면, REQUIRED_NEW 를 사용하면 현재 트랜잭션은 잠깐 멈춰두고 새로운 트랜잭션을 만든다. 그리고 그걸 끝내든 롤백하든 마무리하고 기존에 대기해뒀던 트랜잭션을 다시 사용하게 됨으로 이런 경우에 매우 적절하다.

4. 로그 메시지

일관되어 보기 좋은 형태로 로그 메시지를 출력해야 하며, 필요한 지점에 효율적으로 로깅을 해야한다. 로깅의 레벨을 조정하여 info, debug, error 등을 잘 구분하여 메시지를 남기도록하자.

5. 테스트하기

어렵다.
top

Write a comment.