쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

프로그래밍 15년이상 개발자입니다.(이학사, 공학 석사) ※ 판매자와 상담 후에 구매해주세요. 학습을 위한 코드, 게임, 엑셀 자동화, 업...

AS규정기본적으로 A/S 는 평생 가능합니다. *. 구매자의 요청으로 수정 및 보완이 필요한 경우 일정 금액의 수고비를 상호 협의하에 요청 할수 있...

안녕하세요!!!고객님이 상상하시는 작업물 그 이상을 작업해 드리려 노력합니다.저는 작업물을 완성하여 고객님에게 보내드리는 것으로 거래 완료...

30년간 직장 생활을 하고 정년 퇴직을 하였습니다.퇴직 후 재능넷 수행 내용은 쇼핑몰/학원/판매점 등 관리 프로그램 및 데이터 ...

JavaScript 지오로케이션 API: 위치 기반 서비스 만들기

2024-10-05 08:28:43

재능넷
조회수 548 댓글수 0

JavaScript 지오로케이션 API: 위치 기반 서비스 만들기 🌍🚀

 

 

안녕하세요, 여러분! 오늘은 정말 흥미진진한 주제로 여러분을 찾아왔습니다. 바로 JavaScript의 지오로케이션 API를 활용해 위치 기반 서비스를 만드는 방법에 대해 알아볼 건데요. 이 기술은 현대 웹 개발에서 정말 중요한 부분을 차지하고 있어요. 여러분의 위치를 기반으로 맞춤형 서비스를 제공하는 앱들, 많이 사용해보셨죠? 네, 바로 그런 앱들이 이 기술을 사용하고 있답니다! 😊

