일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- set-version
- Spring
- http 응답코드
- 스키마 디자인
- REST HTTP API
- AOP
- RestControllerAdvice
- ubuntu
- 탐욕 알고리즘
- 함수형 인터페이스
- ubuntu passwd
- JAVA 재귀함수
- Spring 예외처리
- git workflow
- file i/o
- git 설정
- mapstruct
- root passwd
- O(log n)
- Spring MVC
- N:N
- 배열 탐색
- 리눅스 사용권한
- ubuntu 패스워드
- custom exception
- char to int
- 코드스테이츠
- 스키마 설계
- Java
- 자료구조
Archives
- Today
- Total
개발소설
Spring Framework 기본 개념 본문
Spring Framework
- 자바 플랫폼에서 사용하는 웹애플리케이션 프레임 워크이다.
Framework
- 프로그래밍을 하기 위한 틀(frame), 구조를 제공한다.
- 정해진 규약을 제공하여 그 규약에 맞게 프로그래밍 할 수 있다.
- 개발자들이 프로그래밍의 구조에 신경쓰지 않고 핵심 비즈니스 로직 개발에 집중 할 수 있게 해준다.
Framework와 Library의 차이
- 프레임워크는 전체적인 구조를 제공하는것
- 라이브러리는 프로그래밍시 필요한 어떠한 기능을 제공하는것
- 애플리케이션 흐림의 주도권이 라이브러리는 개발자에게 있고 프레임워크는 프레임워크에 있다(Ioc)
- 어떤 라이브러리를 쓸지 개발자가 직접 정하지만, 프레임워크 사용시 프레임워크의 룰을 따라야 한다.
Spring Framework를 사용하는 이유
- 객체 지향적 개발에 중요한 재사용과 확장의 좋은 애플리케이션을 개발하기 위해
- 성능과 서비스의 안정성이 필요한 기업용 엔터프라이즈 시스템을 구축하기 위해
기업용 엔터프라이즈 시스템
기업용 엔터프라이즈 시스템이란 기업의 업무(기업 자체 조직의 업무, 고객을 위한 서비스 등)를
처리해주는 시스템을 의미합니다.
기업용 엔터프라이즈 시스템은 대량의 사용자 요청을 처리해야 하기 때문에
서버의 자원 효율성, 보안성, 시스템의 안전성이나 확장성 등을 충분히 고려해서
시스템을 구축하는 것이 일반적입니다.
Spring Framework가 좋은 이유
- 이전에는 프론트엔드(html, css, javascript)에 해당하는 코드들과 java 코드들이 같은 파일에 있는 jsp방식을 사용
- 코드가 같이 있기 때문에 유지 보수 하기가 어려웠다.
- 발전하여 서블릿(Sevlet) 방식으로 java코드를 분리하였으나 db연결, 저장등 핵심 비즈니스 로직이 아닌 설정에 관련된 코드들의 길이도 길었기 때문에 코드의 가독성이 떨어지고 역시나 유지보수도 어려웠다.
- Spring MVC가 등장하여 이러한 기능들을 Spring MVC가 대신 처리하여 코드가 간결해지고 편리해졌지만 여전히 Spring 기본구조에 대한 복잡한 설정 작업이 필요해 개발의 어려움이 있었다.
- Spring Boot가 등장하여 이러한 설정작업 마저도 간단하게 처리 할 수 있게 되었다.
- 이러한 어려움들을 해결하기 위해 개발 방식이 발전한것이 Spring Framework이고 Spring을 사용하면 기존에 힘들고 불편했던 설정 등의 작업들을 Spring에서 정해진 규칙대로 간단하게 처리 할 수 있기 때문에 핵심 비즈니스 로직에만 집중 할 수 있다.
Spring Framework의 특징
- POJO(Plain Old Java Object)
- IoC (Inversion of Control) / DI (Dependency Injection)
- AOP (Aspect Oriented Programming)
- PSA (Portable Service Abstraction)
POJO(Plain Old Java Object)
- POJO란 순수한 자바 객체를 의미
- POJO 프로그래밍이란 순수한 자바 객체나 특정 기술이나 환경에 종속적이지 않도록 하는 프로그래밍 기법이다.
- POJO 프로그래밍을 지향하기 위해 IoC/DI, AOP, PSA 라는 기술을 제공한다.
IoC (Inversion of Control)
- 애플리케이션의 흐름의 주도권이 뒤바뀐것 (제어의 역전)
- 애플리케이션의 흐름을 사용자가 주도하는것이 아니라 Framework가 주도하도록 한다.
DI (Dependency Injection)
- IoC의 개념을 구체화한 것으로 객체 간의 관계를 느슨하게 하는것
- 객체가 다른객체에게 의존하는 경우 의존 관계가 된다. ( 다른 객체의 기능을 사용하기 위해)
- 의존관계시 객체 안에서 새로운 객체를 생성(new)하는 경우 객체간 결합도가 높다고 말한다. (강하게 결합)
- 결합도를 낮추기 위해 (느슨한 결합) 내부에서 객체를 생성하는것이 아닌 외부에서 주입하게 하는것 - 생성자등을 통해 (의존성 주입)
- Interface 같은 상위 클래스를 만들어 공통된(일반화된) 기능을 모으고 의존하는 객체에 하위 클래스에서 상속(또는 구현)한 객체를 주입하여 결합도를 낮춘다.
- 필요한 기능(요구사항 변경) 바뀌여도 하위 클래스만 수정하거나 새로 만들어 주입하면 된다. - 의존하는 객체의 코드를 바꾸지 않아도 된다.
- Spring을 사용하면 애플리케이션 코드에서 이루어지는 의존성 주입(DI)을 Spring에서 대신 해준다.
AOP (Aspect Oriented Programming)
- 관심 지향 프로그래밍
- 공통된 관심 사항을 의미하는것으로 프로그램내 비즈니스 로직이 아닌 공통적으로 사용되는 기능들을 얘기한다.
- 보안, 로깅, 트랜잭션등
- 이러한 공통된 기능들의 코드를 비즈니스 로직 코드에서 분리함으로써 코드의 간결성을 유지하고 재사용성을 높인다.
- 한마디로 AOP는 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
PSA (Portable Service Abstraction)
- 객체 지향 프로그래밍에서 어떤 클래스의 본질적인 특성만을 추출하여 일반화 하는것을 추상화(Abstraction)
- 클라이언트가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하게 한다.
- 애플리케이션에서 특정 서비스를 이용 할때, 서비스를 접근하는 방식은 일관되게 가져가고 사용하는 기술은 유연하게 사용 하도록 하는것이 일관된 서비스 추상화 (PSA) 이다.
- 접근하는 방식은 일관되게 하고 사용하는 기술만 변경함으로써 코드의 최소한의 변경만으로도 변경된 요구사항을 반영 할 수 있다.
- 특정 기술들의 공통된 기능을 인터페이스로 추상화하기 때문에 해당 기술들의 구현 코드를 모르더라도 사용하는것에 문제가 없다. - 기술이 바뀌어도 동일한 메소드를 호출, 비즈니스 로직을 직접적으로 수정하지 않아도 됨
특징 요약
- POJO(Plain Old Java Object) 프로그래밍이란 순수 Java 객체가 다른 기술이나 환경에 종속되지 않도록 하기 위한 프로그래밍 기법이다.
- IoC (Inversion of Control) 애플리케이션 흐름의 주도권이 뒤바뀐 것
- 의존성 주입(DI)은 클래스들 간의 강한 결합을 느슨한 결합으로 만들어준다. 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달 받고 있다면 의존성 주입이 이루어 지고 있는 것
- AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
- PSA(일관된 서비스 추상화)는 애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것
Servlet
- 클라이언트의 요청을 처리하고 해당 요청의 결과를 클라이언트에 전송하는 자바 프로그래밍 기술
- 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술
- 자바 서블릿은 자바를 사용해 웹페이지를 동적으로 생성하는 서버측 프로그램, 웹 서버의 성능을 향상시키기 위한 자바 클래스의 일종
- 서버에서 돌아가는 웹 요청에 대해 동적인 처리가 가능한 자바 프로그램
- init() (서블릿 생성) -> service() (요청에 대한 응답 처리 진행) -> destroy() (서블릿 삭제)
Servlet Container
- 서블릿을 담고 관리하는 역할, 서블릿이 동작하는 환경을 제공
- 웹서버와 통신 (통신 지원) - 클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어서 통신
- 생명주기 관리 - 서블릿의 생성, 처리, 삭제
- 멀티쓰레드 지원 및 관리 - 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행
- 선언적인 보안 관리 - 자바 클래스 안에 보안 관련된 메서드를 구현하지 않아도 된다.
- 웹서버는 http 요청을 서블릿 컨테이너로 전달 -> 서블릿이 컨테이너에 없으면, 서블릿을 동적으로 검색, 컨테이너의 주소 공간에 로드 -> 서블릿의 init() 메소드 호출, 서블릿 초기화 (첫 로드시) -> 서블릿의 service() 메소드 호출, http 요청 처리 (컨테이너 주소에 남고, 다른 http 요청들을 처리) -> 웹서버는 동적으로 생성된 결과를 반환
웹 애플리케이션 아키텍쳐 (Architecture)
- 아키텍쳐는 구성과 동작 원리, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계 등을 설명하는 설계도, 청사진
- 시스템 아키텍쳐 - 어떤 시스템의 전체적인 구성 (하드웨어, 소프트웨어 포함)
- 소프트웨어 아키텍처 - 소프트웨어의 전체적인 구성
- 웹 애플리케이션 아키텍쳐
- 데스크탑이나 스마트폰에서 사용하는 프로그램, 넓게는 서버 애플리케이션을 의미
- 계층형 아키텍쳐
- 3단계 계층 구조
- API 계층 - 클라이언트의 요청을 받아들이는 계층, 표현 계층이라고도 불림 (REST API를 제공하는 경우 API계층이라는 용어가 더 적절하다)
- 서비스 계층 - API 계층에서 전달 받은 요청을 처리하는 계층, 비즈니스 로직을 담당, **도메인 별로 로직을 처리한다. 애플리케이션(서비스)의 핵심 로직이라고 할 수 있다.
- 데이터 엑세스 계층 - 서비스 계층에서 처리된 데이터를 데이터 베이스에 저장, 수정, 조회, 삭제(CURD)
- 3단계 계층 구조
- ** 도메인 - 해결하고자 하는 문제의 영역, 배달앱을 생각하면 음식을 찾는것, 음식을 골라 장바구니에 넣는것, 결제하는것 등의 로직들이 필요하고 이런 로직들의 정보들을 도메인 지식이라 한다. 도메인 지식을 바탕으로 비즈니스 로직으로 구현한다. - 도메인 지식을 잘 알고 있어야 비즈니스 로직을 잘 구성 할 수 있다.
Spring Boot
- Spring 설정의 복잡함을 해결 하기 위해 생겨난 Spring Project
- Spring Boot를 사용해야하는 이유
- XML 기반의 복잡한 설계 방식 지양
- 의존 라이브러러의 자동관리
- 애플리케이션 설정의 자동 구성
- 프로덕션급 애플리케이션의 손쉬운 빌드
- 내장된 was를 통한 손쉬운 배포
- 의존 라이브러리의 자동관리
- 라이브러리의 이름과 버전을 일일이 추가하지 않아도 된다 - starter 모듈 구성 기능
- Spring Boot 이전에는 수동으로 설정해야 했다.
- 프로덕션급 애플리케이션의 손쉬운 빌드
- WAR 파일을 WAS에 배포할 필요가 없다. - 빌드시 jar 파일 생성 (즉시 시작 가능한 애플리케이션 실행 파일)
- WAS (Web Application Server) - 구현된 코드를 빌드해서 나온 결과물(WAR)을 실제 웹 애플리케이션으로 실행되게 해주는 서버 (서블릿 컨테이너, 대표적으로 Tomcat )
- 내장된 WAS를 통한 손쉬운 배포
- Apache Tomcat이라는 WAS를 내장하고 있어 별도의 WAS를 구축할 필요가 없고 Spring Boot를 통해 빌드된 jar 파일을 사용하여 바로 서비스 가능한 웹 애플리케이션을 실행 할 수 있다.
- ‘java -jar <jar 파일명>.jar’
- Apache Tomcat이라는 WAS를 내장하고 있어 별도의 WAS를 구축할 필요가 없고 Spring Boot를 통해 빌드된 jar 파일을 사용하여 바로 서비스 가능한 웹 애플리케이션을 실행 할 수 있다.
- Spring Boot를 사용하는 이유를 한마디로 표현하자면
- 'Spring 구성은 Spring에게 맡기고 비즈니스 로직에만 집중' 하는 것이다.
'Spring Framework' 카테고리의 다른 글
DTO(Data Transfer Object) (0) | 2023.04.13 |
---|---|
SpringMVC - Controller (0) | 2023.04.12 |
Spring MVC (0) | 2023.04.12 |
AOP(Aspect Oriented Programming) (0) | 2023.04.08 |
DI - 스프링 컨테이너(Spring Container), 빈(bean) (0) | 2023.04.05 |
Comments