바닥코딩

스프링 프로젝트의 기본 구조 및 의존성 본문

Spring Framework/스프링 기초

스프링 프로젝트의 기본 구조 및 의존성

개발공부개발공부 2020. 2. 4. 21:11

스프링 프로젝트의 기본 구조

스프링 프로젝트의 기본 구조

 이클립스 또는 sts, inteliJ등을 사용하여 스프링 mvc 프로젝트를 생성하면 위와 같은 디렉터리 구조가 자동으로 생성됩니다 위 구조에 대한 해당사항등을 정리해보면 

 1. javaresource -> src/main/java

  = 자바 리소스 디렉토리 자체는 자바 코드에 대한 디렉토리가 되며 src/main/java는 자바로 작성되는 코드의 경로로   주로  사용된다

2. javaresource -> src/main/resource

 = 프로젝트 내 자바 코드를 실행할떄 참고하는 기본 경로(주로 설정에 관련된 파일들을 이 곳에 넣는다)

3. javaresource -> src/test/java

= 테스트 코드를 주로 넣는 경로 

4. javaresource -> src/test/resource

= 테스트 관련 설정 파일을 보관하는 경로 

5. main 폴더안 spring -> servlet-context.xml

= 웹과 관련된 스프링 설정 파일 

6. root-context.xml 

= 스프링 관련된 파일 설정 

7. views폴더 

= 템플릿 프로젝트 html 또는 jsp 파일 경로 

8. web.xml 

= Tomcat의 web  xml 파일

9. pom.xml 

= maven 이 사용하는 pom.xml

스프링의 특징

스프링이 인기있는 이유는 결국 안정적인 프레임워크라는 특성 때문입니다. 개발자라는 직업은 각 개개인의 능력 차이가 심한 직종이고 개발자 구성에 따라 프로젝트의 결과물 역시 큰 차이를 보일 수 있습니다 이러한 격차를 극복하기 위해 프레임워크를 통해 기본 흐름이나 구조들을 정의하고 모든 팀원이 이 구조 내에서 코드를 추가 할 수 있기 때문에 사용되어 집니다. 

   요약 : 프로젝트를 수행하기 전 이미 구조 정의를 완성해 놓고 시작할 수 있음

spring 의존성

 의존성이라는 말은 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미합니다 예를 들어 학교에서 수업을 진행하는데 학생중 한명이 아파 하루 못나온다고 한다면  사실 수업을 하는데는 큰 지장이 없지만 선생님이 아파 하루를 못나온다면 수업을 할 수 없는 일이 발생합니다 사실 이 예는 올바은 예는 아니지만 이렇게 나의 객체가 다른 객체 없이는 동작이 불가능한 상황을 의존이다 라고 표현합니다

 di(dependency injection)

 = 직역하자면 의존성 주입입니다 위에서 설명했던 의존성이라는 것을 강제로 외부에서 주입한는 것을 의미합니다 이렇게 말하면 사실 이해하기가 힘들겁니다 하나의 예시롤 이를 설명하자면 음식점 중에 재료가 필요할떄마나 시장이나 마트에서 식재료를 사는 음식점도 있지만 프렌차이즈의 체인점들은 본사에서 식재료를 공급해 줍니다. 

  프렌차이즈 체인점이 위 상황에서 얻는 장점에 대해 생각해보자면 '편리하다' 입니다. 장사를 하는 입장에서 식재료를 쓰는 사람은 장사에만 집중을 하고 재료 배송에는 큰 신경을 쓸 필요가 없습니다. 이걸 코드에서 적용해 보자면 주입을 받는 이장에서는 어떤 객체인지 신경 쓸 필요가 없다라는 의미로 해석이 됩니다 

aop(Aspect Oriented Programmig)

 = 좋은 개발환경의 주요 원칙 중 하나는 '개발자는 비즈니스 로직에만 집중 할 수 있게 한다' 입니다 이를 위해 가장 쉽게 생각할 수 있는 건 반복적인 코드 제거 입니다 스프링 프레임 뭐크를 이용한 개발에도 이러한 반복적인 코드를 지우고 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공합니다 

 보통 반복적인 코드는 보안이나 , 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분에서 발생합니다 이러한 부분을 스프링에서는 분리하여  제작하는 것이 가능한데 AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다 

ioc(inversion of control)

= 사실 의존성 주입을 정확히 이해하기 위해서는 ioc의 개념을 알고 넘어가야할 필요가 있습니다 스프링을 쓰기 전에는 개발자가 프로그램의 흐름을 제어하는 주체 였습니다 하자만 스프링은 프로그램의 흐름을 프레임워크가 주입하게 됩니다 (후에 포스팅할 @Autowired등등) 객체의 생성 ~ 생명주기 관릴르 컨테이너가 도맡아서 하기 떄문에 즉 제어권이 컨테이너로 넘어갔다고 하여 inversion of control  제어의 역전이라고 합니다