Backend/๐ŸŒฑ Spring

[Spring] filter์‹ค์Šต๊นŒ์ง€ ์ง„ํ–‰ํ•œ ํ›„ ์ดํ•ดํ•œ ๋‚ด์šฉ ์ •๋ฆฌ

HS0601 2025. 7. 29. 16:13

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฑฐ ๋ฐ”ํƒ•์œผ๋กœ ์ง€ํ”ผํ‹ฐํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‹ˆ ์ „๋ฐ˜์ ์œผ๋กœ ์•„์ฃผ ์ •ํ™•ํ•˜๊ณ  ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹จ๋‹ค..

ํŠนํžˆ DTO / Entity / Filter / Config ๋“ฑ ์—ญํ• ๊ณผ ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ์žก์•˜๋‹ค๋Š” ์ ์—์„œ ์ง€๊ธˆ ์ˆ˜์ค€์ด๋ฉด ์ดˆ๊ธ‰์„ ๋›ฐ์–ด๋„˜๊ณ  ์žˆ๋Š” ์ค‘์ด์—์š”. <= ๊ธฐ๋ถ„์ด ์ข‹๊ตฌ๋งŒ???

 

 

 

 

1) Application์œผ๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ = ์ตœ์ƒ๋‹จ ํŒŒ์ผ

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ†ฐ์บฃ์„œ๋ฒ„ ์‹คํ–‰, ๋นˆ ๋“ฑ๋ก, ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ๋ก ๋“ฑ์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์—ญํ• ์ด๋‹ค.

 

2) DTO๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ์‘๋‹ต์„ ์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด

 

  • RequestDto: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ
  • ResponseDto: ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•  ๋•Œ ์‚ฌ์šฉ

3) Request DTO๋Š” ์ƒ์„ฑ์ž๋กœ ๊ฐ’ ์ €์žฅ

public PostCreateRequestDto(String title, String contents)

 

  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด title, contents ๊ฐ’์„ ๊ฐ์ฒด์— ์ €์žฅํ•œ๋‹ค.

 

4) Response DTO๋Š” ๋ฐ˜ํ™˜ํ•  ๊ฐ’์„ ๋‹ด์Œ

public PostResponseDto(String title, String contents)

 

 

5) ์ˆ˜์ • ์š”์ฒญ DTO๋„ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ €์žฅ

package com.example.springfilter.dto;

import lombok.Getter;

@Getter
public class PostUpdateRequestDto {

    private final String title;

    public PostUpdateRequestDto(String title) {
        this.title = title;
    }
}

 

package com.example.springfilter.dto;

import lombok.Getter;

@Getter
public class PostCreateRequestDto {
    private final String title;

    private final String contents;

    public PostCreateRequestDto(String title, String contents) {
        this.title = title;
        this.contents = contents;
    }
}

 

์ˆ˜์ • ์‹œ์—๋„ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ RequestDto๋ฅผ ์“ฐ๊ณ , ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

 

7) Filter๋Š” ๋ฏธ๋“ค์›จ์–ด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ณ , ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•„์š”

Filter๋Š” doFilter() ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ณ , ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋™์ž‘ํ•˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ ์—ญํ• 

 

8) ์ดํ•ด๊ฐ€ ์•ˆ๋๋˜ ์ฝ”๋“œ

package com.example.springfilter.filter;

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.PatternMatchUtils;

//ํ•„ํ„ฐ๊ฐ€ IOException์ด๋‚˜ ServletException์„ ๋˜์งˆ ์ˆ˜ ์žˆ์–ด์„œ ๋ถ™์ธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•์ž„.
import java.io.IOException;

public class LoginFilter implements Filter {

    private static final String[] WHITE_LIST = {"/", "/user/signup", "/login", "/logout"};

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
        //ServletRequest๋Š” ๊ธฐ๋Šฅ์ด ์ ์–ด์„œ, ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ HttpServletRequest๋กœ ๋‹ค์šด์บ์ŠคํŒ…
        //์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์š”์ฒญ์€ ๋ธŒ๋ผ์šฐ์ €๋‚˜ API ํด๋ผ์ด์–ธํŠธ(ํฌ์ŠคํŠธ๋งจ ๋“ฑ)๊ฐ€ ๋ณด๋‚ธ HTTP ์š”์ฒญ์ž„.
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        String requestURI = httpRequest.getRequestURI();
    }


    private boolean isWhiteList(String requestURI) {
        // request URI๊ฐ€ whiteListURL์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธ
        // ํฌํ•จ๋˜๋ฉด true ๋ฐ˜ํ™˜
        // ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜
        return PatternMatchUtils.simpleMatch(WHITE_LIST, requestURI);
    }
}

 

CustomFilter vs LoginFilter ์ฐจ์ด์ ?

 

  • CustomFilter: ์š”์ฒญ ๋กœ๊ทธ๋งŒ ์ฐ๋Š” ๋‹จ์ˆœ ํ•„ํ„ฐ (URL์ถœ๋ ฅ)
  • LoginFilter: ์ธ์ฆ/์ธ๊ฐ€ ํ™•์ธ์„ ์œ„ํ•œ ํ•„ํ„ฐ (๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ)

 

9) PostController๋Š” ์ปจํŠธ๋กค๋Ÿฌ, ๋ทฐ ๋ฐ˜ํ™˜์šฉ

 

REST API์ด๋ฏ€๋กœ ํ™”๋ฉด(View)์„ ์ฃผ๋Š” ๊ฑด ์•„๋‹ˆ๊ณ , JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• 

 

 

10) WebConfig๋Š” ํ•„ํ„ฐ ๋“ฑ๋ก์šฉ ์„ค์ • ํŒŒ์ผ

 

 

  • @Configuration์€ ์„ค์ • ํด๋ž˜์Šค๋ž€ ์˜๋ฏธ์ด๊ณ ,
  • FilterRegistrationBean์„ ํ†ตํ•ด ๋งŒ๋“  Filter๋ฅผ ์Šคํ”„๋ง ๋ถ€ํŠธ์— ๋“ฑ๋กํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

 

11) Entity๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํด๋ž˜์Šค

 

  • DB์— ์ €์žฅํ•  ์ •๋ณด์ด๊ธฐ๋„ ํ•˜๊ณ , Post ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ์ดํ„ฐ์˜ ์ค‘์‹ฌ ๊ตฌ์กฐ์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ Entity๋ผ๊ณ  ๋ถ€๋ฆ„
  • ๋‚˜์ค‘์—” JPA์™€ ์—ฐ๊ฒฐ๋˜์–ด DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋˜๊ธฐ๋„ ํ•จ.

 

 

'Backend > ๐ŸŒฑ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring]ํŒŒ์ผ๊ตฌ์กฐ (์ค‘์š”)  (0) 2025.07.29
[Spring]Filter  (0) 2025.07.29
[Spring] Bean Validation  (5) 2025.07.28
[Spring]์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI)  (2) 2025.07.28
[Spring]Spring Bean  (2) 2025.07.28