본문 바로가기

study/spring boot12

[spring boot] static resource Cache-Control 설정 프로젝트 기능 구현을 마치고 성능 개선을 위해 정적 자원에 대한 캐시 설정을 하기로 했다. 정적 자원이란 클라이언트가 요청했을 때 거의 변경되지 않는 자원으로 이미지 파일, html, javascript와 같은 파일이 있다. 이러한 정적 자원을 서버 로딩시마다 클라이언트에서 매번 호출할 경우 DB 요청이 증가해 응답 시간과 자원이 증가하는데 캐시를 적용시킴으로써 리소스 호출에 대한 응답 시간을 줄일 수 있다. 개발자 도구를 통해 각 자원의 Response Headers 보면 Cache-Control의 상태를 확인할 수 있다. Cache-Control- no-store: 캐시 사용을 하지 않는다.- no-cache: 서버에 바뀐 내용이 있으면 새로 가져오고 없으면 그대로 사용한다.- max-age: 캐시 .. 2023. 6. 5.
[spring boot] @Autowired를 통한 필드 주입, 생성자 주입 프로젝트에서 기능 구현을 위해 여러 클래스에서 @Autowired를 통해 필드주입을 사용했고 이러한 의존성 주입 코드를 다시 검토 과정에서 다음과 같은 의문점이 생겼다. Spring boot에서 필드 주입을 사용하면 위와 같이 @Autowired에 밑줄이 가있는데 마우스를 올려보면 "Field injection is not recommended"라는 말과 함께 필드 주입은 추천하지 않는다고 알려준다. 왜 스프링 부트에서는 필드 주입을 추천하지 않는 것일까? 우선 이 해답을 얻기 위해 의존성 주입이란 무엇이고 의존성 주입 방법에 대해 알아야 했다. Spring Di, IoC와 의존성 주입의 개념 스프링 DI(Dependency Injection), IoC(Inversion of control) 스프링을 공.. 2023. 5. 30.
[spring boot] Ajax을 활용한 비동기 서버 통신 Ajax란? JavaScript를 사용한 비동기 서버 통신으로 서버로 모든 데이터를 보내는 것이 아닌 필요한 데이터만 보내 응답받을 수 있다. 이 때문에 페이지 전체의 새로고침 없이 일부분만 로드가 가능하다. 비동기 서버 통신이란 데이터 요청 후 결과를 응답받기 전까지 기다리는 것이 아닌 동시에 다른 작업을 함께 처리하기 때문에 시간과 자원을 아낄 수 있다. 즉 요청 후 응답이 올 때까지 대기하는 동기 방식과 대조된다. Ajax를 통해 클라이언트와 서버 간에 xml이나 json 형식으로 데이터를 주고받을 수 있는데 프로젝트에서는 json을 사용하여 데이터를 전송했다. 스프링 부트에서 json을 이용해 통신하기 위해서는 Controller 클래스에 @RestController를 사용하거나 Mapping 메.. 2023. 5. 29.
[spring boot] Jsp 적용 과정 (패키징 배포 방식 JAR에서 WAR로 변경) spring boot에서 Jsp를 사용하기 위해 필요한 설정과 적용 후 발생한 에러 해결 과정에 대해 정리했다. 1. pom.xml - dependency 추가 javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper 2. application.properties 설정 spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp Controller에서 GetMapping 시 jsp 파일을 불러오기 위해서 파일 경로를 설정해야 한다. application.properties에서 상위 폴더 경로(prefix)와 확장자명(suffix)을 작성한다. 이때 WEB-INF 폴더는 src > main >.. 2023. 4. 21.
스프링 @RestController를 통한 json 데이터 반환 스프링에서 주소값을 GetMapping 하기 위해 코드를 작성하면 다음과 같다. @GetMapping("/") public String restList() { return "home"; } 이렇게 @Controller는 단순히 jsp, html 같은 view 파일을 반환하기 때문에 Mapping을 통해 데이터를 가져오고 싶을 경우 @Controller가 아닌 @RestController를 사용해야 한다. 만약 @Controller를 사용하여 데이터를 받아 오고 싶을 경우 @RequestBody를 함께 사용하면 된다. @RestController는 Class path에 jackson이 존재할 경우 데이터 형식을 json 타입으로 불러올 수 있는데 이 때는 프로젝트에 의존성을 추가해야 한다. Maven - .. 2023. 4. 12.
스프링 DI(Dependency Injection), IoC(Inversion of control) 스프링을 공부하면서 의존성 주입(DI), 제어의 역전(IoC)과 같은 용어들을 자주 들을 수 있는데실제 이를 적용하는 과정에서 정확한 의미를 알지 못하고 단순 구현에만 집중했었기 때문에정확한 이해를 위해 두 용어를 정리하려 한다.   우선 두 가지 용어에 대해 자세히 정리하기 전  DI와 IoC의 필요성에 대해 아래 코드와 함께 설명하겠다. A 클래스에서 B 클래스의 메서드를 사용하기 위해 사용자가 직접 객체 인스턴스를 생성하는 경우public class A { public static void main(String args[]) { B b = new B(); b.start(); }}class B { public void start() { System.out.println("Hello Java");.. 2023. 4. 11.