TIL - [DAY 1] 스프링의 핵심

jihan kong·2022년 5월 12일
0

Spring Boot 개념정리

목록 보기
1/6
post-thumbnail

평소와 같이 인프런 강의를 열심히 탐색하던중 최주호님(메타코딩) 의 스프링 부트 개념정리 강의를 접하게 되었다.

스프링에 대해 어느정도 알고 있었다고 생각했지만 프로젝트 하나 간단하게 만들어 낼 수 없던 나의 실력을 한 단계 아니, 두 단계 업그레이드 시켜줄 것이라고 생각하였고 강의를 학습하게 되었다. 시리즈는 강의로 배운 것을 바탕으로 작성할 예정이다.

어떤 것을 하던지 간에 응용을 하기 위해서는 개념부터 탄탄히 다져야 한다고 생각한다. 기초부터 하나씩 확실하게 배우기 위해.. 그리고 성장하기 위해 오늘부터 또 달려가보자!

이것으로 이미 검증이 완료된 강의👍


💡 스프링 부트를 알기 위해선 당연히 스프링부터 알아야한다.

스프링이 무엇일까?

✨ 스프링의 핵심

1. Framework

스프링은 Framework. 즉, 틀로써 동작한다. Java의 프레임 워크.

2. 오픈소스

스프링은 소스코드가 공개되어있는 오픈 소스이다. 내부를 고칠 수 있고 특별한 경우, contribute(기여)가 가능하다.

3. IOC 컨테이너를 가진다.

IOC (Inversion Of Control) : 제어의 역전이라는 뜻으로 본래 사용자가 가지고 있던 주도권을 스프링으로 넘기게 된다는 뜻이다. 일반적인 자바 프로그램에서는 사용자가 직접 객체를 생성하고 메소드를 호출하는 방식의 흐름이었지만 스프링에게 이를 위임함으로써 스프링에서 모든 객체를 생성, 관리하여 필요한 곳에 주입시켜주게 된다.

4. DI를 지원한다.

DI Dependency Injection (의존성 주입) 을 뜻하며, 이는 3번에서 언급한 것처럼 하나의 싱글톤으로 관리되는 객체를 사용자가 생성할때 생성 객체에 주입시켜주는 것을 말한다. 의존성을 외부에서 주입하게 되면 다음과 같은 이점이 있다.

  • 변경사항이 있을 때, 영향을 적게 준다.
    (코드의 리팩토링, 서비스 정책 변경 등에 유연하게 대처할 수 있다.)
  • 역할과 구현을 분리할 수 있다.

5. 많은 필터를 가지고 있다.

스프링에는 필터 기능이 있다. 필터는 쉽게 말해, 문지기이다.
톰캣과 같은 웹 컨테이너를 관리하는 것을 필터(Filter) 라고 하고, 스프링 컨테이너를 관리하는 것은 인터셉터(Interceptor) 라고 한다. 필터는 Request/Response 객체를 조작할 수 있지만, 인터셉터는 불가능하다.

필터의 경우 전역적인 보안과 인증 작업, 이미지/데이터 압축 및 문자열 인코딩 등의 역할을 수행하고, 인터셉터는 클라이언트의 요청과 관련한 세부적인 보안과 인증 작업, API 호출에 대한 로깅, Controller로 넘겨주는 정보의 가공 등을 수행한다.

6. 많은 어노테이션(@)을 가지고 있다.

자바에서 어노테이션은 주석 그 이상의 의미를 지닌다. Annotation은 메타데이터의 일종으로 주석의 기능 뿐만 아니라 특별한 기능을 수행한다. Annotation을 활용하여 spring은 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 한다.

<스프링 어노테이션의 몇 가지 예시>

  • @Component
    : Class를 Spring의 Bean으로 등록할 때 사용. (메모리에 로딩)
	@Component(value="mycar")
	public class Car {
    	public Car() {
        	System.out.println("Drive");
    	}
	}
  • @Autowired
    : Bean을 주입받기 위해 사용. Spring은 class를 보고 Type에 맞게 Bean을 주입함. (Type이 없으면 Name 확인)

  • @Controller
    : Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation.

이외에도 수 많은 어노테이션이 존재한다.

7. MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

자바 프로그램과 파이썬 프로그램이 서로 상호작용하며 데이터를 주고 받는다고 해보자. 자바는 당연히 파이썬의 문법과 언어를 이해하지 못하고 파이썬 또한, 자바를 이해하지 못할 것이다.

이 때, 둘 사이에서 중간다리 역할로 MessageConverter 라는 것이 작동한다. 덕분에 자바는 자바 형식의 맞게 코드를 작성하고 파이썬은 파이썬 형식으로 코드를 작성해도 MessageConverter는 이를 JSON이라는 중간언어로 변환하여 서로에게 요청과 응답을 교환할 수 있다. MessageConverter는 스프링에 기본 라이브러리로 내장되어있고, 예전에는 Xml형식의 파일로 구성했다면 현재는 JSON으로 대체되었다.

8. BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.

Buffer는 자바 I/O를 공부했다면 한번쯤은 들어봤을 내용이다. 스프링은 버퍼를 이용해서 읽고 쓰는 함수인 BufferedReader/ BufferWriter를 직접 구현할 필요 없이 어노테이션을 제공한다.

@ResponseBody -> BufferedWriter가 동작.
@RequestBody -> BufferedReader가 동작.

BufferedReader/Writer 가 무엇인가요❓
: Byte Stream(바이트 단위의 전송방식)을 통해서 데이터를 전송할 때, 전송 단위가 문자열로 가변 길이의 데이터를 사용할 수 있게 해주는 클래스 (기존의 배열과 같이 크기가 정해진 데이터를 전송할 때 비효율적으로 낭비되는 메모리를 개선)

9. 스프링은 계속 발전 중이다.

스프링은 현 시점으로 5.3.19 버전이 나왔다. 2에서 언급한 것처럼 오픈소스로 되어있어 누구나 접근할 수 있고 확장성이 좋아 계속해서 업데이트가 되고 있으며, 더 나은 그리고 편리한 방법의 라이브러리들이 추가되고 있다. 엔터프라이즈 레벨에서는 더이상 대체불가인 스프링.... 앞으로 무궁무진한 가능성에 개발자들은 주목하고 있다.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글