티스토리 뷰
@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 제공
'SPRING' 카테고리의 다른 글
@ExceptionHandler, @ControllerAdvice, AOP (0) | 2023.06.29 |
---|---|
ResponseEntity, custom Exception, (0) | 2023.06.29 |
Logback, profile, Springutils, Stringutils, CollectionsUtils (0) | 2023.06.29 |
[프로젝트 구조] entity,dto,controller,service,repository (0) | 2023.06.29 |
@RequestParam (0) | 2023.06.29 |