[새싹 x 코딩온] 웹 풀스택 영등포 5기 21주차 회고 - 2

용가리🐉·2023년 12월 20일
0
post-thumbnail

📌 스프링 프레임워크

  • 프로젝트 규모가 커질수록 의존성 주입을 관리하기 어려움 → 의존성 주입을 담당하는 컨테이너 필요!
  • 스프링 IoC 컨테이너
    • 스프링 프레임워크에서 의존성 주입을 담당하는 컨테이너
    • 객체 생성 시, 주입해야 하는 객체를 자동으로 주입해줌 (단, Bean으로 등록된 객체여야 함!)
  • Bean
    • 스프링 컨테이너가 관리하는 객체
    • 스프링 컨테이너를 Bean Factory라고 함

📌 Bean

Spring IoC 컨테이너가 관리하는 Java 객체

  • Spring에서는 new를 이용해 만들어진 객체가 아니라 Spring에서 관리하는 Bean이라는 객체를 이용함
  • 의존성 관리에 용이함
  • 똑같은 객체가 여러 번 만들어지는 것이 아니라 하나를 만들면 그것을 재사용함 → 메모리 절약

📣 등록 방법

  • @Component
    • 스프링이 해당 클래스를 자바 빈으로 등록하도록 함
  • 자바 설정 클래스를 직접 만들기
    • 설정 클래스를 만들고 @Configuration 이용
    • 해당 클래스 안의 메소드에 @Bean 이용

→ Bean으로 등록된 것들을 의존성 주입받아 사용하는 방법 : @Autowired

📌 Annotation

  • Annotation(@)은 사전적 의미로 주석
  • Java에서 @는 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하게 해줌
  • 프로그램에서 추가적인 정보를 제공해주는 메타데이터

📣 장점과 사용법

  • 장점
    • 코드량 감소
    • 유지보수 쉬움
    • 생산성 증가
  • 사용 순서
    • @ 를 정의함
    • 클래스에서 @를 배치함
    • 코드가 실행되는 중 추가 정보를 획득해 기능을 실시함

📣 @Bean

  • 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 등록하고자 할 때 사용되는 Annotation
@Configuration
public class ApplicationConfig {
	@Bean
    public ArrayList<String> array1() {
    	return new ArrayList<String>();
    }
    @Bean(name="myarray")
    public List<String> array2() {
    	return new List<String>();
    }
}

📣 @Component

  • 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotaion
  • 즉, 간단하게 Bean을 등록하기 위해 사용되는 Annotation
@Component
public class Student {
	public Student() {
    	System.out.println("hi");
    }
}

📣 @SpringBootApplication

  • @Configuration, @EnableAutoConfiguration, @ComponentScan 3가지가 합쳐진 Annotation
  • Spring Boot 어플리케이션 실행 초기 진입점에 위치하는 어노테이션
  • 해당 어노테이션이 달린 클래스가 있는 패키지를 베이스 패키지로 간주
@SpringBootApplication
public class SesacSpringBootApplication {
	public static void main(String[] args) {
    	SpringApplication.run(SesacSpringBootApplication.class, args);
    }
}

📣 @Autowired

  • 스프링 컨테이너에 등록한 등록한 Bean에게 의존 관계 주입이 필요할 때, DI(의존성 주입)을 가능하게 하는 어노테이션
  • 즉, @Autowired를 사용한 클래스에서 적용된 클래스를 사용할 수 있게 해줌

📌 Spring Security

📣 인증(Authentication) vs. 인가(Authorization)

  • 인증(Authentication)
    • 사용자의 신원 입증
    • ex. 특정 사이트에 로그인 시 누구인지 확인하는 절차를 거침
  • 인가(Authorization)
    • 인증된 사용자가 요청된 자원에 접근 가능한지 권한 확인
    • ex. 일반 유저는 관리자 페이지에 접속할 수 없음

📣 Spring Security

스프링 기반의 애플리케이션 보안(인증, 인가)을 담당하는 스프링 하위 프레임워크

  • 프레임워크의 일종으로 반드시 필요한 것은 아님
    • 보안 로직을 직접 개발해야 함
  • 다양한 보안 관련 옵션 제공
  • Filter를 기반으로 동작
  • Bean으로 설정 가능

Spring MVC
이전에 Spring MVC에 대해 설명한 기록

  • MVC 패턴을 지원하고 DispatcherServlet이라는 특수 서블릿을 통해 요청 처리
    • 해당 서블릿은 모든 종류의 요청을 받아 적절한 Controller에게 전달하고, 그 결과를 다시 사용자에게 반환
  • 즉, HTTP 요청이 Dispatcher Servlet을 거쳐 Controller로 전달됨

📣 Spring Security 동작 과정

  • Spring Security는 요청이 Dispatcher Servlet으로 가기 전에 Filter 단에서 인증/인가 처리를 진행

📣 Spring Security Architecture

  • 아이디, 비밀번호 기반 폼 로그인 시도 시, Spring Security의 인증 처리 로직
  1. HTTP Request 수신
    • 사용자의 로그인 정보(id, pw)를 입력하면, HTTPServletRequest에 id, pw가 전달됨
    • AuthenticationFilter가 넘어온 아이디와 비밀번호 유효성 검사 진행
  2. 유효성 검사가 끝나면 인증용 객체인 UsernamePasswordAuthenticationToken을 생성
  3. UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보냄
  4. UsernamePasswordAuthenticationToken을 AuthenticationProvider에 보냄
  5. 사용자 아이디를 UserDetailService에 보냄
  6. DB에 있는 사용자 정보를 가져와 찾아낸 사용자 정보를 UserDetails 객체로 만듦
  7. 입력된 사용자 정보와 UserDetails 정보를 비교해 실제 인증 처리
  8. 인증 완료 여부
    • 인증 완료: 사용자 정보를 담은 Authentication 객체 반환
    • 인증 실패: AuthenticationException 발생
  9. Authentication 객체가 SecurityContextHolder에 저장됨

📣 Spring Security 사용하기

  • build.gradle에 dependencies 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
  • 참고. Thymeleaf에서 Spring Security를 사용한다면?
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
profile
자아를 찾아 떠나는 중,,,

0개의 댓글

관련 채용 정보