Spring

Spring

물리 트랜잭션과 논리 트랜잭션, 그리고 트랜잭션 전파에 관하여

트랜잭션 경계 여러 작업을 하나의 논리적인 단위로 묶고 싶을 때 트랜잭션을 사용합니다. 트랜잭션은 시작하는 방법은 하나이지만 끝나는 방법은 두 개가 존재합니다. 하나는 롤백(rollback)이며, 다른 하나는 커밋(commit)입니다. Connection connection = dataSource.getConnection(); connection.setAutoCommit(false); // 트랜잭션 경계 시작점 doSomeThing(); connection.commit(); // 트랜잭션 경계 끝점 그리고 트랜잭션을 시작하고 끝내는 작업을 설정하는 걸 '트랜잭션 경계설정'이라고 하고, 트랜잭션 경계 내에서 논리적으로 묶이길 원하는 로직들이 실행되게 됩니다. 물리 트랜잭션과 논리 트랜잭션 스프링에서는 트랜..

Spring

쉽게 이해해보는 DispatcherServlet

스프링을 공부하면서 DispatcherServlet에 대한 이야기는 많이 들었음에도 불구하고 이해가 쉽게 되지 않았던 적이 많았습니다. 이름 자체부터 추상적이기도 하고, HandlerMapping, HandlerAdapter 등 낯선 용어들이 너무 많았기 때문입니다. 따라서 이번 아티클에서는 누구나 쉽게 이해할 수 있도록 DispatcherServlet의 역할에 대해 작성해보고자 합니다. 저만의 언어로 풀어쓴 것이기에 많은 부분을 추상화했다는 점 참고해 주시면 감사하겠습니다. DispatcherServlet 모든 클래스에는 해당 클래스의 역할을 기술하는 네이밍이 주어집니다. 그렇다면 DispatcherServlet이라는 이름을 잘 해석하면 해당 클래스의 역할을 유추해 볼 수 있지 않을까요? Dispatc..

Spring

CGI에서부터 Spring에 이르기까지

현재 스프링 구조에 대한 학습을 진행하고 있습니다. 백엔드 개발을 하면서 다양한 스프링 지원기술들을 사용해왔지만, 정작 이 기술들이 왜 생겨나게 되었는지, 스프링은 왜 등장했는지에 대해 명확히 이해하지 못했던 것 같습니다. 따라서 이번 아티클을 통해 스프링의 등장 배경을 정리해보도록 하겠습니다. 들어가면서 사실 스프링이 등장하기까지는 많은 발전 과정이 존재했습니다. 초기 WWW 모델을 거쳐 CGI, Servlet, JSP 기술이 등장한 뒤에서야 스프링이 등장하게 되었습니다. 그렇다면 스프링은 어떤 문제를 해결하기 위해 등장한걸까요? CGI, Servlet, JSP의 특징을 알아보면서 스프링이 등장하게 되었던 당위성을 이해해보고자 합니다. CGI WWW이 발전함에 따라, 정적 웹페이지가 아닌 동적 웹페이지..

Spring

Servlet Filter란?

사용자의 요청이 발생하면 서블릿에 도달하여 적절한 형태로 처리됩니다. 하지만 여러 서블릿에서 공통적으로 처리하고 싶은 작업이 있을 수 있습니다. 그렇다면 매번 중복 로직을 각각의 서블릿에 작성해주어야 할까요? 이를 해결하기 위해 서블릿 API 2.3부터는 필터(Filter)라는 기능을 지원합니다. 필터는 HTTP 요청 및 응답에 대해 쉽게 전/후 처리를 할 수 있는 기술입니다. 예를 들어 HTTP 요청 및 응답에 공통적으로 어떤 헤더를 삽입하고 싶다면 필터를 사용할 수 있습니다. 필터 사용 예시 필터는 다음과 같은 기능들을 구현하는데 주로 사용되곤 합니다. 인증 필터 로깅 및 감시(Auditing) 필터 이미지 변환 필터 데이터 압축 필터 암호화 필터 필터 인터페이스 필터를 사용하고자 한다면 javax...

Spring

Query Parameter, Path Variable은 무엇이고 언제 사용할까?

최근 Spring을 통해 개발을 진행하고 있는데요, Query Parameter, Path Variable 사용에 대한 저만의 기준이 잡혀 있지 않아 API를 설계하면서 대부분의 요청을 JSON으로 받았더라구요. 따라서 이번 아티클을 통해 Query Parameter, Path Variable은 무엇인지, 그리고 언제 사용할 수 있는지를 알아보면서 저만의 기준을 잡아가고자 합니다. query parameter란? 다음과 같은 주소가 있다고 해봅시다. /foo?name=teo&age=25 물음표 뒤를 보면 key=value 형식으로 이루어져 있는데요, 여기서 key-value 쌍 하나를 query parameter라고 합니다. 그리고 이런 query parameter가 여러 개 있는 경우 &기호를 통해 ..

