성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

SPRING Framework 본문

백엔드개발/Spring

SPRING Framework

hyemi_flora 2024. 3. 23. 14:59

1> Framework 

  • 프로젝트 개발에 효율적인 구조를 미리 만들어 놓은 것으로 기능을 미리 클래스나 인터페이스 등으로 만들어놓은 반제품이다
  • 이미 구조가 잡혀 있어서 프로젝트의 전체적인 구조에대한 지식이 없어도 프로젝트 투입이 가능하고, 일정 수준이상의 품질이 보장된다.

2> Spring Framework

  • 자바 엔터프라이즈 애플리케이션 개발을 위한 오픈 소스 프레임워크
  • 경량화, 제어역전(IOC), 관점 지향 프로그래밍(AOP), 트렌젝션 관리 기능을 제공
  • 애플리케이션에서 사용되는 여러 빈 (클래스객체)를 스프링이 권한을 가지고 직접 관리한다

3> 스프링 하위 프로젝트?

  • 스프링 코어(Spring Core): 스프링 프레임워크의 의존성 주입(DI), 제어의 역전(IoC) 등 핵심 기능을 제공
  • 스프링 JDBC(Spring JDBC): 자바 데이터베이스 연결을 위한 간단하고 일관된 방식을 제공하는 JDBC 기능을 제공
  • 스프링 ORM(Spring ORM): 객체 관계 매핑(Object-Relational Mapping, ORM)을 지원하는 모듈로, Hibernate, JPA 등의 ORM 프레임워크와 연동 계층.
  • 스프링 웹(Spring Web): 웹 애플리케이션을 개발하기 위한 기능을 제공하는 모듈로, 파일 업로드, 서블릿 리스너 등 웹 관련 기능 제공
  • 스프링 MVC(Spring MVC): 모델-뷰-컨트롤러(Model-View-Controller, MVC) 아키텍처를 기반웹 개발 모듈
  • 스프링 AOP(Spring AOP): 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP) 구현 및 메소드 인터셉터 정의

4> 의존성 주입(DI)?

  • 객체를 직접 생성하지 않고, 생성 방법을 기술하면 IOC컨테이너가 필요할 떄 인스턴스화 하여 주입하는 개념

5> 스프링에서 빈을 주입하는 방식은?

  • Setter 주입 : 스프링 컨테이너는 설정 파일이나 애노테이션을 통해 해당 빈의 프로퍼티 값을 설정하고, setter 메서드를 호출하여 의존성을 주입
  • 생성자 주입 : 빈을 생성할 때 생성자를 통해 의존성을 주입하는 방식, 스프링 컨테이너는 설정 파일이나 애노테이션을 통해 해당 빈의 생성자를 호출하고, 인자로 전달된 값들을 이용하여 의존성을 주입
  • 필드 주입
  • XML 또는 애노테이션으로 설정 가능

6> 빈 주입 방식 중 권장되는 방식과 이유?

  • 권장되는 방식은 생성자 주입
  • 선택적 의존성은 Setter 주입을 권장한다.
  • 생성자 주입을 사용하면 immutable 필드에 값 주입이 가능하고 테스트가 용이.

7> BeanFactory 와 ApplicationContext 차이점?

  • BeanFactory: 스프링에서 빈을 생성하고 관리하는 가장 기본적인 인터페이스.
    빈을 생성하고 초기화하며, 의존성을 주입하는 등의 기능을 제공.
    단순한 DI(Dependency Injection) 기능만을 제공, 빈을 실제로 사용할 때 빈을 로딩하여 제공.
  • ApplicationContext: BeanFactory를 상속하면서, 빈을 관리하는 동시에 스프링 애플리케이션의 전반적인 생명주기를 관리. 빈의 지연로딩, AOP 지원, 메시지 처리, 이벤트 발행 등의 다양한 기능을 제공.

8> 스프링빈?

  • 스프링 IoC 컨테이너에 의해 인스턴스화, 관리되는 자바 오브젝트를 말한다.
  • 스프링에서는 빈의 생명주기를 관리하고, 의존성 주입(Dependency Injection)을 통해 필요한 객체를 생성하고 주.
  • 빈은 스프링의 설정 파일(XML 또는 Java Config)이나 애노테이션을 통해 정의다.

9> 스프릥 프레임워크에서 빈의 기본 스코프는?

  • 스프링 프레임워크에서 빈의 기본 스코프는 **싱글톤(Singleton)**

10> 빈의 스코프는 어떻게 지정하는가?

  • @Scope 애노테이션이나 XML 설정 파일에서 "scope" 속성을 사용해 지정할 수 있습니다.
  • 스프링에서 지원하는 빈 스코프에는 다음과 같은 것들이 있습니다.
    • singleton
    • prototype
    • request
    • session
    • global-session
  • 스코프를 지정함으로써 빈의 생명주기를 관리하고, 객체의 생성과 소멸을 제어할 수 있다.

