Spring Boot
[Spring MVC] API-Controller
Controller 클래스 설계 및 구조 생성 API 계층은 클라이언트의 요청을 직접적으로 전달 받는 계층이다. Controller 클래스는 Spring MVC에서 클라이언트 요청의 최종 목적지이다. 패키지 구조 생성 Spring Boot 기반의 애플리케이션에서 주로 사용되는 Java 패키지 구조는 기능 기반 패키지 구조(Package-by-feature)와 계층 기반 패키지 구조(Package-by-layer)가 있다. 기능 기반 패키지 구조(Package-by-feature) 말 그대로 애플리케이션의 패키지를 애플리케이션에서 구현해야 하는 기능을 기준으로 패키지를 구성하는 것이다. 회원을 관리하기 위한 회원 기능과 커피를 관리하기 위한 커피 기능을 패키지로 나누었고, 패키지 안에 레이어 별 클래스들이..
[Spring MVC] API 아키텍처
Spring MVC란? Spring 모듈 중에서 웹 계층을 담당하는 서블릿(Servlet) API으로 클라이언트를 처리하는 모듈인 Spring-webmvc가 있다. Spring Web MVC를 줄여서 Spring MVC라고 부르고 있고, 웹 프레임워크의 한 종류이기 때문에 Spring MVC 프레임워크라 불린다. Moder Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 받으면 요청 사항을 처리하기 위한 작업을 한다. 이렇게 처리한 결과 데이터를 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고 한다. 클라이언트의 요청 사항을 구체적으로 처리하는 영역을 서비스 계층(Service Layer)라고 하며, Java 코드로 구현한 것을 비즈니스 로직이라고 한다. Vie..
[Spring Core] AOP(Aspect Oriented Programming)
AOP(Aspect Oriented Programming) AOP(Aspect Oriented Programming)은 관점 지향 프로그래밍을 의미한다. 프로그래밍을 할 때 발생하는 공통적인 기능들을 적용하기 위해 상속이 필요한데, Java 에서는 다중 상속을 받아 공통 기능을 부여하기에는 중복 코드 및 종속적인 변경이 이루어져야 해서 한계가 있다. 이러한 문제점을 해결하기 위해 OOP를 돕는 보조적인 기술인 AOP가 적용되어야 한다. AOP는 비즈니스 로직과 같은 핵심적인 관심 사항과 보안, 로깅, 트랜잭션과 같은 공통 관심 사항을 분리시키고 각각을 모듈화 하는 것을 의미한다. 핵심 관심 사항과 공통 관심 사항을 분리함으로써의 이점으로는 중복 코드 제거, 높은 생산성, 재활용성 극대화 등이 있다. 횡단..
[Spring Core] Spring DI(Dependency Injection)
DI(의존성) 주입 방법 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 1. 생성자 주입 생성자를 통해서 의존성을 주입 받는 방법이다. 생성자에 @Autowired를 붙이면 스프링 컨테이너에 @Component로 등록된 Bean에서 생성자에 필요한 Bean들을 주입한다. 특징 생성자 호출 시점에 딱 1번만 호출된다. 불변과 필수 의존 관계에 사용된다. 생성자가 1개만 존재할 경우, @Autowired 생략이 가능하다. NullPointerException을 방지할 수 있다. 주입 받을 필드를 final로 선언 가능하다. @Component public class OrderServiceImpl implements OrderService { private final UserReposit..
[Spring Core] Container, Bean Scope
Spring 컨테이너(Container)와 빈(Bean) Spring Container 스프링 컨테이너 란? 스프링은 스프링 컨테이너를 통해 객체를 관리하고, 컨테이너는 개발자가 정의한 Bean 설정 정보에 따라서 Bean 생성, 관리, 제거 등의 역할을 담당한다. 스프링 컨테이너는 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리한다. 서로 다른 bean을 연결해 애플리케이션의 bean을 연결하는 역할을 한다. 개발자는 모듈 간의 의존 및 결합으로 인해 발생하는 문제로부터 자유로울 수 있고, 메서드를 호출하기 위한 매개 변수를 준비해서 전달하지 않는다. 스프링 컨테이너를 사용하는 이유? 객체를 생성하기 위해 new 생성자를 써야 했다. 이에 따라 애플리케이션에서 의존성이 높은 객체가 무수히 많고 서로 ..
[Spring Core] Spring Framework 모듈 구성
아키텍처(Architecture)란? 아키텍처는 건축 분야에서 유래된 용어로써 요구 사항을 만족하는 건축물을 짓는데 있어 청사진 같은 역할을 한다. 소프트웨어에서 아키텍처란, 소프트웨어를 개발할 때 수많은 모듈들을 어떻게 분할하고 배치하며, 어떤 기능을 구현할 것인지 참고하는 설계도와 같은 역할을 한다. 시스템 아키텍처 하드웨어와 소프트웨어를 모두 포함하는 어떤 시스템의 전체적인 구성을 큰그림으로 표현한 것이다. 해당 시스템 구성 요소들 간의 상호작용이 어떻게 이루어지는지 등 시스템이 정상적으로 동작하기 위한 동작 원리 등이 시스템 아키텍처 안에 표현하는 것이다. 시스템 아키텍처 사례 채팅 서버 시스템 아키텍처의 예 채팅 서버를 구축하기 위한 전통적인 시스템 아키텍처이다. 사용자가 많아진다면 위 그림의 ..
[Spring Core] Spring Framework의 특징
Spring Framework란? Java/Kotlin 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 동적인 웹 사이트 개발을 위한 여러 가지 서비스를 제공한다. 프레임워크는 개발자들이 필요에 따라 자신의 코드에 사용하거나 추가할 수 있도록 미리 작성된 대규모 코드 모음이다. 프레임워크를 통해 개발자는 개발 중에 부담을 덜 수 있다. 스프링이라는 이름의 유래는 Java EE의 스펙을 구현한 EJB가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탈피하여, EJB 시절을 "겨울"에 빗대어 겨울 후의 "봄"으로 새로운 시작한다는 것을 의미하는 스프링이 되었다. Library와 Framework의 차이? Library 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 집합이다. 미리 작성된..