728x90
반응형

[Servlet] Servlet에서 Thread가 어떻게 작동하는가? 웹 개발자를 위한 완벽 가이드

 

[Servlet] Servlet에서 Thread가 어떻게 작동하는가? 웹 개발자를 위한 완벽 가이드

[Servlet] 자바 서블릿과 네트워크 | 요청과 응답이 오가는 과정을 파헤쳐보자 [Servlet] 자바 서블릿과 네트워크 | 요청과 응답이 오가는 과정을 파헤쳐보자[Servlet] Servlet과 JSP로 구현하는 MVC 패턴 | J

crushed-taro.tistory.com

1. Spring Framework

1. Spring Framework 개요

1. Spring Framework란

스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 또한 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.
Spring 공식 사이트

https://spring.io/

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io

 

2. Spring Framework의 특징

  • 오픈 소스이다.
    • 다양한 실제 사용 사례를 기반으로 지속적인 피드백을 제공하는 크고 활동적인 커뮤니티가 있어 오랜 시간에 걸쳐 성공적으로 진화하는 데 도움이 되었다.
  • Java 엔터프라이즈 애플리케이션을 쉽게 만들 수 있다.
    • 애플리케이션의 요구 사항에 따라 다양한 종류의 아키텍처를 생성할 수 있는 유연성과 함께 엔터프라이 환경에서 Java 언어를 수용하는 데 필요한 모든 것을 제공한다.
  • 프레임워크의 기본 원칙에 충실하다.
    • 강력한 이전 버전과의 호환성을 유지한다.
    • 유연성을 수용하며 작업 수행 방법에 대해 독선적이지 않다. 다양한 관점에서 다양한 애플리케이션 요구 사항을 지원한다.
    • 모든 수준에서 선택권을 제공한다. Spring을 사용하면 가능한 한 늦게 디자인 결정을 연기할 수 있다. 예를 들어 코드를 변경하지 않고 구성을 통해 지속성 공급자를 전환할 수 있다.
    • 의미 있고 최신이며 정확한 javadoc을 강조한다. 패키지 간의 순환 종속성이 없는 깨끗한 코드 구조를 주장할 수 있는 극소수의 프로젝트 중 하나이다.

 

2. Spring Framework 구성 모듈

Spring 사진 1

 

1. Spring Core Container

1. Spring Core Container

Spring Core Container는 스프링에서 가장 기본적이며 중요한 모듈 중 하나이다. 이 모듈은 스프링에서 객체의 생성과 관리를 담당한다. 스프링의 DI(Dependency Injection)과 IoC(Inversion of Control) 개념이 구현되어 있다. 이를 이용하여 코드의 재사용성과 유지보수성을 높일 수 있다. 

 

2. AOP(Aspect Oriented Programming) / Aspects / Instrumentation / Messaging

1. AOP(Aspect Oriented Programming)

AOP는 객체지향 프로그래밍에서의 코드 중복을 제거하고 코드를 재사용하기 위한 프로그래밍 기법이다. 기존의 코드를 변경하지 않고 새로운 기능을 추가하는 방식으로 사용한다. 스프링에서는 AOP를 이용해 로깅, 트랜잭션, 보안 등의 기능을 제공한다.

 

2. Aspects

  • 별도의 spring-aspects 모듈AspectJ의 통합을 제공한다.

 

3. Instrumentation

  • Instrumentation은 자바 프로그램의 동작을 관찰하고 조작하는 기술이다. 스프링에서는 Instrumentation을 이용해 클래스 로딩, 메소드 실행 등의 작업을 추적하고 변경할 수 있다.

 

4. Messaging

  • Apache Kafka 및 RabbitMQ와 같은 메시지 브로커의 통합을 통해 메시징 아키텍처를 지원한다. 메시지 채널, 메시지 처리기 및 메시징 기반 응용 프로그램을 생성할 수 있는 메시지 끝점에 대한 추상화가 포함된다. 또한 이 모듈을 사용하면 메시지 채널에서 메시지를 수신하고 처리할 수 있는 메시지 구동 POJO(Plain Old Java Objects)를 생성할 수 있다.

 

3. Data Access / Integration

1. JDBC(JAVA DataBase Connectivity)

