Spring, 이건 알고 가

Jihu Kim·2024년 4월 18일

Spring 입문

목록 보기
1/14
post-thumbnail

제어 역전(IoC)

일반적인 자바 개발의 경우 객체를 사용하기 위해 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다. 객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조이다.

하지만은..~!

제어 역전을 특징으로하는 스프링은 기존 방식과 다르게 동작한다.
제어 역전을 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에(스프링 컨테이너) 위임한다.

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부른다.

제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다.

스프링을 사용해 객체의 제어권을 컨테이너로 넘겨 제어 역전을 적용하면, 개발자는 비즈니스 로직을 작성하는 것에 더 집중할 수 있다.


의존성 주입(DI)

의존성 주입(DI)제어 역전의 방법 중 하나이다.
사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식이다.

스프링의 의존성 주입 방법 3가지

  • 생성자를 통한 의존성 주입
  • 필드 객체 선언을 통한 의존성 주입
  • setter 메서드를 통한 의존성 주입

스프링에서는 @Autowired 어노테이션을 통해 의존성을 주입한다.


관점 지향 프로그래밍(AOP)

관점 지향 프로그래밍(AOP)은 스프링의 중요한 특성이다.
관점 지향 프로그래밍(AOP)는 관점을 기준으로 묶어 개발하는 방식을 의미한다.

여기서, 관점핵심 기능부가 기능으로 구분하는 것을 말한다.

  • 핵심 기능 : 비즈니스 로직이 처리하려는 목적 기능
  • 부가 기능 : 로깅, 트랜잭션 등의 코드


내장 WAS(Web Application Server)

WAS(웹 애플리케이션 서버)는 웹 애플리케이션을 실행하는 환경을 제공하는 소프트웨어다.

스프링 부트의 각 웹 애플리케이션에는 내장 WAS가 존재한다.

웹 애플리 케이션을 개발할 때 가장 기본이 되는 의존성인 spring-boot-starter-web의 경우 톰캣을 내장한다.


영속성 컨텍스트

영속성 컨텍스트는 JPA에서 엔티티를 관리하는 데 사용되는 메모리 공간이다. 영속성 컨텍스트는 엔티티를 데이터베이스에서 가져와서 메모리에 보관하고, 엔티티의 상태를 추적하며, 데이터베이스에 변경 사항을 동기화하는 등의 작업을 수행한다.

Spring Data JPA에서 영속성 컨텍스트는 자동으로 관리된다.

Spring Data JPA에서 자동으로 관리되지만, 개발자가 필요에 따라 직접적으로 조작할 수 있다.

  • 트랜잭션 경계 내에서 엔티티를 영속성 컨텍스트에 저장하거나 조회할 때

트랜잭션

트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.

간단하게 말해서 아래의 질의어(SQL)를 이용하여 데이터베이스를 접근 하는 것을 의미한다.

  • SELECT
  • INSERT
  • DELETE
  • UPDATE

개발자가 트랜잭션 설계를 잘하는 것은 데이터를 다루는 것에 많은 이점을 준다.


프록시

프록시(Proxy)는 "대리"의 의미로, 인터넷과 관련해서 쓰이는 경우, 특히 내부 네트워크에서 인터넷 접속을 할 때에, 빠른 액세스나 안전한 통신등을 확보하기 위한 중계서버를 "프록시 서버"라고 일컫는다. 클라이언트와 Web서버의 중간에 위치하고 있어, 대신 통신을 받아 주는 것이 프록시 서버이다. 

스프링에서 프록시는 주로 AOP와 트랜잭션 관리에 사용된다.

  • AOP : AOP는 프록시를 사용하여 메서드 호출을 가로채고 특정한 시점에 코드를 실행할 수 있다. AOP를 사용할 때 프록시 객체가 생성되어 조인 포인트 주변에 어드바이스(Advice)를 적용합니다.
  • 트랜잭션 관리 : @Transactional 어노테이션은 프록시를 사용하여 트랜잭션을 적용한다. @Transactional 어노테이션이 적용된 메서드가 호출될 때, 스프링은 해당 메서드를 호출하는 클라이언트에게 직접 대신하여 트랜잭션 처리를 담당하는 프록시 객체를 생성한다. 이 프록시 객체는 트랜잭션을 시작하고 종료하는 등의 로직을 추가하여 메서드 호출을 감싸고, 트랜잭션 처리를 보장한다.

애플리케이션

운영체제에서 실행되는 모든 소프트웨어를 의미한다.

  • 애플리케이션은 특정한 작업이나 업무를 수행하는 소프트웨어이다.
  • 서버에서 실행되는 애플리케이션은 웹 애플리케이션이 될 수도 있고, 백엔드 서비스, 데이터 처리 애플리케이션 등 다양한 형태가 있을 수 있습니다.

웹 애플리케이션

웹 애플리케이션은 웹 브라우저를 통해 사용자가 상호작용할 수 있는 소프트웨어를 의미한다.


서버

서버는 네트워크를 통해 클라이언트로부터 요청을 받아 처리하고, 그에 따른 응답을 반환하는 컴퓨터 시스템이나 소프트웨어이다.

  • 서버는 클라이언트 요청에 따라 웹 페이지, 데이터, 파일 등을 제공하거나, 애플리케이션과 데이터베이스 간의 통신을 관리하며, 다양한 기능을 수행한다.
  • 서버는 주로 웹 서버, 애플리케이션 서버, 데이터베이스 서버 등으로 분류된다.

서버는 여러 개의 애플리케이션을 호스팅하고 관리할 수 있다. 서버는 애플리케이션을 실행하고, 요청에 따라 애플리케이션을 호출하여 작업을 수행하며, 결과를 클라이언트에게 반환한다. 따라서 서버와 애플리케이션은 함께 작동하여 클라이언트의 요청을 처리하고 서비스를 제공한다.

즉, 우리는 Spring 프레임워크를 통해서 웹 애플리케이션을 개발하고 이를 서버에 배포해 서비스를 제공할 것이다.

배포된 웹 애프리케이션은 서버에서 실행되어 클라이언트에 서비스를 제공하게 된다.

profile
Jihukimme

1개의 댓글

comment-user-thumbnail
2024년 4월 30일

유익해요

답글 달기