트랜잭션이란? 트랜잭션은 어떤 작업의 완전성을 보장해주는 것을 의미한다. 논리적인 작업 단위를 완벽하게 처리하거나 모두 취소하여 작업의 일부만 적용되는 현상을 방지하는 기술이다. 즉, 데이터의 정합성을 보장하기 위한 기능이라고 볼 수 있다. 트랜잭션의 가장 쉬운 예로 계좌 송금 시스템을 떠올릴 수 있다. 계좌 송금 시스템의 논리적인 작업 단위는 다음과 같다. A가 B에게 계좌 송금 신청 A가 송금 가능한 상태인지 확인(신청한 송금 금액이 계좌에 들어있는지) A가 신청한 금액만큼 A의 계좌 금액 차감 B에게 금액 송금 B의 계좌에 송금된 금액이 가산 이러한 논리적 작업을 수행하는 도중 4번 과정에서(B에게 금액을 송금) 장애가 발생한다면 어떻게 될까? 당연히 송금은 취소되고 A의 계좌에서 차감됐던 금액도 ..
인증, 인가, 권한, 로그인 등의 기능을 제공해주는 Spring Security를 학습하고 적용해보자. 1. Spring Security 개념 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 보안과 관련해서 체계적으로 많은 옵션을 제공 일일이 보안 관련 로직을 작성하지 않아도 됨 1. Spring Security 용어 접근 주체 (Principal) 보호된 리소스에 접근하는 유저 인증 (Authentication) 현재 유저가 누구인지 확인한다. ex) Form Login 애플리케이션의 작업을 수행할 수 있는 주체임을 확인하는 과정 인가 (Authorization) 현재 유저가 리소스에 접근할 수 있는 권한이 있는지 검사하는 과정 인증(..
@Bean과 @Component는 어떤 객체를 Bean으로 등록하고 싶을 때 사용되는 애노테이션들이다. 그렇다면 이 둘의 차이점이 뭘까? 두개의 애노테이션 모두 Bean으로 등록하겠다는 목적을 가지는 애노테이션인데 왜 둘로 나누어져 있을까? 항상 헷갈렸던 부분이기도 하고 명확한 이해가 없는 것 같아 이번 글에서 확실히 정리해보고자 한다. 1. @Bean @Bean 같은 경우에는 메서드 위에 선언 가능하고 외부 라이브러리를 Bean으로 등록할 때 사용된다. 이해를 돕기 위해 먼저 @Bean 애노테이션을 살펴보자. @Target이 METHOD로 지정되어있다. 이는 메서드 위에 선언되어야 한다는 의미이다. 이건 알겠는데.. 왜 외부 라이브러리를 Bean으로 등록할 때 사용되는 걸까? 외부 라이브러리는 Read..
Spring으로 개발을 하다 보면 Bean이라는 개념이 자주 등장한다. 자주 사용하는 용어이기 때문에 당연히 알고 있는 개념이라고 생각하지만, 막상 의미를 정의하라고 하면 헷갈리는 경우가 많다. 그래서 오늘은 Bean이라는 개념을 명확하게 정리해보고자 한다. 1. Java Bean 먼저 Java Bean에 대해 알아보자. 결론부터 말하자면 Java Bean은 특정 형태의 클래스를 가르키는 뜻으로 사용된다. DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. 필드는 private로 구성되어 getter와 setter를 통해서만 접근할 수 있고, 전달 인자가 없는 생성자를 가지는 형태의 클래스이다. getter / setter public의 no-argument 생성자 모든 필드는 privat..
API 문서 자동화 프레임워크인 Swagger를 학습하고 활용해보자. 1. Swagger란? 처음 개발하거나 혹은 유지보수를 진행할 때, API 서버가 어떤 Spec을 가진 데이터를 주고받는지에 대한 문서작업이 꼭 필요하다. 하지만 이런 문서작업은 굉장히 시간이 많이들고, API가 수정될 때마다 문서도 같이 수정해줘야 하는 번거로움을 동반한다. 스웨거(Swagger)는 Open Api Specification(OAS)를 위한 프레임워크로 API들이 가지고 있는 스펙(spec)을 명세, 관리할 수 있는 프로젝트이다. 1. Swagger 아래의 사진은 Swagger가 적용된 화면이다. 위 사진처럼 URL 리스트들의 목록을 바로 확인을 할 수가 있다. 2. Swagger 설정 1. 의존성 추가 - Spring..