티스토리 뷰

SPRING

@Value, @RequestParam

Howu 2023. 7. 6. 10:13

@Value

  • 애노테이션이 필드나 메서드(혹은 생성자)의 파라미터 수준에서 표현식 기반으로 값을 주입해주는 애노테이션.
  • 환경에 따라 유연한 값 설정: 데이터베이스 접속 정보, 보안에 중요한 비밀번호와 같은 민감한 정보나 변경할 가능성이 높은 값에 대해서는 별도의 파일(properties, yaml, .dot, ...)으로 분리해서 소스코드에서는 환경 정보에 맞는 설정 값을 불러오는 것이 좋다.

 

@RequestParam("가져올 데이터의 이름") [데이터타입] [가져온 데이터를 담는 변수]

  • @RequestParam(value = "contentid", required=true) Long contentid
  • model.addAttribute("contentid"); //model 객체를 이용하여 view로 값을 넘겨준다.

 

forward와  redirect의 차이점

  • forward: url 변화X, request/responst 객체 재사용
  • redirect: url 변화O, request/responst 객체 사용
  • 게시판의 글쓰기 기능을 생각해보면 사용자가 글쓰기 페이지에서 새로고침을 눌렀다. forward의 경우 요청정보가 그대로 살아있어서 똑같은 글이 여러번 등록될 수가 있다. 하지만 redirect는 처음 글을 작성할 때 보냈던 요청정보는 존재하지 않으므로, url이 변화하므로 글쓰기가 여러번 되지 않는다.
  • 따라서, 시스템(session이나 DB)에 변화가 생기는 로그인/회원가입/글쓰기의 경우 redirect 방식으로 응답하고, 시스템에 변화가 생기지 않는 단순 조회인 리스트/검색의 경우 forward방식으로 응답하는 것이 바람직하다.

 

Redis

  • 데이터베이스가 있음에도 인메모리 데이터 구조 저장소를 사용하는 이유는? 데이터를 물리 디스크에 직접 쓰지 않으므로 서버 문제와 데이터 손실을 방지할 수 있다. 서비스 운영 초반인 규모가 작고 사용자가 많지 않은 경우는 web-was-db로 데이터베이스에 무리가 가지 않지만 규모가 커지면 데이터베이스 과부하가 올 수 있다. 이 때, 캐시 서버를 이용한다.
  • 캐시: 한 번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때 빠르게 결괏값을 받을 수 있도록 도와주는 공간
  • key-value 구조로 쿼리를 사용할 필요가 없다.
  • 데이터를 처리하는 속도가 빠르다.
  • Single Threaded로 한 번에 하나의 명령만 처리한다. 그러므로 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요하다.
  • 인메모리 데이터 저장소 특성상 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있으므로 메모리 관리가 중요하다.
  • 사용법 1) 의존성 추가 spring-boot-starter-data-redis 2) RedisTemplate는 redis 서버에 redis 커맨드를 수행하기 위한 high-level-abstractions을 제공, redis 서버에 데이터를 CRUD 할 수 있는 operation interface 제공

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함