전체 글 171

Transaction Propagation

Transaction Propagation은 한 트랜잭션이 동작하고 있을 때, 다른 트랜잭션이 동작하는 경우 어떻게 전파될지를 결정하는 속성입니다. Spring Framework에서 @Transaction 애노테이션을 사용하여 트랜잭션을 선언할 때 설정할 수 있으며, 트랜잭션 경계 설정과 실행 컨텍스트 관리를 유연하게 합니다.   Transaction Propagation의 주요 사용 시점복잡한 비즈니스 로직 분리:하나의 서비스 계층에서 여러 하위 서비스 계층을 호출할 때 각 계층의 트랜잭션 범위를 다르게 설정해야 하는 경우.재사용성 향상:공통 메서드를 다른 서비스에서 재사용하지만, 트랜잭션 전파 방식을 상황에 따라 다르게 적용해야 할 때.롤백 처리 제어:특정 하위 작업은 상위 트랜잭션과 독립적으로 처리..

33. RestTemplate이란 무엇일까?

서비스 개발을 진행하다보면 라이브러리 사용만으로는 구현이 힘든 기능들이 무수히 많이 존재합니다.예를 들어 우리의 서비스에서 회원가입을 진행할 때 사용자의 주소를 받아야 한다면?>> 주소를 검색할 수 있는 기능을 구현해야하는데 직접 구현을 하게되면 많은 시간과 비용이 들어갑니다.이때 카카오에서 만든 주소 검색 API를 사용한다면 해당 기능을 간편하게 구현할 수 있습니다.  우리의 서버는 Client의 입장이 되어 Kakao 서버에 요청을 진행해야합니다.Spring에서는 서버에서 다른 서버로 간편하게 요청할 수 있도록 RestTemplate 기능을 제공하고 있습니다.   Get 요청 방법  - Client 입장의 서버 - RestTemplate을 주입 받습니다.요청 받은 검색어를 Query String 방식..

[개인과제] 플러스 과제 - 회고

필수 5 :  날씨 조건과 기간 조건이 동시에 적용되는 건 고려하지 않았습니다. 프론트에서 날씨 조건과 기간 조건, 둘 중 하나만 들어오게 만들 수 있나요?더불어 날씨 조건과 기간 조건이 동시에 들어온 경우에 대한 로직 처리 없습니다. 문제가 될까요? 제가 바꾼 코드가 좋은 코드인지 모르겠습니다.도전 10 : TodoRepositoryQueryImpl.java 에서 제가 작성할 수 있는 부분까지 해놓고, 빨간 줄 에러가 나오길래 gpt 도움 받아서 해결했습니다. 아래 주소는 제가 정리한 Projections 방식입니다. https://tes1194.tistory.com/164 QueryDsl - Projections 의 4가지 방식QueryDsl - Projections QueryDsl 을 사용해서 엔티..

기타 2024.11.21

QueryDsl - Projections 의 4가지 방식

QueryDsl - Projections QueryDsl 을 사용해서 엔티티 전체를 조회하는 것이 아니라 특정 대상만 조회하는 것을 말합니다.  @Entity@Table(name = "team")@Getter@NoArgsConstructorpublic class Team extends Timestamped { @Id private Long id; private String name; private Integer trophyCount;}@Entity@Table(name = "member")@Getter@NoArgsConstructorpublic class Member extends Timestamped { @Id private Long id; private String..

31. Spring Security: JWT 로그인

이전 '24. Spring Security 로그인'에서는 인증이 완료된 클라이언트에게 세션 쿠키를 발급합니다. 이번에는 인증이 완료된 클라이언트에게 JWT를 발급하도록 하겠습니다.   1. JwtAuthenticationFilter : 로그인 진행 및 JWT 생성package com.sparta.springauth.jwt;import com.fasterxml.jackson.databind.ObjectMapper;import com.sparta.springauth.dto.LoginRequestDto;import com.sparta.springauth.entity.UserRoleEnum;import com.sparta.springauth.security.UserDetailsImpl;import jakarta..

30. Spring Security 로그인

Spring Security를 사용한다면 Client 의 요청은 모두 Spring Security 를 거치게 됩니다.Spring Security 역할인증/인가성공 시: Controller 로 Client 요청 전달Client 요청 + 사용자 정보 (UserDetails)실패 시: Controller 로 Client 요청 전달되지 않음Client 에게 Error Response 보냄   Client로그인 시도로그인 시도할 username, password 정보를 HTTP body 로 전달 (POST 요청)로그인 시도 URL 은 WebSecurityConfig 클래스에서 변경 가능아래와 같이 설정 시 "POST /api/user/login" 로 설정됩니다. 인증 관리자 (Authentication Manag..

29. Spring Security 프레임워크

'Spring Security' 프레임워크는 Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어 줍니다. 마치 'Spring' 프레임워크가 웹 서버 구현에 편의를 제공해 주는 것과 같습니다.  Spring Security 사용을 위해 의존성 추가를 해줍니다.// Securityimplementation 'org.springframework.boot:spring-boot-starter-security'  Spring Security  설정// Bean 수동 등록@Configuration@EnableWebSecurity // Spring Security 지원을 가능하게 함public class WebSecurityConfig { @Bean // 아래 메서드를..

카테고리 없음 2024.11.18

28. 필터란 무엇일까?

Filter: Web 애플리케이션에서 관리되는 영역으로 요청과 응답에 대해 최초/최종 단계의 위치하며 이를 통해 요청과 응답의 정보를 변경하는 등 부가적인 기능을 추가할 수 있습니다.주로 범용적으로 처리해야 하는 작업들, 예를들어 로깅 및 보안 처리에 활용합니다.인증, 인가와 관련된 로직들을 처리할 수도 있습니다.Filter를 사용하면 필터 내 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있습니다.  Filter는 한 개만 존재하는 것이 아니라 여러 개가 Chain 형식으로 묶여서 처리되고 있습니다.  Request URL Logging 필터import java.io.IOException;@Slf4j(topic = "LoggingFilter")@Component@Order(1)public c..

27. JWT 다루기

JWT란 무엇일까?JWT(Json Web Token): JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 입니다. 즉, 토큰의 한 종류라고 생각하시면 됩니다. 일반적으로 쿠키 저장소를 사용하여 JWT를 저장합니다.  JWT 장/단점장점동시 접속자가 많을 때 서버 측 부하 낮춤Client, Sever 가 다른 도메인을 사용할 때예) 카카오 OAuth2 로그인 시 JWT Token 사용단점구현의 복잡도 증가JWT에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버)기 생성된 JWT 를 일부만 만료시킬 방법이 없음SecretKey 유출 시 JWT 조작 가능  JWT 사용 흐름Client 가 username, password 로 로그인 성공 시서버에서 "로..

Spring Security 적용

스프링 시큐리티를 적용하면서 크게 6개의 클래스를 사용했습니다. WebSecurityConfigUserDetailsImplUserDetailsServiceImplJwtUtilJwtAuthenticationFilterJwtAuthorizationFilter 코드를 올리고, 해당 클래스가 어떤 역할을 맡았는지 이야기해보겠습니다. 코드를 읽으며 아래 설명을 차례대로 보시면 이해하기 편하실 겁니다.  - WebSecurityConfig@Configuration@EnableWebSecurity@RequiredArgsConstructorpublic class WebSecurityConfig { private final JwtUtil jwtUtil; private final UserDetailsServic..