JDBC는 Java에서 데이터베이스와 연결할 수 있는 API이다. JDBC는 데이터베이스에 대한 쿼리를 실행하고 결과를 처리할 수 있는 메서드와 클래스를 제공한다. 이를 통해 Java 애플리케이션에서 데이터베이스를 쉽게 사용할 수 있다.

 

2. ORM(Object Relation Mapping)

ORM은 객체 지향 프로그래밍에서 관계형 데이터베이스와의 상호작용을 추상화하는 프로그래밍 기술이다. 이를 통해 개발자는 객체를 직접 다루면서 데이터베이스를 조작할 수 있다. ORM 프레임워크는 객체와 데이터베이스 간의 매핑을 담당하며, 데이터베이스 쿼리를 생성하고 실행하는 등의 작업을 대신 수행한다. 

 

3. Transaction Management

트랜잭션은 데이터베이스 상태를 변경하는 작업의 단위이다. 여러 개의 쿼리가 트랜잭션으로 묶이면, 모든 쿼리가 성공하면 변경 내용이 데이터베이스에 반영되고, 하나라도 실패하면 변경 내용이 취소된다. 이런 트랜잭션을 보다 쉽게 처리하기 위해 스프링에서는 트랜잭션 관리 기능을 제공한다. 이를 이용하면 선언적 트랜잭션 처리, 프로그램적 트랜잭션 처리 등을 할 수 있으며, 트랜잭션 속성을 XML이나 어노테이션을 이용해 설정할 수 있다. 

 

4. OXM(Object XML Mapping)

OXM(Object XML Mapping)은 자바 객체와 XML 문서 간의 매핑을 지원하는 모듈이다. 개발자는 XML 문서를 직접 작성할 필요 없이, 자바 객체를 이용하여 간단하게 XML 문서를 생성하고 읽을 수 있다. 

 

5. Java Messaging Service(JMS)

Java Messaging Service(JMS)는 자바에서 메시지를 주고 받을 수 있는 API이다. 이 API를 사용하면 분산 시스템에서 메시지를 교환할 수 있다. JMS는 메시지 전송과 수신을 위한 스펙과 메시지의 속성을 정의하기 위한 API를 제공한다. 메시지를 보내는 쪽에서는 메시지를 생성하고 목적지를 지정한 다음, JMS Provider를 통해 메시지를 보낸다. 메시지를 받는 쪽에서는 메시지를 수신하고 처리한다. JMS는 대부분의 메시지 지향 미들웨어(MOM)에서 사용된다.

 

4. Web

1. Servlet

Servlet은 웹 애플리케이션 서버에서 실행되는 자바 클래스이다. 클라이언트의 요청을 처리하고, 응답을 생성하는데 사용된다. Servlet은 JSP(JavaServer Pages)와 함께 Java EE(Java Platform, Enterprise Edition)의 Web API를 구성한다. 스프링에서는 Servlet API를 이용하여 웹 어플리케이션을 개발할 수 있다.

 

2. Web

Spring Web MVC는 스프링에서 제공하는 웹 어플리케이션 개발을 위한 MVC 패턴 구현 모듈이다. 웹 어플리케이션을 개발할 때, 요청과 응답을 처리하며 페이지 이동을 관리하는 컨트롤러, 데이터를 처리하고 화면에 출력하는 뷰, 비즈니스 로직을 수행하는 모델로 구분하여 개발하는 것이 일반적이다. 이러한 구조를 MVC 패턴이라고 한다. 대부분의 웹 프레임워크에서 제공하는 MVC 패턴의 구현체이며, 스프링에서도 이를 지원한다. Spring Web MVC는 이러한 컨트롤러, 뷰, 모델을 개발하는 데 도움을 주며, 특히 유연한 URL 매핑 기능을 제공하여 URL과 컨트롤러를 매핑시키는 작업을 쉽게 수행할 수 있다.
Spring WebFlux는 스프링 5에서 추가된 모듈로, 비동기 웹 어플리케이션 개발을 위해 Reactive Streams를 지원하는 모듈이다. 기존의 Spring Web MVC와는 달리, Servlet API에 의존하지 않고, Netty, Undertow, Servlet 3.1+ 컨테이너와 같은 네이티브 리액티브 서버를 사용하여 개발할 수 있다. Spring WebFlux는 Reactor를 이용하여 비동기 프로그래밍을 지원하며, 이를 통해 높은 처리량과 확장성을 제공한다.

 

