콘텐츠로 건너뛰기

Odoo Website.page 모델: 웹사이트 페이지 구조 완벽 이해

개발자와 기능 담당자를 위한 Odoo 웹사이트 페이지 모델 완벽 안내서
2026년 3월 11일 작성자
Odoo Website.page 모델: 웹사이트 페이지 구조 완벽 이해
Dasolo
| 아직 댓글이 없습니다

소개


Odoo에서는 모든 비즈니스 데이터가 모델 안에 구조화되어 저장됩니다. 즉, 여러분이 다루는 고객 정보, 제품, 주문, 웹페이지 같은 항목들은 각각의 모델 레코드로 존재합니다.


Odoo 모델을 이해하는 것은 개발자와 컨설턴트 모두에게 필수입니다. 모델은 데이터 구조와 관계, 그리고 업무 규칙을 정의하는 뼈대이기 때문에 시스템 설계와 맞춤화의 기초가 됩니다.


이 글은 website.page 모델을 중심으로 설명합니다. 이 모델은 Odoo 웹사이트의 정적 페이지를 관리합니다. 랜딩페이지 제작, 콘텐츠 관리, 외부 연동 등 정적 페이지와 관련된 작업을 할 때 반드시 마주치게 됩니다.

website.page 모델이란 무엇인가요


website.page 모델은 Odoo의 웹사이트 앱에서 정적 페이지(예: 회사소개, 연락처, 캠페인 랜딩페이지 등)를 표현합니다. 사용자가 사이트 빌더로 직접 생성·편집하는 페이지를 저장하는 곳입니다.


website.page는 Odoo의 상속 메커니즘을 사용해 ir.ui.view와 연동됩니다(_inherits 방식). 각 website.page 레코드는 실제 HTML/QWeb 템플릿과 메타데이터를 보관하는 ir.ui.view 레코드에 연결됩니다.

단, 쇼핑몰 상품 목록이나 블로그 목록처럼 동적으로 생성되는 페이지는 다른 방식으로 처리됩니다.


즉, 그런 동적 목록 페이지들은 website.page 레코드로 저장되지 않습니다. website.page는 웹사이트 빌더로 직접 만든 정적 콘텐츠 전용입니다.

모델의 핵심 필드들


아래는 website.page 모델에서 자주 쓰이는 주요 필드들입니다. 이 필드를 이해하면 페이지 관리와 개발이 훨씬 수월해집니다.


1. name

형식: Char. 페이지의 제목을 저장합니다. 브라우저 탭, 메뉴, 검색 결과 등에 노출되는 표시명이며, 연결된 ir.ui.view의 값이 사용됩니다.


2. url

형식: Char. 페이지의 경로(슬러그)입니다. 반드시 슬래시(/)로 시작해야 합니다. 예: /contact, /about-us. 방문자가 접근하는 고유 주소입니다.


3. view_id

형식: Many2one(ir.ui.view). 필수 필드로, 페이지의 실제 콘텐츠와 템플릿(XML arch)을 보유한 QWeb 뷰에 연결됩니다. 해당 뷰를 삭제하면 페이지도 함께 삭제됩니다(종속성).


4. website_id

형식: Many2one(website). 이 페이지가 속한 웹사이트를 가리킵니다. 멀티 사이트 환경에서는 특정 사이트에만 속하게 하거나(website_id 설정), 공용으로 둘 수도 있습니다(비어 있음).


5. is_published

형식: Boolean. 페이지의 공개 여부입니다. 공개되지 않은 페이지는 방문자에게 404를 반환하거나 리다이렉트됩니다. 삭제 없이 임시로 숨길 때 유용합니다.


6. website_indexed

형식: Boolean. 검색엔진 인덱싱 허용 여부를 제어합니다. 감사·내부 확인용 페이지나 감사 완료 페이지 등 검색에 노출하고 싶지 않은 페이지는 False로 설정하세요.


7. date_publish

형식: Datetime. 게시(공개) 일시입니다. 예약 게시나 게시 시점을 화면에 표기할 때 사용됩니다.


8. header_visible

형식: Boolean. 해당 페이지에서 사이트 헤더를 표시할지 여부입니다. 랜딩페이지나 전면 배너 페이지에서 헤더를 숨기고 싶을 때 씁니다.


9. footer_visible

형식: Boolean. 사이트 푸터 표시 여부입니다. header_visible과 동일한 용도로 푸터를 숨기거나 표시할 수 있습니다.