우리가 이 기술을 배우면, 예를 들어 재능넷(https://www.jaenung.net)과 같은 재능 공유 플랫폼에서 사용자 주변의 재능 판매자를 찾아주는 기능을 만들 수 있겠죠. 정말 멋지지 않나요? 🌟

자, 그럼 이제 본격적으로 JavaScript 지오로케이션 API의 세계로 빠져볼까요? 여러분, 안전벨트 꽉 매세요. 우리의 코딩 여행이 시작됩니다! 🚀

1. 지오로케이션 API란? 🗺️

자, 먼저 지오로케이션 API가 무엇인지 알아볼까요? 지오로케이션(Geolocation)이라는 말, 들어보셨나요? 'Geo'는 지리를 뜻하고, 'location'은 위치를 뜻하죠. 즉, 지리적 위치를 의미하는 거예요. API는 Application Programming Interface의 약자로, 쉽게 말해 프로그램들이 서로 소통하는 방법을 정의한 것이에요.

그래서 지오로케이션 API는 웹 애플리케이션이 사용자의 지리적 위치 정보에 접근할 수 있게 해주는 인터페이스랍니다. cool하죠? 😎

이 API를 사용하면 우리는 다음과 같은 정보를 얻을 수 있어요:

  • 위도 (Latitude)
  • 경도 (Longitude)
  • 고도 (Altitude, 가능한 경우)
  • 정확도 (Accuracy)
  • 이동 방향 (Heading, 가능한 경우)
  • 속도 (Speed, 가능한 경우)

와우! 정말 많은 정보를 얻을 수 있네요. 이런 정보들을 어떻게 활용할 수 있을까요? 음, 예를 들어 재능넷 같은 플랫폼에서 사용자 주변의 재능 판매자를 찾아주는 기능을 만들 때 유용하게 쓰일 수 있겠죠. 사용자의 위치를 기반으로 가까운 순서대로 재능 판매자를 보여줄 수 있으니까요. 👨‍🏫👩‍🎨

그럼 이제 이 멋진 API를 어떻게 사용하는지 자세히 알아볼까요? 준비되셨나요? Let's dive in! 🏊‍♂️

지오로케이션 API 개념도 사용자 경도 위도 고도 이동 방향 속도

이 그림을 보시면, 지오로케이션 API가 제공하는 다양한 정보들을 한눈에 볼 수 있죠? 사용자를 중심으로 위도, 경도, 고도, 이동 방향, 속도 등의 정보를 얻을 수 있답니다. 이런 정보들이 어떻게 실제 서비스에 적용될 수 있는지, 조금씩 상상이 되시나요? 😉

자, 이제 우리는 지오로케이션 API가 무엇인지, 어떤 정보를 제공하는지 알게 되었어요. 다음 섹션에서는 이 API를 실제로 어떻게 사용하는지 자세히 알아보도록 하겠습니다. 여러분의 웹 개발 스킬이 한 단계 더 업그레이드될 준비가 되었나요? Let's go! 🚀

2. 지오로케이션 API 사용하기 🛠️

자, 이제 본격적으로 지오로케이션 API를 사용해볼 차례입니다. 여러분, 준비되셨나요? 우리의 코딩 여정이 시작됩니다! 🚀

먼저, 지오로케이션 API를 사용하기 위해서는 브라우저가 이 기능을 지원해야 합니다. 다행히도 대부분의 현대 브라우저들은 이 API를 지원하고 있어요. 하지만 항상 확인해보는 것이 좋겠죠?

자, 그럼 코드를 통해 하나씩 알아볼까요?


if ("geolocation" in navigator) {
  console.log("지오로케이션을 사용할 수 있습니다!");
} else {
  console.log("죄송합니다, 지오로케이션을 사용할 수 없습니다.");
}

이 코드는 브라우저가 지오로케이션 API를 지원하는지 확인하는 간단한 방법입니다. 'navigator' 객체 안에 'geolocation' 속성이 있는지 확인하는 거죠. 있다면 "지오로케이션을 사용할 수 있습니다!"라는 메시지가, 없다면 "죄송합니다, 지오로케이션을 사용할 수 없습니다."라는 메시지가 콘솔에 출력됩니다.

좋습니다! 이제 우리는 지오로케이션 API를 사용할 수 있는지 확인할 수 있게 되었어요. 그럼 다음 단계로 넘어가볼까요?

지오로케이션 API의 핵심 메서드는 getCurrentPosition()입니다. 이 메서드는 사용자의 현재 위치를 가져오는 역할을 합니다. 어떻게 사용하는지 볼까요?


navigator.geolocation.getCurrentPosition(successCallback, errorCallback);

이 메서드는 두 개의 콜백 함수를 인자로 받습니다. 첫 번째는 위치 정보를 성공적으로 가져왔을 때 실행될 함수(successCallback)이고, 두 번째는 에러가 발생했을 때 실행될 함수(errorCallback)입니다.

자, 이제 이 메서드를 사용해서 실제로 위치 정보를 가져와 볼까요?


function successCallback(position) {
  const latitude = position.coords.latitude;
  const longitude = position.coords.longitude;
  console.log(`위도: ${latitude}, 경도: ${longitude}`);
}

function errorCallback(error) {
  console.log(`에러 발생: ${error.message}`);
}

navigator.geolocation.getCurrentPosition(successCallback, errorCallback);

와우! 이제 우리는 사용자의 위치 정보를 가져올 수 있게 되었어요. 🎉

이 코드를 실행하면, 브라우저는 사용자에게 위치 정보 접근 권한을 요청할 거예요. 사용자가 허용하면, successCallback 함수가 실행되어 위도와 경도가 콘솔에 출력됩니다. 만약 사용자가 거부하거나 다른 이유로 위치 정보를 가져오지 못하면, errorCallback 함수가 실행되어 에러 메시지가 출력되겠죠.

지오로케이션 API 동작 과정 브라우저 사용자 위치 정보 요청 위치 정보 제공 (허용 시)

이 그림은 지오로케이션 API의 동작 과정을 보여줍니다. 브라우저가 사용자에게 위치 정보를 요청하고, 사용자가 허용하면 위치 정보를 제공받는 과정을 볼 수 있죠. 이해가 더 잘 되시나요? 😊

자, 이제 우리는 지오로케이션 API를 사용해서 사용자의 위치 정보를 가져올 수 있게 되었어요! 이것만으로도 정말 멋진 일이지만, 여기서 멈추지 않고 더 나아가볼까요?

다음 섹션에서는 이렇게 얻은 위치 정보를 활용해서 실제로 어떤 서비스를 만들 수 있는지 알아보도록 하겠습니다. 여러분의 상상력을 자극할 준비가 되셨나요? Let's go! 🚀

3. 위치 기반 서비스 만들기 🏗️

자, 이제 우리는 사용자의 위치 정보를 얻을 수 있게 되었어요. 그럼 이 정보를 가지고 무엇을 할 수 있을까요? 음... 🤔 아하! 위치 기반 서비스를 만들어볼까요?

예를 들어, 사용자의 현재 위치를 기반으로 주변의 맛집을 찾아주는 서비스를 만들어볼 수 있겠죠. 또는 재능넷 같은 플랫폼에서 사용자 주변의 재능 판매자를 찾아주는 기능을 구현할 수도 있겠네요. 정말 흥미진진하지 않나요? 😃

자, 그럼 간단한 예제를 통해 위치 기반 서비스를 만들어보겠습니다. 우리의 목표는 사용자의 현재 위치를 지도에 표시하고, 주변의 관심 장소들을 함께 보여주는 거예요.

먼저, HTML 파일부터 만들어볼까요?


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>내 주변 탐색하기</title>
    <style>
        #map {
            height: 400px;
            width: 100%;
        }
    </style>
