티스토리 뷰

Study/Spring

스프링 정리(2)

giiro 2021. 8. 8. 01:35

1. 어노테이션


@RequestMapping ↔ @GetMapping, @PostMapping

  • 서로 대체가능한 어노테이션이다. 단지 후자를 사용하면 method를 일일이 get, post로 지정해줘야했던 것을 적지 않아도됩니다. ( 사실 두 개 다 열어보면 @RequestMapping(method = RequestMethod.GET)와 같이 RequestMapping)을 사용함)

@Enumerated(EnumType.STRING)

  • JPA로 db에 저장할 때 Enum값을 어떤 형태로 저장할지를 결정합니다. (디폴트는 EnumType.ORIGINAL이지만 중간에 enum값을 추가, 삭제할 경우 문제가 발생하므로 사용하지x)

@EnableWebSecurity

  • Spring Security설정들을 활성화시켜줌

 

2. 스프링 시큐리티


  • 권한을 관리할 Enum 클래스를 작성할 때, 스프링 시큐리티에서는 권한 코드에 항상 "ROLE_..."이 앞에 있어야 합니다.

 

3. 스프링 부트 설정시 packaging에서 war/jar차이


  • war : 내장 서버도 사용가능 하지만, 주로 외부 서버에 배포하는 목적으로 사용합니다.
  • jar : 항상 내장 서버를 사용하고 webapp 경로도 사용하지 않음

 

4. 스프링 부트 로깅 (@Slf4j)


  • Logging의 단계는 TRACE, DEBUG, INFO, WARN, ERROR 단계로 총 5단계로 구성됩니다.
  • application.properties에 로깅 설정을 해두면 원하는 단계부터 로그를 찍어볼 수 있습니다다. (디폴트는 INFO)
  • 즉, 개발 서버와 운영 서버의 설정단계를 각각이 다르게 설정하여 서버 상황에 맞게 필요한 정보만 알아볼 수 있습니다.
logging.level.hello.springmvc = debug // #DEBUG 단계부터 로깅이 찍힘
logging.level.hello.springmvc = info // #INFO 단계부터 로깅이 찍힘

 

로깅할 때, 성능적인 문제

log.trace("trace = " + name); // #1
log.trace("trace = {}", name); // #2

 

로그 레벨의 설정이 INFO단계라고 할 때 위의 코드를 작성하였다고 가정해보면,

  • #1의 경우) '+'로 이어진 문자열 연산이 이루어진 후, 출력해야하지만 TRACE단계가 INFO단계보다 높으므로 연산만 이루어지고 출력은 되지 않습니다.
  • #2의 경우) 파라미터로 넘기므로 별도의 연산이 이루어지지않은 상황에서 출력이 되지 않습니다.
  • 따라서 모든 로깅의 코드 형식은 #2와 같이 적어야 합니다.

 

5. Query Parameter와 @PathVariable


· 두 방법 모두 url에 파라미터를 전송하는 방법이지만 Query parameter는 쿼리 스트링을 적용한 방식, @PathVariable은 RESTful하게 이용하는 방식입니다.

  • @PathVariable : 말 그대로 경로에 포함된 값( {}안의 값 )를 변수로 사용하며 아래와 같이 두 가지 방식으로 사용할 수 있습니다.
  • Query Parameter : 구분자 '?'로 시작하며 key, value쌍이 '&'으로 연결하여 데이터를 제공하는 방식입니다.
// #1. 경로 변수로 받아온 userId를 이름 그대로 사용하지않고, 다른 이름으로 사용하는 방식
@PathVariable("/posts/{userId}") 
public String mappingPath1(@PathVariable("userId") String data) {...} 

// #2. 경로 변수로 받아온 이름과 내부에서 사용할 변수의 이름을 같도록 사용하는 방식 
@PathVariable("/posts/{userId}")
public String mappingPath2(@PathVariable String userId) {...}

// #3. 쿼리 스트링 방식으로 변수를 받아오는 방식
@RequestMapping("/posts", method = ...)
public String mappingPath3(@RequestParam("userId") String userId){...}

// RequestParam 사용시 경로 
.../posts/userA

// Query Parameter 사용시 경로
.../posts?userId=userA

'Study > Spring' 카테고리의 다른 글

스프링 정리(4)  (0) 2021.08.21
스프링 정리(3)  (0) 2021.08.13
스프링 정리(1)  (0) 2021.08.03
IOC, DI, 컨테이너  (0) 2021.01.14
회원 도메인 개발 (순수 자바코드로)  (0) 2021.01.14
댓글