10. is_homepage

형식: Boolean(계산 필드). 해당 페이지가 웹사이트의 홈으로 지정되었는지 나타냅니다. 웹사이트별로 오직 하나의 페이지만 홈페이지가 될 수 있습니다.


11. is_visible

형식: Boolean(계산 필드). 게시 상태, 공개일자, 접근 권한 규칙 등을 종합해 현재 페이지가 실제로 표시 가능한지 여부를 나타냅니다.


12. menu_ids

형식: One2many(website.menu). 이 페이지로 연결되는 메뉴 항목들입니다. 한 페이지는 여러 메뉴에 노출될 수 있습니다.


13. create_date

형식: Datetime. 레코드가 생성된 시각으로, Odoo가 자동으로 관리합니다. 감사와 리포팅에 유용합니다.


14. write_date

형식: Datetime. 레코드가 마지막으로 수정된 시각입니다. 변경 이력 추적에 도움됩니다.


15. arch

형식: Text. 실제 QWeb XML 템플릿(arch)이 저장되는 곳은 연결된 ir.ui.view입니다. 이 안에 HTML 구조와 Odoo 스니펫이 들어갑니다. 웹사이트 빌더로 편집 가능합니다.


16. key

형식: Char. 뷰의 고유 식별자입니다. 모듈 XML이나 상속에서 사용되며 일반적으로 module.view_name 형식을 따릅니다.


17. type

형식: Selection. 뷰의 유형을 나타냅니다. 웹 페이지의 경우 항상 qweb입니다. 그 외에 form, tree, list 등이 있습니다.


18. active

형식: Boolean. 소프트 삭제(아카이브) 플래그로, ir.ui.view에서 상속됩니다. False이면 페이지는 서비스되지 않습니다.


19. website_meta_title

형식: Char. SEO용 메타 타이틀로, 검색 결과에서 기본 제목을 덮어씁니다. 검색 노출 최적화에 중요합니다.


20. website_meta_description

형식: Text. SEO 메타 설명문입니다. 검색 결과의 스니펫으로 표시됩니다. 보통 150~160자 내외로 유지하는 것이 권장됩니다.


21. website_meta_keywords

형식: Char. 메타 키워드(콤마 구분). 현대 SEO에서는 중요도가 낮지만 일부 시스템에서 여전히 사용됩니다.


22. header_overlay

형식: Boolean. 헤더가 콘텐츠 위에 겹쳐서 표시되는지 여부입니다. 히어로 배너 같은 디자인에 사용합니다.


23. header_color

형식: Selection. 헤더의 색상 테마(transparent, light, dark 등). 가독성과 시각적 대비에 영향을 줍니다.


24. visibility

형식: Selection. 접근 제어 설정으로 Public, Signed In, Restricted Group, With Password 같은 옵션을 제공합니다. 누가 페이지에 접근 가능한지 결정합니다.


25. redirect_type

형식: Selection. URL이 변경될 때 적용할 리다이렉트 타입을 정의합니다(301 영구, 302 임시, 없음). 페이지 이동 시 SEO 보존과 링크 깨짐 방지에 중요합니다.

업무 흐름에서의 활용 사례


1. 랜딩페이지 및 캠페인

마케팅 팀은 캠페인용 랜딩페이지를 많이 생성합니다. 각 랜딩페이지는 website.page 레코드로 관리되며, URL·콘텐츠·게시일을 설정합니다. 예약 게시 기능(date_publish)은 캠페인 타이밍 관리에 필수적입니다.


2. 기업 기본 페이지

회사소개, 연락처, 약관, 개인정보처리방침 같은 고정 페이지는 보통 website.page로 만들어 한 번 생성한 뒤 필요할 때 업데이트합니다. 메뉴 노출은 menu_ids로 제어합니다.


3. 감사·확인(감사 메시지) 페이지

예: "문의 접수 완료"나 "주문 확인" 같은 페이지는 website.page로 생성하고 website_indexed를 False로 설정해 검색엔진에 노출되지 않도록 합니다.


4. 멀티 사이트 및 현지화

멀티 웹사이트 구조에서는 website_id로 어떤 사이트에 속할지 결정합니다. 사이트별로 복제해 로컬 언어와 콘텐츠로 최적화할 수 있습니다.


5. 권한이 있는 콘텐츠 및 제한된 접근

