2 minute read

개요 작성중

: 개요 작성중

web.xml 에 대하여

: 지금(Servlet 3.0 이후)은 아니지만, Apache Tomcat이 구동될때 web.xml을 읽어 웹 애플리케이션을 구성하기 때문에- 원래 스프링 웹 애플리케이션이 Tomcat에서 동작되기 위해서는 아래와 같이 web.xml의 ApplicationContext 등록해줘야 했다. (사라진 web.xml :과거 web.xml 작업을 하셨던 분의 글)

<servlet>
  <servlet-name>example</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>example</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

기본기

#질문

안녕하세요.
다름이 아니라 제가 개발에 대한 이해가 부족했던것이 아닌지 해서 글을 올려봅니다.

얼마전을 spring 기반에 웹을 개발하고 있는데 제가 이제까지 개발한 방법은
controller -> service -> dao 이런식으로 호출해서 개발을 하고 있었는데요
본질은 controller에서 여러개의 service를 호출해서 사용을 하고 로직을 넣었는데 

고참이 이부분 때문에 속도가 느리다. 이부분은 service 하나로 배서 그 서비스에서 controller에서 구현 부분을 넣어야 한다고 지적 하셨는데요... 

제가 이해가 안돼는데요... controller에서 호출하는것과 servce 쪽에서 호출하는것이 무었때문에 포퍼먼스 차이가 나는지 궁금하구요. 

만약 합당한 이유가 있다면 앞으로는 이렇게 절대 짜서는 안된다는 생각이 드네요.. 고수님들 답변 기다릴게요.

#답변1
퍼포먼스 보다는 service는 업무단위로 묶어야 트랜잭션처리가 쉽겠죠.

#답변2
저도 경력이 얼마 안되서 ^^ 속도는 잘 모르겠고요. 
service단위로 transaction이 이루어지기 때문이 아닐까요?
여러 service를 호출할 경우 그만큼 transaction이 이루어지고 왓다갓다 하는 경도로 많아 지구해서요?

하나의 service에서 여러개의 dao를 호출할경우 dao만 호출하게 되는데
여러개의 service를 할경우 계속 controller단까지 왓다갓다? 하는 시간도 있고요^^;;

저두 controller에서 로직이 들어가는 여러개의 service를 호출하지 말라고 배웟고요.

이유는 각자에 역활이 있고 controller는 화면을 반환하는 역활이고 
transaction 자체가 service 단위로 이루어지기 때문에 

마지막 service단에서 오류가 날 경우 지금까지 호출된 service 로직은 rollback이 되지 않는다고 해서
왠만하면 저두 controller단에서는 로직도 안쓰고 여러개 service는 호출안합니다.
(예외가 잇긴 합니다. 오류가 날경우 전체적으로 예외처리를 한다든가..세팅하기 나름이겠죠.)

공통적으로 쓰는 service는 상속해 놓구요.

#답변3
좀 이상하게 배우신듯.
Controller에서 여러개의 서비스를 호출해도 됩니다..
예를 들어 회원 가입하는 서비스가 있고 타 서버 연동하는 서비스를 Controller에서 호출해야 하는데..
하나만 호출해야 한다고 해서 그 두기능을 하나로 묶은 서비스를 새로 만들어서 그걸 호출해야 하나요..?

그렇게 생각할 필요가 없습니다..
하나로 묶어야 하는 것은..

2개의 서비스 로직이 하나의 트랜잭션으로 묶어서 동작해야 된다면 그때는 2개의 서비스를 묶는 상위 서비스를 하나 만들어서 호출하는 식으로 할 수는 있습니다..즉 A 서비스가 B서비스, C서비스를 Injection 받아서 그 안에서 사용하는 것은 할 수 있죠..그렇게 해서 트랜잭션을 한 군데로 묶은뒤에 Controller에서 A 서비스를 호출해야 할 수는 있습니다..

그러나 그럴 필요가 없는 것들..즉 2개 이상의 서비스가 트랜잭션 보장을 해야 할 필요가 없는 서로 독립적인 서비스라면 Controller 메소드에서 2개 이상의 서비스를 사용해도 아무 문제 없습니다..

그리고 Controller에서 하는 기능은 전달된 파라미터 검증, 보여줘야 할 페이지 결정 등의 View 연관된 기능을 제외한 것들은 모두 서비스로 몰아버리세요..정의에 따라 엄밀하게 구현한다면 Controller는 입력과 출력, 그것이 웹페이지일수도 있고 Json 문자열일수도 있지만..그런 입력과 출력과 관련된 부분만 구현하세요..

Leave a comment