프로그래밍/Spring

Spring 1일차 - 스프링 프레임워크

윤도ri 2022. 3. 14. 19:05

>프레임 워크(Framework)

- 뼈대나 근간을 이루는 코드들의 묶음
- 개발자는 각 개개인의 능력차이가 큰 직종이고, 개발자 구성에 따라 프로젝트 결과 역시 큰 차이를 낳는다. 이런 상황을 극복하기 위한 코드의 결과물이 바로 프레임워크이다. 프로그램의 기본 흐름이나 구조를 정하고 모든 팀원들이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 된다.

<장점> 

 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에 실력이 부족한 개발자라 하더라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다. 개발자 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣기 때문에 개발 시간을 단축할 수 있고, 회사 입장에서는 일정한 품질이 보장되는 결과물을 얻을 수 있다.

 

>스프링 프레임워크(Spring Framework)

- 경량 프레임 워크(light-weight)
- 예전 프레임워크는 다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다 보니 하나의 기능을 위해서 너무 많은 구조가 필요했다. 기술이 너무나 복잡하고 방대했기 때문에 전체를 이해하고 개발하기에는 어려움이 많았다.
그래서 스프링 프레임워크가 등장했고, 특정 기능을 위주로 간단한 JAR파일 등을 이용해서 모든 개발이 가능하도록 구성되어 있다.

  <특징> 

1.POJO 기반의 구성
2.의존성 주입(DI)을 통한 객체 간의 관계 구성
3.AOP(Aspect-Oriented-Programing) 지원
4.편리한 MVC 구조
5.WAS에 종속적이지 않은 개발 환경

 

>POJO(Plain Old Java Object)

- 오래된 방식의 간단한 자바 객체 라는 의미이며 JAVA 코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레임워크에서 그대로 사용할 수 있다는 뜻이다.

 

>DI(의존성 주입) - Dependency Injection

- 의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다. 예를들어 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다' 라고 표현한다.


- 주입(Injection)은 말 그대로 외부에서 밀어 넣는것을 의미한다. 예를 들어 어떤 객체가 필요한 객체를 외부에서 넣어주는것을 의미한다. 주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하든 자신의 역할은 변하지 않게 된다.

 

의존
a ------------> b
: a객체에서 b객체를 직접 생성

의존성 주입
a ---> ??? <--- b
: a는 b가 필요하다는 신호만 보내고, b 객체를 주입하는것은 외부에서 이루어짐

의존성 주입방식을 사용하기 위해서는 ???라는 존재가 필요하게 된다. 스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며, 필요한 객체들을 생성하고 주입까지 해주는 역할을 한다. 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는(Wiring) 작업의 형태로 개발하게 된다.

ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라 부르고, 빈과 빈 사이의 의존 관계를 처리하는 방식으로 XML설정, 어노테이션 설정, JAVA 코드 설정 방식을 이용할 수 있다.

 

>AOP(Aspect-Oriented-Programing)

-  관점 지향 프로그래밍 

 좋은 개발 환경에서는 개발자가 비즈니스 로직에만 집중할 수 있게 한다. 스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공한다. 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분을 횡단 관심사(cross-concern)이라고 한다. 스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고 횡단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 한다.


1. 핵심 비즈니스 로직에만 집중해서 코드 개발
2. 각 프로젝트마다 다른 관심사 적용시 코드 수정 최소화
3. 원하는 관심사의 유지보수가 수월한 코드 구성 가능

 


| STS(Spring Tool Suite) 설치


Help Eclipse Marketplace... > STS 검색 설치
전부 동의,다음 등등.. > 중간에 restart Now 나오면 OK

| Maven
- 자바용 프로젝트 관리 도구
- 내부에 있는 특정 문서(pom.xml)에 라이브러리를 정의해 놓으면 네트워크를 통해서 해당 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들 까지 자동으로 다운받아 준다.

| Lombok 라이브러리 설치
- 이클립스와 STS 만으로도 스프링 개발이 가능하지만, Lombok을 이용하면 Java 개발시 getter/setter, toString(), 생성자 등을 자동으로 생성해 주기 때문에 설치하면 편하게 개발을 할 수 있다.

https://projectlombok.org
> 다운받은 jar파일 실행(더블클릭, cmd에서 java -jar 롬복파일경로)
> 설치하려는 eclipse.exe 의 경로 설정
> 설치 완료시 해당 이클립스 폴더 안에 lombok.jar 파일 생성 여부 확인

 


>기본 구성 요소
1. pom.xm

- Maven이 사용하는 pom.xml
- 라이브러리 관리용


2.src/main/java
- 작성되는 자바 코드들의 경로

3.src/main/resources
- 실행할 때 참고하는 기본 경로(설정 파일)

4.src/test/java
- 작성한 자바 코드들을 테스트하기 위한 테스트 코드들의 경로

5.src/test/resources
- 테스트 관련 설정 파일 보관 경로

6.src/main/webapp/WEB-INF/web.xml
- Tomcat의 web.xml 파일

7.src/main/webapp/WEB-INF/spring/root-context.xml
- 스프링 설정 파일(bean 관리)

8.src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
- 웹과 관련된 스프링 설정 파일

9.src/main/webapp/WEB-INF/views
- 템플릿 프로젝트의 jsp파일 경로