본문 바로가기

Study/개발일지

[백엔드온라인TIL] java 학습 24일차

스프링 개념 복습 

 

Spring 

: JAVA 기반의 서버 프레임워크, Spring 기반 WEB 동작 구조는 다음과 같다.


IntelliJ

: JAVA 코딩에 특화된 IDE (현업에서 많이 쓰인다고 함👍🏻)

Project 생성 시 Dependendcies를 선택하는데, 이번 Spring boot 프로젝트에서는 다음의 것들을 선택&활용한다.

 

  • Lombok - Developer Tools, 
  • Spring Web - Web, 웹 프로젝트이기에 Spring Web을 활용
  • Spring Data JPA - SQL, SQL query 등을 짜지 않고도 Data CRUD가 가능하도록 하는 번역기 역할
  • MySQL - SQL,
  • H2 Database - SQL, Controller 테스트 등을 위해 서버가 동작 중일 때만 유효한 Database인 H2도 함께 활용

 


JPA

: JAVA 명령어로 작성한 내용이 SQL로 동작하도록 하는 번역기 역할, SQL query를 짜지 않고도 Data CRUD가 가능하다.

☑️ 참고

Table == Domain

SQL == Repository

 


Lombok

: JAVA 프로젝트에서 필요한 method/생성자 등을 자동 생성해주는 라이브러리, 코드 절약의 장점도 있다.

본 프로젝트에서는 다음의 것들을 @어노테이션 해주어 Lombok을 활용 중이다.

 

  • Getter, Setter
  • NoArgsConstructor
  • Service
  • RequiredArgsConstructor

 

☑️ 참고

IntelliJ 설정을 통해 Annotation Processing을 Enable하고, Lombok 플러그인 설치 후 활용

 


Dto

: 데이터가 Create/Update 될 때, 직접적으로 변경되지 않도록 활용하는 완충재

 

  • 생성

MemoRequestDto.java

@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

 

  • 적용

Memo.java

 public Memo(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }

    public void update(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }

 

MemoService.java

@RequiredArgsConstructor
@Service
public class MemoService {
    private final MemoRepository memoRepository;

    @Transactional
    public Long update(Long id, MemoRequestDto requestDto) {
        Memo memo1 = memoRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        memo1.update(requestDto);
        return memo1.getId();
    }
}

 

MemoController.java

@PostMapping("/api/memos")
    public Memo createMemo(@RequestBody MemoRequestDto requestDto) {
        Memo memo = new Memo(requestDto);
        return memoRepository.save(memo);
    }

@PutMapping("/api/memos/{id}")
    public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
        memoService.update(id, requestDto);
        return id;
    }

Filter 란?

 

사실 필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능입니다. 스프링 프레임워크에서 필터로 인증 등 다양한 작업을 하는 데 사용하니 스프링 프레임워크에서의 필터에 대해 기록 해 보고자 합니다.

 

(출처:https://justforchangesake.wordpress.com/2014/05/07/spring-mvc-request-life-cycle/)

아마 스프링 필터와 연관지어 검색을 하면 많이 보는 그림 중 하나 일 것입니다.

 

위 그림은 스프링 프레임워크에서 요청에 대한 라이프 사이클을 나타낸 그림입니다.

 

스프링 프레임워크는 들어온 요청이 DispatcherServlet에 의해 컨트롤러에 매핑됩니다.

 

Filter는 요청이 DispatcherServlet에 의해 다뤄지기 전, 후에 동작합니다.

 

또한 Filter는 FilterChain(필터 체인)을 통해 여러 필터가 연쇄적으로 동작하게 할 수 있습니다.

 

Filter는 어디에 쓰이나?

필터는 주로 요청에 대한 인증, 권한 체크 등을 하는데에 쓰입니다. 구체적으로 들어온 요청이 DispatcherServlet에 전달되기 전에 헤더를 검사해 인증 토큰이 있는지 없는지, 올바른지 올바르지 않은지 등을 검사할 수 있을 것입니다.

728x90