TiL
-
WebSecurityConfig`WebSecurityConfig` 클래스는 Spring Boot 애플리케이션이 시작될 때 작동됩니다. 이 클래스는 Spring Security의 보안 설정을 정의하고, 애플리케이션 컨텍스트에 설정을 등록하는 역할을 합니다. Spring Boot는 애플리케이션 시작 시 모든 `@Configuration` 클래스와 `@Bean` 메서드를 검색하고 초기화하므로,`WebSecurityConfig`도 이 과정에서 함께 초기화됩니다. 1. 애플리케이션 시작Spring Boot 애플리케이션이 시작되면, Spring 프레임워크는 애플리케이션 컨텍스트를 초기화합니다.이 과정에서 애플리케이션의 모든 구성 요소가 스캔되고, 필요한 빈들이 생성 및 초기화됩니다.2. Configuration ..
[TIL] 230607 <Spring> WebSecurityConfig, JwtAuthorizationFilter, JwtAuthenticationFilter, JwtUtil, UserDetailsServiceImplWebSecurityConfig`WebSecurityConfig` 클래스는 Spring Boot 애플리케이션이 시작될 때 작동됩니다. 이 클래스는 Spring Security의 보안 설정을 정의하고, 애플리케이션 컨텍스트에 설정을 등록하는 역할을 합니다. Spring Boot는 애플리케이션 시작 시 모든 `@Configuration` 클래스와 `@Bean` 메서드를 검색하고 초기화하므로,`WebSecurityConfig`도 이 과정에서 함께 초기화됩니다. 1. 애플리케이션 시작Spring Boot 애플리케이션이 시작되면, Spring 프레임워크는 애플리케이션 컨텍스트를 초기화합니다.이 과정에서 애플리케이션의 모든 구성 요소가 스캔되고, 필요한 빈들이 생성 및 초기화됩니다.2. Configuration ..
2024.06.07 -
@EnableJpaAuditing 어노테이션 역할 및 사용법@EnableJpaAuditing 어노테이션은 Spring Data JPA에서 엔티티의 생성 및 수정 날짜를 자동으로 관리하는 기능을 활성화하는 데 사용됩니다. 주요 기능생성 날짜 및 수정 날짜 자동 저장: 엔티티가 생성되거나 업데이트될 때마다 자동으로 created_at 및 updated_at 필드에 현재 날짜와 시간을 저장합니다.감사 정보 추가: 엔티티 생성자 및 수정자 정보를 추가적으로 저장할 수 있도록 CreatedBy 및 LastModifiedBy 어노테이션을 제공합니다.커스터마이징 가능: AuditorAware 인터페이스를 구현하여 생성자 및 수정자 정보 추출 방식을 자유롭게 정의할 수 있습니다. 사용 방법1. Spring Data J..
[TIL] 230605 <Spring> @EnableJpaAuditing, @EnableScheduling, @Scheduled, Refresh Token 자동 관리 및 Spring Security@EnableJpaAuditing 어노테이션 역할 및 사용법@EnableJpaAuditing 어노테이션은 Spring Data JPA에서 엔티티의 생성 및 수정 날짜를 자동으로 관리하는 기능을 활성화하는 데 사용됩니다. 주요 기능생성 날짜 및 수정 날짜 자동 저장: 엔티티가 생성되거나 업데이트될 때마다 자동으로 created_at 및 updated_at 필드에 현재 날짜와 시간을 저장합니다.감사 정보 추가: 엔티티 생성자 및 수정자 정보를 추가적으로 저장할 수 있도록 CreatedBy 및 LastModifiedBy 어노테이션을 제공합니다.커스터마이징 가능: AuditorAware 인터페이스를 구현하여 생성자 및 수정자 정보 추출 방식을 자유롭게 정의할 수 있습니다. 사용 방법1. Spring Data J..
2024.06.05 -
[Spring Security]인증과 접근 제어를 위해 세부적인 맞춤 구성이 가능한 강력한 프레임워크 → 스프링 애플리케이션에 보안을 적용하는 과정을 크게 간소화하는 프레임워크 Spring Security의 인증 프로세스각 구성 요소는 인터페이스로 이루어져있음→ 시큐리티의 기본 기능은 내부적으로 인터페이스를 구현한 각 구현체 클래스에 이미 구현되어 있다!따라서 우리는 모든 것을 구현하지 않아도 되며, 필요한 구성 요소만 재정의하고 구현(맞춤 구성)하면 됨! UserDetailsService (사용자 관리)AuthenticationProvider가 UserDetailsService에 사용자 관리에 대한 책임을 위임> 관련 인터페이스UserDetailsService: 인증을 위해 사용자를 찾음UserDe..
[TIL] 230604 <Spring> Spring Security 동작원리[Spring Security]인증과 접근 제어를 위해 세부적인 맞춤 구성이 가능한 강력한 프레임워크 → 스프링 애플리케이션에 보안을 적용하는 과정을 크게 간소화하는 프레임워크 Spring Security의 인증 프로세스각 구성 요소는 인터페이스로 이루어져있음→ 시큐리티의 기본 기능은 내부적으로 인터페이스를 구현한 각 구현체 클래스에 이미 구현되어 있다!따라서 우리는 모든 것을 구현하지 않아도 되며, 필요한 구성 요소만 재정의하고 구현(맞춤 구성)하면 됨! UserDetailsService (사용자 관리)AuthenticationProvider가 UserDetailsService에 사용자 관리에 대한 책임을 위임> 관련 인터페이스UserDetailsService: 인증을 위해 사용자를 찾음UserDe..
2024.06.04 -
[기존보다 Restful한 url로 수정] controller>CommentController@RestController@RequiredArgsConstructor@RequestMapping("/api")public class CommentController { private final CommentService commentService; private final JwtUtil jwtUtil; // 댓글 작성 @PostMapping("/schedule/{scheduleId}/comment") public ResponseEntity createComment(@PathVariable Long scheduleId, @Valid @RequestBody CommentRequestDto requestDto, Ht..
[TIL] 230603 <Spring> 회원가입, 로그인 기능이 있는 투두앱 백엔드 서버 만들기 (3)[기존보다 Restful한 url로 수정] controller>CommentController@RestController@RequiredArgsConstructor@RequestMapping("/api")public class CommentController { private final CommentService commentService; private final JwtUtil jwtUtil; // 댓글 작성 @PostMapping("/schedule/{scheduleId}/comment") public ResponseEntity createComment(@PathVariable Long scheduleId, @Valid @RequestBody CommentRequestDto requestDto, Ht..
2024.06.03 -
[일반적인 인증 과정] [Filter]일반적인 자바 웹 애플리케이션에서 클라이언트(사용자의 요청)는 HTTP나 HTTPS 프로토콜을 사용해서 서버의 자원에 접근하고 클라이언트(사용자) 요청은 서버의 서블릿에서 처리함서블릿은 HTTP 요청을 받아 처리한 후 HTTP 응답을 클라이언트에게 반환함일정을 등록하고 id를 반환일정을 조회해서 반환스프링은 DispatcherServlet이 서블릿 역할을 담당하고 모든 요청을 처리함요청-응답 처리과정 중, 중요한 역할을 하는 주요 컴포넌트가 "필터"임아래의 그림과 같이 서블릿 앞에 위치해 요청과 응답을 가로채서 변경가능한 개 이상의 필터는 필터 체인으로 구성 되어 있으며, 필터 체인에 속한 모든 필터는 요청/응답을 가로채서 변경가능 특징Spring에서 모든 ..
[TIL] 230531 <Spring> Filter[일반적인 인증 과정] [Filter]일반적인 자바 웹 애플리케이션에서 클라이언트(사용자의 요청)는 HTTP나 HTTPS 프로토콜을 사용해서 서버의 자원에 접근하고 클라이언트(사용자) 요청은 서버의 서블릿에서 처리함서블릿은 HTTP 요청을 받아 처리한 후 HTTP 응답을 클라이언트에게 반환함일정을 등록하고 id를 반환일정을 조회해서 반환스프링은 DispatcherServlet이 서블릿 역할을 담당하고 모든 요청을 처리함요청-응답 처리과정 중, 중요한 역할을 하는 주요 컴포넌트가 "필터"임아래의 그림과 같이 서블릿 앞에 위치해 요청과 응답을 가로채서 변경가능한 개 이상의 필터는 필터 체인으로 구성 되어 있으며, 필터 체인에 속한 모든 필터는 요청/응답을 가로채서 변경가능 특징Spring에서 모든 ..
2024.05.31 -
[Validation 어노테이션 활용하여 예외처리] build.gradle>dependencies에 아래 추가 implementation 'org.springframework.boot:spring-boot-starter-validation'dto>CommentRequestDto@Getter@NoArgsConstructor@AllArgsConstructorpublic class CommentRequestDto { @NotNull(message = "일정의 ID가 입력되지 않았습니다.") private Long scheduleId; @NotBlank(message = "댓글의 내용이 비어있습니다.") private String content; @NotBlank(message = "작성자 ID가 입력..
[TIL] 230530 <Spring> 회원가입, 로그인 기능이 있는 투두앱 백엔드 서버 만들기 (2)[Validation 어노테이션 활용하여 예외처리] build.gradle>dependencies에 아래 추가 implementation 'org.springframework.boot:spring-boot-starter-validation'dto>CommentRequestDto@Getter@NoArgsConstructor@AllArgsConstructorpublic class CommentRequestDto { @NotNull(message = "일정의 ID가 입력되지 않았습니다.") private Long scheduleId; @NotBlank(message = "댓글의 내용이 비어있습니다.") private String content; @NotBlank(message = "작성자 ID가 입력..
2024.05.30 -
[일정과 댓글의 연관 관계 설정]각 일정에 댓글을 작성할 수 있도록 관련 클래스를 추가하고 연관 관계를 설정합니다.매핑 관계를 설정합니다. (1:1 or N:1 or N:M) entity>Schedule@Entity // JPA가 관리할 수 있는 Entity 클래스 지정@Getter@Setter@Table(name = "schedule") // 매핑할 테이블의 이름을 지정@NoArgsConstructorpublic class Schedule extends Timestamped{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title", nullable = false) private Stri..
[TIL] 230529 <Spring> 회원가입, 로그인 기능이 있는 투두앱 백엔드 서버 만들기 (1)[일정과 댓글의 연관 관계 설정]각 일정에 댓글을 작성할 수 있도록 관련 클래스를 추가하고 연관 관계를 설정합니다.매핑 관계를 설정합니다. (1:1 or N:1 or N:M) entity>Schedule@Entity // JPA가 관리할 수 있는 Entity 클래스 지정@Getter@Setter@Table(name = "schedule") // 매핑할 테이블의 이름을 지정@NoArgsConstructorpublic class Schedule extends Timestamped{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title", nullable = false) private Stri..
2024.05.29 -
[회원기능 구현]myselectshopAPI 구현▼ 회원 DB에 매핑되는 @Entity 클래스 구현entity>User@Entity@Getter@Setter@NoArgsConstructor@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; @Column(nullable = false, unique = true) private String ema..
[TIL] 230528 <Spring> My Select Shop[회원기능 구현]myselectshopAPI 구현▼ 회원 DB에 매핑되는 @Entity 클래스 구현entity>User@Entity@Getter@Setter@NoArgsConstructor@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; @Column(nullable = false, unique = true) private String ema..
2024.05.28