Spring에서 정적 페이지와 동적 페이지는 각각 다른 방식으로 다뤄지며, 역할도 명확히 구분됩니다. 이 두 가지를 나누어 관리하는 이유는 서버 자원의 효율적 사용과 응답 속도 향상 그리고 개발 및 유지보수의 용이성 때문입니다.
1. 정적 페이지 (Static Page)
1) 정의
정적 페이지는 미리 만들어진 HTML, CSS, JavaScript 파일을 그대로 제공하는 웹 페이지입니다. 서버는 이 파일들을 단순히 클라이언트에게 전송하기만 하고, 서버에서 별도의 데이터 처리나 로직 실행 없이 요청한 파일 그대로 응답됩니다.
2) Spring에서 정적 페이지 처리 방법
Spring에서는 기본적으로 정적 리소스(static resources)를 처리할 수 있도록 설정되어 있습니다. 이러한 정적 파일들은 프로젝트의 특정 폴더에 저장되며, 특별한 설정 없이도 클라이언트가 요청하면 해당 리소스를 응답으로 전달할 수 있습니다.
- Spring Boot에서는 기본적으로 다음 경로에 있는 파일들이 정적 리소스로 처리됩니다:
src/main/resources/static/
src/main/resources/public/
src/main/resources/resources/
src/main/resources/META-INF/resources/
3) 예시
만약 src/main/resources/static/welcome.html
파일이 있으면, 클라이언트가 http://localhost:8080/welcome.html
로 요청할 때 이 HTML 파일이 그대로 반환됩니다.
4) 정적 페이지의 역할
- 단순한 웹 페이지: 회사 소개, 블로그 포스트, 문서 페이지 등 변하지 않는 고정된 내용을 담고 있는 페이지에 적합합니다.
- 빠른 응답 속도: 서버에서 별도의 로직을 처리하지 않고, 클라이언트의 요청에 즉시 파일을 응답할 수 있어 빠릅니다.
- 캐싱 가능: 정적 페이지는 내용이 자주 변하지 않기 때문에, 클라이언트나 CDN(Content Delivery Network)에 캐싱할 수 있어 서버 부하를 줄일 수 있습니다.
2. 동적 페이지 (Dynamic Page)
1) 정의
동적 페이지는 서버에서 실시간으로 데이터를 처리하여 생성되는 페이지입니다. 서버는 클라이언트의 요청에 따라 데이터베이스로부터 데이터를 조회하거나, 비즈니스 로직을 처리한 후에 HTML, JSON 등의 응답을 생성합니다. 페이지 내용이 사용자 입력, 데이터 상태 등에 따라 달라집니다.
2) Spring에서 동적 페이지 처리 방법
동적 페이지는 주로 컨트롤러(@Controller
, @RestController
)를 통해 처리됩니다. 클라이언트가 특정 URL로 요청을 보내면, Spring의 컨트롤러가 이를 받아 필요한 데이터를 조회하거나 처리하고, 그 결과를 동적으로 생성한 HTML 페이지나 JSON 형식으로 클라이언트에 응답합니다.
3) 예시
@Controller
public class UserController {
@GetMapping("/user/{id}")
public String getUserProfile(@PathVariable Long id, Model model) {
User user = userService.findById(id); // 데이터베이스에서 사용자 정보 조회
model.addAttribute("user", user); // 조회된 데이터를 모델에 추가
return "userProfile"; // userProfile.html로 응답
}
}
위 코드에서 /user/{id}
로 요청을 받으면, 해당 id
에 맞는 사용자 정보를 데이터베이스에서 조회하고 그 데이터를 포함한 HTML 페이지를 클라이언트에게 동적으로 생성하여 반환합니다.
4) 동적 페이지의 역할
- 사용자 맞춤형 콘텐츠: 로그인한 사용자별 프로필, 대시보드, 개인화된 콘텐츠 제공 등 사용자에 따라 페이지 내용이 달라지는 경우.
- 데이터 기반 웹 페이지: 데이터베이스에서 조회한 정보를 기반으로 동적으로 생성되는 페이지(예: 상품 목록, 게시판 등).
- REST API 응답: 클라이언트의 요청에 따라 데이터를 JSON 또는 XML 형태로 응답하는 역할을 하며, 이 경우
@RestController
가 주로 사용됩니다.
3. 정적 페이지와 동적 페이지의 차이
항목 | 정적 페이지 | 동적 페이지 |
---|---|---|
데이터 처리 | 서버에서 별도 데이터 처리 없음, 미리 만들어진 파일 제공 | 서버에서 데이터를 실시간으로 처리하여 생성 |
응답 속도 | 빠름 (서버 부하 적음) | 처리 시간이 소요될 수 있음 (서버 로직 실행) |
내용 변화 | 고정된 내용 (항상 동일한 파일 제공) | 사용자, 요청에 따라 다른 내용 제공 |
캐싱 | 캐싱 가능, 효율적 | 캐싱이 어렵거나, 제한적으로 가능 |
4. 왜 정적 페이지와 동적 페이지를 나누어 관리하는가?
1) 서버 자원의 효율적 사용
정적 페이지는 서버에서 처리할 필요가 없기 때문에 정적 페이지와 동적 페이지를 분리하면, 서버는 더 복잡한 동적 페이지 처리에 집중할 수 있습니다. 정적 리소스는 CDN 등을 통해 캐싱하여 성능을 더욱 향상시킬 수 있습니다.
2) 응답 속도와 성능 최적화
정적 페이지는 캐싱이 가능하여 클라이언트와 서버 간의 트래픽을 줄이고, 빠른 응답을 제공합니다. 특히, 회사 소개, 블로그, 문서 페이지 같은 자주 변하지 않는 페이지는 정적으로 처리하는 것이 효율적입니다.
3) 유지보수와 개발의 용이성
정적 콘텐츠는 HTML/CSS 파일을 별도로 관리할 수 있어 변경이 쉽습니다. 반면, 동적 콘텐츠는 데이터를 기반으로 생성되므로, 데이터베이스나 비즈니스 로직에 변화를 줄 때 동적으로 페이지가 생성됩니다. 이 두 가지를 나누어 관리하면, 각기 다른 성격의 페이지를 독립적으로 유지보수할 수 있습니다.
4) 보안적인 측면
정적 페이지는 서버와 클라이언트 간에 단순히 파일을 전달하는 방식으로, 데이터베이스나 서버 로직에 대한 노출이 없습니다. 반면, 동적 페이지는 서버에서 데이터를 처리하기 때문에 이를 잘 분리하고 관리하는 것이 보안 측면에서도 중요합니다.
5. Spring에서 정적 및 동적 페이지의 결합
- 정적 페이지와 동적 페이지의 결합: Spring에서는 정적 페이지와 동적 페이지를 함께 사용할 수 있습니다. 예를 들어, 웹사이트의 메인 레이아웃은 정적 HTML, CSS로 유지하고, 동적인 콘텐츠는 AJAX 호출이나 Spring의
@Controller
를 통해 데이터를 받아서 렌더링할 수 있습니다.
'TIL > 스파르타 TIL' 카테고리의 다른 글
[내일배움캠프] Spring 1차 숙제 (튜터님께 받은 피드백) (0) | 2024.10.08 |
---|---|
[내일배움캠프] 본캠프 TIL Spring 입문(3) (0) | 2024.09.28 |
[내일배움캠프] 본캠프 TIL Spring 입문(1) (0) | 2024.09.27 |
[TIL] 스파르타코딩 2차 팀편성, 7일차 (0) | 2024.09.11 |
[TIL] 스파르타코딩 2차 팀편성, 6일차 (0) | 2024.09.09 |