[Spring] DI와 IoC 이해하기
·
Programming/Spring
DI 적용 전 객체 사용 방식DI 개념을 적용하기 전에는 객체 사용 시 어떤 방식을 사용했을까?1. 직접 객체 생성사용하려는(=의존하려는) 객체를 ``new`` 생성자를 통해 직접 생성한다.public class CafeController { private StarbucksService starbucksService = new StarbucksService(); public void orderCoffee() { starbucksService.brew(); }}이러한 방법은 객체간 결합도가 강하다는 단점이 있다. 만일 스타벅스가 부도가 나서 서비스를 스타벅스가 아닌 팀홀튼으로 바꿔야 할 경우 (ㅎ) CafeController 내부의 코드를 직접 수정해야 한다.StarbucksService를 사용하고 있..
[SpringBoot] 파일 업로드를 위한 MultipartFile의 처리/동작 방식
·
Programming/Spring
Spring에서는 ``MultipartFile`` 인터페이스를 통해 파일 업로드 기능을 간편하게 구현할 수 있다.1. Multipart Upload란?이미지, 영상, 문서 등의 바이너리 데이터를 업로드하기 위한 HTTP 요청 방식이다.요청의 ``Content-Type``은 ``multipart/form-data``로 지정되며,데이터는 요청 본문(Body)에 다음과 같이 구성된다.Header : Content-Type, 필드 이름 등 메타데이터Body: 실제 데이터 (파일, 폼 필드 값 등)Multipart Upload 요청 예시POST /upload HTTP/1.1Content-Type: multipart/form-data; boundary=----WebKitFormBoundary------WebKitF..
[Spring] JPA Cascade에 대해 정리해보자 💭
·
Programming/Spring
JPA Cascade란?부모 엔티티가 수행하는 특정 영속성 작업(persist, merge, remove, refresh, detach)을 연관된 자식 엔티티에도 전파하는 기능이다.예를 들어 Order - OrderItem의 관계, Post - Comment의 관계를 생각하면 된다.Order가 삭제된다면 해당 OrderItem 데이터는 남아있을 필요가 없으므로 삭제되어야 한다.Post - Comment 역시 동일하다.@Entitypublic class Order { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "order") private List orderItems = new ArrayList(); public vo..
[Spring] 영속성 컨텍스트에 대해 정리해보자
·
Programming/Spring
영속성 컨텍스트Spring Framework에서 영속성 컨텍스트란 어플리케이션 엔티티를 관리하는 환경으로,어플리케이션과 데이터베이스 사이에서 객체를 보관/관리하는 저장소 역할을 한다.트랜잭션 단위로 관리된다.애플리케이션 단위가 아니라 트랜잭션 단위로 관리된다.즉, 트랜잭션이 끝나면 해당 영속성 컨텍스트가 사라지면서 관리되던 엔티티는 준영속 상태가 된다.같은 트랜잭션 내에서는 같은 영속성 컨텍스트를 사용한다.하나의 Spring 어플리케이션에서 여러 개의 영속성 컨텍스트가 존재할 수 있다.누가 관리하는가?`EntityManagerFactory` : 애플리케이션 전체에서 하나만 생성되는 팩토리 객체 (싱글톤)`EntityManager` : 영속성 컨텍스트를 직접 관리하는 JPA 핵심 객체 얘로 영속성 컨텍스..
[Spring] Interceptor에 대해 알아보자
·
Programming/Spring
Spring Interceptor란?Spring MVC에서 제공하는 기능으로, 특정 요청이 컨트롤러에 도달하기 전이나 응답이 클라이언트에게 반환되기 전에 추가적인 처리를 수행할 수 있도록 도와준다.이를 통해 인증, 로깅, 공통 처리 로직등을 분리해서 유지보수성을 높일 수 있다.구현하는 법spring-web 5.3 이하 버전에서는`HandlerInterceptorAdaptor` 클래스를 상속`HandlerInterceptor` 인터페이스를 구현함으로써 인터셉터를 생성할 수 있었다.그러나 5.4 버전 이후부터는 `HandlerInterceptorAdaptor` 클래스가 deprecated 처리되어 `HandlerInterceptor` 인터페이스를 구현하는 방식으로 인터셉터를 만들어야 한다.☑️  Spring..
[Spring] LoginCheckFilter 구현 : 로그인/아웃 로직 구현하기
·
Programming/Spring
Filter 알아보기Filter 실행 흐름HTTP 요청 → WAS → `Filter 1 → Filter 2 → ... → Filter N` → Servlet → Controller Servlet이 호출되기 전에 Filter를 항상 거치게 된다.따라서 Controller에서 수행할 공통 관심 사항을 Filter에 구현하면 모든 요청 혹은 응답에 적용할 수 있다.특정 URL Pattern에만 Filter를 등록할 수도 있다.Filter의 구현Filter Interface`jakarta.servlet.Filter` 인터페이스를 구현하여야 한다.주요 메서드는 `init`, `doFilter`, `destroy`로 이루어져 있다.HTTP 요청이 오면 `doFilter` 메서드가 호출된다.  ← 원하는 로직을 이 ..
[Spring] 기본 예외 처리와 Custom 예외 처리 함께 사용하기
·
Programming/Spring
일정 관리 앱 과제를 수행하면서 예외 처리를 커스텀 하는 법에 대해서 공부했다.짧게 다시 복기해보자면 !커스텀 예외 처리 방법가장 명시적으로 예외 처리는 `try-catch` 문으로 할 수 있다. 그렇지만 예외가 발생할 수 있는 모든 부분에 `try-catch` 문을 덕지덕지 붙일 수는 없다 .. (아무도 보고 싶지 않아하는 누더기 같은 코드가 될 수 있음) Spring에서는 어플리케이션을 실행하는 동안 특정 예외가 발생할 경우 개발자가 등록한 특정 메서드를 실행시켜 주는 기능을 제공한다. (🙇🏻‍♀️🙇🏻‍♀️)해당 메서드에는 `@ExceptionHandler` 어노테이션을 달아주면 된다. 이 `@ExceptionHandler` 어노테이션안에 담당할 예외 클래스들을 명시해준다.@ExceptionH..
[Spring] JDBC 이해하기
·
Programming/Spring
JDBC란?JDBC (Java DataBase Connectivity)Java 표준 API로 , SQL 쿼리를 실행하고 결과를 가져오는 등의 데이터베이스 관련 작업을 수행하도록 하는 인터페이스와 클래스들의 집합Java를 사용하여 DB와 상호작용하기 위해 가장 오래 & 널리 사용된 Java의 표준 API이다.JDBC만 사용하여 데이터베이스와 상호작용하는 것은 가능하지만, 다음과 같은 문제점이 생긴다.예외처리가 번거롭다. SQLException 예외 처리를 위해 Try-Catch 블록을 여러 곳에 작성해야 한다.Connection, Statement, ResultSet 객체를 사용한 뒤 반드시 close() 메서드를 호출하여야 한다. 이처럼 자원 누수를 방지하기 위해 많은 자원 관리 코드를 작성해야 한다.쿼..