</head>
<body>
    <h1>내 주변 탐색하기</h1>
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <script src="app.js"></script>
</body>
</html>

이 HTML 파일에서는 지도를 표시할 div 요소와 Google Maps API를 불러오는 스크립트, 그리고 우리가 작성할 JavaScript 파일(app.js)을 연결하고 있어요.

주의: Google Maps API를 사용하려면 API 키가 필요합니다. 'YOUR_API_KEY' 부분을 여러분의 실제 API 키로 교체해야 해요.

이제 app.js 파일을 만들어 실제 기능을 구현해볼까요?


let map;
let infoWindow;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: -34.397, lng: 150.644},
        zoom: 6
    });
    infoWindow = new google.maps.InfoWindow();

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(
            (position) => {
                const pos = {
                    lat: position.coords.latitude,
                    lng: position.coords.longitude,
                };
                infoWindow.setPosition(pos);
                infoWindow.setContent("여기가 당신의 위치입니다!");
                infoWindow.open(map);
                map.setCenter(pos);

                // 주변 장소 검색
                const service = new google.maps.places.PlacesService(map);
                service.nearbySearch(
                    {
                        location: pos,
                        radius: 500,
                        type: ['restaurant']
                    },
                    (results, status) => {
                        if (status === google.maps.places.PlacesServiceStatus.OK) {
                            for (let i = 0; i < results.length; i++) {
                                createMarker(results[i]);
                            }
                        }
                    }
                );
            },
            () => {
                handleLocationError(true, infoWindow, map.getCenter());
            }
        );
    } else {
        handleLocationError(false, infoWindow, map.getCenter());
    }
}

function createMarker(place) {
    const marker = new google.maps.Marker({
        map,
        position: place.geometry.location,
    });
    google.maps.event.addListener(marker, "click", () => {
        infoWindow.setContent(place.name);
        infoWindow.open(map, marker);
    });
}

function handleLocationError(browserHasGeolocation, infoWindow, pos) {
    infoWindow.setPosition(pos);
    infoWindow.setContent(
        browserHasGeolocation
            ? "Error: 위치 서비스 실패"
            : "Error: 브라우저가 위치 서비스를 지원하지 않습니다"
    );
    infoWindow.open(map);
}

window.initMap = initMap;

와우! 꽤 긴 코드네요. 하나씩 살펴볼까요?

  1. 먼저 initMap 함수에서 Google Map을 초기화합니다.
  2. 그 다음, navigator.geolocation을 사용해 사용자의 현재 위치를 가져옵니다.
  3. 위치 정보를 성공적으로 가져오면, 그 위치를 중심으로 지도를 다시 설정하고 마커를 표시합니다.
  4. 주변 장소(여기서는 음식점)를 검색하고, 각 장소에 대해 마커를 생성합니다.
  5. 마커를 클릭하면 해당 장소의 이름이 표시됩니다.

이렇게 해서 우리는 사용자의 현재 위치를 중심으로 주변 음식점을 보여주는 간단한 위치 기반 서비스를 만들었어요! 어떤가요? 생각보다 어렵지 않죠? 😊

위치 기반 서비스 작동 원리 현재 위치 음식점 A 음식점 B 음식점 C 반경 500m 내 음식점 검색

이 그림은 우리가 만든 위치 기반 서비스의 작동 원리를 보여줍니다. 사용자의 현재 위치를 중심으로 반경 500m 내의 음식점들을 검색하고 표시하는 모습이죠. 이해가 더 잘 되시나요? 😊

