웹 개발자를 위한 CORS 이해와 Spring Boot에서의 적용 방법
·
Spring/Spring 기초 지식
이번 포스트에서는 CORS에 대한 심화 내용을 설명한다. 📌 서론 웹 개발을 하다 보면, 다양한 출처(origin)에서 서버로 요청을 보내는 상황이 자주 발생한다. 이때 CORS(Cross-Origin Resource Sharing) 정책이 중요한 역할을 한다. Spring Boot와 React를 예로 들어 CORS에 대해 자세히 알아보도록 하자 1. 요청 헤더와 응답 헤더는 어떻게 다뤄지나? 요청 헤더와 응답 헤더: 기본 원칙 웹 애플리케이션에서 서버로 데이터를 요청할 때 사용하는 '헤더'는 요청 정보를 담고 있다. 예를 들어, 로그인 정보나 데이터 형식 등이 여기에 해당된다. 하지만, 요청을 받은 서버가 응답을 줄 때, 이 요청 헤더는 자동으로 응답 헤더로 넘어가지 않는다. HttpServletReq..
Spring: 필터(Filter)가 인터셉터(Interceptor)와 다른점
·
Spring/Spring 기초 지식
이번 포스트에서는 Spring Filter에 대해서 알아보도록 하자 1. Spring에서 Filter의 개념 필터의 정의 필터는 웹 애플리케이션에서 클라이언트의 요청과 서버의 응답을 가로채는 재사용 가능한 코드 조각이다. 서블릿 스펙의 일부로, 요청이 서블릿에 도달하기 전과 응답이 클라이언트로 반환되기 전에 특정 작업을 수행할 수 있다. 서블릿 필터의 기본 원리 필터 체인을 통해 여러 필터를 순차적으로 적용할 수 있다. 각 필터는 doFilter() 메서드를 통해 요청과 응답을 조작하고, 필터 체인의 다음 필터나 최종 목적지(서블릿 또는 정적 리소스)로 요청/응답을 전달할 수 있다. 스프링 부트에서 필터의 역할 스프링 부트는 자동 구성을 통해 필터를 쉽게 추가하고 관리할 수 있게 해준다. 보안, 트랜잭션..
[Spring] 스프링과 자바의 동시성과 병렬 처리
·
Spring/Spring 기초 지식
Java의 동시성과 병렬 처리에 대해 알아보자.📌 서론백엔드 개발을 하다보면 동시성 문제에 직면하게 되는 경우가 있다. 그러나 동시성이 무엇인지 모르면 문제가 발생하는 원인조차 모를수 있기 때문에 간단하게라도 지식을 얻어두면 좋다고 생각한다. 이 글을 통해 정말 간단하게 자바의 동시성이 무엇이고 병렬 처리 기능은 어떤것이 있는지 알아보자! 1. 간단하게 알아보는 동시성 문제동시성이 뭔데?동시성이란 것은 여러 스레드가 동시에 같은 api를 호출한다고 생각하면 이해하기 쉽다.예를 들면 스프링은 멀티 스레드로 동작하는 프레임워크이기 때문에 100개의 같은 요청이 1개의 api에 동일한 시간에 발생할 수도 있다. 이 상황에는 스레드의 경쟁이 발생할 것이고 "동시성 제어"가 되지 않는다면 서버에 문제가 발생할 ..
Spring: @ControllerAdvice와 AOP를 함께 사용하여 에러 로깅하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 AOP 를 동시에 적용하여 로깅을 해보자 📌 서론 Spring Boot에서는 일반적으로 @ControllerAdvice와 @ExceptionHandler를 사용하여 전역 에러 핸들링을 수행한다. 그러나 이러한 방식은 상세한 로깅에 한계가 있을 수 있다. 이 글을 작성하게 된 계기는 많은 개발자들이 로깅을 어떻게 효율적으로 할 수 있을지, 그리고 예외 상황에서 어떻게 로깅을 해야 할지에 대한 고민을 하고 있기 때문이다. 다니선 회사의 동료 또한 이에 대한 궁금증을 가졌기에 이 글을 통해 그러한 고민을 조금이라도 해결할 수 있으면 좋겠다. 1. 문제 상황 파악 @ExceptionHandler가 명시된 메서드에서는 지정된 Exception 객체만을 받을 수 있기 때문에, 에러..
Spring Boot: @ControllerAdvice/@RestControllerAdvice로 예외처리하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 @RestControllerAdvice에 대해 자세히 알아보자 📌 서론 프로그래밍에서 예외 처리는 매우 중요한 부분이며, Spring Boot에서는 @ControllerAdvice와 @RestControllerAdvice를 통해 이를 효율적으로 수행할 수 있다. 이 어노테이션들은 코드의 재사용성과 유지 보수성을 높여, 복잡한 비즈니스 로직에서도 예외 상황을 안정적으로 관리할 수 있게 해준다. 1. @ControllerAdvice이해 @ControllerAdvice란? @ControllerAdvice는 Spring 3.2에서 도입된 어노테이션으로, 모든 @Controller 클래스가 공유하는 공통 로직을 정의할 때 사용한다. 주로 예외 처리와 바인딩 설정, 모델 객체 등에..
[스프링, 스프링 부트] Spring - ajax로 호출하는 controller 메서드 구현방법
·
Spring/Spring 기초 지식
이번에는 javaScript에서 ajax로 컨트롤러의 메서드를 호출할때 응답을 어떤식으로 하는게 좋을지 알아보자 바로 응답 객체를 반환하냐 아니면 ResponseEntity로 감싸서 반환하냐 둘중에 뭐가 더 좋을까? 1. 바로 응답 객체를 반환 받는방식 예시코드 /** * [READ] * 각각의 게시글에 달린 대댓글을 리스트로 받아오는 컨트롤러 * ajax로 호출한다. -> 동작: 댓글 하단의 댓글보기를 클릭하면 이 컨트롤러를 통해 그 댓글의 대댓글 정보를 보여준다. */ @ResponseBody @GetMapping("/get/{boardId}") public Page getBoardSubCommentList( @PathVariable Long boardId, @PageableDefault(size =..
Spring: Maven과 Gradle의 차이
·
Spring/Spring 기초 지식
Maven와 Gradle의 차이점이 뭘까? 📌 서론 스프링을 사용하다 보면 라이브러리를 다운받기 위해 pom.xml이나 build.gradle에 사용하고자하는 라이브러리를 적어주곤 한다. 그런데 이런 것들은 maven, gradle에 의해서 다운받아지고 라이브러리 의존성이 관리되는데 이것들에 대해서 자세히 알아볼 기회는 많지 않다. 이번에는 maven, gradle에 대해서 알아보도록 하자 아래의 글을 통해 maven과 gradle에 대한 이해를 하고 오시는것을 추천합니다! Spring: Maven이 뭘까? 이번 포스트에서는 Maven에 대해서 알아보자 📌 서론 이전 회사에서 작업을 할 때 SpringFramework3.x.x 버전을 사용하고 Maven을 사용했던 기억이 있다. 이때 첫 프로젝트를 하면서..
SpringBoot: 인터셉터(interceptor)의 동작원리
·
Spring/Spring 기초 지식
스프링 부트에서 사용되는 Interceptor의 동작원리를 알아보자 1. 스프링부트에서 인터셉터란? 스프링부트에서의 인터셉터 스프링부트에서 인터셉터는 웹 애플리케이션에서 요청과 응답을 처리하는 중간 단계에서 사용된다. 인터셉터는 특정 URI 패턴에 대한 요청을 가로채어, 컨트롤러가 처리하기 전후에 추가적인 작업을 할 수 있게 해 준다. 이를 통해, 로그인 체크, 권한 검증, 로깅 등과 같은 작업을 효율적으로 처리할 수 있다. 인터셉터의 동작 과정 클라이언트로부터 들어오는 요청(HttpRequest)을 가로챈다. 가로챈 요청에 대해 원하는 처리(예: 로그인 체크, 권한 체크 등)를 수행한다. 처리가 끝난 후, 요청을 원래의 목적지인 컨트롤러로 전달한다. 컨트롤러가 응답(HttpResponse)을 반환하면,..