본문 바로가기
백엔드/스프링 핵심 개념

JAVA- spring, spring boot/ BEAN

by 임지혁코딩 2023. 12. 25.

객체 지향적 프로그래밍의 장점? -> 비즈니스의 모습을 그대로 표현할 수 있는 장점이 매력적

C++도 마찬가지. JAVA는 JVM(가상머신)위에서 작동하기 때문에, 여러곳에서 즉시 사용될 수 있다.

SPRING은 , 주로 JAVA를 생각하지만, 코틀린과 같은 언어로도 개발할 수 있다. 

스프링은, 자바가 한글이라고 치면, 책을 구성하는 틀이라고 생각할 수 있으며.

사용하지 못하는 경우도 분명히 존재할 수 있다. 즉 , Frame work이다. 

그 중, 동일한 코드를 계속 찍어낼 필요가 있을까? 우리가 제공하면 안될까? -> spring boot.

+장점 . 웹 어플리케이션이 내장되어있다 (TomCAT) 

 

Spring의 핵심 기술

 

동작원리를 알아야, 응용이 가능하다. 이 또한 모든 과목과 같다. 

1. data 접근 . dbms와 같은 data를 관리하는 것. Transaction -> 데이터를 저장할때 처리

2. Web -> websocket 기능, http로 응답하고 받는 web기능 등

Aop-> 관점 지향 프로그래밍, 더 들을 것이다.

3. 이러한 코어 중에 코어 . (클라우드 공부때 들었음을 기억하자) 스프링 컨테이너가 관리하는 자바 객체인 Bean.

context -> 설정 + @ . 

 

spring이 내부적으로 엮어주고, 동작시키고 이런 기술이 core 기술이 될 것이다. 

요청과 응답을 json으로 받게 되는데, 이러한 것을 DTO에 받는것이 DATA BINDING. 

Resource-> 외부 자원에 접근하는 api . spel -> 설정값을 주입받을때 사용. 

nullsafety- > optional기억해보면, null관리가 굉장히 어렵다 .spring이 지원하는 방식으로 안전하게 null을 처리하자. 

 

한가지 기능에도, 다양한 기능성(모듈)을 사용 가능하다. 

계속해서 기술간 차이가 나지 않게 노력하고 , 호환성에서 코드가 복잡해질 수 있다. 

framework의 크기가 점점 커졌기 때문에, 스프링 코드 자체가 공부할수있는 소스가 될 수 있다. 

 

IOC, DI 

- 주로 의존성 주입 이렇게 말을 많이 한다. 

 

내가 공부했던 C++은 분명 MAIN 이 있고, 거기에서 CLASS를 얻어서 쓰는거였는데.. 실제로 해보니까 코드가

A에서 B를 쓰고 B에서 C를 쓰고 C에서 갑자기 A를 썼다.. 그 원리 정도를 이해하는것이 목표 

 

SPRING위에서 사용하는 것이 BEAN, SPRING 위에서 사용되지 않는 것이 일반 CLASS(SPRING의 관리를 받지 않는다)

 

BEAN .

행위가 존재하지 않고, ID와 PW등과 같은 정보를 그 자체만을 저장하는 것으로 의미를 가진 CLASS를 포함한 class.

GET ,SET ,PRIATE과 같은 BEAN 규약을 따르는 것을 JAVA BEAN이라고 한다.

 

SPRING BEAN-> 약간 다른 개념. 사용자가 생성한 A,B,C를 BEAN으로 등록하겠다고 하면, SPRING의 

IOC CONTATINER로 넣는다. <넣는다> NEW해서 A를 생성하고, 그렇게 CLASS를 생성한후 그대로 사용하지 않고, IOC CONTAINER의 설정값을 추가해서 입혀주는 것. 

 

현재 이 과정에서 사용하는 것이

@Bean, @controller 같은것들. 이걸 달면 아 , 이 class는. 스프링 안에서, controller라는 역할을 하는 역할이 따로 특화된 

spring bean이구나! 

<이름을 다는 법>

acccountService(원래 class 네이밍 규칙은 대문자 대문자, bean 명은 소문자 대문자로 등록해서 사용)

(class와의 차이를 표현)

--bean의 생성 규칙 -- 

bean이 생성될때, 컨테이너에 단일로생성 되어 반복적으로 재사용을 한다. - singletone

property를 근데 바꾸고 싶을 경우가 있다. spring bean을 사용시. 

EX) vip라는 type이 있는데, 기초 사용자는 type이 없는 형태의 bean을 사용하고 싶을때. 

이럴떄 사용하는것이 prototype(작업시마다) request(요청시마다 ) 각자 생성하고 싶은 경우에 따라 사용한다.

대부분의 spring bean은 application의 생성과 운명을 같이한다. 

 

Bean LifeCycle callback 

Event가 발생했는데, 그떄 호출되는 method) ex)문 닫을때 전화해라는 method -> callback.

전화해 method위에 , @postconstruct, @predestroy와 같이,  빈 생성 or 파괴 시점에 바로 callback을 수행

 

 

CONTINAER는 무엇인데? 여러 BEAN을 담고 있는 '통' 

 

--요약 -- 

IOC( CONATINAER) BEAN을 담고 있는 통. 그 통안에 생성한 CLASS를, APPLICATION CONTEXT의 

설정에 따라 다르게 인스턴스화 하여 저장하고 있다 .

그 담아줄때, 이게 어디에 쓰일 것인지? 어떤 SRPING BEAN인지를 등록하는것이 ANNOTATION( 프로젝트에서 시작하자마자 각 CLASS별 달아줬떤걸 기억하자 ) 

퓨BEAN의 생성에서는, SINGLETONE,PROTOTYPE,REQUEST와 같이 규칙이 존재한다.

CALLBACK-> 빈을 생성, 혹은 파괴할때 CALLBACK이 필요하면, 필요한 METHOD를 존재할수있따. 

'백엔드 > 스프링 핵심 개념' 카테고리의 다른 글

SpEL  (0) 2023.12.27
Resource  (0) 2023.12.26
Validation, Data binding  (1) 2023.12.26
AOP  (0) 2023.12.25
API  (1) 2023.12.20