웹페이에서 회원가입이나 글작성 등 post 요청을 한 페이지의 결과창에서 새로 고침을 했을경우 

중복되어 가입되거나 글이 여러개 올라가는등  동일한 작업 및 요청이 계속 되는 경우는 패턴이 안지켜졌을 가능성이 높다.

 

위의 방법을 해결 방법을 해결 하기 위해선 redirect 을 활용하는것이 좋다.

//적용 전 예시 
@PostMapping("/add")
public String addMember(Member member) {
memberRepository.save(member);
return "redirect:/member/";
}

//적용 후 예시
@PostMapping("/add")
public String addMember(Member member) {
memberRepository.save(member);
return "redirect:/member/" + member.getId();
}

리다이렉트의 영향으로 리다이렉트의 주소로 지정 되기때문에 새로 고침하여도 중복 요청이 처리 되지 않게 될 수 있다.

이런 방식을 PRG 패턴이라고 한다.

'Spring Framework' 카테고리의 다른 글

@Configuration  (0) 2023.09.08
spring  (0) 2023.08.31
의존성 주입(DI)  (0) 2023.08.21
@RequestBody, @ResponseBody  (0) 2023.08.21
Spring Boot 설정하기(on site)  (0) 2022.09.23

서블릿이나 JSP 에서 역할을 분리 하여 컨트롤러의 역할과 뷰의 역활을 명확하게 구분이 가능 

Model : 뷰에 출력할 데이터를 담아 두는 곳

View  : 출력할 화면

Contoller : HTTP 요청 처리, 비니지스 로직 실행, 데이터를 모델에 저장 (컨트롤러와 비지니스가 섞인 패턴과 로직을 분리한것 두가지가 있다)

 

/WEB-INF라는 경로를 이용하여 클라이언트가 직접 접근하지 못하는 디렉토리설정도 가능

 

컴퓨터 프로그램의 작업 처리에 동시 실행 을 처리 하기 위한 소프트웨어 설계 패턴 

 쓰레드들을 유지 관리 하는 설계 패턴 

  • 작업이 할당 되면 스레드 풀에서 쓰레드 할당
  • 작업이 끝나면 스레드 풀로 쓰레드 할당
  • 모든 쓰레드가 사용중인 경우 요청 거절 또는 특정 숫자만큼 대기 설정 

장점

  • 쓰레드를 생성하고 종료하는 비용 절감
  • 쓰레드가 생성되어 있기 때문에  응답시간 단축
  • 많은 요청이 들어와도 기존 요청은 안전하게 처리가 가능 

최대 쓰레드 갯수

너무 낮으면 서버 자원은 여유롭지만 클라이언트에서 지연발생

너무 높은 경우 서버자원(CPU, 메모리)이 부족해져 임계점 초과로 서버 다운 발생 

 

서버 사양에 맞게 튜닝을 잘하는것이 필요 

자원이 부족한 경우 서버 증설 필요

General

Request URL: 요청 주소 

Request Method: 요청 메서드 

Status Code: 상태 코드 

Remote Address: TCP/IP 접속시 생성되는 값

Referrer Policy: HTTP 주소 노출 정책

 

Response Header(응답 해더)

Cache-Control: 캐시 제어 해더 

캐시 유효시간이 초과 하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 갱신 또는 캐시 재사용(클라이언트와 서버의 데이터가 같을 경우)

  • max-age :캐시 유효 시간(초 단위)
  • no-cache : 데이터는 캐시해도 되지만 항상 원본(origin)서버에 검증하고 사용
  • no-store : 데이터에 민감한 정보가 있으므로 저장하면 안됨(메모리에서 사용하고 최대한 빨리 삭제)
  • must-revalidate : 캐시만료 후 최초 조회시 원본(origin)서버에 검증해야 하고 원본서버 접근 불가시  반드시 오류가 발생해야 한다
  • public 응답이 public 캐시에  저장됨
  • private : 응답이 해당 사용자만을 위한 것으로 private 캐시에 저장 해야함(기본값)
  • s-maxage : 프록시 캐시에만 적용되는 max-age

Content-Encoding: 콘텐츠를 압축하기 위해 사용 (gzip, deflate, identity) 

Content-Type: 콘텐츠 타입

Date  : 메세지가 발생한 날짜와 시간

Expires: 쿠키 만료 날짜

Pragma : HTTP/1.1의 Cache-Control 헤더가 생기기전 대용 헤더

Transfer-Encoding : 분할전송 

X-Content-Type-Options: 서버에서 보내온 컨텐츠 타입 헤더가 잘못 설정되었다고 판단된 경우, 브라우저에서 자체적 컨텐츠 타입 추론

 

Request Header(요청헤더)

Accept: 클라이언트가 선호하는 미디어 타입

구체적인 것이 우선시 됨

0~1 사이 이며 클수록 우선순위를 가짐 (생략시 1)

text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Encoding:  클라이언트가 선호하는 문자 인코딩

Accept-Language: 클라이언트가 선호하는 자연 언어

  • ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 
  • 0~1 사이 이며 클수록 우선순위를 가짐 (생략시 1)
  • 1순위 :ko-KR
  • 2순위 : ko;q(0.9)
  • 3순위 :  en-US(0.8)
  • 4순위 : en;q(0.7)

Host: 요청한 호스트 정보(도메인) / 필수

Referer: 이전 웹페이지 주

User-Agent: 유저 에이전트 애플리케이션 정보(웹 브라우저 정보 등)

'네트워크' 카테고리의 다른 글

HTTP 상태코드  (0) 2023.09.18
URI(Uniform Resource Identifier)  (0) 2023.09.15
HTTP 기본 지식  (0) 2023.09.15
HTTP)Stateful 와 Stateless  (0) 2023.09.15
IP 주소 확인 사이트  (0) 2022.08.05

+ Recent posts