본문 바로가기

Spring

(26)
[Spring] @AuthenticationPrincipal null 문제상황 @PostMapping() public ResponseEntity
동시성 이슈 해결방법 (Synchronized, DB Lock, Redis Lock) 문제 상황 Stock.class @Entity @NoArgsConstructor @Getter public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; public Stock(Long productId, Long quantity) { this.productId = productId; this.quantity = quantity; } public void decrease(Long quantity) { if (this.quantity - quantity < 0) { throw new RuntimeException("..
리팩토링 리팩토링이란? 새로운 소스코드를 만들어 내는 것이 아니다. 외부 동작은 변경하지 않고, 내부 구조를 변경하는 작업이다. 코드의 가독성을 좋게 한다. 개발자들마다 결과가 다를 수 있다. 리팩토링 주의사항 기능 추가 구현과 동시에 리팩토링을 하는것을 권장하지 않는다. 기능을 추가하기 전, 리팩토링을 먼저 하는 것을 추천 리팩토링 팁 아래 코드를 리팩토링하면서 리팩토링 팁을 알아보겠습니다. public class Main { public static int splitAndSum(String text) { int result = 0; if (text == null || text.isEmpty()) { result = 0; } else { String[] values = text.split("-"); for (S..
[Spring] 스프링 빈 설정 (XML, JAVA, Component Scan) 1. XML 스프링의 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용할 수 있습니다. DI 정보가 담긴 XML 파일은 를 루트 엘리먼트로 사용하고 안에는 여러 개의 을 정의할 수 있습니다. 태그에 사용되는 속성들 속성 이름 설명 id 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다. name 객체의 별칭입니다. class 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다. constructor-arg 생성자를 이용해 값을 주입할 때 사용합니다. property setter를 이용해 값을 주입할 때 사용합니다. setter를 이용한 DI 기능 PersonService public interface PersonService { public void sayHello(); } Person..
[Spring] Spring Framework, Spring Web MVC Framework 웹 어플리케이션을 개발하기 위해서는 기본 기능과 많은 기능을 설계, 작성해야 합니다. (요청처리, 세션관리, 리소스 관리, 멀티 쓰레드 등) 하지만 기본적인 공통 구조(framework)를 제공한다면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경 쓰면 되기 때문에 생산성이 높아집니다.. 개발자 입장에서는 완성된 구조에 자신이 맡은 코드만 개발해서 넣어주면 되기 때문에 개발 시간을 단축할 수 있습니다. Spring Framework의 특징 POJO(Plain Old Java Object) 방식의 프레임워크 - EJB가 기능 작성을 위해서 인터페이스를 구현하거나 상속하는 것에 비해 일반적인 자바 객체를 이용해서 그대로 사용할 수 있음을 의미합니다. 의존성 주입(DI, Dependency..
[Spring] SecurityConfig, OAuth2UserDetailsService 순환 참조 오류 오류 Spring Security와 OAuth 2.0 프레임워크를 이용하여 소셜로그인을 구현하던 중 SecurityConfig 파일과 DefaultOAuth2UserService 클래스를 상속받은 OAuth2UserDetailsService 클래스 사이에서 순환 참조 오류가 발생했다. 오류 원인 SecurityConfig @Configuration @Log4j2 @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true) @RequiredArgsConstructor public class SecurityConfig { private final OAuth2UserDetailsService oAuth2UserDetailsService; priv..
[Spring] Spring Security, JWT, OAuth 2.0 Spring Security Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티에서 가장 핵심적인 개념은 인증(Authentication)과 인가(Authorization)로 사용자가 누구인지 확인하는 절차를 인증이라고 하고 인증된 사용자가 요청한 자원에 접근이 가능한지 확인하는 절차를 인가라고 한다. Spring Security 인증과정 사용자가 로그인 정보와 함께 인증 요청 (HttpRequest) AuthenticationFilter가 요청을 가로챔. 이때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken 객체 생성 ProviderManager (Authenticati..
[Spring] AOP AOP 란? AOP(Aspect-Oriented Programming)는 관점 지향 프로그래밍이라는 의미로 번역되는데, 객체지향에서 특정 비즈니스 로직에 걸림돌이 되는 공통 로직을 제거할 수 있는 방법을 제공해줍니다. AOP를 적용하면 기존의 코드에 첨삭 없이, 메서드의 호출 이전 혹은 이후에 필요한 로직을 수행하는 방법을 제공합니다. 정리하면 AOP가 추구하는 것은 관심사의 분리로 개발자가 염두에 두어야 하는 일들은 별도의 관심사로 분리하고 핵심 배즈니스 로직만을 작성하는 것을 권장합니다. AOP 용어 용어 설명 aspect 구현하고자 하는 보조 기능 advice aspect의 실제 구현체(클래스). 메서드 호출을 기준으로 여러 지점에서 실행 joinpoint advice를 적용하는 지점을 의미. 스프..