3. WebSocket

WebSocket은 HTTP와 달리 양방향 통신을 지원하는 프로토콜이다. 이를 이용하면 서버와 클라이언트 간의 실시간 양방향 통신이 가능하다. 스프링에서는 웹 소켓을 지원하기 위해 Spring Websocket 모듈을 제공한다. Spring Websocket 모듈은 STOMP(Subscribable-Text-Oriented Messaging Protocol) 프로토콜을 이용하여 WebSocket을 구현한다. STOMP는 WebSocket을 이용하여 메시지를 주고 받을 때 사용되는 메시지 프로토콜이다. Spring Websocket 모듈은 메시지 브로커와 연동하여 구현할 수 있으며, 브로커를 이용하여 메시지를 보내고 받을 수 있다. 이를 이용하면 다수의 사용자 간의 실시간 채팅, 게임 등의 기능을 구현할 수 있다.

 

4. Portlet

Portlet은 웹 페이지를 구성하는 데 사용되는 모듈이며, 클라이언트의 요청에 따라 동적으로 로드된다. Portlet은 일반적인 웹 애플리케이션과 달리, 특정 Portlet 컨테이너에서 실행되어야 하며, Portlet 컨테이너는 웹 서버에서 분리되어 실행된다. Spring Portlet MVC는 Spring MVC와 비슷한 방식으로 동작하며, Portlet 컨테이너에서 실행되는 Portlet 컨트롤러, 뷰, 모델을 개발할 수 있다.

 

5. Test

1. Test

  • spring-test 모듈은 JUnit 또는 TestNG를 사용하여 Spring 구성 요소의 단위 테스트 및 통합 테스트를 지원한다.
    • Spring ApplicationContexts의 일관된 로딩과 해당 컨텍스트의 캐싱을 제공한다.
    • 코드를 별도로 테스트하는 데 사용할 수 있는 모의 개체를 제공한다.

 

6. Languages

1. Groovy 지원

  • Groovy JVM에서 실행되는 스크립트 언어이다. Java와 완벽하게 호환되며, Java와 같은 문법을 사용하면서도 보다 간결한 코드를 작성할 수 있다. Groovy는 Gradle 등의 빌드 툴에서 널리 사용되어, Java 개발 프로세스에서 자주 사용된다.

 

2. Kotlin 지원

  • Kotlin JVM에서 실행되는 프로그래밍 언어로, 자바와 완벽하게 상호운용이 가능하다. 자바보다 간결한 문법과 람다 표현식, 널 안전성 등의 기능을 제공하여 개발 생산성을 높일 수 있다. 스프링에서는 Kotlin을 공식적으로 지원하며, 스프링 부트에서도 Kotlin을 이용한 개발을 쉽게 할 수 있다.
728x90
반응형
728x90
반응형

에러가 난 이유.

CORS(Cross-Origin Resource Sharing) 문제로 인한 에러.

CORS란
 - CORS는 브라우저에서 다른 출처(Origin)의 리소스를 요청할 때 발생할 수 있는 보안 정책.

 

문제의 원인.

React 개발 서버(http://localhost:3000)에서 Spring Boot 서버(http://localhost:8080)로 API 요청을 보냈지만 Spring Boot 서버가 CORS 요청을 허용하지 않아 브라우저의 요청을 차단한 상황.

 

해결 방법.

Spring Boot에서 CORS 허용 설정을 아래와 같이 해결해주면 된다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 모든 경로에 대해
                .allowedOrigins("http://localhost:3000") // React 개발 서버
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 허용할 HTTP 메서드
                .allowCredentials(true);
    }
}

 

728x90
반응형
728x90
반응형

에러가 난 이유.

Spring Boot가 JPA Repository 빈을 애플리케이션 컨텍스트에 등록하지 못해서 발생한 것.

 

해결 방안.

@SpringBootApplication
@ComponentScan(path)
@EntityScan(basePackages = path)
@EnableJpaRepositories(basePackages = path)
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

 

  • Application위에 어노테이션을 추가하였음.
  • 엔티티 및 레포지토리 인터페이스를 Bean(= Entity)으로 인식시키기 위한 설정.

 

728x90
반응형

+ Recent posts