Uncaught TypeError: Cannot read properties of undefined (reading 'Geocoder') 오류 확인 부탁드려요

Document body { font-family: Arial, sans-serif; font-size: 16px; color: #333; } form { max-width: 600px; margin: 0 auto; } table { margin-bottom: 20px; } input[type=text], select { padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; margin-bottom: 10px; width: 100%; } input[type=date] { padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; margin-bottom: 10px; width: 45%; } textarea { padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; margin-bottom: 10px; width: 100%; height: 200px; } button { background-color: #4CAF50; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; float: right; } button:hover { background-color: #3e8e41; } #title, #date, #recruit, #image, #map { font-weight: bold; margin-bottom: 10px; } #title, #date, #recruit { margin-top: 20px; } .col-6 { float: right; } #font, #font_size, #color { font-weight: bold; width: 195.54px; margin-bottom: 10px; } #esc { margin-right: 3px; } #title { font-weight: bold; margin-top: 20px; margin-bottom: 10px; } #title input[type=text] { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } #map-container { width: 100%; height: 400px; }
<table>

  <tr>

    <td>

      <select id="search_category">

        <option value="category">카테고리 검색</option>

        <option value="develop">개발</option>

        <option value="translation">번역</option>

        <option value="design">그림/디자인</option>

        <option value="video_editing">영상/편집</option>

        <option value="planning_marketing">기획/마케팅</option>

        <option value="others">기타</option>

      </select>

      <input type="text" id="search_keyword" placeholder="검색어를 입력하세요">

      <button id="search_button">검색</button>

    </td>

  </tr>

</table>

<div id="title">

  제목 : <input type="text" placeholder="제목을 입력하세요">

</div>

<div id="date" class="row gtr-uniform">

  날짜정보입력

  <div class="col-6 col-12-xsmall">

    시작일 : <input type="date">

  </div>

  <div class="col-6">

    마감일 : <input type="date">

  </div>

</div>

<br>

<div>모집인원 : <input type="text" placeholder="모집인원을 입력하세요"></div>

<table>

  <tr>

    <td>

      <select id="font">

        <option value="default">글씨체</option>

        <option value="serif">Serif</option>

        <option value="sans-serif">Sans-serif</option>

        <option value="monospace">Monospace</option>

      </select>

      <select id="font_size">

        <option value="default">글씨 크기</option>

        <option value="small">작게</option>

        <option value="medium">보통</option>

        <option value="large">크게</option>

      </select>

      <select id="color">

        <option value="default">색상</option>

        <option value="red">빨강</option>

        <option value="green">초록</option>

        <option value="blue">파랑</option>

      </select>

    </td>

  </tr>

</table>

<div>이미지 첨부 :</div>

<input type="file"><br>



<div>

  <input type="text" id="search_keyword" placeholder="지도 검색어를 입력하세요">

  <button id="search_button">검색</button>

</div>



<div id="map" style="width: 500px; height: 400px;"></div>



  <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=66b7264945f08eec5af71755a23a6285&libraries=services"></script>

  <script>

  var mapContainer = document.getElementById('map'); // 지도를 표시할 div

  var mapOption = {

    center: new kakao.maps.LatLng(37.5665, 126.9780), // 지도 중심좌표 (서울시청)

    level: 8 // 지도 확대 레벨

  };



  var map = new kakao.maps.Map(mapContainer, mapOption); // 지도 생성



  var geocoder = new kakao.maps.services.Geocoder();



  var searchKeyword = document.getElementById('search_keyword');

  var searchButton = document.getElementById('search_button');



  searchButton.addEventListener('click', function() {

    var keyword = searchKeyword.value;

    geocoder.addressSearch(keyword, function(result, status) {

      if (status === kakao.maps.services.Status.OK) {

        var coords = new kakao.maps.LatLng(result[0].y, result[0].x);

        map.setCenter(coords);

        displayMarker(coords);

      }

    });

  });



  function displayMarker(coords) {

    var marker = new kakao.maps.Marker({

      map: map,

      position: coords

    });

  }

</script>

<br>

<br>

<textarea placeholder="내용을 입력해주세요."></textarea><br>

<button id="register">게시</button>

<button id="esc">취소</button>

지도 위치를 검색했을때 검색이 안되는 오류가 발생하고 있습니다.
이 문제 어떻게 해결하는게 좋을까요?

해당 오류는 스크립트가 로드되기 전에 service 객체에 접근해서 나온 오류입니다.
스크립트가 로드된 다음 지도 객체에 접근해 주세요.

그리고 첨부 코드로 확인했을 때 해당 오류는 출력되지 않았지만
카테고리 검색과 주소 검색에서 사용하는 input, button 요소의 id가 중복되어 있어서 주소 검색이 이뤄지지 않았습니다.
그리고 button도 type 설정이 되어 있지 않아 submit으로 인식해서 페이지가 reload되는 부분 있었는데요.
이 부분과 연관 있는지 확인해주세요.