응근히 사전에 알고 들어가야 할 용어들이 많지만 생소한 용어가 생각보다 적었다.
가볍게 큰 틀을 이루는 개념 몇 가지를 가볍게 정리하겠다.
어노테이션 (Annotation)
코드에 메타데이터를 추가하는 방법. 컴파일러나 런타임 시점에 특정 동작을 하도록 지시하는 역할
순수 자바만 사용할 때에 어노테이션은 자주 써봐야 @Override 정도였는데 스프링같은 경우에는 수많은 어노테이션이 존재한다.
자바와 직관적인 차이점중 하나라고 생각한다.
스프링 빈 (Spring Bean)
이름만 보면 자바 빈이 떠오른다.
빈이라는 이름은 같지만 개념은 매우 다르다.
스프링 컨테이너에 의해 관리되는 객체를 빈, 스프링 빈 이라고 한다.
개발자가 직접 생성하고 관리하지 않아도 스프링이 알아서 객체의 라이프사이클을 관리해준다.
쿠버네티스의 파드와 결이 비슷하다고 생각한다.
스프링 컨테이너 (Spring Container)
쿠버네티스의 마스터노드와 결이 비슷한 느낌이다.
빈들을 생성하고 의존성을 주입하고 관리하는 주체이다.
스프링 애플리케이션이 실행될 때, 필요한 빈들을 컨테이너가 만들어서 관리해준다.
컴포넌트 (Component)
@Component 어노테이션을 통해 스프링이 이 클래스를 빈으로 인식하고 관리하도록 한다.
다만 이 경우는 매우 범용적인 빈으로 등록할 때 사용하는 것이고, 조금 더 구체적인 역할을 가진 빈으로 인식하게 하려면
다른 어노테이션을 사용해줘야 한다.
JPA (Java Persistence API)
자바 애플리케이션에서 데이터베이스와 상호작용하는 데 사용되는 API이다.
다양한 쿼리들이 메소드로 구현되어있어서 직접 쿼리를 작성할 필요가 없다.
당연하게도 기존 JDBC처럼 쿼리를 사용하는 방법도 존재한다.
AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
여기가 추상적인 용어라 이해하기 힘들었다.
정의는 아래와 같다.
프로그램의 핵심 기능과 관계 없는 공통적인 작업(로그 기록, 트랜잭션 관리 등)을 횡단 관심사로 분리하여 코드의 중복을 줄이는 기법
@Aspect 어노테이션이 붙는다.
개념과 설명이 추상적인 느낌이라 코드를 직접 보는것이 이해가 더 빠를것이다.
@Aspect
@Component
public class LogAspectEx {
@Before("execution(* com.example.*(..))")
public void logBeforePrintMethod() {
System.out.println("메소드 실행 전");
}
@After("execution(* com.example.*(..))")
public void logAfterPrintMethod() {
System.out.println("메소드 실행 후");
}
}
// * com.example.*(..) 이 부분은 AOP가 적용될 범위를 지정해주는 부분이다.
// 예를들어 abc 라는 패키지 아래에 Qwer이라는 클래스의 모든 메소드에
// 위의 AOP를 적용시키고 싶다면
// * abc.Qwer.*(..) 이런 식으로 사용하면 된다.
// 이렇게 하면 Qwer의 어떤 메소드를 호출하든
// 메소드 실행 전
// Qwer의 메소드 호출 결과
// 메소드 실행 후
// 이런식으로 출력될 것이다.
횡단 관심사 (Cross-cutting Concerns)
애플리케이션의 핵심 로직과 직접적인 관련이 없지만 여러 곳에서 공통적으로 필요한 기능
예시로는 로그, 보안 (sha 암호화, hmac 같은), 트랜잭션 관리 같은 기능들이 있다.
'java > Spring' 카테고리의 다른 글
JpaRepository에 정의되지 않은 메소드 사용법 (2) | 2024.11.19 |
---|---|
Spring Annotation 컨닝페이퍼 (0) | 2024.10.21 |
Spring Bean (2) | 2024.10.21 |