Spring

Spring Interceptor

Spring으로 웹 서비스를 구성하면 어느 URL로 클라이언트가 접근하던 간에, 공통적으로 작업을 수행시키고 싶은 경우가 존재합니다. 예를 들어 로깅이나 인증 절차 등이 있겠죠. 그리고 이런 작업을 컨트롤러의 핸들러 메소드 각각마다 배치하게 되면 중복이 발생될 수 밖에 없습니다. 하지만 이런 상황에 효과적으로 사용할 수 있는 장치가 하나 있는데요, 바로 Spring Interceptor입니다. Spring Interceptor는 요청을 가로채 특정 처리를 대신 해줍니다. 그리고 곧 알게 되겠지만, 중복 제거 이외에도 방화벽과 비슷한 기능을 제공해주기도 합니다. Spring Interceptor의 사용Spring Interceptor 클래스는 다음과 같은 두 가지 방법으로 만들 수 있습니다.HandlerI..

Spring

ResponseEntity, RequestEntity, HttpEntity

RequestEntity, ResponseEntity가 뭘까요? 일단 직접 코드를 열어봅시다. // ResponseEntity.java public class ResponseEntity extends HttpEntity { ... } // RequestEntity.java public class RequestEntity extends HttpEntity { ... } 두 객체 모두 HttpEntity를 상속받고 있네요. 그러면 HttpEntity의 개념을 먼저 알아 볼 필요가 있을 것 같습니다. HttpEntity 공식 문서를 보게 되면, HttpEntity에 대한 설명으로 다음과 같이 나와 있습니다. Represents an HTTP request or response entity, consisting..

Spring

Spring Boot에서 로깅해보기

로그, 로깅? 로그(log)란, 시스템의 작동 정보를 의미합니다. 그리고 이런 이런 로그들은 필요에 따라 기록되어야 하는데요, 시스템 실행 중에 발생하는 이벤트나 트랜잭션, 오류 등과 같은 정보는 때에 따라서는 누락되어서는 안됩니다. 이런 정보는 에러나 장애가 발생했을 때 사용될 수도 있고, 분석 데이터로도 활용될 수 있습니다. 그리고 이런 로그들을 작성하는 것을 로깅이라고 합니다. Spring Boot에서의 로깅 Spring Boot에서는 로깅 구현체들을 위한 두 개의 인터페이스가 존재하는데요. 바로 JCL(Jakarta Commons Logging)과 SLF4J(Simple Logging Facade For Java)입니다. JCL 구현체들은 초기의 스프링에서 사용되었고 클래스로딩 타임에 구현체를 선..

Spring

빈 스코프

빈 스코프란 이번에는 빈 스코프에 대해 알아보려고 합니다. 빈 스코프란 단순하게 다양한 빈 설정 정보 중 하나로 볼 수 있습니다. 스코프(Scope)라는 이름에 맞게, 빈 스코프는 빈 객체가 생성되어 사용되는 범위입니다. 스프링에서는 이러한 빈 스코프를 클래스 레벨에서 기술할 필요 없이 Configuration 파일에서 기술할 수 있게 해줍니다. 스프링이 제공하는 빈 스코프는 총 6가지가 있는데요, 그 중 4개는 세션 정보가 필요해서, 웹서버와 함께 Spring을 구동할 때에만 사용이 가능합니다. 참고로 커스텀 빈 스코프도 만들 수 있다고 하니, 빈 스코프 확장에 대한 제약은 없어보입니다. 그럼 이제 스프링이 제공하는 6개의 빈 스코프를 알아보겠습니다. Singleton Scope 디폴트 빈 스코프이며 ..

Spring

의존성 주입(DI)이란?

스프링에 처음 입문하면 의존성 주입(DI)라는 키워드를 자주 듣게 됩니다. 의존성을 주입한다, 라는게 무슨 말일까요? 의존성을 왜 주입해야할까요? 애초에 의존성은 무엇인가요? 이번 아티클을 통해 모두 알아보고자 합니다. 의존성은 무엇인가요? 의존성(Dependency)이란 무엇이라고 생각하시나요? 객체지향은 변경에 용이하게 대처하기 위해 탄생했습니다. 기존의 절차지향 패러다임은 변경에 취약했습니다. 조그마한 비즈니스 요구사항의 변경이 코드 구조를 통째로 뒤흔들기도 했습니다. 그렇기에 객체지향 패러다임이 주목받았습니다. 추상화와 캡슐화를 통해 변경에 용이하게 대처할 수 있었기 때문입니다. 그렇다면 의존성이란 개념은 어떻게 객체지향과 연관이 있을까요? 의존성은 연결이다 레고를 한번 생각해보겠습니다. 레고는 ..

teo_99
'Spring' 카테고리의 글 목록