- [ backend/프레임워크 ][spring] 웹 어플리케이션 기능 확장하기 (WebMvcConfigurer)2025-01-05 18:00:29스프링 부트 프레임워크는 프로젝트 설정 과정을 간소화하여 어플리케이션을 빠르게 개발하도록 돕는다. 하지만 프로젝트 목적에 따라 스프링 부트 기본 설정을 변경해야 하는 경우가 있다. 다행히 스프링 웹 MVC 프레임워크는 기존 기능을 확장하거나 교체하는 다양한 방법을 제공한다. 웹 어플리케이션을 설정하는 방법은 크게 세 가지가 있다.`WebMvcConfigurer` 인터페이스를 사용하여 필요한 기능들을 추가하거나(add) 교체한다(configure)`@Primary` 어노테이션을 사용하여 기본으로 만들어지는 빈을 재설정한다웹 MVC 프레임워크에서 정의한 스프링 빈 이름과 타입으로 빈을 직접 생성한다 (스프링은 이미 이름과 타입이 일치한 스프링 빈이 있다면 새롭게 만들지 않기 때문이다!)여기서는 `WebMvc..
- [ backend/프레임워크 ][spring] 스프링 부트 시작하기 (스프링/스프링 부트/@SpringBootApplication/ApplicationContext)2024-12-19 20:00:54프레임워크는 목적에 맞는 일반적인 기능을 제공한다. 예를 들어 웹 어플리케이션 프레임워크는 HTTP 기반의 요청과 응답을 처리할 수 있도록 객체나 클래스를 제공한다. 이처럼 프레임워크에서 일반적인 기능과 비기능적인 로직을 제공함으로써 개발자는 비즈니스 로직에 집중할 수 있다. EJB vs. 스프링스프링 프레임워크 이전에는 EJB(Enterprise JavaBeans)를 사용했다. EJB를 사용하기 위해서는 인터페이스를 구현하고 클래스를 상속 받아 부모 클래스를 오버라이드 해야 했다. 즉, EJB 프레임워크의 메서드가 비즈니스 로직에 침투되고, (invasive) 프레임워크와 개발자의 코드가 강하게 결합된다. 스프링은 개발하기 복잡하고 어려운 EJB를 대체하기 위해 등장했다. 스프링을 사용하면 더 이상 특..
- [ backend/프레임워크 ][spring] JPA/Hibernate, Spring Data JPA, 영속성 컨텍스트2024-12-16 15:00:51JPA/HibernateJPA는 Java Persistence API로, 자바 어플리케이션이 데이터를 영속할 수 있도록 API를 제공한다. JPA는 ORM 표준 스펙이므로 실제로 동작하기 위해서는 구현체가 필요한데 Hibernate가 대표적인 JPA 구현 프레임워크다. 모든 자바 어플리케이션은 데이터베이스에 데이터를 저장하기 위해 JDBC API를 사용한다. JDBC는 Java Database Connectivity의 약어로, 자바의 데이터 접근 표준이다. Hibernate 같은 프레임워크를 이용하면 내부에서 JDBC를 사용하여 데이터를 처리한다.# JPA/Hibernate 관련 설정spring: jpa: show-sql: false # (default=false) JPA/Hibernate가 생성..
- [ backend/프레임워크 ][spring] 스프링 이벤트 (ApplicationEvent와 ApplicationListener/@EventListener와 @TransactionalEventListener/비동기 이벤트)2024-11-15 12:00:58스프링 이벤트public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver { ... }스프링의 핵심인 `ApplicationContext`는 `ApplicationEventPublisher`를 상속 받아 이벤트를 게시(publish)하고 구독(listen)할 수 있도록 지원한다. 스프링 이벤트는 RabbitMQ 같은 외부 메시지 브로커와 달리 어플리케이션 내부에서 게시/구독할 목적으로 사용한다. 스프링 이벤트는 다음 장점을 가진다.이벤트를 게시하는 클래..
- [ backend/프레임워크 ][spring] REST 구현 (@RestController를 사용하는 이유/ResponseEntity를 사용하는 이유/글로벌 예외 핸들러 정의하기)2024-11-12 09:50:01@Controller 대신 @RestController를 사용하는 이유웹 앱을 만드는 방식에는 크게 두 가지가 있다.백엔드가 완성된 뷰를 제공하는 앱프론트엔드-백엔드 분리 방식의 앱프론트엔드-백엔드 분리 방식의 경우, 백엔드는 원시 데이터만 제공한다. 따라서 스프링 MVC 다이어그램에서 뷰 리졸버가 더 이상 필요하지 않다. 스프링은 컨트롤러 클래스를 컨텍스트에 빈으로 등록하기 위해 `@Controller` 어노테이션을 사용한다. 하지만 HTTP 응답을 전달하기 위해서는 `@ResponseBody` 어노테이션이 필요하다. 이를 통해 컨트롤러가 뷰 이름이 아닌 HTTP 응답 데이터를 반환한다는 것을 디스패처 서블릿에게 알릴 수 있다.@RequestMapping("/member")@Controller // 컨..
- [ backend/프레임워크 ][spring] 스프링 AOP2024-11-10 15:43:11AOP; Aspect-Oriented Programming애스펙트는 프레임워크가 메서드 호출을 가로채고 그 메서드의 실행을 변경할 수 있는 방법이다. 애스펙트를 활용하면 비즈니스 로직과 함께 실행되는 로직을 분리하여 코드 중복을 줄이고 관심사를 명확하게 할 수 있다.여러 메서드에 로깅을 적용하는 과정을 가정해보자. 각 메서드에 중복된 로깅 코드를 추가하는 대신, 애스펙트를 적용하여 해당 메서드가 실행될 때 자동으로 로깅되도록 할 수 있다.애스펙트 (aspect) : 특정 메서드를 호출할 때 실행되는 코드 (= `execute` 메서드)어드바이스 (advice) : 언제 애스펙트를 실행해야 하는지 정의 (= `@Around` 어노테이션)포인트컷 (pointcut) : 어떤 메서드를 가로채야 하는지 정의 ..
- [ backend/프레임워크 ][spring] 스프링 컨텍스트2024-11-10 14:16:59스프링프레임워크는 어플리케이션을 개발하는 데 사용하는 기본 기능을 제공하는 소프트웨어 집합이다. 스프링은 자바 어플리케이션을 위한 프레임워크다.스프링 코어 : 스프링의 기본 기능을 제공하고, 대표적으로 스프링이 앱의 인스턴스를 관리할 수 있도록 컨텍스트를 제공한다.스프링 MVC스프링 데이터 액세스스프링 테스팅 스프링은 IoC를 원칙으로 동작한다. 즉, 스프링에게 제어 권한을 위임한다. 우리는 Configuration을 작성하여 스프링에 제어를 지시한다. 이렇게 스프링에게 제어 권한을 위임하여 인스턴스를 관리하게 되면 AOP를 통해 인스턴스의 메서드를 가로치는 것도 가능하다. 📁 스프링 프로젝트 구조 `src` 폴더 `main` 폴더 : 어플리케이션 소스 코드를 저장하는 곳으로, 자바..