11> 싱글톤 빈은 스레드에 안전한가? 

  • 싱글톤 빈 자체는 스레드 안전하지 않다.
  • 싱글톤 빈은 여러 스레드에서 공유되기 때문에 멀티스레드 환경에서 동시에 접근할 경우 상태가 변경될 수 있다.
  • 스레드 안전성은 빈의 실행 방식에 달려 있고, 싱글톤은 생성 방식에 초점을 둔 디자인 패턴이다.

12> 스프링 빈 생명주기는?

  • 빈 정의를 읽고 인스턴스화 → 의존성 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 콜백 메소드 호출 → 빈 소멸
  1. 인스턴스화(Instantiation): 스프링 컨테이너가 빈을 생성하고, 해당 빈의 클래스를 인스턴스화.
  2. 의존성 주입(Dependency Injection): 생성된 빈에 필요한 의존성을 주입. 스프링은 설정 파일이나 애노테이션을 통해 의존성을 자동으로 주입하거나, 개발자가 직접 의존성을 설정.
  3. 초기화(Initialization): 빈이 초기화되는 단계. 개발자가 정의한 초기화 메서드가 호출되거나, 빈이 InitializingBean 인터페이스를 구현했을 경우에 초기화 작업이 수행.
  4. 사용(Being in Use): 빈이 애플리케이션에서 사용되는 단계. 빈은 다른 빈이나 컴포넌트에 의해 호출되어 기능을 수행.
  5. 소멸(Destruction): 빈이 더 이상 사용되지 않을 때, 스프링 컨테이너가 빈을 소멸. 개발자가 정의한 소멸 메서드가 호출되거나, 빈이 DisposableBean 인터페이스를 구현했을 경우에 소멸 작업이 수행.

13> 스프링 자바 기반 설정이란?

  • XML 파일 대신 Java 클래스를 사용하여 스프링 애플리케이션의 설정을 정의하는 방식

14> 하나의 프로젝트에 여러개의 스프링 설정 파일 사용 가능?

  • 하나의 프로젝트에 여러개의 스프링 설정 파일 사용 가능
  • 큰 프로젝트에서는 모듈화와 유지보수성을 위해 여러 개의 설정 파일 사용이 권장.
  • 자바 기반 설정에서는 @Configuration과 @Import 애노테이션을 사용해 여러 설정 클래스를 조합할 수 있습니다.
  • XML 기반 설정에서는 <import> 태그를 사용해 여러 XML 파일을 조합할 수 있습니다.

15> 스프링 시큐리티란?

  • 스프링 시큐리티(Spring Security)는 스프링 기반의 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 담당하는 프레임워크
  • 사용자 인증, 접근 제어, 보안 설정 관리 등의 기능을 제공하여 보안 관련 문제를 쉽게 처리할 수 있도록 도와준다.

16> 스프링 부트란?

  • 스프링 부트(Spring Boot)는 스프링 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 프레임워크
  • 단독 실행 가능한 스프링 애플리케이션을 쉽게 생성할 수 있다.
  • 자동 구성(Auto Configuration), 내장 서버(Embedded Server), 스프링 부트 스타터(Starter)  의존성 등으로 최소한의 설정으로 개발을 시작할 수 있다.

17> 스프링 프레임워크 디자인 패턴?

  • 싱글톤 패턴: 싱글톤 스코프의 빈
  • 팩토리 패턴: BeanFactory 클래스
  • 프로토타입 패턴: 프로토타입 스코프의 빈
  • 프록시 패턴: 스프링 AOP
  • 템플릿 메소드 패턴: JdbcTemplate, HibernateTemplate 등
  • 프론트 컨트롤러 패턴: 스프링 MVC의 DispatcherServlet
  • 데이터 접근 오브젝트(DAO) 패턴: 스프링 DAO 지원

18> 프로토 타입 스코프 동작 방법?

  • 프로토타입 스코프(Prototype Scope)는 스프링 빈이 매번 getBean() 메소드가 호출될 때마다 새로운 오브젝트를 생성해서 반환 하는 스코프
  • 매 요청마다 새로운 객체를 생성하여 의존성 주입에 대한 문제를 해결하고 객체의 생명주기를 관리하는 데 사용

19> 스프링 빈에서 ServletContext와 ServeltConfig 객체는 어떻게 얻는가?

  • 스프링에서 ServletContext를 얻으려면 ServletContextAware 인터페이스를 구현한 클래스를 사용.
  • @Autowired 애노테이션을 사용해서 주입받는 방법.

