전체 글129 @RequestParam 스프링이 제공하는 @RequestParam 사용하면 요청 파라미터를 편리하게 사용할 수 있다. @Controller @Slf4j public class RequestParamController { ... @RequestMapping("/request-param-v2") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge){ log.info("username={}, age={}", memberName, memberAge); return "ok"; } } @RequestParam : 파라미터 이름으로 바인딩 @RequestParam("username") String.. 2023. 5. 12. 요청에 관하여 @Controller 는 반환 값이 String 이면 뷰의 이름으로 인식된다. 최종적으로 뷰를 찾고 뷰가 렌더링 @RestController 는 반환 값으로 뷰를 찾지 않고, HTTP 메시지 바디에 바로 입력한다. 다음과 같은 코드가 있으면 /hello-basic 이라는 URL 호출이 오면 helloBasic 메서드 실행되도록 매핑되는 것 결과로는 ok 메시지를 받을 수 있다.(호출된 화면에 단지 ok만 찍힐 뿐) @RequestMapping("/hello-basic") public String helloBasic(){ ... return "ok"; } 대부분의 속성을 배열로 제공해서 다중 설정 또한 가능하다. ex) @RequestMapping({"/hello-basic", "/hello-go"}) 💡.. 2023. 5. 11. 로깅로깅 스프링 부트 로깅 라이브러리 수 많은 로그 라이브러리들(Logback, Log4J, Log4J2...)을 통합해 인터페이스로 제공한 것이 SLF4J 라이브러리 SLF4J는 인터페이스이고, 그 구현체 중 하나로 Logback 로그 라이브러리가 있다고 생각할 수 있다. SLF4J - http://www.slf4j.org Logback - http://logback.qos.ch System.out는 콘솔에만 남지만 로그는 설정을 통해 파일, 네트워크 등 별도의 위치에 남기는 것도 가능하다. 파일로 남긴다면 일별, 특정 용량에 따른 로그 분할도 가능! 로깅을 사용하려면 별도의 로깅 라이브러리를 사용해서 로그를 출력할 수 있다. 스프링 부트 라이브러리 안에 스프링 부트 로깅 라이브러리('spring-boot-st.. 2023. 5. 11. 스프링 부트 3.0 프로젝트 오픈시 오류 생성한 프로젝트를 인텔리제이에서 build.gradle을 오픈해줬을 뿐인데 다음과 같은 오류가 발생했다. 😓 상황 https://start.spring.io 에서 스프링 부트 3.0.6 버전, 자바 11로 프로젝트 생성 문제 스프링 부트 3.0 부터는 자바 17이 필수라고 한다. 나는 스프링 부트 3.0.6을 자바 11로 이용하려고 했으니 당연히 오류를 뱉어낸 것이다. 해결 어차피 나는 https://start.spring.io 에서 새로 프로젝트를 생성하려고 했던 지라 스프링 부트 2.7.11, 자바 11로 다시 프로젝트를 생성해주었다. ⭐️ 스프링 부트 3.0부터는 자바 17 필수 ! 2023. 5. 11. [아이템 88] readObject 메서드는 방어적으로 작성하라 코드 8-1 방어적 복사를 사용하는 불변 클래스 public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end 종료 시각; 시작 시각보다 뒤여야 한다. * @throws IllegalArgumentException 시작 시각이 종료 시각보다 늦을 때 발생한다. * @throws NullPointerException start나 end가 null이면 발행한다. */ public Period(Date start, Date end) { this.start = new Date(start.getTime()); this.end = new Date(end.getTime()).. 2023. 5. 8. [아이템 87] 커스텀 직렬화 형태를 고려해보라 먼저 고민해보고 괜찮다고 판단될 때만 기본 직렬화 형태를 사용하라 클래스가 Serializable을 구현하고 기본 직렬화 형태를 사용한다면 현재의 구현에 종속적이게 된다. 즉, 기본 직렬화 형태를 버릴 수 없게 된다. 따라서 유연성, 성능, 정확성과 같은 측면을 고민한 후에 합당하다고 생각되면 기본 직렬화 형태를 사용해야 한다. 일반적으로 직접 설계하더라도 기본 직렬화 형태와 거의 같은 결과가 나올 경우에만 기본 형태를 사용해야 한다. 기본 직렬화 선택에 적합한 경우 기본 직렬화 형태는 객체가 포함한 데이터뿐만 아니라 그 객체를 시작으로 접근할 수 있는 모든 객체와 객체들의 연결된 정보까지 나타낸다. 그러나, 이상적인 직렬화 형태라면 물리적인 모습과 독립된 논리적인 모습만을 표현해야 한다. 객체의 물리적.. 2023. 5. 8. 이전 1 2 3 4 5 ··· 22 다음