이제 여러분은 기본적인 위치 기반 서비스를 만들 수 있게 되었어요! 🎉 이 기술을 응용하면 정말 다양한 서비스를 만들 수 있답니다. 예를 들어:

  • 근처 주유소 찾기
  • 가까운 병원 응급실 안내
  • 실시간 교통 정보 제공
  • 위치 기반 게임 (Pokemon GO 같은)
  • 그리고 물론, 재능넷에서 주변의 재능 판매자를 찾는 기능도요! 👨‍🎨👩‍🍳

가능성은 무궁무진합니다! 여러분의 상상력이 이 기술의 한계를 결정하는 거죠.

자, 이제 우리는 지오로케이션 API를 사용해 실제로 동작하는 위치 기반 서비스를 만들어보았어요. 어떠셨나요? 생각보다 쉽지 않았나요? 😊

하지만 잠깐! 우리가 만든 이 서비스에는 몇 가지 개선할 점이 있어요. 다음 섹션에서는 이 서비스를 어떻게 더 발전시킬 수 있는지, 그리고 실제 서비스를 개발할 때 고려해야 할 점들에 대해 알아보도록 하겠습니다. Ready for more? Let's go! 🚀

4. 위치 기반 서비스 개선하기 🔧

우리가 만든 위치 기반 서비스, 정말 멋지죠? 하지만 실제 서비스로 발전시키려면 아직 갈 길이 멀어요. 어떤 점들을 개선하고 고려해야 할까요? 함께 알아봅시다! 🕵️‍♀️

1. 성능 최적화 🚀

우리의 서비스가 많은 사용자를 대상으로 한다면, 성능 최적화는 필수입니다. 특히 위치 정보를 자주 업데이트해야 하는 경우에는 더욱 그렇죠.


let watchId;

function startLocationWatch() {
    if (navigator.geolocation) {
        watchId = navigator.geolocation.watchPosition(successCallback, errorCallback, {
            enableHighAccuracy: true,
            timeout: 5000,
            maximumAge: 0
        });
    }
}

function stopLocationWatch() {
    if (watchId != null) {
        navigator.geolocation.clearWatch(watchId);
        watchId = null;
    }
}

이 코드는 watchPosition() 메서드를 사용해 사용자의 위치 변화를 지속적으로 추적합니다. 하지만 이 방법은 배터리 소모가 크기 때문에, 꼭 필요한 경우에만 사용하고 그렇지 않을 때는 clearWatch()로 추적을 중지해야 해요.

2. 에러 처리 개선 🛠️

위치 정보를 가져오는 데 실패할 수 있는 다양한 상황에 대비해야 합니다.


function errorCallback(error) {
    switch(error.code) {
        case error.PERMISSION_DENIED:
            console.log("사용자가 위치 정보 제공을 거부했습니다.");
            break;
        case error.POSITION_UNAVAILABLE:
            console.log("위치 정보를 사용할 수 없습니다.");
            break;
        case error.TIMEOUT:
            console.log  ("위치 정보 요청이 시간 초과되었습니다.");
            break;
        case error.UNKNOWN_ERROR:
            console.log("알 수 없는 오류가 발생했습니다.");
            break;
    }
}

이렇게 각 에러 상황에 맞는 메시지를 제공하면 사용자 경험을 크게 향상시킬 수 있어요.

3. 보안 및 프라이버시 강화 🔒

위치 정보는 매우 민감한 개인정보입니다. 따라서 보안과 프라이버시 보호에 특별히 신경 써야 해요.

  • HTTPS를 사용하여 데이터 전송을 암호화하세요.
  • 사용자에게 위치 정보 사용 목적을 명확히 설명하고 동의를 받으세요.
  • 필요 이상의 정확한 위치 정보를 수집하지 마세요.
  • 수집한 위치 정보는 안전하게 저장하고, 더 이상 필요하지 않다면 즉시 삭제하세요.

4. 사용자 경험(UX) 개선 😊

위치 정보를 가져오는 동안 사용자가 기다려야 할 수 있습니다. 이때 로딩 인디케이터를 표시하면 좋겠죠?


function showLoading() {
    document.getElementById('loading').style.display = 'block';
}

function hideLoading() {
    document.getElementById('loading').style.display = 'none';
}

