[Spring] 스프링은 추상화를 어떻게 적용했을까?
·
Spring/Spring에서 Java 활용하기
스프링은 추상화를 어떻게 사용할까? 간단한 예시로 알아보자 📌 서론 이번 포스트는 실제로 스프링을 개발하면서 자주 사용하게 되는 기능들을 기준으로 정리하였으며 쉽게 이해하기 위해 간단한 코드로 내용을 구성하였다. 만약 추상화의 개념이 부족하다면 아래의 글을 읽어보는것을 추천한다. [Spring] 추상화란 무엇인가? 자바의 "추상화"의 개념을 알아보고 스프링을 이것을 어떻게 사용하는지 알아보자 📌 서론 항상 추상화를 사용하고 있지만 누군가 "그래서 대체 추상화가 뭔데?"라고 물어볼때마다 바로바로 떠 curiousjinan.tistory.com 1. Java의 추상화 추상 클래스와 추상 메서드 Java에서는 abstract 키워드를 사용하여 추상 클래스와 추상 메서드를 정의할 수 있다. 추상 클래스는 인스턴..
[Spring] 스프링과 자바의 동시성과 병렬 처리
·
Spring/Spring 기초 지식
Java의 동시성과 병렬 처리에 대해 알아보자.📌 서론백엔드 개발을 하다보면 동시성 문제에 직면하게 되는 경우가 있다. 그러나 동시성이 무엇인지 모르면 문제가 발생하는 원인조차 모를수 있기 때문에 간단하게라도 지식을 얻어두면 좋다고 생각한다. 이 글을 통해 정말 간단하게 자바의 동시성이 무엇이고 병렬 처리 기능은 어떤것이 있는지 알아보자! 1. 간단하게 알아보는 동시성 문제동시성이 뭔데?동시성이란 것은 여러 스레드가 동시에 같은 api를 호출한다고 생각하면 이해하기 쉽다.예를 들면 스프링은 멀티 스레드로 동작하는 프레임워크이기 때문에 100개의 같은 요청이 1개의 api에 동일한 시간에 발생할 수도 있다. 이 상황에는 스레드의 경쟁이 발생할 것이고 "동시성 제어"가 되지 않는다면 서버에 문제가 발생할 ..
Spring Boot: Gradle 버전 확인하기
·
Spring/Spring 설정
Spring Boot: Gradle 버전 확인하기 📌 서론 이번 포스트에서는 특정 API나 Jenkins를 사용할때 Spring과 그 tool의 Gradle 버전을 맞춰주기 위해 필요한 Spring Boot 프로젝트의 gradle 버전 확인하는 방법을 소개한다. 1. IntelliJ에서 프로젝트 내부 파일 검색하기 인텔리제이 기준으로는 shift + shift (shift두번 빠르게 클릭)으로 파일명을 검색하는게 가장 빠르다. 이 파일을 검색해 보자 : gradle-wrapper.properties 2. 파일 경로 확인하기 gradle-wrapper.properties 파일로 들어간 후 아래의 이미지와 같이 intelliJ 좌측 상단을 보면 동그라미가 겹쳐진 모양이 있는데 이걸 클릭한다. 동그라미를 클릭..
Spring: @ControllerAdvice와 AOP를 함께 사용하여 에러 로깅하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 AOP 를 동시에 적용하여 로깅을 해보자 📌 서론 Spring Boot에서는 일반적으로 @ControllerAdvice와 @ExceptionHandler를 사용하여 전역 에러 핸들링을 수행한다. 그러나 이러한 방식은 상세한 로깅에 한계가 있을 수 있다. 이 글을 작성하게 된 계기는 많은 개발자들이 로깅을 어떻게 효율적으로 할 수 있을지, 그리고 예외 상황에서 어떻게 로깅을 해야 할지에 대한 고민을 하고 있기 때문이다. 다니선 회사의 동료 또한 이에 대한 궁금증을 가졌기에 이 글을 통해 그러한 고민을 조금이라도 해결할 수 있으면 좋겠다. 1. 문제 상황 파악 @ExceptionHandler가 명시된 메서드에서는 지정된 Exception 객체만을 받을 수 있기 때문에, 에러..
[Spring] Data JPA의 구조를 알아보자
·
Spring/JPA
스프링 Data JPA의 구조를 알아보자 📌 서론 JPA를 사용하다보니 대체 어떻게 나는 내 Repository를 생성하고 JpaRepository를 상속받기만 해서 JPA의 기능을 사용할 수 있는 것인지 궁금해졌고 이에 Diagram부터 파고들어 분석을 하기 시작했다. 1. JpaRepository와 상속 관계 Repository 마커 인터페이스로서, 실제 구현이 없다. CrudRepository CRUD(Create, Read, Update, Delete) 기능을 제공한다. PagingAndSortingRepository, ListPagingAndSortingRepository 페이징 및 정렬 기능을 추가로 제공한다. ListCrudRepository List 컬렉션에 특화된 CRUD 및 페이징/정렬..
Spring Boot: @ControllerAdvice/@RestControllerAdvice로 예외처리하기
·
Spring/Spring 기초 지식
@ControllerAdvice와 @RestControllerAdvice에 대해 자세히 알아보자 📌 서론 프로그래밍에서 예외 처리는 매우 중요한 부분이며, Spring Boot에서는 @ControllerAdvice와 @RestControllerAdvice를 통해 이를 효율적으로 수행할 수 있다. 이 어노테이션들은 코드의 재사용성과 유지 보수성을 높여, 복잡한 비즈니스 로직에서도 예외 상황을 안정적으로 관리할 수 있게 해준다. 1. @ControllerAdvice이해 @ControllerAdvice란? @ControllerAdvice는 Spring 3.2에서 도입된 어노테이션으로, 모든 @Controller 클래스가 공유하는 공통 로직을 정의할 때 사용한다. 주로 예외 처리와 바인딩 설정, 모델 객체 등에..
Spring Security6 - Authentication(인증)
·
Spring/Spring Security
1. 인증 관련 주요 클래스와 인터페이스 및 동작원리 Authentication: 인증 요청과 인증된 주체를 나타내는 인터페이스이다. AuthenticationManager: 실제로 인증을 처리하는 인터페이스이다. UserDetailsService: 사용자의 세부 정보를 로드하는 방법을 정의한다. PasswordEncoder: 비밀번호의 암호화 또는 해싱을 처리한다. Spring Security 6의 주요 인증 방식(Basic Authentication, Form-Based Authentication, OAuth2, JWT)은 모두 AuthenticationManager를 사용한다. AuthenticationManager는 UserDetailsService를 호출하여 사용자 정보를 로드하고, Authen..
Spring Security와 CORS: 크로스 도메인 요청 처리 기법 알아보기
·
Spring/Spring Security
웹 애플리케이션을 개발하면서 보안과 리소스 공유는 중요한 고려사항이다. 이번에는 Spring Security와 CORS(Cross-Origin Resource Sharing)에 대해서 자세히 알아보자 1. 크로스 도메인(Cross-Domain) 이해하기 1-1. 크로스 도메인 정의: 크로스 도메인은 한 도메인에서 실행되는 웹 페이지가 다른 도메인의 리소스에 접근할 때 발생하는 상황을 의미한다. 예시: http://domain-a.com에서 로딩된 웹 페이지가 http://domain-b.com의 이미지나 API에 접근하는 것이다. domain-a.com: 여기서 로딩된 웹 페이지가 다른 도메인의 리소스에 접근하려고 한다. domain-b.com: 이 도메인은 이미지나 API와 같은 리소스를 제공한다. A..