Java Spring Boot - Spring Framework
Spring Framework
- Framework: Frame(틀) + Work(작업) → 정해진 규칙안에서 작업할 수 있도록 제공되는 환경
- Open Source
- 무료로 소스 코드가 공개된 것
- 기업체 중심으로 개발된 오픈소스 프레임워크들이 통일성이 없기 때문에 정부 주도로 프레임워크를 제작 → eGov F/W, 전자 정부 표준 프레임워크 (자바 스프링 기반)
- Web Application = Servlet/JSP, EJB(Java에서 개발) → Struts F/W → Spring F/W → Spring Boot F/W (EJB 대체 목적)
- Ioc (Inversion of Control) 컨테이너 : 제어의 역전
- 주도권: 사용자 → 스프링
- Member m - new member(); 와 같은 객체 생성을 컨테이너가 대체
- DI (Dependency Injection) 지원 : 주도권 이전을 위해 사용
- Filter : 요청/응답 선행, 후행처리
- 문지기 : 임무(검열), 기본 필터, 필터 추가사용, 직접 필터 생성
- 성 : 톰캣 (filter → web.xml) / 스프링 컨테이너 필터 (인터셉터)
- 왕의집 : 스프링 컨테이너
- Annotation
- Compile checking : 주석 + 힌트, 리플렉션
- Java : @Override → 부모클래스에서 정의가 되어 있는지 힌트 체킹
- Spring :
- @Component → 클래스 메모리에 로딩
- @Autowired → 로딩된 객체를 해당 변수에 할당
- MessageConvert : 기본값 JSON
- BufferedReader (@RequestBody), BufferedWriter (@ResponseBody)
Springboot with JPA
-
JPA : Java Persistence API
-
ORM (Object Relational Mapping) 기술
-
반복적인 CRUD 작업을 생략하게 해줌
-
영속성 컨텍스트를 가지고 있음
-
DB와 OOP의 불일치성을 해결하기 위한 방법론 제공
-
OOP 관점에서 모델링 가능
- Inheritance, Composition, Association Relation
-
방언 처리가 용이하여 Migration 하기 좋음
→ 유지보수에 좋다
Spring 기본 개념
— Framework 개요
- 개념 : 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 구성하여 특정 문제를 해결하기 위한 일련의 협업화된 형태로 클래스들 및 기반구조를 제공하는 것
- 특징 :
- 디자인 패턴이 적용된 라이브러리 기반의 구조화된 산출물
- 특정 개념들의 추상화를 제공하는 다양한 클래스와 재사용 가능한 컴포넌트로 구성
- 추상적인 개념들이 문제를 해결하기 위해서 협업하는 방법을 정의 (통합성, 일관성 제공)
- 디자인 패턴 : 자주 사용하는 효율적인 설계 구조를 정형화해서 설계 템플릿을 구성하는 것
- 라이브러리 : 자주 사용하는 기능들을 모아 재사용하기 위한 클래스들의 집합으로 단순 호출하여 사용
- 프레임워크와 라이브러리 차이점 : 어플리케이션 제어 흐름에 대한 주도성 (제어의 역전)
— Spring Framework 개념
- Java Enterprise (JAVA EE) 개발을 보다 쉽고 편하게 개발 할 수 있는 Light Weight 오픈소스 어플리케이션 프레임워크 ⇒ Server/JSP, JDBC, message, EJB 등
- 공공기관의 웹서비스 개발위한 전자 정부 표준 프레임워크 (eGov Framework)의 기반 기술
— POJO (Plain Old Java Object)
-
특정 인터페이스에 종속되지 않는 자바빈과 같은 사용자 정의 자바 클래스
-
특정 라이브러리, 컨테이너에 독립적, 생산성 향상, 테스트 작업시 유연함
※ JavaBean Component
- 기본생성자
- private 멤버변수 (name → getName(return) / setName(this.name=name) )
- public setter()/getter() → 메서드형식 반드시 규칙준수
— EJB (Enterprise JavaBeans)
- 기업환경의 시스템 구현위한 서버측 컴포넌트 기술
- Session Bean, Entity Bean, Message Driven Bean ⇒ 규칙준수 : 상속, 재정의, 라이프사이클
- 시스템의 업무로직을 처리하기 위한 인프라 서비스 기술을 제공하는 서버(WAS)에 종속
- EJB WAS : EJB Container 생명주기 관리
- 문제 : 유료 사용비용이 비싸다 ⇒ EJB 대체를 위해 Spring이 탄생
— 스프링 주요 특징
-
POJO : 일반 자바 클래스
-
DI (Dependency Injection) 개념 : 의존성 주입
- 각 클래스 사이의 의존관계를 빈설정 (bean definition) 정보를 참조하여 컨테이너가 자동적으로 연결해주는 것
- 컨테이너 API에 종속되는 것을 줄일 수 있음
- 의존성 주입 종류 :
- Setter Injection : setter 메서드를 이용하는 방법
- Constructor Injectrion : 생성자를 이용하는 방법
- Method Injection : 일반 메서드를 이용하는 방법
-
IoC (Inversion of control) 개념
(핵심) :
제어의 역행
- 개발자가 객체를 생성하지 않고 Framework 에서 생성 제공 (주입)
- 의존관계 (Dependency)
- 객체의 생성에서부터 생명주기의 관리까지 모든 제어권의 변경
-
AOP (Aspect Oriented Programming) 개념
- (핵심)
-
공통관심사 분리
- 예를 들어 세션을 분리 설계해놓으면 세션이 필요한 기능에 따라 공통 적용이 가능하다
- 관련용어: Joinpoint, Advice, Pointcut, Aspect, Weaving, Target
-
편리한 MVC 구조
-
Transaction 지원
-
WAS 종속적이지 않는 독립적 개발환경
-
스프링 설정 파일 작성 : XML, Properties, Annotation 선택 가능
Spring Boot
- 개발환경 설정 단순화 (편리)
- 개발환경 : STS (Spring Tool Suite) 다운로드 추가 설치
- STS: JDK, WAS(Tomcat) 포함 + plug in 추가 설치
- 의존관계 라이브러리 자동관리: maven, gradle
- 배포단위: jar, war
- 환경설정: xml, properties, yaml
스프링부트 프로젝트 폴더 기본구조
- project
- pom.xml
- 의존관계 라이브러리 관련 설정 파일
- 프로젝트 생성시의 의존관계 체킹시에 자동 추가
- 개발중에 직접 추가 설정
- Local repository 위치: C:\Users\Playdata.m2\repository>
- Web repository: https://mvnrepository.com/
- .m2 압축 복사 사용 가능 (다운로드 문제시에 사용가능)
- src/main/java> java source 파일
- src/main/resources>
- application.properties
- 프로젝트 관련 환경설정
- src/main/resources/static>
- html, css, js 등 정적 파일
- src/main/resources/templates>
- spring boot view : thymeleaf 기본 지원
Lombok
- Domain 클래스에 대한 코드 자동완성 제공
- https://projectlombok.org/
- 추가 설치 라이브러리: lombok.jar
- Domain class : Member.java
- 자동으로 제공하는 setter(), constructor 생성자는 parameter data에 대한 설정 만을 자동 지정(초기화 목적 자동) ⇒ setter(), constructor에서 부가적인 코드를 구현해야한다면 자동완성 사용 불가
Spring Controller .vs. Servlet 코드 비교
— Spring Controller
@Controller
public class HomeController {
@RequestMapping("/add")
@ResponseBody
public int addSum(int op1, int op2) {
return op1 + op2;
}
}
— Servlet
public class HomeController extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String data1 = request.getParameter("op1");
String data2 = request.getParameter("op2");
int op1 = Integer.parseInt(data1);
int op2 = Integer.parseInt(data2);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>...<body>");
out.println(op1 + opt2);
out.println("</body></html>");
}
}
Lombok 주요 어노테이션
@Data
@Setter
@Getter
@AllArgsConstructor
@Builder
@ToString
@ToString(exclude = "memberPw")
@ToString(exclude = {"memberPw", "mobile"})
@EqualsAndHashCode()
@EqualsAndHashCode(of = "포함속성명")
@EqualsAndHashCode(exclude = {"제외속성명", "제외속성명", "제외속성명"})
Emmet html tag editor
— 자동완성을 통해 html 작성 속도를 향상시켜주는 플러그인
-
STS 설치 : eclipse marketplace를 통해 진행
-
https://docs.emmet.io/
-
대표 작성 태그
-
> : 자손 태그
-
+ : 형제 태그
-
*숫자 : 반복 횟수
-
() : 그룹핑
-
^ : 한단계 상위
-
^^ : 두단계 상위
-
-
예시
table + tab tr * 5 + tab (tr>(th+td))*5 + tab div>ul>li*5 (div>ul>li*5)*2
댓글남기기