Spring 72

JPA 레벨 vs 데이터베이스 레벨 (feat.성능)

JPA는 엔터티를 객체로 다룬다는 장점이 있지만 일부 작업에서 데이터베이스와 직접 상호작용하는 방식에 비해 성능이 떨어질 수 있습니다. 그 이유는 JPA가 데이터베이스 작업을 처리할 때 엔터티 매핑과 관리라는 추가 작업을 수행하기 때문입니다. 주요 차이점JPA 레벨엔터티를 메모리로 가져온 뒤, 각 엔터티에 대해 작업을 수행합니다.데이터베이스와의 작업이 세부적으로 나뉘어질 수 있으며, 네트워크와 메모리 사용량이 증가합니다.특징: 개별적인 SELECT, UPDATE, DELETE 쿼리가 여러 번 실행됩니다.데이터베이스 레벨조건에 따라 데이터베이스가 직접 데이터를 조회하거나 삭제하는 작업을 수행합니다.작업이 데이터베이스 내에서 한 번에 처리되므로 성능이 최적화됩니다.특징: 단일 쿼리로 작업을 수행합니다.   ..

ArgumentResolver - HandlerMethodArgumentResolver 란 무엇일까?

HandlerMethodArgumentResolver :Strategy interface for resolving method parameters into argument values in the context of a given request.  메소드 매개변수를 확인하고, 이를 HTTP 요청을 바탕으로 인수 값 (argument value) 으로 변환하는 역할을 합니다. 즉 어떻게 '메서드 파라미터'를 적합한 '인수 값'으로 변환할지"를 결정하는 인터페이스입니다. 우리는 구현체를 만들어 사용하면 되겠습니다.  메서드 매개변수와 인수값이 무엇을 의미하는 걸까요 ?@GetMapping("/profile")public ResponseEntity getProfile(VerifiedMember verified..

@Scheduler 사용해보기(주기 마다 메서드 실행)

SpringBoot 에서 @Scheduler 에노테이션을 사용하면 주기마다 특정 메서드를 호출할 수 있습니다.    1. @EnableScheduling 에노테이션 추가하기@EnableScheduling@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} 보통 @SpringBootApplication이 포함된 클래스에 추가합니다.   2. Bean 으로 등록된 클래스의 메서드에 @Scheduled 추가하기@Scheduled(fixedDelay = 1000L)public void sche..

Pageable 과 PagedModel

Pageable: Spring Data JPA 에서 제공하는 인터페이스로 페이징 및 정렬 정보를 전달하는데 사용됩니다. Pageable 객체는 @RequestParam을 자동으로 매핑해줍니다.  주요 특징페이지 번호(page): 0부터 시작하는 현재 페이지 번호페이지 크기(size): 한 페이지에 포함될 항목의 수정렬 기준(sort): 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬 일반적으로 @PagaableDefault 또는 클라이언트에서 전달된 page, size, sort 파라미터를 통해 Pageable 객체가 생성됩니다. @GetMapping("/trades")public ResponseEntity> getTrades( @PageableDefault(size = 10, sort = "..

51. Spring의 properties 파일을 이용한 에러 메시지 관리

Spring의 properties 파일을 이용한 에러 메시지 관리Spring에서는 properties 파일을 이용하여 에러 메시지를 관리할 수 있습니다.에러 메시지는 properties 파일에서 key-value 형태로 작성되며, 작성된 값은 messageSource 를 Bean으로 등록하여 사용할 수 있습니다.  resources/messages.properties.filebelow.min.my.price=최저 희망가는 최소 {0}원 이상으로 설정해 주세요.not.found.product=해당 상품이 존재하지 않습니다.  private final MessageSource messageSource;...@Transactionalpublic ProductResponseDto updateProduct(Lon..

50. ExceptionHandler, Spring의 Global 예외처리

에러라는 관심사를 분리해서 더 효율적으로 처리 할 수 있지 않을까 -> ExceptionHandler !!      서버가 응답을 보낼 때 start-line에 있는 응답 코드를 보겠습니다. 응답 헤더에는 API 요청에 대한 상태코드를 함께 보냅니다. 관련 포스팅 : ResponseEntity란 무엇일까 - https://tes1194.tistory.com/98HTTP란 무엇일까? - https://tes1194.tistory.com/86    @RestController@RequestMapping("/api")@RequiredArgsConstructorpublic class FolderController { private final FolderService folderService; @Pos..

49. Spring AOP

@Aspect: AOP 기능을 사용할 것임을 알리기Spring 빈(Bean) 클래스에만 적용 가능합니다.어드바이스: 기능의 어느 지점에 동작할지 알리기@Around: '핵심기능' 수행 전과 후 (@Before + @After)@Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)@After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)@AfterReturning: '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)@AfterThrowing: '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS..

48. OAuth로 카카오 로그인 및 회원 가입

카카오 사용자 정보로 회원가입 구현하기 위해선 먼저 카카오로부터 사용자 정보를 받아와야 합니다.   카카오에서 제공하는 REST API 사용법Step 1. html에서 인가코드 요청하기  2. Controller카카오에서 보내주는 '인가 코드' 처리하여 토큰 생성하고 반환하기@GetMapping("/user/kakao/callback")public String kakaoLogin(@RequestParam String code, HttpServletResponse response) throws JsonProcessingException { String token = kakaoService.kakaoLogin(code); Cookie cookie = new Cookie(JwtUtil.AUTHORI..

47. 소셜 로그인 - OAuth

소셜 로그인 탄생 배경매번 번거로운 회원가입 과정을 수행해야 할 뿐 아니라, 웹 사이트마다 다른 아이디와 비밀번호를 기억해야 합니다.이런 문제를 해결하기 위해 OAuth 를 사용한 소셜 로그인이 등장합니다.웹 사이트를 운영하는 측에서도 회원들의 개인정보를 지켜야하는 역할이 부담이 됩니다. 바이러스와 백신의 관계 처럼, 발전하는 해킹 기술을 막기 위해 보안을 강화하는 노력이 지속적으로 필요하기 때문이죠.   OAuthOAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고, 웹사이트 상의 자신들의 정보에 대해 다른 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 권한 위임을 위한 개방형 표준입니다.사용자가 자신이 이용하려는 애플리케이션에게 모든 권한을 넘기지 않고, ..