navigator.geolocation.getCurrentPosition(
    (position) => {
        hideLoading();
        // 위치 정보 처리
    },
    (error) => {
        hideLoading();
        // 에러 처리
    },
    {
        enableHighAccuracy: true,
        timeout: 5000,
        maximumAge: 0
    }
);

showLoading();

5. 오프라인 지원 📵

네트워크 연결이 불안정한 상황에서도 서비스가 동작할 수 있도록 오프라인 지원을 고려해보세요. 서비스 워커(Service Worker)를 사용하면 오프라인 상태에서도 기본적인 기능을 제공할 수 있어요.


if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/sw.js').then(function(registration) {
        console.log('Service Worker 등록 성공:', registration.scope);
    }).catch(function(error) {
        console.log('Service Worker 등록 실패:', error);
    });
}

6. 다양한 기기 지원 📱💻

위치 기반 서비스는 다양한 기기에서 사용될 수 있습니다. 반응형 디자인을 적용하고, 다양한 브라우저와 기기에서 테스트해보세요.


@media (max-width: 600px) {
    #map {
        height: 300px;
    }
}

@media (min-width: 601px) and (max-width: 900px) {
    #map {
        height: 400px;
    }
}

@media (min-width: 901px) {
    #map {
        height: 500px;
    }
}

7. 접근성 고려 ♿

모든 사용자가 서비스를 이용할 수 있도록 접근성을 고려해야 합니다. 예를 들어, 스크린 리더 사용자를 위해 적절한 ARIA 속성을 추가할 수 있습니다.


<div id="map" role="region" aria-label="지도"></div>
위치 기반 서비스 개선 사항 위치 기반 서비스 성능 최적화 에러 처리 보안 강화 UX 개선 오프라인 지원 다양한 기기 지원 접근성 고려

이 그림은 우리가 방금 논의한 위치 기반 서비스의 주요 개선 사항들을 보여줍니다. 각각의 요소가 서비스의 중심을 둘러싸고 있죠? 이 모든 요소들이 조화롭게 작용할 때, 우리는 진정으로 훌륭한 위치 기반 서비스를 만들 수 있답니다. 😊

와우! 우리가 만든 간단한 위치 기반 서비스를 이렇게나 많이 개선할 수 있다니 놀랍지 않나요? 이 모든 개선 사항들을 한 번에 적용하는 것은 어려울 수 있지만, 하나씩 차근차근 적용해 나간다면 결국 훌륭한 서비스를 만들 수 있을 거예요.

여러분, 이제 위치 기반 서비스 개발의 기초부터 심화까지 모두 배웠습니다. 🎓 이 지식을 바탕으로 여러분만의 창의적인 위치 기반 서비스를 만들어보는 건 어떨까요? 재능넷에서 주변의 재능 판매자를 찾는 기능을 구현하거나, 아니면 완전히 새로운 아이디어의 서비스를 만들어볼 수도 있겠죠.

기억하세요. 코딩의 세계에서 여러분의 상상력이 곧 한계입니다. 끊임없이 도전하고, 학습하고, 개선해 나가세요. 그 과정 자체가 개발자로서 성장하는 길이랍니다.

자, 이제 여러분의 차례예요! 여러분만의 멋진 위치 기반 서비스를 만들어보세요. 그리고 그 과정에서 어려움이 있다면 언제든 다시 이 글을 참고해주세요. 여러분의 도전을 응원합니다! 화이팅! 🚀👨‍💻👩‍💻

관련 키워드

  • 지오로케이션 API
  • 위치 기반 서비스
  • JavaScript
  • Google Maps API
  • 위도
  • 경도
  • 성능 최적화
  • 보안
  • 사용자 경험(UX)
  • 접근성

지적 재산권 보호

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

* 간단한 VBA 구현, 함수구현 10,000원 진행 됩니다!* 추구하는 엑셀 프로그램 *1. 프로그램 전체 엑셀 고유의 직관적입 입력! (키보드로 빠르게 ...

프로그램 개발자입니다. ERP, WMS, MES 등과 같은 산업용 프로그램, 설비 인터페이스 프로그램 등을 주로 개발하였습니다.현재는 모 대기업의...

#### 결재 먼저 하지 마시고 쪽지 먼저 주세요. ######## 결재 먼저 하지 마시고 쪽지 먼저 주세요. ####안녕하세요. C/C++/MFC/C#/Python 프...

📚 생성된 총 지식 10,587 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창