처음 스프링 프로젝트가 생성되면 아래와 그림과 같은 구조를 확인 하실 수 있습니다.

간단하게 구성을 설명 하겠습니다.


src/main/java 는 프로젝트에서 개발되는 모든 Java코의 경로가 됩니다.

개발자나 프로젝트의 기호에 따라 sql mapper, tiles 등 xml 의 경로가 포함되기도 합니다.


src/main/recoursec 는 서버가 작동될때 사용되는 파일들의 경로입니다.

DB 연동을 위한 sql mapper의 xml 파일, titles의 template.xml 파일, 다국어 지원을 위한 properties.xml 등이 포함됩니다.


src/test/java 와 src/test/resources 는 말 그대로 테스트용 경로입니다. 위 두 경로와 목적만 다릅니다.


JRE System Library 세팅된 자바 버전을 나타냅니다.


Maven Dependencies 는 pom.xml 에 등록된 라이브러리들이 표시 되어 있습니다.


src->webapp->resources 는 이미지, 자바스크립트 등 페이지를 구성하는 resources들의 경로입니다.

src->webapp->WEN-INF->spring  스프링을 구성하는 설정 파일들의 경로입니다.

src->webapp->WEB-INF->views 실제 페이지를 구성하는 jsp, html 등의 파일들의 경로입니다.





 아래부터 home.jsp 의 작동 원리를 설명 하겠습니다.





기존 Dynamic Web 프로젝트는 jsp 등 웹 파일에서 서버를 실행 하면 바로 해당 페이지에 접근을 할 수 있었습니다.

하지만 스프링에서는 보안을 위해 웹 파일들을 WEB-INF 안에 저장 하고 있습니다.

이유는 WEB-INF 는 직접 접근을 할 수 없기 때문입니다. 이러한 이유로 home.jsp 를 바로 실행 시키면 

아래처럼 404 에러가 발생합니다. 그렇기 때문에 우리는 컨트롤러를 통해 페이지를 호출 해야 합니다.

그림(스프링 작동 순서) 에서 부터 순서대로 설명 하겠습니다.





- 그림(스프링 작동 순서)




1. web.xml 은 프로젝트의 환경 설정을 해주는 파일입니다. 프로젝트가 실행되면 이 파일이 가장 먼저 실행 되고, 

DispatcherServlet이 해당 프로젝트로 들어오는 요청들을 낚아채고 핸들링을 해줍니다.

이 부분은 낚아챈 요청들을 servlet-context.xml 로 보내주는 부분입니다.





	
	
		contextConfigLocation
		/WEB-INF/spring/root-context.xml
	
	
	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		appServlet
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			/WEB-INF/spring/appServlet/servlet-context.xml
		
		1
	
		
	
		appServlet
		/
	







2. servlet-context 는 낚아챈 요청을 받아 <annotation-drive/> 란 태그를 사용하여 컨트롤러에서 어노테이션을 사용할 수 있게 해줍니다.

<context:component-scan base="com.프로젝트.패키지명"/> 태그는 어노테이션을 사용할 영역(패키지)를 설정 할 수 있게 해줍니다.

낚아챈 요청은 com.포르젝트.패키지명에  요청된 url에 맞게 맵핑이 됩니다.

  




	
	
	
	

	
	

	
	
		
		
	
	
	
	
	
	


  



3. @RequestMapping(value = "/", method=RequestMethod.GET) 에 있는 value 값을 참조하여 요청된 url과 맵핑을 합니다.

return 되는 값은 "home" 이지만, 과정 4에서 페이지 경로를 prefix(/WEB-INF/views/) , suffix(.jsp) 가 자동으로 완성해주기 때문에,

최종적으로 /WEB-INF/view/return값.jsp 가 호출이 됩니다.








localhost:8080 을 실행 해보시면 아래와 같은 결과가 나오게 됩니다.

@RequestMapping 에서 value값을 "Index" 라고 설정을 하게 되면, localhost:8080/Index 라는 url로 접근 하면 됩니다.




제가 이해한 내용이 바탕이라서, 혹시 틀린게 있으면 한 수 알려주세요 !!!


XML 에 Beans 에 Component 하는 방식보다, 좀더 세분화 시켜서 등록 및 사용을 할 수 있게 해줍니다.

당연히 내용은 다르겠지만 비슷한 의미로 씨멘틱header, nav, footer 등으로 나누어서 사용하는 것과 비슷한 개념이라 생각됩니다.


@Component 스프링이 해당 클래스의 객체를 생성 할 수 있게 해줍니다.

하지만 다수의 클래스에서 사용되면 관리 및 파악이 어렵기 때문에 위에 처럼 세분화 시켜주기 때문에,

밑에 세개는 @Component 로 부터 상속 받아 사용됩니다.


@Repository 는 DB 쿼리를 수행하는 DAO에 사용됩니다.


@Service 는 실제 사용되는 메소드들이 사용되는 ~ServiceImpl 부분에서 사용됩니다.


@Controller 는 Controller 클래스에서 사용됩니다.


만약 @Repository 에 등록된 DAO 를 @Autowired 를 이용해서 사용(주입)할때, 복수의 DAO가 등록 된다면 오류가 발생합니다. 그때 @Qualifier 를 이용하여 구분 해줄 수 있습니다.


@Austowired 와 @Inject 어노테이션 모두 주입을 위한 어노태이션이지만, @Inject는 자바에서도 사용 되기 때문에 훨씬 범위가 넓습니다. 그래서 Spring 프로젝트를 진행중이시라면 @Autowired로도 충분할 것 같습니다.



※현재 공부 중인 내용을 정리 하는중이라서 절대 완벽할 수 없습니다. 혹시 보고 틀린 내용이 있으면 꼭 한 수 부탁드립니다 !



+ Recent posts