20> 스프링 MVC 컨트롤러란?

  • 스프링 MVC 컨트롤러(Spring MVC Controller)는 클라이언트의 요청을 처리하고 응답을 생성하는 컴포넌트
  • 스프링 MVC에서는 @Controller 애노테이션을 사용하여 컨트롤러를 정의
  • 각각의 요청에 대해 특정 메서드가 실행되어 비즈니스 로직을 수행하고 적절한 뷰를 반환
  • 컨트롤러 클래스의 메소드는 @RequestMapping 으로 매핑된 특정 URI 처리

21> @RequestMapping 어노테이션 어떻게 사용하는가?

  • 요청 URL을 컨트롤러의 메소드와 매핑할 때 사용하는 애노테이션.
  • URL 패턴, HTTP 메소드, 헤더, 요청 파라미터 등을 지정하여 요청 처리 가능.
  • @PathVariable을 통해 URL 템플릿 변수를 메소드 파라미터로 받을 수 있다.
  • @RequestParam을 통해 HTTP 요청 파라미터를 메소드 파라미터로 받을 수 있다.

22> 스프링 JDBC의  jdbcTemplate 클래스란? 어떻게 사용하는가?

  • JDBC를 사용하여 데이터베이스와 상호 작용하는 데 사용되는 클래스
  • JdbcTemplate은 JDBC의 복잡한 작업을 단순화하여 개발자가 간편하게 데이터베이스 연동 작업을 수행할 수 있도록 지원
  • JdbcTemplate을 사용하면 SQL 쿼리 실행, 결과 처리, 예외 처리 등을 간단하게 처리할 수 있다.

23> 스프링 트랜잭션은 어떻게 사용하는가? 어떤 이점이 있는가?

  • 여러 개의 데이터베이스 작업을 하나의 논리적인 작업 단위로 묶어서 처리하는 데 사용
  • 선언적 트랜잭션(@Transactional)과 프로그래밍적 트랜잭션(TransactionTemplate) 두 가지 방식을 제공합니다.
  • 선언적 트랜잭션은 코드 침투가 없고 AOP를 사용하기 때문에 권장됩니다.
  • 트랜잭션 전파, 격리 수준, 읽기 전용 등을 애노테이션 속성으로 제어.

24> 스프링 DAO란?

  • 스프링 DAO( Data Access Object)는 데이터베이스와의 상호작용을 위한 객체.
  • 스프링 DAO는 데이터베이스와의 통신을 추상화하여 비즈니스 로직과 데이터 액세스 로직을 분리
  • 데이터베이스에 대한 접근을 쉽게 만들어다.
  • 스프링은 일관성 있는 DAO를 작성할 수 있도록 다양한 기능을 제공

25> 스프링 DTO란?

  • 스프링 DTO( Data Transfer Object)는, 데이터를 전송하기 위한 객체.
  • 스프링 DTO는 여러 계층간의 데이터 전달을 위해 사용
  • 주로 데이터베이스로부터 조회한 결과나 웹 요청 등을 담는 데 사용.

26> AOP에서 Aspect, Advice, Pointcut, JoinPoint란?

  • Aspect: 관점 또는 횡단 관심사를 나타내는 모듈
    예를 들어, 로깅, 트랜잭션, 보안과 같은 부가적인 기능을 담당하는 모듈이 Aspect에 해당.
  • Advice: Aspect에서 수행되는 작업.
    Before, After, Around 등의 Advice 타입이 있으며, 각각 메소드 실행 전, 후, 혹은 대체하여 실행.
  • Pointcut: Advice를 적용할 대상을 지정하는 표현.
    Aspect는 여러 지점(Pointcut)에 Advice를 적용.
  • JoinPoint: 프로그램 실행 중에 Aspect가 적용될 수 있는 지점을 의미.
    메소드 호출, 필드 접근 등이 JoinPoint에 해당합니다.

27> AOP의 Weaving이란?

  • AOP(Aspect-Oriented Programming)의 Weaving은 Aspect를 핵심 로직에 적용하는 과정
  • Weaving은 컴파일 시점, 클래스 로딩 시점, 실행 시점에 수행
  • Aspect가 적용될 지점(JoinPoint)에 해당하는 코드에 Advice를 삽입하는 과정

 

'백엔드개발 > Spring' 카테고리의 다른 글

DTO/VO/DAO란 ?  (1) 2024.05.22
MVC 디자인 패턴, 모델 속 요소들  (0) 2024.05.22
메이븐 (Maven)  (1) 2024.03.14
의존성 주입  (0) 2024.03.14
스프링 프레임워크  (1) 2024.03.14