visibility 필드를 활용하면 로그인한 사용자 전용 페이지나 특정 사용자 그룹만 접근 가능한 문서 페이지를 만들 수 있어 멤버십 영역이나 내부 문서에 유용합니다.

개발자가 이 모델을 확장하는 방법


개발자는 여러 패턴으로 website.page를 확장할 수 있습니다. Odoo의 모델 상속 방식이 핵심 수단입니다.


모델 상속 방식

모델을 확장하려면 _inherit = 'website.page'를 사용하세요. 새 필드를 추가하거나 메서드를 재정의하고 제약을 넣을 수 있습니다. 변경 작업은 별도 모듈에 두어 업그레이드 시 충돌을 줄이는 것이 좋습니다.


필드 추가

상속 모델에 필요한 필드를 선언해 추가합니다. Char, Many2one, Boolean, Integer, Text, Selection 같은 적절한 필드 타입을 선택하세요. 멀티 사이트 환경에서는 website-dependent 옵션을 고려해야 합니다.


파이썬 확장 포인트

create, write, unlink 같은 메서드를 오버라이드해 비즈니스 로직을 삽입할 수 있습니다. 기존 동작을 유지하려면 super()를 호출하세요. 특히 view_id 관계와 삭제(캐스케이드)에 주의가 필요합니다.


Odoo Studio 활용

Odoo Studio는 코드 없이 빠르게 레이아웃을 바꿀 때 유용합니다. 다만 API 연동이나 복잡한 비즈니스 로직이 필요하면 커스텀 모듈로 구현하는 편이 유지보수에 유리합니다.

권장 실무(베스트 프랙티스)


  • URL은 읽기 쉽고 URL 규칙에 맞게 작성하세요. 공백이나 특수문자는 피하고 가독성을 위해 하이픈(-)을 사용합니다.
  • 감사·확인 페이지와 내부 페이지는 website_indexed를 False로 설정해 검색엔진 색인을 막으세요.
  • URL을 변경할 때는 리다이렉트(301 또는 302)를 설정해 기존 SEO 가치와 외부 링크를 보호하세요.
  • 공개 페이지마다 website_meta_title과 website_meta_description을 채우세요. 검색 결과에서의 클릭률(CTR) 향상에 도움이 됩니다.
  • API나 XML-RPC로 페이지를 생성할 때는 먼저 ir.ui.view를 생성한 뒤 해당 view_id로 website.page를 생성하세요. 뷰 타입은 qweb이어야 하며 key가 고유해야 합니다.

자주 하는 실수


  • 유효한 view_id 없이 website.page를 생성하는 실수
  • view는 반드시 존재하고 type이 qweb이어야 합니다. 그렇지 않으면 페이지가 제대로 동작하지 않습니다.
  • 슬래시로 시작하지 않는 URL 사용
  • Odoo는 /contact 같은 경로 형식을 기대합니다. contact 같은 형식은 잘못된 경로로 인식됩니다.
  • 감사·확인 페이지에 website_indexed를 설정하지 않는 실수

마무리 요약


이로 인해 의도치 않게 검색엔진에 노출되어 SEO 품질이 저하될 수 있습니다.


페이지 URL 변경 시 리다이렉트를 설정하지 않는 실수

Odoo 도입 지원이 필요하신가요?


옛 링크가 깨지고 검색엔진이 페이지 연결을 잃어 트래픽와 순위 손실이 발생할 수 있습니다.


웹사이트 빌더에서 편집된 뷰의 arch를 직접 수정하는 경우 주의하세요. ir.model.data의 noupdate 플래그 때문에 XML 변경이 적용되지 않을 수 있으니 필요 시 플래그를 재설정해야 합니다. website.page 모델은 Odoo에서 정적 페이지 관리를 담당하는 핵심 구성요소입니다. 페이지의 메타데이터, URL, 게시 설정을 저장하고 실제 콘텐츠는 연결된 ir.ui.view에 보관됩니다. 이 모델의 필드와 ir.ui.view로부터의 상속 방식을 이해하면 Odoo 웹사이트를 효과적으로 구성하고 커스터마이즈하며 외부 시스템과 통합하는 데 큰 도움이 됩니다. 컨설턴트든 개발자든 website.page에 대한 명확한 이해는 시간 절약과 오류 예방으로 이어집니다.

Odoo Website.page 모델: 웹사이트 페이지 구조 완벽 이해
Dasolo 2026년 3월 11일
이 게시물 공유하기
로그인 의견을 남기기