#333 55개의 스레드 ✕ 해제
이온디
이온디 1개월 전
2025. 06. 17 초고 작성 개발자들을 위한 나라는 없다 누구나 개발자가 될 수 있는 시대, 진짜 개발자의 가치를 찾아서 PDF 다운로드 온라인으로 읽기 새벽 3시, 모니터 앞에서 에너지드링크를 마시며 버그와 씨름하던 그 시절이 있었다. ChatGPT가 내가 3일간 짠 코드를 5분 만에 뚝딱 만들어내는 걸 보고 나서, 문득 이런 생각이 들었다. "개발자들을 위한 나라… 2025. 06. 17 초고 작성 개발자들을 위한 나라는 없다 누구나 개발자가 될 수 있는 시대, 진짜 개발자의 가치를 찾아서 PDF 다운로드 온라인으로 읽기 새벽 3시, 모니터 앞에서 에너지드링크를 마시며 버그와 씨름하던 그 시절이 있었다. ChatGPT가 내가 3일간 짠 코드를 5분 만에 뚝딱 만들어내는 걸 보고 나서, 문득 이런 생각이 들었다. "개발자들을 위한 나라는 정말 없는 건 아닐까?" 하지만 몇 달 후, 완전히 다른 결론에 도달했다. 이 책은 그 과정의 기록이다. AI 시대에 개발자의 가치가 사라지는 게 아니라, 모든 사람이 개발자가 되는 시대가 오고 있다는 이야기. 목차 프롤로그 개발자라는 직업의 종말과 시작 1장 10년 차 개발자가 ChatGPT에게 밀린 날 2장 AI가 5분 만에 해치운 나의 3일짜리 작업 3장 "코딩 몰라도 앱 만든다"는 거짓말과 진실 4장 카페 사장이 만든 POS 시스템 5장 AI 개발 도구 완전 정복 가이드 6장 코딩을 몰라도 되는 것 vs 반드시 알아야 하는 것 7장 일반인 개발자의 현실적 한계와 극복법 8장 전문 개발자의 생존 전략 9장 모든 직업이 개발자를 포함하는 시대 10장 사이드프로젝트의 종말, 개인프로젝트의 시작 에필로그 개발자로 살아남는다는 것의 새로운 의미 작성 시점 안내 이 책은 2025년 6월의 AI 기술 환경을 기준으로 작성되었습니다. AI의 발전 속도는 상상을 초월하기 때문에, 일부 내용은 현재 시점과 다를 수 있습니다. 당시의 기록으로 읽어주세요. 브라우저가 PDF 뷰어를 지원하지 않습니다. PDF를 다운로드하세요.
이온디
이온디 6개월 전
Laravel/CodeIgniter 프레임워크와 WordPress/Rhymix CMS의 근본적인 차이 핵심 철학 차이 프레임워크 (Laravel/CodeIgniter) "빈 캔버스에서 시작해서 모든 것을 직접 만든다" 시작점: 0% 완성도: 당신이 만드는 만큼 자유도: 100% 책임: 100% (모든 것을 직접 결정) 개발 철학: - 모든 것을 직접 설계하고 구현 - 프로젝트 요구사항에 완벽히 맞춤 - 코드 레벨의 완전한 제어 CMS (WordPress/Rhymix) … Laravel/CodeIgniter 프레임워크와 WordPress/Rhymix CMS의 근본적인 차이 핵심 철학 차이 프레임워크 (Laravel/CodeIgniter) "빈 캔버스에서 시작해서 모든 것을 직접 만든다" 시작점: 0% 완성도: 당신이 만드는 만큼 자유도: 100% 책임: 100% (모든 것을 직접 결정) 개발 철학: - 모든 것을 직접 설계하고 구현 - 프로젝트 요구사항에 완벽히 맞춤 - 코드 레벨의 완전한 제어 CMS (WordPress/Rhymix) "이미 완성된 시스템을 커스터마이징한다" 시작점: 60-80% (이미 완성됨) 완성도: 기본 기능 즉시 사용 가능 자유도: 70% (구조는 정해져 있음) 책임: 30% (핵심은 이미 구현됨) 개발 철학: - 이미 완성된 시스템 활용 - 필요한 부분만 커스터마이징 - 설정과 확장 중심 프로젝트 시작 비교 과제: "회원제 커뮤니티 + 쇼핑몰 만들기" Laravel 방식 (프레임워크) # 1. 프로젝트 생성 composer create-project laravel/laravel myproject cd myproject # 2. 필요한 패키지 설치 composer require laravel/breeze # 인증 composer require spatie/laravel-permission # 권한 composer require intervention/image # 이미지 composer require maatwebsite/excel # 엑셀 # 3. 프론트엔드 설정 npm install npm install tailwindcss @headlessui/react # 4. 데이터베이스 설계 php artisan make:migration create_users_table php artisan make:migration create_posts_table php artisan make:migration create_products_table php artisan make:migration create_orders_table # ... 20-30개 마이그레이션 # 5. 모델 생성 php artisan make:model User php artisan make:model Post php artisan make:model Product php artisan make:model Order # ... 20-30개 모델 # 6. 컨트롤러 생성 php artisan make:controller UserController php artisan make:controller PostController php artisan make:controller ProductController # ... 20-30개 컨트롤러 # 7. 각 기능 구현 - 회원가입/로그인 구현 - 게시판 CRUD 구현 - 파일 업로드 구현 - 권한 시스템 구현 - 댓글 시스템 구현 - 장바구니 구현 - 결제 시스템 구현 - 관리자 페이지 구현 ... 개발 지표: - ⏱️ 개발 기간: 3-6개월 - 예상 비용: 1,000-3,000만원 - ‍ 필요 인력: 백엔드 2명 + 프론트엔드 1명 - 코드량: 10,000-30,000줄 Rhymix 방식 (CMS) # 1. 설치 wget https://github.com/rhymix/rhymix/releases/latest # 웹 인터페이스로 설치 (5분) # 2. 기본 설정 - 관리자 계정 생성 (자동) - 사이트 정보 입력 - 레이아웃 선택 # 3. 모듈 설치 (클릭 몇 번) - 게시판 모듈 (이미 설치됨) - 쇼핑몰 모듈 설치 (클릭) - 회원 모듈 (이미 설치됨) # 4. 게시판 생성 (GUI) - "게시판 추가" 클릭 - 제목, URL, 권한 설정 - 스킨 선택 - 완료! # 5. 쇼핑몰 설정 (GUI) - 상품 카테고리 생성 - 결제 모듈 설정 (이미 있음) - 배송 설정 - 완료! # 6. 커스터마이징 (필요시) - 스킨 수정 - 위젯 배치 - 애드온 설치 개발 지표: - ⏱️ 설정 기간: 1-2주 - 예상 비용: 100-300만원 - ‍ 필요 인력: 개발자 1명 또는 기획자도 가능 - 코드량: 0-2,000줄 (커스텀하는 경우만) 개발 워크플로우 상세 비교 시나리오: "공지사항 게시판 추가" Laravel 프레임워크 방식 1단계: 데이터베이스 설계 php artisan make:migration create_notices_table // database/migrations/xxxx_create_notices_table.php public function up() { Schema::create('notices', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->foreignId('user_id')->constrained(); $table->boolean('is_pinned')->default(false); $table->integer('view_count')->default(0); $table->timestamps(); $table->softDeletes(); }); } 2단계: 모델 생성 php artisan make:model Notice // app/Models/Notice.php class Notice extends Model { protected $fillable = ['title', 'content', 'is_pinned']; public function user() { return $this->belongsTo(User::class); } public function scopePinned($query) { return $query->where('is_pinned', true); } } 3단계: 컨트롤러 생성 php artisan make:controller NoticeController --resource // app/Http/Controllers/NoticeController.php class NoticeController extends Controller { public function index() { $pinned = Notice::pinned()->latest()->get(); $notices = Notice::latest()->paginate(20); return view('notices.index', compact('pinned', 'notices')); } public function create() { $this->authorize('create', Notice::class); return view('notices.create'); } public function store(StoreNoticeRequest $request) { $notice = Notice::create($request->validated()); return redirect()->route('notices.show', $notice); } // ... show, edit, update, destroy } 4단계: Form Request 생성 php artisan make:request StoreNoticeRequest // app/Http/Requests/StoreNoticeRequest.php class StoreNoticeRequest extends FormRequest { public function rules() { return [ 'title' => 'required|max:255', 'content' => 'required', 'is_pinned' => 'boolean', ]; } } 5단계: Policy 생성 (권한) php artisan make:policy NoticePolicy // app/Policies/NoticePolicy.php class NoticePolicy { public function create(User $user) { return $user->hasRole('admin'); } public function update(User $user, Notice $notice) { return $user->id === $notice->user_id || $user->hasRole('admin'); } } 6단계: 라우트 등록 // routes/web.php Route::resource('notices', NoticeController::class); 7단계: 뷰 작성 (5개 파일) // resources/views/notices/index.blade.php // resources/views/notices/create.blade.php // resources/views/notices/edit.blade.php // resources/views/notices/show.blade.php // resources/views/notices/partials/form.blade.php 8단계: 테스트 작성 php artisan make:test NoticeTest // tests/Feature/NoticeTest.php public function test_admin_can_create_notice() { $admin = User::factory()->create(['role' => 'admin']); $response = $this->actingAs($admin) ->post('/notices', [ 'title' => 'Test Notice', 'content' => 'Test Content', ]); $response->assertRedirect(); $this->assertDatabaseHas('notices', ['title' => 'Test Notice']); } 총 작업량: - ⏱️ 시간: 4-8시간 - 파일: 10-15개 - 코드: 500-1,000줄 - 테스트: 필수 Rhymix CMS 방식 GUI로 5분 만에 완료 1. 관리자 페이지 접속 2. "게시판 관리" 클릭 3. "게시판 추가" 클릭 4. 폼 작성: - 게시판 이름: 공지사항 - 게시판 ID: notice - 리스트 수: 20 - 쓰기 권한: 관리자만 - 읽기 권한: 전체 - 댓글: 사용 - 스킨: 기본 스킨 선택 5. "저장" 클릭 6. 완료! 추가 설정 (선택): - 공지글 기능: 체크박스 체크 - 분류 추가: "중요", "일반" 등 - 에디터 설정: 위지윅/마크다운 선택 총 작업량: - ⏱️ 시간: 5분 - 파일: 0개 - 코드: 0줄 커스텀 스킨 만드는 경우: - ⏱️ 시간: +2-4시간 - 파일: 3-5개 - 코드: 200-500줄 ️ 코드 구조 비교 Laravel 프로젝트 구조 myproject/ ├── app/ │ ├── Http/ │ │ ├── Controllers/ # 비즈니스 로직 │ │ │ ├── UserController.php │ │ │ ├── PostController.php │ │ │ └── ProductController.php │ │ ├── Middleware/ # 미들웨어 │ │ └── Requests/ # 폼 검증 │ ├── Models/ # 데이터 모델 │ │ ├── User.php │ │ ├── Post.php │ │ └── Product.php │ └── Policies/ # 권한 정책 ├── database/ │ ├── migrations/ # 데이터베이스 버전 관리 │ │ ├── 2024_01_01_create_users_table.php │ │ ├── 2024_01_02_create_posts_table.php │ │ └── ... (수십 개) │ └── seeders/ # 테스트 데이터 ├── resources/ │ ├── views/ # Blade 템플릿 │ │ ├── posts/ │ │ │ ├── index.blade.php │ │ │ ├── show.blade.php │ │ │ └── create.blade.php │ │ └── layouts/ │ └── js/ # 프론트엔드 │ └── app.js ├── routes/ │ ├── web.php # 라우트 정의 │ └── api.php ├── tests/ # 테스트 │ ├── Feature/ │ └── Unit/ └── composer.json # 의존성 관리 특징: - ‍ 개발자가 모든 것을 직접 작성 - 코드 소유권: 100% - 자유도: 100% Rhymix 프로젝트 구조 rhymix/ ├── modules/ # 코어 모듈 (건드리지 않음!) │ ├── board/ # 게시판 (이미 완성) │ ├── member/ # 회원 (이미 완성) │ ├── comment/ # 댓글 (이미 완성) │ └── file/ # 파일 (이미 완성) ├── layouts/ # 여기서 커스터마이징 │ ├── my_layout/ │ │ ├── layout.html │ │ └── layout.css │ └── el_api/ # 커스텀 레이아웃 │ └── ... ├── addons/ # 플러그인 │ └── my_addon/ ├── widgets/ # 위젯 │ └── my_widget/ └── files/ # 사용자 파일 ├── config/ # 설정 (GUI로 관리) └── cache/ # 캐시 특징: - ‍ 개발자는 커스터마이징만 - 코드 소유권: 10-30% - 자유도: 70% (구조는 정해짐) 확장 방법 비교 시나리오: "좋아요 기능 추가" Laravel 방식 1. 마이그레이션 php artisan make:migration create_likes_table Schema::create('likes', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained(); $table->morphs('likeable'); // 다형성 관계 $table->timestamps(); $table->unique(['user_id', 'likeable_id', 'likeable_type']); }); 2. Trait 생성 // app/Traits/Likeable.php trait Likeable { public function likes() { return $this->morphMany(Like::class, 'likeable'); } public function isLikedBy(User $user) { return $this->likes()->where('user_id', $user->id)->exists(); } public function like(User $user) { return $this->likes()->firstOrCreate(['user_id' => $user->id]); } } 3. 모델에 적용 class Post extends Model { use Likeable; } class Comment extends Model { use Likeable; } 4. 컨트롤러 class LikeController extends Controller { public function toggle(Request $request) { $likeable = $this->findLikeable( $request->type, $request->id ); if ($likeable->isLikedBy($request->user())) { $likeable->unlike($request->user()); return response()->json(['liked' => false]); } $likeable->like($request->user()); return response()->json(['liked' => true]); } } 5. 프론트엔드 // Alpine.js <button @click="toggleLike" x-data="{ liked: {{ $post->isLikedBy(auth()->user()) }} }"> <span x-show="!liked">♡</span> <span x-show="liked">♥</span> {{ $post->likes->count() }} </button> 작업량: - ⏱️ 시간: 3-4시간 - 파일: 5-7개 - 코드: 300-500줄 Rhymix 방식 애드온 설치 (2분) 1. 관리자 > 애드온 2. "좋아요 애드온" 검색 3. 설치 4. 활성화 5. 설정 (적용할 게시판 선택) 6. 완료! 직접 제작하는 경우 // addons/my_like/my_like.addon.php if ($called_position == 'before_module_proc') { if (Context::get('act') == 'dispBoardContent') { $oDocumentModel = getModel('document'); $document_srl = Context::get('document_srl'); $voted_count = $oDocumentModel->getDocument($document_srl)->get('voted_count'); Context::set('like_count', $voted_count); } } <!-- addons/my_like/tpl/like_button.html --> <div class="like-button"> <a href="#" onclick="doVote({$document_srl}); return false;"> <i class="fa fa-heart"></i> <span>{$like_count}</span> </a> </div> 작업량: - ⏱️ 설치: 2분 - ⏱️ 직접 제작: 1-2시간 - 파일: 2-3개 - 코드: 50-150줄 실제 프로젝트: "중고거래 커뮤니티" 요구사항 - 회원가입/로그인 - 게시판 (판매글, 구매글, 자유게시판) - 댓글/대댓글 - 좋아요/스크랩 - 쪽지 - 알림 - 검색 - 파일 업로드 - 관리자 페이지 Laravel 개발 일정 Week 1-2: 기획 및 설계 - ERD 설계 - API 명세서 작성 - 화면 설계 Week 3-4: 기본 구조 - 프로젝트 셋업 - 인증 시스템 구현 - 데이터베이스 마이그레이션 Week 5-6: 게시판 기능 - 게시판 CRUD - 파일 업로드 - 검색 기능 Week 7-8: 커뮤니티 기능 - 댓글 시스템 - 좋아요/스크랩 - 쪽지 시스템 Week 9-10: 고급 기능 - 알림 시스템 - 관리자 페이지 - 통계 Week 11-12: 테스트 및 최적화 - 단위 테스트 - 통합 테스트 - 성능 최적화 프로젝트 요약: - 총 기간: 3개월 - 총 비용: 2,000-3,000만원 - 인력: 백엔드 2명, 프론트엔드 1명, 디자이너 1명 Rhymix 개발 일정 Week 1: 설치 및 기본 설정 Day 1: - Rhymix 설치 - 사이트 정보 설정 - 레이아웃 선택/적용 Day 2-3: - 게시판 생성 (판매/구매/자유) - 카테고리 설정 - 권한 설정 Day 4-5: - 회원 설정 (가입 양식, 프로필) - 쪽지 모듈 설정 - 알림 애드온 설치 Week 2: 커스터마이징 Day 1-2: - 스킨 수정 (CSS/HTML) - 로고/디자인 적용 Day 3-4: - 위젯 배치 - 메뉴 구성 - 메인 페이지 디자인 Day 5: - 테스트 및 버그 수정 프로젝트 요약: - 총 기간: 2주 - 총 비용: 200-500만원 - 인력: 개발자 1명 기능별 개발 시간 비교 기능 Laravel Rhymix 회원가입/로그인 2-3일 0일 (내장) 이메일 인증 1일 0일 (내장) 소셜 로그인 2-3일 10분 (애드온) 게시판 CRUD 3-4일 5분 (GUI) 파일 업로드 1-2일 0일 (내장) 댓글 시스템 2-3일 0일 (내장) 검색 2-3일 0일 (내장) 권한 관리 3-4일 10분 (GUI) 관리자 페이지 5-7일 0일 (내장) 쪽지 2-3일 5분 (모듈) 알림 2-3일 5분 (애드온) 통계 2-3일 10분 (위젯) 총 개발 시간: - Laravel: 30-40일 (순수 개발 시간) - Rhymix: 2-3일 (커스터마이징만) 시간 차이: 약 15배 디자인 커스터마이징 Laravel // resources/views/layouts/app.blade.php <!DOCTYPE html> <html> <head> @vite(['resources/css/app.css', 'resources/js/app.js']) </head> <body> @include('partials.header') <main> @yield('content') </main> @include('partials.footer') </body> </html> /* resources/css/app.css */ @tailwind base; @tailwind components; @tailwind utilities; .custom-button { @apply px-4 py-2 bg-blue-500 text-white rounded; } 자유도: ⭐⭐⭐⭐⭐ (완전 자유) 난이도: ⭐⭐⭐⭐ (처음부터 다 만들어야 함) Rhymix <!-- layouts/my_layout/layout.html --> @version(2) <header> <div class="logo"> <img src="{$layout_info->logo}" /> </div> <nav> @foreach($main_menu->list as $menu) <a href="{{ $menu->url }}">{{ $menu->text }}</a> @endforeach </nav> </header> <main> {!! $content !!} </main> /* layouts/my_layout/layout.css */ .logo img { height: 40px; } nav a { padding: 10px 20px; color: #333; } 자유도: ⭐⭐⭐⭐ (구조는 정해짐, 스타일은 자유) 난이도: ⭐⭐ (템플릿 수정만) 유지보수 비교 Laravel 정기 업데이트: - Laravel 메이저 업데이트: 연 1회 - 의존성 패키지 업데이트: 월 1-2회 - 보안 패치: 수시 업데이트 절차: composer update php artisan migrate npm update npm run build 예상 시간: 2-4시간/월 주의사항: - Breaking changes 있을 수 있음 - 패키지 호환성 확인 필요 - 테스트 필수 Rhymix 정기 업데이트: - Rhymix 업데이트: 월 1-2회 - 모듈/애드온 업데이트: 수시 업데이트 절차: 1. 관리자 > 시스템 > 업데이트 2. "업데이트" 버튼 클릭 3. 완료! 예상 시간: 10분/월 주의사항: - 자동 백업 권장 - 스킨 수정한 경우 확인 필요 총 소유 비용 (TCO) 3년 운영 기준 Laravel 프로젝트 초기 개발: 2,000만원 연간 유지보수: 600만원 3년 총 비용: 3,800만원 내역: - 개발 (3개월): 2,000만원 - 호스팅 (월 10만원): 360만원 - 유지보수 (월 15만원): 540만원 - 기능 추가 (평균): 300만원 Rhymix 프로젝트 초기 개발: 300만원 연간 유지보수: 150만원 3년 총 비용: 750만원 내역: - 설치/설정 (1주): 100만원 - 스킨 제작: 200만원 - 호스팅 (월 5만원): 180만원 - 유지보수 (월 3만원): 108만원 - 기능 추가 (애드온): 12만원 비용 차이: 약 5배 선택 가이드 Laravel (프레임워크)를 선택해야 하는 경우 ✅ 이런 경우 추천: - 완전히 커스텀 기능이 필요하다 - 복잡한 비즈니스 로직이 있다 - 외부 API 연동이 많다 - 마이크로서비스 아키텍처다 - 팀 협업 개발이다 - 장기적으로 대규모 확장 예정이다 - 글로벌 서비스다 예시 프로젝트: - 핀테크 서비스 - SaaS 플랫폼 - 복잡한 예약 시스템 - 맞춤형 ERP/CRM Rhymix (CMS)를 선택해야 하는 경우 ✅ 이런 경우 추천: - 게시판/커뮤니티가 핵심이다 - 빠르게 런칭해야 한다 - 예산이 제한적이다 - 비개발자도 관리할 수 있어야 한다 - 한국 사용자 대상이다 - 표준 기능으로 충분하다 예시 프로젝트: - 커뮤니티 사이트 - 기업 홈페이지 (게시판 중심) - 학교/교회 웹사이트 - 중소 쇼핑몰 - 인트라넷 하이브리드 접근법: Rhymix + React 장점 ✅ Rhymix의 빠른 개발 (회원, 게시판, 파일 등) ✅ React의 현대적 UI/UX ✅ API 기반으로 나중에 앱 개발 가능 ✅ 개발자 경험 좋음 구조 Rhymix (백엔드) ├── 회원 시스템 (내장) ├── 권한 관리 (내장) ├── 파일 처리 (내장) ├── API 모듈 (REST API 제공) └── 데이터베이스 관리 React (프론트엔드) ├── el_api (레이아웃) ├── eb_api (게시판 스킨) └── 현대적 UI/UX 비교 항목 Rhymix만 Laravel + React Rhymix + React 개발 기간 2주 3개월 3-4주 ⭐ 비용 300만원 3,000만원 800만원 ⭐ UI/UX 전통적 현대적 현대적 ⭐ 확장성 보통 높음 높음 ⭐ 결론 프레임워크 (Laravel/CodeIgniter) "백지에서 시작하는 완전한 자유" ✅ 원하는 대로 다 만들 수 있다 ✅ 현대적이고 확장성 좋다 ❌ 모든 것을 직접 만들어야 한다 ❌ 개발 시간과 비용이 많이 든다 CMS (WordPress/Rhymix) "80% 완성된 시스템을 20% 커스터마이징" ✅ 기본 기능은 이미 있다 ✅ 빠르고 저렴하게 완성할 수 있다 ❌ 표준 기능에서 크게 벗어나기 어렵다 ❌ 특정 분야에 최적화 추천 로드맵 스타트업/MVP ↓ Rhymix (빠른 검증) ↓ 성장기 ↓ Rhymix + React (현대화) ↓ 대규모 확장 필요시 ↓ Laravel/Next.js로 마이그레이션 Rhymix + React가 좋은 중간 지점입니다! 핵심 요약 개발 속도 프레임워크: 느림 (3개월) CMS: 빠름 (2주) 차이: 6배 개발 비용 프레임워크: 높음 (2,000만원) CMS: 낮음 (300만원) 차이: 6배 자유도 프레임워크: 100% CMS: 70% 학습 곡선 프레임워크: 가파름 (2-3개월) CMS: 완만함 (1주) 적합한 프로젝트 프레임워크: 복잡한 커스텀 시스템 CMS: 표준 기능 중심 사이트 결론: 프로젝트 특성에 맞는 도구를 선택하는 것이 가장 중요합니다!
이온디
이온디 2년 전
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>이온디닷컴</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding… <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>이온디닷컴</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; } .navbar { background-color: #333; color: white; padding: 15px; text-align: center; } .navbar a { color: white; margin: 0 15px; text-decoration: none; } .banner { background-color: #f4f4f4; padding: 50px; text-align: center; } .banner h1 { margin: 0; font-size: 2em; } .columns { display: flex; justify-content: space-around; padding: 20px; } .column { background-color: #eaeaea; padding: 20px; text-align: center; width: 30%; } .footer { background-color: #333; color: white; padding: 20px; text-align: center; } </style> </head> <body> <div class="navbar"> <a href="#">Projects</a> <a href="#">Store</a> <a href="#">Server</a> <a href="#">CMS/WEB</a> <a href="#">Freelancer</a> </div> <div class="banner"> <h1>Web Hosting Application</h1> <p>최고의 웹호스팅 서비스를 지금 바로 신청하세요!</p> </div> <div class="columns"> <div class="column"> <h2>Web Development Requests</h2> <p>웹사이트 제작 의뢰를 원하시면 간편의뢰 메뉴를 통해 바로 신청하세요!</p> </div> <div class="column"> <h2>CMS Content Sales</h2> <p>필요한 CMS 콘텐츠를 스토어에서 바로 구매하세요!</p> </div> <div class="column"> <h2>Freelancer Matching</h2> <p>프리랜서를 찾고 싶다면, 매칭 서비스를 이용해보세요!</p> </div> </div> <div class="footer"> <p>Contact Info | Social Media Links</p> </div> </body> </html>
이온디
이온디 8년 전
1. 애드온 제작자 : 윤삼 출처 : https://xetown.com/rxe_file/686198 2. 애드온 스킨 제작자 : 스낙스 출처 : http://calvinsnax.xyz/board/148 ap_parser.0.4.zip (20170828)★ - php 5.5.x 이하에서의 문법 오류 수정★ - file_get_contents 등의 함수 없애고 cURL 작동방식 개선(서버의 allow_url_fopen 설정 관계 없이 프리뷰 출력)★ - 파싱한 외부 이미지를 데이터 스트링으로 … 1. 애드온 제작자 : 윤삼 출처 : https://xetown.com/rxe_file/686198 2. 애드온 스킨 제작자 : 스낙스 출처 : http://calvinsnax.xyz/board/148 ap_parser.0.4.zip (20170828)★ - php 5.5.x 이하에서의 문법 오류 수정★ - file_get_contents 등의 함수 없애고 cURL 작동방식 개선(서버의 allow_url_fopen 설정 관계 없이 프리뷰 출력)★ - 파싱한 외부 이미지를 데이터 스트링으로 변환 출력(서버측 부담을 늘리고 외부 사이트 부하를 방지)★ (prologos님) - 네이버 금융, 부동산 우회 출력 기약 없는 향후 업데이트 계획 - 이미지 리사이즈 후 출력 (0.4 이후 발생하는 서버의 부담을 줄임) - 본문 출력 시에 링크 프리뷰가 호출되는 것이 아니라, 본문 입력 단계에서 링크 프리뷰 작동 -> 본문 소스에 그대로 포함 ... 현행 애드온 자체를 갈아 엎거나 새로운 애드온이 될 듯ㅋ ap_parser.0.3.7.zip (20170825) - php 5.3.x 이하에서의 문법 오류 버그 수정★ - 사용자가 파싱 예외 도메인을 textarea에서 지정할 수 있게 함 (웹지기님)★ - 로딩 이미지 안 나오게 할 수도 있는 옵션 추가 (socialskyo님)★ - 페이스북, 트위터, 인스타그램, 유튜브의 경우 임베드할지 아니면 보통 출력할지 선택할 수 있음 - 프리뷰 카드 출력 옵션 설정(좌, 우, 중앙) (socialskyo님) ... 스킨의 css 파일도 덮어쓰기 해야 함! - 인스타그램 (프로필 페이지에서) 최신 썸네일 이미지 12개 출력 + 일반 미디어 포스트는 바로 임베드- 유튜브 관련 주소 식별 버그 수정 및 플레이리스트 인식 - 이미지 주소가 상대경로로 되어 있을 경우 경로 앞에 도메인 자동 붙이기 ap_parser.0.3.6.zip (20170818) - load scroll resize 후 뷰포트 안에 들어올 때에만 로드★하는 방식으로 변경. 기존에는 링크 프리뷰 일괄 로드 방식. 링크가 다수 있는 문서의 경우 클라이언트측의 부하를 줄일 수 있으며, 링크가 특정 서버에 집중돼 있는 경우에는 디도스 혐의로 차단되는 문제를 방지할 수 있음 (socialskyo님, 기진곰님) - 링크에 다음 문단 첫 어절이 붙는 버그 해결★ (pock님, 라르게덴님) - 네이버 연예, 영화, 뮤직, 책, 웹툰, 사전 미리보기 출력★ - 다음 뉴스, 연예, 스포츠, 자동차, 영화 미리보기 출력★ - 카드 안의 주소를 호스트+도메인 형태로 간략화 + 그리고 주소 출력 여부 옵션 추가 (휴리파파님) - 임베드 형식의 Youtube의 경우 최대 넓이를 사용자가 지정하도록 옵션 추가 (웹지기님) - 링크 텍스트 삭제시 임베디드 링크도 텍스트 삭제에 포함 - css 일부 수정 (웹지기님) ap_parser.0.3.5.zip (20170815) - 출력에 실패할 경우, 즉 data를 받아오지 못할 경우 container 자동 삭제★ (socialskyo님) - 네이버 뉴스 및 카페 출력★ (웹지기님) - 유튜브 짧은 주소(youtu.be)도 인식 (socialskyo님) - 미리보기 출력시, 기존 링크 텍스트 삭제 옵션 추가 (pock님) - css 일부 수정 (웹지기님) ap_parser.0.3.4.zip (20170813) - 네이버 블로그도 미리보기 출력 가능(카페는 이미지 출력 실패ㅠ)★ - 본문에 &nbsp;가 있을 경우 파싱에 실패하는 문제 수정 - css에서 나타나는 미세한 오차들 수정 ap_parser.0.3.3.zip (20170812) - 유튜브도 iframe으로 임베딩 기능 추가★ - 트위터 임베드 방식 변경(포스트에서 thread 삭제, 타임라인에서 포스트는 최근 1개만 추출 및 컨테이너 높이 자동맞춤) - 다음 카페도 미리보기 출력 가능 - css에서 나타나는 미세한 오차들 수정 ap_parser.0.3.2.zip (20170811) - meta 태그 대표 이미지(og, twittercard, 본문 이미지 순) 우선 파싱 및 파싱 성공시 이미지 추가 수집 중지 기능★ - 트위터 및 페이스북은 파싱 대신 임베드 방식으로 출력★ (이거 땜에 이번 버전을 0.4로 할까 하다가 귀찮아서 그냥 0.3.2로만 올림ㅋ 단, 페이스북 그룹은 여전히 안 됨) - 다음 블로그도 미리보기 출력 가능 (카페는 아직 안 됨) ap_parser.0.3.1.zip (20170804) - 파싱할 이미지 최대 개수 지정함으로써 해당 개수 수집후 바로 출력★. 즉, 파싱 시간 단축 (웹지기님) - 파싱 동작시 .wfsr 감추기 (웹지기님) ap_parser.0.3.zip (20170804) - 링크 추출 대상 본문, 본문+댓글 옵션 제공 (착한악마님)★ - 자기 도메인 링크와 외부 도메인 링크 열기 방식 옵션 제공 (웹지기님)★ - 이미지 파싱 에러 발생 시, 그리고 에러 이미지 지정을 하지 않았거나 잘못 지정해서 경로를 찾을 수 없는 경우, 이미지 wrap 요소 전체를 삭제 ... 더불어 이전 버전에 제공됐던 에러 이미지(error.png)는 아무리 봐도 안 예뻐서 삭제 - a 태그 스타일(.ap_parser_info a{color: #333 !important;}) (웹지기님) ap_parser.0.2.1.zip (20170803) - 제목 및 내용 길이를 제한할 때, 아스키 코드 등으로 되어 있는 페이지 정보를 한글 문자로 인식하도록 우회 처리★ - 기본 스킨 css에서 margin과 padding 값에 !importnat 추가 (Booth님) - 모든 id값에 라이믹스 표준 user_content_ 접두어 추가 - url 주소 부분에 링크 추가 ap_parser.0.2.zip (20170802) - 제목 및 내용 길이 제한 가능 설정 추가 (팔공산님) - 권한 문제 등으로 이미지 파싱 에러 발생시 대체 이미지 출력 ------------------------------- 지난번에 잠깐 자랑했던 애드온인데 마켓에 올릴 정도는 아닌 거 같아서 그냥 자료 공유만 해봅니다. ap_parser.0.1.zip 몇 가지 측면에서 기술적 제약이 있어요. 1. 글쓰기할 때 링크를 파싱해오는 게 아니라는 점 2. 그래서 본문을 로딩할 때마다 파싱도 그때 그때 매번 새로 시도한다는 점 3. 스킨 폴더 설정도 완전 야매로 해놔서 제약이 꽤 있다는 점 등등등입니다. 그러니까, 실사용한다면 만족스럽지 못한 부분이 있을 거예요. 그럴 땐 과감히 쓰레기통에 버려주세요. 그냥 XE에서도 페북처럼 링크 파싱도 가능하겠구나, 하는 정도의 애드온인 걸요. 덧. 혹시라도 스킨을 추가 제작할 생각이 있으시다면, 다음 몇 가지 점에 유의하셔야 합니다. 1) 스킨 파일을 문자열로 읽어들이는 방식이기 때문에 애드온 변수 같은 건 사용할 수 없어요ㅜ 2) 그리고 스킨 파일(index.html)에 작은 따옴표도 들어가면 안 돼요. 그러면 오류 날 거예요;; 3) 디폴트 스킨에 있는 클래스 속성 이름을 함부로 변경하는 것도 안 돼요. 그러면 스크립트 오류 뿜~ 개발시에는 요소들의 위치만 바꾼다든지, 새로운 요소를 추가하는 것 정도만 될 거예요. ... 영 마음에 안 드실 거예요. 가까운 쓰레기통을 찾아주세요ㅠㅠ
이온디
이온디 8년 전
레이아웃을 만들다보면 XE의 템플릿 문법이 적용이 안되는 경우가 있습니다. cond는 되는데 loop문은 안된다던가, 이럴 때 테스트하는 방법입니다. 1. 레이아웃에 작성된 코드를 다 지우고 간단한 블럭 태그로 테스트를 해본다. <block cond="$logged_info">로그인됨</block> 2. 모두 지우고 안되는 부분만 작성해본다. 이렇게 확인해본바 저의 경우는 다음 코드 때문에 안되더군요. 안되던 코드 삽입해봅니다. <style>.uchat_wrap4744… 레이아웃을 만들다보면 XE의 템플릿 문법이 적용이 안되는 경우가 있습니다. cond는 되는데 loop문은 안된다던가, 이럴 때 테스트하는 방법입니다. 1. 레이아웃에 작성된 코드를 다 지우고 간단한 블럭 태그로 테스트를 해본다. <block cond="$logged_info">로그인됨</block> 2. 모두 지우고 안되는 부분만 작성해본다. 이렇게 확인해본바 저의 경우는 다음 코드 때문에 안되더군요. 안되던 코드 삽입해봅니다. <style>.uchat_wrap47445045_super {width:100px;height:550px;margin:0 !important;padding:0 !important;background:#ccc;overflow:hidden;}#uchat_wrap47445045, #uchat_wrap47445045 *, #uchat_wrap47445045 table, #uchat_wrap47445045 tr, #uchat_wrap47445045 td, #uchat_wrap47445045 input, #uchat_wrap47445045 label {width:auto;margin:0;padding:0;font-family:"Apple SD Gothic Neo","malgun gothic","nanumgothic"; font-size:12px; -ms-user-select:none; -moz-user-select:none; -webkit-user-select:none;font-size:12px;line-height:1.4;border:0;text-align:left;font-weight:normal;min-height:0;min-width:0;color:gray;}#uchat_wrap47445045 {width:98px;height:548px;position:relative; margin:1px;}#uchat_wrap47445045 .uchat_middle {background:#e1e1e1;height:499px;width:98px;overflow:hidden;}#uchat_wrap47445045 .uchat_middle:after{content:""; display:block; clear:both; height:0; visibility:hidden;}#uchat_wrap47445045 .uchat_middle .conversation_contents {word-wrap: break-word;background:white;overflow-y:scroll;-webkit-overflow-scrolling: touch;overflow-x:hidden;}#uchat_wrap47445045 .uchat_middle .conversation_contents .loading {padding:2px 0;font-size:12px;word-wrap:break-word;}#uchat_wrap47445045 .uchat_middle .conversation_contents .cs_contents {font-size:12px;}#uchat_wrap47445045 .uchat_middle .conversation_contents .conversation_nick {font-weight:bold;cursor:pointer;font-size:12px;line-height:1;}#uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation {padding:2px;font-size:12px;}#uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation span {}#uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation>span>img {max-width:100px; max-height:20px;}#uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation>img {max-width:25px; max-height:25px;vertical-align: middle;}#uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation span, #uchat_wrap47445045 .uchat_middle .conversation_contents .user_conversation img {}#uchat_wrap47445045 .uchat_middle .conversation_contents .notification {padding:2px 0;color:green;text-align:center;font-size:12px;}#uchat_wrap47445045 .uchat_middle .conversation_contents .system {padding:2px 0;color:red;margin:2px;text-align:left;font-size:12px;}#uchat_wrap47445045 .uchat_middle .conversation_contents .error {padding:2px 0;text-align:center;font-size:12px;}#uchat_wrap47445045 .uchat_middle .topbar {height: 38px;line-height:38px;overflow:hidden;padding:0 4px 0 14px;color:#535353;font-size:12px;font-weight:bold;border-bottom:1px solid #E4E8EC;background-color:#FFFFFF;}#uchat_wrap47445045 .uchat_middle .topbar .count {float:left;font-size:12pt;line-height:32px;overflow:hidden;height:32px}#uchat_wrap47445045 .uchat_middle .topbar a.setting_icon {float:right;width:18px;height:18px;background:url(../minitalk/skin/default/images/setting_icon.gif) no-repeat 0 0;cursor:pointer;margin:10px 13px 0 0;}#uchat_wrap47445045 .uchat_middle .topbar a:hover {border:0;text-decoration:none;}#uchat_wrap47445045 .uchat_middle .member_list {overflow-x:hidden; overflow-y:scroll;-webkit-overflow-scrolling: touch;background:white;}#uchat_wrap47445045 .uchat_middle .member_list .user {padding:2px;font-size:12px;white-space:nowrap;overflow:hidden;cursor:pointer;background:white;vertical-align: middle;}#uchat_wrap47445045 .uchat_middle .member_list .user>span>img {max-width:100px; max-height:20px;display:inline}#uchat_wrap47445045 .uchat_middle .member_list .user>img {max-width:25px; max-height:25px;display:inline}#uchat_wrap47445045 .uchat_middle .member_list .user span {height:12px;}#uchat_wrap47445045 .uchat_middle .member_list .user span, #uchat_wrap47445045 .uchat_middle .member_list .user img {vertical-align: middle;font-size:12px;}#uchat_wrap47445045 .uchat_middle .member_list .my_members, #uchat_wrap47445045 .uchat_middle .member_list .admin_members, #uchat_wrap47445045 .uchat_middle .member_list .is_members, #uchat_wrap47445045 .uchat_middle .member_list .no_members {font-size:0;line-height:0;}#uchat_wrap47445045 .user_menu_background {position:absolute;left:0px;top:0;width:98px;height:548px;background:#e1e1e1;z-index:1000;display:none;}#uchat_wrap47445045 .user_menu {padding:5px 3px;background:#fff;display:none;position:absolute;border:2px solid #a0dbc7;z-index:1100;}#uchat_wrap47445045 .user_menu .menu_list {padding:3px 0;font-size:12px;cursor:pointer;}#uchat_wrap47445045 .user_menu .menu_list .admin_login {width:112px;height:20px;}#uchat_wrap47445045 .user_menu .user_nick {background:#f5f5f5;font-size:12px;}#uchat_wrap47445045 .input { height:24px;width:98px;overflow:hidden;text-align:center;background:white;}#uchat_wrap47445045 .input .conversation {width:69px;height:20px;font-size:12px;ime-mode:active;}#uchat_wrap47445045 .none {float:left;font-size:0;line-height:0;width:0;height:0;overflow:hidden}#uchat_wrap47445045 .uchat_menu {background:url("http://cache.uchat.co.kr/uchat/img/menu_background.gif");width:98px;height:25px;overflow:hidden}#uchat_wrap47445045 .uchat_menu .uchat_s_logo {float:left;width:27px;height:25px;background:url("http://cache.uchat.co.kr/uchat/img/uchat_small.gif") 50% 50% no-repeat;}#uchat_wrap47445045 .uchat_menu .uchat_bold {float:left;width:16px;height:25px;background:url("http://cache.uchat.co.kr/uchat/img/text-bold-icon.gif") 0 50% no-repeat;cursor:pointer;}#uchat_wrap47445045 .uchat_menu .uchat_i {float:left;width:16px;height:25px;background:url("http://cache.uchat.co.kr/uchat/img/text-italic-icon.gif") 0 50% no-repeat;cursor:pointer;}#uchat_wrap47445045 .uchat_menu .uchat_underline {float:left;width:16px;height:25px;background:url("http://cache.uchat.co.kr/uchat/img/text-underline-icon.gif") 0 50% no-repeat;cursor:pointer;}#uchat_wrap47445045 .uchat_menu .uchat_text_color {float:left;width:16px;height:25px;background:black url("http://cache.uchat.co.kr/uchat/img/uchat_text_color.gif");cursor:pointer;}#uchat_wrap47445045 .uchat_menu .uchat_event_icon {float:right;width:20px;height:25px;background-repeat: no-repeat;background-position: center center; background-color: transparent;cursor:pointer}#uchat_wrap47445045 .uchat_menu .uchat_scroll {float:right;width:16px;height:25px;background:url("http://cache.uchat.co.kr/uchat/img/uchat_scroll.gif");cursor:pointer;}#uchat_wrap47445045 .uchat_color_wrap {width:112px;border:1px solid #ccc;position:absolute;background:#f2f2f2;display:none;}#uchat_wrap47445045 .uchat_color_wrap .uchat_color_title {text-align:center;width:112px;padding:7px 0;border-bottom:1px solid #ccc;font-size:12px;}#uchat_wrap47445045 .uchat_color_wrap .uchat_color_box {width:112px;border-top:1px solid #fff;}#uchat_wrap47445045 .uchat_color_wrap .uchat_color_box:after {display:block;clear:both;content:""}#uchat_wrap47445045 .uchat_color_wrap .uchat_color {float:left;cursor:pointer;width:14px;height:14px;font-size:0;line-height:0;}#uchat_wrap47445045 .uchat_setting_wrap {width:150px;overflow:hidden;border:2px solid #a0dbc7;position:absolute;display:none;background:#fff;z-index:1100;}#uchat_wrap47445045 .uchat_setting_wrap .top {border-bottom:1px solid #cecece;text-align:center;padding:5px 0;font-size:14px;}#uchat_wrap47445045 .uchat_setting_wrap .top span {height:12px;}#uchat_wrap47445045 .uchat_setting_wrap .content {border-top:1px solid #f7f7f7;padding:5px;}#uchat_wrap47445045 .uchat_setting_wrap .floor{margin-bottom:7px;}#uchat_wrap47445045 .uchat_setting_wrap .floor input.no_sound{width:12px;height:12px;border:0;}#uchat_wrap47445045 .uchat_nick { width: 100%;}#uchat_wrap47445045 .alert_btn_wrap {text-align:right;margin:0 5px 10px 0;}#uchat_wrap47445045 .alert_ok_btn { }#uchat_wrap47445045 .alert_cancel_btn { }#uchat_wrap47445045 .clear {clear:both; height:0; overflow:hidden;}#uchat_wrap47445045 .popup {background:#fff;display:none;position:absolute;border:2px solid #a0dbc7;z-index:1100; margin: 0px auto;}#uchat_wrap47445045 .popup_background {position:absolute;left:0px;top:0;width:98px;height:548px;background:#e1e1e1;z-index:1000;display:none; filter: alpha(opacity=40);-khtml-opacity: 0.4;-moz-opacity: 0.4;opacity: 0.4; }#uchat_wrap47445045 .input_border {border-top:1px solid #9a9a9a !important;border-left:1px solid #9a9a9a !important;border-right:1px solid #d8d8d8 !important;border-bottom:1px solid #d8d8d8 !important;}#uchat_wrap47445045 .btn_pack, #uchat_wrap47445045 .btn_pack *{display:inline-block;overflow:visible;position:relative;margin:0;padding:0;border:0;background:url(http://cache.uchat.co.kr/uchat/img/btn_pack.gif) no-repeat;font-size:12px;font-family:Tahoma, Sans-serif;color:#333;text-decoration:none !important;vertical-align:top;white-space:nowrap}#uchat_wrap47445045 .btn_pack{margin-right:4px}#uchat_wrap47445045 .btn_pack *{left:4px;cursor:pointer;_cursor:hand}#uchat_wrap47445045 .btn_pack.medium,#uchat_wrap47445045 .btn_pack.medium *{height:24px;line-height:24px}#uchat_wrap47445045 .btn_pack.medium{background-position:left 0}#uchat_wrap47445045 .btn_pack.medium *{padding:0 10px 0 6px;background-position:right top;font-size:12px}#uchat_wrap47445045 .btn_pack *:hover, #uchat_wrap47445045 .btn_pack *:active, #uchat_wrap47445045 .btn_pack *:focus{color:#690}#uchat_wrap47445045 .btn_pack.strong *{font-weight:bold !important}#uchat_wrap47445045 .btn_pack.small, #uchat_wrap47445045 .btn_pack.small *{height:19px;line-height:19px}#uchat_wrap47445045 .btn_pack.small{background-position:left -106px}#uchat_wrap47445045 .btn_pack.small *{padding:0 6px 0 2px;background-position:right -106px;font-size:11px}#uchat_wrap47445045 input {background:#fff;vertical-align:middle;height:20px;}#uchat_wrap47445045 .ad_spot {overflow:hidden; position: absolute; top: 24px; width: 100%; max-width: 300px; z-index: 1;}#uchat_wrap47445045 .Bnr_icon {overflow:hidden; border-top:2px solid #d7d7d7;}#uchat_wrap47445045 .tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}#uchat_wrap47445045 .tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}#uchat_wrap47445045 .ws_toolbar {z-index:100000}#uchat_wrap47445045 .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px}#uchat_wrap47445045 .tb_highlight{background-color:yellow}#uchat_wrap47445045 .tb_hide {visibility:hidden}#uchat_wrap47445045 .ws_toolbar img {padding:2px;margin:0px}</style> <style>#uchat_goodlin {width:98px;height:548px;position:relative;display:none;overflow:hidden;}#uchat_goodlin .uchat_middle .conversation_contents {width:100%;height:474px;}#uchat_goodlin .uchat_middle .member_list {width:100%;height:-1px;margin-bottom:1px;}</style> 이렇게 코드가 다닥다닥 붙어서 제대로 해석이 안되는 경우가 있는 것 같습니다.
?
geusgod 9년 전
@charset "utf-8"; /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Button */ .btn{position:relative;display:inline-block;vertical-align:middle} .btn *{display:inline-block;padding:0 8px;font-size:12p… @charset "utf-8"; /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Button */ .btn{position:relative;display:inline-block;vertical-align:middle} .btn *{display:inline-block;padding:0 8px;font-size:12px;height:24px;line-height:22px;margin:0;font-weight:bold !important;color:#fff;text-decoration:none !important;border:1px solid;cursor:pointer;overflow:visible;border-radius:3px;box-shadow:inset 0 0 1px #fff;background-color:#666;text-shadow:0 -1px 0 #333;zoom:1} .btn *[type=submit][disabled=disabled], .btn *[type=button][disabled=disabled]{opacity:.5;*filter:alpha(opacity=50)} .btn a, .btn button[type=button]{border-color:#ccc;color:#333 !important;background:#eee -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#ddd));background:#eee -moz-linear-gradient(top,#fff,#ddd);background-color:#eee;text-shadow:1px 1px 0 #fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#ffffff, endColorStr=#dddddd)} .btn input, .btn button[type=submit]{border-color:#666;background:#333 -webkit-gradient(linear,0% 0%,0% 100%,from(#777),to(#777),color-stop(0.5,#333),color-stop(0.5,#000)) !important;background:#333 -moz-linear-gradient(top,#777,#000) !important;background-color:#333 !important;color:#ffc !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#777777, endColorStr=#333333)} .btn a{height:22px} .btn.medium *{padding:0 12px;font-size:16px;height:30px;line-height:28px} .btn.medium a{height:28px} .btn.large *{padding:0 18px;font-size:22px;height:36px;line-height:34px} .btn.large a{height:34px} /* Button - Regucy */ span.button, a.button{position:relative;display:inline-block;vertical-align:top} span.button *, a.button *{display:inline-block;padding:0 8px;font-size:12px;height:24px;line-height:22px;margin:0;font-weight:bold !important;color:#fff;text-decoration:none !important;border:1px solid;cursor:pointer;overflow:visible;border-radius:3px;box-shadow:inset 0 0 1px #fff;background-color:#666;text-shadow:0 -1px 0 #333;zoom:1} span.button *[type=submit][disabled=disabled], span.button *[type=button][disabled=disabled]{opacity:.5;*filter:alpha(opacity=50)} a.button span, span.button button[type=button]{border-color:#ccc;color:#333 !important;background:#eee -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#ddd));background:#eee -moz-linear-gradient(top,#fff,#ddd);background-color:#eee;text-shadow:1px 1px 0 #fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#ffffff, endColorStr=#dddddd)} span.button input, span.button button[type=submit]{border-color:#666;background:#333 -webkit-gradient(linear,0% 0%,0% 100%,from(#777),to(#777),color-stop(0.5,#333),color-stop(0.5,#000));background:#333 -moz-linear-gradient(top,#777,#000);background-color:#333;color:#ffc !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#777777, endColorStr=#333333)} a.button span{height:22px} /* Button Area */ .btnArea{margin:1em 0;text-align:right;zoom:1} .btnArea:after{content:"";display:block;clear:both} .btnArea .etc{float:left} /* Text Button */ input[type=submit].text, input[type=button].text, button[type=submit].text, button[type=button].text{border:0;overflow:visible;padding:0;margin:0 4px 0 0;color:#33a !important;background:none;text-decoration:underline;cursor:pointer} /* Popup Menu Area */ #popup_menu_area{position:absolute;background:#fff;border:1px solid #e9e9e9;border-radius:5px;padding:10px;line-height:1.3;box-shadow:0 0 6px #666;font-size:12px;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)} #popup_menu_area ul{list-style:none;margin:0;padding:0} #popup_menu_area li{margin:0;padding:0} #popup_menu_area a{text-decoration:none;color:#333} #popup_menu_area a:hover, #popup_menu_area a:avtive, #popup_menu_area a:focus{text-decoration:underline} /* Message */ .message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px} body>.message{margin:1em} .message p{margin:1em 0 !important} .message em{font-style:normal;color:#e00} .message.info, .message.error, .message.update{padding-left:55px} .message.info{border-color:#E0E8EC;background:#EDF9FF url(../../common/img/msg.Info.png) no-repeat 1em .5em} .message.error{border-color:#EFDCDC;background:#FFECEC url(../../common/img/msg.error.png) no-repeat 1em .5em} .message.update{border-color:#EAE9DC;background:#FFFDEF url(../../common/img/msg.update.png) no-repeat 1em .5em} /* Waiting for server response */ .wfsr{display:none;position:absolute;position:fixed;left:0;top:0;z-index:100; border:1px solid #EAE9DC;background:#FFFDEF url(../../common/img/msg.loading.gif) no-repeat 1em .5em;margin:1em;padding:1em 1em 1em 55px;border-radius:5px;line-height:1.4;font-size:12px;font-weight:bold} /* Waiting for server response - Modal Window */ .wfsr_fog{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100} .wfsr_fog .bg{position:absolute;position:fixed;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1} .wfsr_fog .ie6{position:absolute;left:0;top:0;width:100%;height:100%;border:0;opacity:0;filter:alpha(opacity=0);z-index:1} 아래는 몇군데 확인하고 넘어가야 부분들이다. /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Text Button */ input[type=submit].text, input[type=button].text, button[type=submit].text, button[type=button].text{border:0;overflow:visible;padding:0;margin:0 4px 0 0;color:#33a !important;background:none;text-decoration:underline;cursor:pointer} /* Popup Menu Area */ #popup_menu_area{position:absolute;background:#fff;border:1px solid #e9e9e9;border-radius:5px;padding:10px;line-height:1.3;box-shadow:0 0 6px #666;font-size:12px;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)} #popup_menu_area ul{list-style:none;margin:0;padding:0} #popup_menu_area li{margin:0;padding:0} #popup_menu_area a{text-decoration:none;color:#333} #popup_menu_area a:hover, #popup_menu_area a:avtive, #popup_menu_area a:focus{text-decoration:underline} /* Message */ .message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px} body>.message{margin:1em} .message p{margin:1em 0 !important} .message em{font-style:normal;color:#e00} .message.info, .message.error, .message.update{padding-left:55px} .message.info{border-color:#E0E8EC;background:#EDF9FF url(../../common/img/msg.Info.png) no-repeat 1em .5em} .message.error{border-color:#EFDCDC;background:#FFECEC url(../../common/img/msg.error.png) no-repeat 1em .5em} .message.update{border-color:#EAE9DC;background:#FFFDEF url(../../common/img/msg.update.png) no-repeat 1em .5em} /* Waiting for server response */ .wfsr{display:none;position:absolute;position:fixed;left:0;top:0;z-index:100; border:1px solid #EAE9DC;background:#FFFDEF url(../../common/img/msg.loading.gif) no-repeat 1em .5em;margin:1em;padding:1em 1em 1em 55px;border-radius:5px;line-height:1.4;font-size:12px;font-weight:bold} /* Waiting for server response - Modal Window */ .wfsr_fog{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100} .wfsr_fog .bg{position:absolute;position:fixed;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1} .wfsr_fog .ie6{position:absolute;left:0;top:0;width:100%;height:100%;border:0;opacity:0;filter:alpha(opacity=0);z-index:1}
?
종스 9년 전
string cut_str(string STRING, int CUT_SIZE, string TAIL) 문자열을 일정한 길이에 맞게 잘라서 뒤에 꼬리를 붙여주는 함수입니다. cut_str($info->comment, 20, '...') string zdate(string STR, string FORMAT, bool CONVERSION) YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 만들어 주는 함수입니다. zdate($my_5, "Y.m.d") i… string cut_str(string STRING, int CUT_SIZE, string TAIL) 문자열을 일정한 길이에 맞게 잘라서 뒤에 꼬리를 붙여주는 함수입니다. cut_str($info->comment, 20, '...') string zdate(string STR, string FORMAT, bool CONVERSION) YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 만들어 주는 함수입니다. zdate($my_5, "Y.m.d") int ztime(string STR)YYYYMMDDHHIISS 형식의 시간값을 unix time으로 변경하는 함수입니다.
?
클론 9년 전
@charset "utf-8"; /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Button */ .btn{position:relative;display:inline-block;vertical-align:middle} .btn *{display:inline-block;padding:0 8px;font-size:12p… @charset "utf-8"; /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Button */ .btn{position:relative;display:inline-block;vertical-align:middle} .btn *{display:inline-block;padding:0 8px;font-size:12px;height:24px;line-height:22px;margin:0;font-weight:bold !important;color:#fff;text-decoration:none !important;border:1px solid;cursor:pointer;overflow:visible;border-radius:3px;box-shadow:inset 0 0 1px #fff;background-color:#666;text-shadow:0 -1px 0 #333;zoom:1} .btn *[type=submit][disabled=disabled], .btn *[type=button][disabled=disabled]{opacity:.5;*filter:alpha(opacity=50)} .btn a, .btn button[type=button]{border-color:#ccc;color:#333 !important;background:#eee -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#ddd));background:#eee -moz-linear-gradient(top,#fff,#ddd);background-color:#eee;text-shadow:1px 1px 0 #fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#ffffff, endColorStr=#dddddd)} .btn input, .btn button[type=submit]{border-color:#666;background:#333 -webkit-gradient(linear,0% 0%,0% 100%,from(#777),to(#777),color-stop(0.5,#333),color-stop(0.5,#000)) !important;background:#333 -moz-linear-gradient(top,#777,#000) !important;background-color:#333 !important;color:#ffc !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#777777, endColorStr=#333333)} .btn a{height:22px} .btn.medium *{padding:0 12px;font-size:16px;height:30px;line-height:28px} .btn.medium a{height:28px} .btn.large *{padding:0 18px;font-size:22px;height:36px;line-height:34px} .btn.large a{height:34px} /* Button - Regucy */ span.button, a.button{position:relative;display:inline-block;vertical-align:top} span.button *, a.button *{display:inline-block;padding:0 8px;font-size:12px;height:24px;line-height:22px;margin:0;font-weight:bold !important;color:#fff;text-decoration:none !important;border:1px solid;cursor:pointer;overflow:visible;border-radius:3px;box-shadow:inset 0 0 1px #fff;background-color:#666;text-shadow:0 -1px 0 #333;zoom:1} span.button *[type=submit][disabled=disabled], span.button *[type=button][disabled=disabled]{opacity:.5;*filter:alpha(opacity=50)} a.button span, span.button button[type=button]{border-color:#ccc;color:#333 !important;background:#eee -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#ddd));background:#eee -moz-linear-gradient(top,#fff,#ddd);background-color:#eee;text-shadow:1px 1px 0 #fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#ffffff, endColorStr=#dddddd)} span.button input, span.button button[type=submit]{border-color:#666;background:#333 -webkit-gradient(linear,0% 0%,0% 100%,from(#777),to(#777),color-stop(0.5,#333),color-stop(0.5,#000));background:#333 -moz-linear-gradient(top,#777,#000);background-color:#333;color:#ffc !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#777777, endColorStr=#333333)} a.button span{height:22px} /* Button Area */ .btnArea{margin:1em 0;text-align:right;zoom:1} .btnArea:after{content:"";display:block;clear:both} .btnArea .etc{float:left} /* Text Button */ input[type=submit].text, input[type=button].text, button[type=submit].text, button[type=button].text{border:0;overflow:visible;padding:0;margin:0 4px 0 0;color:#33a !important;background:none;text-decoration:underline;cursor:pointer} /* Popup Menu Area */ #popup_menu_area{position:absolute;background:#fff;border:1px solid #e9e9e9;border-radius:5px;padding:10px;line-height:1.3;box-shadow:0 0 6px #666;font-size:12px;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)} #popup_menu_area ul{list-style:none;margin:0;padding:0} #popup_menu_area li{margin:0;padding:0} #popup_menu_area a{text-decoration:none;color:#333} #popup_menu_area a:hover, #popup_menu_area a:avtive, #popup_menu_area a:focus{text-decoration:underline} /* Message */ .message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px} body>.message{margin:1em} .message p{margin:1em 0 !important} .message em{font-style:normal;color:#e00} .message.info, .message.error, .message.update{padding-left:55px} .message.info{border-color:#E0E8EC;background:#EDF9FF url(../../common/img/msg.Info.png) no-repeat 1em .5em} .message.error{border-color:#EFDCDC;background:#FFECEC url(../../common/img/msg.error.png) no-repeat 1em .5em} .message.update{border-color:#EAE9DC;background:#FFFDEF url(../../common/img/msg.update.png) no-repeat 1em .5em} /* Waiting for server response */ .wfsr{display:none;position:absolute;position:fixed;left:0;top:0;z-index:100; border:1px solid #EAE9DC;background:#FFFDEF url(../../common/img/msg.loading.gif) no-repeat 1em .5em;margin:1em;padding:1em 1em 1em 55px;border-radius:5px;line-height:1.4;font-size:12px;font-weight:bold} /* Waiting for server response - Modal Window */ .wfsr_fog{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100} .wfsr_fog .bg{position:absolute;position:fixed;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1} .wfsr_fog .ie6{position:absolute;left:0;top:0;width:100%;height:100%;border:0;opacity:0;filter:alpha(opacity=0);z-index:1} 아래는 몇군데 확인하고 넘어가야 부분들이다. /* Element Reset */ body,table,input,textarea,select,button{font-family:Tahoma,Geneva,sans-serif;font-size:12px} img{border:0} /* Text Button */ input[type=submit].text, input[type=button].text, button[type=submit].text, button[type=button].text{border:0;overflow:visible;padding:0;margin:0 4px 0 0;color:#33a !important;background:none;text-decoration:underline;cursor:pointer} /* Popup Menu Area */ #popup_menu_area{position:absolute;background:#fff;border:1px solid #e9e9e9;border-radius:5px;padding:10px;line-height:1.3;box-shadow:0 0 6px #666;font-size:12px;filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135, strength=5)} #popup_menu_area ul{list-style:none;margin:0;padding:0} #popup_menu_area li{margin:0;padding:0} #popup_menu_area a{text-decoration:none;color:#333} #popup_menu_area a:hover, #popup_menu_area a:avtive, #popup_menu_area a:focus{text-decoration:underline} /* Message */ .message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px} body>.message{margin:1em} .message p{margin:1em 0 !important} .message em{font-style:normal;color:#e00} .message.info, .message.error, .message.update{padding-left:55px} .message.info{border-color:#E0E8EC;background:#EDF9FF url(../../common/img/msg.Info.png) no-repeat 1em .5em} .message.error{border-color:#EFDCDC;background:#FFECEC url(../../common/img/msg.error.png) no-repeat 1em .5em} .message.update{border-color:#EAE9DC;background:#FFFDEF url(../../common/img/msg.update.png) no-repeat 1em .5em} /* Waiting for server response */ .wfsr{display:none;position:absolute;position:fixed;left:0;top:0;z-index:100; border:1px solid #EAE9DC;background:#FFFDEF url(../../common/img/msg.loading.gif) no-repeat 1em .5em;margin:1em;padding:1em 1em 1em 55px;border-radius:5px;line-height:1.4;font-size:12px;font-weight:bold} /* Waiting for server response - Modal Window */ .wfsr_fog{position:absolute;top:0;left:0;width:100%;_height:100%;min-height:100%;z-index:100} .wfsr_fog .bg{position:absolute;position:fixed;background:#000;_background:none;width:100%;height:100%;opacity:.5;z-index:2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);zoom:1} .wfsr_fog .ie6{position:absolute;left:0;top:0;width:100%;height:100%;border:0;opacity:0;filter:alpha(opacity=0);z-index:1}
?
클론 9년 전
string cut_str(string STRING, int CUT_SIZE, string TAIL) 문자열을 일정한 길이에 맞게 잘라서 뒤에 꼬리를 붙여주는 함수입니다. cut_str($info->comment, 20, '...') string zdate(string STR, string FORMAT, bool CONVERSION) YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 만들어 주는 함수입니다. zdate($my_5, "Y.m.d") i… string cut_str(string STRING, int CUT_SIZE, string TAIL) 문자열을 일정한 길이에 맞게 잘라서 뒤에 꼬리를 붙여주는 함수입니다. cut_str($info->comment, 20, '...') string zdate(string STR, string FORMAT, bool CONVERSION) YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 만들어 주는 함수입니다. zdate($my_5, "Y.m.d") int ztime(string STR)YYYYMMDDHHIISS 형식의 시간값을 unix time으로 변경하는 함수입니다.
이온디
이온디 9년 전
경찰수사 받는 요령 "사장님, 경찰서에서 조사할 것이 있다고 전화 왔습니다." 1. 들어가며 A씨는 경기도 안산 반월공단에서 제조 업체를 10여년째 운영하고 있다. 지역을 기반으로 착실히 운영한 덕인지 지금까지 큰 고비 없이 업체를 일궈올 수 있었다. 그러던 A씨가 요즘 큰 고민거리를 안게 되었다. 발단은 얼마 전 거래처 상담을 마치고 돌아온 A씨의 책상에 올려져 있던 "경찰서에서 조사할 것이 있다면서 경찰서로 언제 출석하라는 전화를 받았다"는 직원… 경찰수사 받는 요령 "사장님, 경찰서에서 조사할 것이 있다고 전화 왔습니다." 1. 들어가며 A씨는 경기도 안산 반월공단에서 제조 업체를 10여년째 운영하고 있다. 지역을 기반으로 착실히 운영한 덕인지 지금까지 큰 고비 없이 업체를 일궈올 수 있었다. 그러던 A씨가 요즘 큰 고민거리를 안게 되었다. 발단은 얼마 전 거래처 상담을 마치고 돌아온 A씨의 책상에 올려져 있던 "경찰서에서 조사할 것이 있다면서 경찰서로 언제 출석하라는 전화를 받았다"는 직원의 메모 한 장. 지금까지 세금 제 때 내고 지역사회 봉사활동까지 적극적으로 해오던 A씨였다. 평소 "법 없이도 살 사람"이라는 평을 들으며 경찰서 문턱에도 들어가 보지 않았다. 그러기에 조사할 것이 있다며 경찰서에 출석하라는 통보가 A씨에게는 더욱 불안하고 초조하지 않을 수 없다. 왜 경찰서에 출석하라는 것인지 도무지 알 수가 없다. 경찰서에 출석하기 전에 미리 챙겨할 것은 무엇인지 궁금하기도 하다. A씨는 답답한 마음에 인근 변호사 사무실에 찾아가 상의를 하게 된다. 2. 먼저 소환을 요구한 경찰의 이름과 소속, 소환하는 이유, 어떤 신분으로 소환되는 것인지 확인하셔야 합니다. 변호사는 A씨에게 먼저 소환을 요구한 경찰의 이름과 소속, 소환하는 이유, 어떤 신분으로 소환되는 것인지 확인해야 한다고 조언을 한다. 가. 담당 경찰의 이름과 그 경찰의 소속을 확인하는 것은 기본이다. 일반 경찰서에서 소환하는 것인지 지방경찰청에서 소환하는 것인지 여부에 따라 긴장의 정도나 대응의 방법이 달라지지 않을 수 없다. 같은 경찰서라도 형사과 소속 경찰이 소환하는 것인지 수사과 소속 경찰이 소환하는 것인지 확인하는 것도 중요하다. 기업을 운영하는 경우 통상 고소 사건에 휘말리는 경우가 많은데 고소 사건을 처리하는 부서는 수사과 경제팀이다. 수사과 경제팀에서 소환을 한 것이라면 '고소 사건으로 소환이 되었구나' 라고 짐작해 볼 수 있게 되는 것이다. 나. 어떤 이유로 소환하는 지 확인하는 것도 꼭 챙겨야할 사항이다. 고소 사건이라면 고소인이 누구인지, 뭘 잘못했다고 고소가 된 것인지 꼭 물어보아야 한다. 적어도 죄명만이라도 알려달라고 해야 한다. 자신에게 씌워진 혐의사실을 전혀 알지 못한 상태에서 '경찰서에 들어가면 확인할 수 있겠거니' 라고 막연히 생각한다면 오산이다. 경찰서에 출석하여 고소장을 보자고 하면 대개 고소장을 보여주지 않는다. 출석하기 이전에 혐의 내용을 대강이나마 파악해야만 어떻게 대응할지 대비를 할 수 있게 된다. 다. 자신이 피의자로 소환되는 것인지, 참고인으로 소환되는 것인지를 확인해야 한다. 형사소송법상 피의자는 '죄를 범한 혐의로 수사기관의 수사대상이 되어 있는 자'를 말하고 참고인은 '범죄 수사를 위하여 수사 기관에서 조사를 받는 사람 가운데 피의자 이외의 사람'을 말한다. 피의자 신분으로 소환한다면 범죄 혐의가 있다고 보아 소환을 하는 것이므로 수사기관이 구속이나 공소제기 등 사법처리를 염두에 두고 있다는 의미이다. 참고인 신분으로 부르는 것이라면 일종의 증인으로 소환하는 것이므로 일단 한숨 놓을 수 있다는 뜻이다. 물론 참고인 신분으로 경찰서에 들어갔다가 조사 도중에 피의자 신분으로 바뀌는 경우가 없지 않으므로 긴장을 늦추지 않아야 한다. 이 경우에도 조사에 대비한 준비를 해야 한다는 말이다. 3. 납득할만한 이유 없이 출석을 거부해서는 안 됩니다. 가. 피의자로 소환을 받는 것이라도 조사할 것이 있으니 경찰서로 언제 나오라는 통보는 '임의 수사'에 해당한다. 소환통보에 응하여 경찰에 출석을 할 지 말 지 여부가 전적으로 A씨에게 달여 있다는 말이다. 그렇다고 출석을 하지 않아도 되는 것일까? A씨는 자신에게 무슨 죄가 있다고 생각은 안 하지만 곧이곧대로 경찰서에 들어갔다가 자칫 구속되는 건 아닌지 걱정이 태산이다. 며칠 남지 않아 체결하게 될 거래처와의 중요 계약은 어찌 할 거며, 월말에 결제하기로 한 남품 대금은 또 어찌 할 것인지? 순간 경찰소환에 응하지 않고 어딘가로 잠시 잠적하는 것은 어떨까라는 생각도 없지 않다. 나. 경찰서에서의 소환통지가 임의 수사이긴 하지만 이에 응하지 않으면 체포영장이 발부되어 강제로 신병을 구속할 가능성이 열리게 된다. 법관이 영장을 발부한 체포영장을 들고 경찰이 A씨를 잡으러 올 수 있다는 말이다. 나중에 구속영장까지 청구되면 영장실질심사를 하는 판사 입장에서도 도주할 우려가 있고 재판에도 출석하지 않겠구나라는 심증을 굳히게 될 것임은 당연한 사리이다. 형사절차 내내 '죄가 없으면 제때 출석하지 않은 이유가 뭐냐'라는 의심을 떨쳐버리기 어렵게 된다. 요는 언제가 됐든 출석은 해야 한다는 것이다. 출석 일자만큼은 담당 경찰관에게 연락하여 변경할 수 있다. 이 경우 소환에 틀림없이 응하겠다는 의사를 밝히면서 다만 그 날자에 들어가면 생업에 지장을 초래할 사정이 있거나 병원 치료를 받고 있다는 등 납득할만한 사정을 들어야 한다. 무조건 못 나간다고 하면 체포영장 발부의 빌미가 되지만 합리적 이유를 제시하면서 몇 월 며칠에 나가겠다는 의사를 밝히면 강제로 잡으러 오는 상황은 면할 수 있게 된다. 다. 경찰의 소환 통지를 묵살하고 잠적해버리면 어떻게 될까? 가령 고소당한 사람이 도망을 가서 수사를 계속할 수 없게 되면 어떻게 될까? 수사기관은 그 사람이 나타나서 자수하거나 잡힐 때까지 수사를 끝내지 않고 기다리게 된다. 이를 기소중지라고 한다. 지명수배란 경찰 컴퓨터에 기소중지자로 입력하여 놓고 사람을 찾아다니는 것을 말하는데 불심검문 과정에 주민등록번호를 조회하여 잡힐 수도 있고 집이나 직장 등 그 사람의 근거지에 찾아온 경찰에게 잡힐 수도 있다. 억울하게 범죄혐의를 쓰고 무고함을 입증할 길이 없어서 잠시 경찰수사를 피하였으나 나중에 증인이나 증거가 나타나거나 피해자와 합의가 되어 구속될 위기를 모면하게 된 경우라면 어떻게 해야할까? 해당 수사기관에 수사재기신청을 하여 기소중지가 된 것을 풀고 다시 수사를 받아 혐의가 없음을 입증하거나 벌금 같은 가벼운 처분을 받고 빨리 사건을 끝내는 것이 좋다. 4. 경찰서에 출석하기 전에 죄명이나 혐의사실을 파악한 후, 최대한 자신에게 유리한 증거나 증인을 확보하고 경찰 조사에 대비해야 합니다. 미리 변호사와 상의하는 것이 좋습니다. 가. 최소한 자신에게 씌워진 혐의와 죄명, 소환받는 자신의 신분 등을 확인해야한다는 조언을 듣고 A씨는 담당경찰관에게 전화를 하였다. 담당 경찰관은 ○○경찰서 수사과 경제팀 누구라고 하면서 "고소가 됐는데 사건 경위를 알아봐야 하니까 다녀가시라."고 하면서 "일단 와 보면 안다."고 대답만 할 뿐 구체적인 소환 이유를 말해주지는 않는다. 애가 탄 A씨, 용기를 내어 출석요구서를 정식으로 보내달라고 요구한다. 그제서야 담당 경찰은 A씨가 B씨에게 위탁받은 금형으로 물건을 제조․납품하기로 한 사실이 있냐고 하면서, 계약기간이 만료되었는데 금형을 돌려주지 않아 B씨가 횡령으로 고소했다고 알려준다. 대략적이나마 자신의 혐의와 죄명을 알게 된 A씨는 B씨와의 거래를 담당하는 직원과 함께 계약서와 그간 오고갔던 내용증명 등을 검토하고 B씨가 무엇 때문에 고소까지 했는지를 짐작할 수 있게 되었다. 계약기간이 끝나서 B씨가 맡긴 금형을 돌려주는 게 맞지만 B씨한테 받을 납품대금이 결제되지 않아서 그때까지 금형을 보관하겠다고 보냈던 내용증명도 다시 찾아내었다. A씨는 B씨와의 거래 내역과 물품대금 정산내역을 정리하고 증빙서류를 정리했다. 나. 피의자는 출석하기 전에 수사기관의 조사에 대비하여 철저한 준비를 해야 한다. 수사기관의 수사에서 초동수사의 중요성이 강조되듯이 조사받는 입장에서도 초동단계, 특히 첫 번째 조사 기일에 얼마나 잘 대처하느냐가 모든 형사절차 내에서 가장 중요하다. 수사기관이 유죄를 입증해야하므로 수사기관이 증거를 수집해야하는 것이라고 믿고서 자신에게 유리한 증거의 수집을 게을리 하다가는 큰 코 다치게 된다. 조사 과정에 혐의사실을 단순히 부인만 하면서 불리한 사실에 대해서는 진술을 거부하기만 해서는 안된다는 말이다. 자신에게 유리한 증거가 있다면 이를 최대한 수집하고 관련된 사람들과 만나 사실을 확인한 후 진술서를 받거나 필요한 녹음을 한다든가 하는 노력을 해야 한다. 조사 과정에 갑자기 사건에 대해 질문을 하고 추궁을 해오면 잘 아는 사실이라도 당황하여 답변하기 쉽지 않다. 예상 질문에 대해 답변을 미리 연습해 볼 필요도 있다. 오래 된 일인 경우 그런 필요성은 더욱 크다. 경찰서에 처음으로 출석하기 이전에 챙겨야 할 사항이다. 형사소송절차에서 일관된 태도를 보이는 것은 무엇보다 중요하다. 처음에는 혐의사실을 인정하다가 나중에 부인하는 것도 문제이고 처음에는 완강히 부인하다가 조사 경찰관이 객관적인 물증을 제시하며 추궁하기 시작하자 그때부터 혐의사실을 인정하는 것 역시 문제이다. 그러므로 1회 조사에 임하기 이전에 혐의 사실에 대해 어떤 태도를 견지할 지 미리 정해둘 필요가 없지 않다. 혐의 사실에 대해 전면 부인할 것인지(부인), 일부만 부인하고 일부는 인정할 것인지(일부 자백), 전부 인정하고 정상관계와 관련된 사항을 진술할 지(자백) 여부를 미리 정할 수 있다면 미리 정해두는 것도 의미가 있다는 말이다. 물론 혐의 내용의 전모를 알지 못하고 수사기관에서 확보해 둔 증거들이 어디까지인지 알지 못하는 상황에서 성급하게 정할 수 있는 사항은 아니다. 다. 혐의사실에 반대되는 자신에게 유리한 사실이 무엇인지, 그 사실을 입증할 수 있는 반대증거는 무엇이고 이것을 어떻게 확보할 지, 경찰관의 예상 질문에 대해 막상 어떻게 답변을 해야할 지 나아가서는 형사절차에 일관된 태도를 어떻게 정할지 등에 관해 과연 A씨가 혼자서 결정하고 준비할 수 있을까? 더구나 수사기관에 종사하는 사람들은 수사에 관한 한은 프로라고 할 수 있다. 실체적 진실을 파악하기 위한 질문, 피의자의 답변에 대한 탄핵, 다른 증거를 들이대며 하는 추궁에 대해 도가 튼 사람들이다. 피의자들의 심리에 대해서도 능통하다. 피의자에게서 어떻게 하면 수사기관에 필요한 진술을 이끌어낼지 그 노하우와 다양한 수사기법들을 숙지하고 있는 사람들이다. 제조업체 운영만 해오던 A씨에게 법률전문가인 변호사의 도움이 절실한 이유가 여기에 있다. A씨는 자신은 B씨 소유의 금형을 횡령할 생각은 추호도 없고 물품대금만 받으면 언제든 돌려 줄 생각으로 보관만 하고 있었다고 경찰에서 진술할 생각이다. 그에 필요한 자료도 모아놓았다. 그러나 이것만으로 충분한 것일까? A씨가 이것만으로 혐의에서 벗어날 것이라고 생각한다면 오판이다. 고소인 B가 진술한 고소내용이 구체적으로 무엇인지, 제출한 증거가 무엇인지 못한 상태에서 섣불리 속단할 수 없는데다가 A씨의 주장 내용은 그것이 올바른 변명이 될지 판단이 필요한 사항이다. 섣부른 만용과 자신감이 일을 그르칠 수 있다. 어떤 사항에 대해 수사기관에 어떻게 진술하면 나중에 검사나 법원에 어떤 의미로 받아들여질 수 있으므로 어떻게 진술해야 하고 이런 사항에 대해 어떤 증거가 필요한지 등에 관한 판단은 법률전문가로서 훈련과 경험을 축적한 변호사가 아니고서는 어렵다는 얘기다. 법적 조언이 필요하다는 점 외에도 변호사의 도움이 필요한 이유가 또 하나 있다. 경찰에 소환받아 진술을 하는 장소, 경찰서 조사실은 피의자에게 우호적인 환경이 아니다. 물론 과거에 그랬다고 하는 것처럼 경찰에서 피의자를 함부로 고문하거나 욕설을 하지는 않는다. 그러나 혐의가 있고 없음을 떠나서 수사기관에 소환되어 경찰의 질문에 답변해야 하는 상황만으로 심리적으로 크게 위축되어 자신에게 유리한 진술을 충분히 펼칠 수 없게 된다. 게다가 언제든 체포 또는 구속의 부담을 안고 있다는 점에서 조사를 담당한 경찰의 의도에 따를 수 밖에 없다는 사정도 있다. 심지어 수사를 본업으로 하던 현직 수사경찰마저 피의자 신분으로 조사를 받게 되면 "머릿속이 하얗게 되어 무슨 말을 해야 할지 모르게 된다."는 말을 할 정도다. 심리적 압박감이 그만큼 크다는 얘기다. 여기에 피의자 심리에 익숙한 조사 경찰이 '인정하면 금방 끝나고, 부인하면 오래 간다.'라거나 '중요한 거 아니니까 인정할 거 빨리 인정하자'고 하면 압박감과 불편함에 시달리던 피의자로서는 여기에서 벗어나기 위해 쉽게 사실과 다르게 혐의 사실을 인정하게 마련이다. 법원에서 불리하게 받아들일 여지가 있는 신문조서에 날인을 하게 된다. 이러한 불리한 상황을 제어할 수 있는 것이 바로 변호인입회제도이다. 변호사인 변호인은 피의자 신문 과정에 참여하고 신문 후에 의견을 진술할 수 있다. 피의자 신문 과정에 변호사가 참여하더라도 대부분의 진술을 피의자 본인이 직접 해야하므로 변호인의 역할이 제한적인 것은 사실이다. 그러나 비우호적인 피의자신문 과정에 자신의 법적 조력자인 변호인이 곁에 있어 준다는 것만으로도 큰 도움이지 않을 수 없다. 또 입회 변호인은 부당한 신문방법에 대해서는 신문중이라도 이의를 제기할 수 있으므로 제한적이긴 하지만 신문 과정의 피의자에게 직접적인 도움을 줄 수도 있다. 5. 만반의 준비를 갖춘 A씨, 지금 경찰서 문 앞에 서 있습니다. 가. A씨는 담당 경찰과 약속한 조사일자에 맞추어 지금 경찰서 문 앞에 서 있다. A씨는 자신의 혐의 내용에 대해 변호사와 충분히 상담을 거쳤고 조사 경찰의 예상되는 질문에 대해 어떻게 대답해야 할지도 준비를 해 둔 상태다. 변호사는 다른 재판에 참석했다가 곧 경찰서로 오겠다는 연락을 했다. 약간 늦을 수는 있지만 꼭 신문과정에 입회하겠다고 한다. A씨는 어제 변호사에게 조언받은 내용을 다시 한 번 새기고 있다. 나. 피의자 신문, 특히 제1회 신문기일은 조사자가 혐의 사실을 묻는 자리이기도 하자만, 거꾸로 피의자 입장에서 자신에게 씌여진 혐의가 무엇인지 확인할 수 있는 기회이기도 하다. 조사 경찰이 무엇을 질문하는지 특히 어떤 사항에 대해 역점을 두고 질문하는지 잘 기억해 두어야 한다. 피의자에게는 자신에게 불리한 사실에 대해 진술을 하지 않을 권리가 있다. 대법원 확정판결을 받기 이전까지 무죄로 추정되고 아무리 유죄의 의심이 있더라도 죄인으로 취급되어서는 안된다. 모두가 나라의 기본법인 헌법에서 인정하는 권리이자 법원칙이다. 당당하게 조사에 응하고 부당한 처우를 하면 항의하고 이의를 제기해야 한다. 경찰 조사 과정에 부당한 폭행이나 욕설을 받으면, 때에 따라 경찰서 내에 청문감사관실에 바로 찾아가 불만 사항을 말하고 조사관 교체를 요구하는 정도의 용기를 발휘할 필요도 있다. 변호인의 조력을 받을 권리도 헌법과 형사소송법에 의해 보장되는 권리이므로 조사 과정에 체포되거나 불리한 진술을 강요하는 사태가 벌어지면 변호사 올 때까지 기다렸다가 조사에 임하겠다고 해야 한다. 경찰이 텔레비전 뉴스나 드라마에 나오듯이 편파적이거나 폭력적인 것은 결코 아니다. 다만 경찰은 실로 많은 수의 사건을 처리해야 하는 격무에 시달리고 매일 여러 사람과 부대껴가며 일 처리를 해야 하는 업무의 특성상 스트레스를 받게 마련이다. 항상 신경이 곤두서 있는 직업이다. 경찰관들이 불친절하고 짜증을 낸다면 그런 직업적 특성때문이지 사건에 대해 편파적이거나 누구의 청탁을 받아서가 아니다. 조사에 응하여 진술할 때는 이런 점을 잘 이해할 필요가 있다. 당당하게 자신의 권리를 주장하면서도 적어도 수사에 적극적으로 협조한다는 자세를 보일 필요도 있다는 말이다. 다. A씨는 자신의 혐의와 관련한 과거의 사실에 대해 다시 기억을 더듬는 한편 이번 조사에서 어떤 진술을 어떻게 할지 되새기고 있다. 또 필요한 자료는 챙겼는지 다시 확인을 해보았다. 변호사는 재판이 늦는지 아직 경찰서에 도착하지 않았다. A씨가 담당 경찰에게 도착했다는 전화를 하니 경찰서 수사과 경제3팀 사무실로 들어오라고 한다. 피의자 신문과정에 A씨에게는 어떤 일이 일어났을까? 피의자 신문과정에 A씨가 유의 할 사항은 또 어떤 것들이 있을까? 다음 편을 기대해보자. By 마석우 변호사
이온디
이온디 9년 전
"김OO씨 되시죠? 여기 XX경찰서입니다. 이△△씨 고소 사건으로 조사할 게 있습니다. 좀 나와주셔야겠는데요." 만일 당신이 이런 전화를 받거나 출석통지서를 받게 된다면? 아마도 정신적 공황 상태에 빠지게 될 것이다. 설마 그러겠느냐고? 직접 한번 경험해 보면 결코 과장된 말이 아니라는 것을 알게 될 것이다. 한 해 고소가 50만 건이 넘는 대한민국 사회에서 살다 보면 수사기관의 소환장을 받는 일은 결코 희귀한 경험이 아니다. 고소를 당했다면 죄를 지었건 안 지었건 조사를 받는 … "김OO씨 되시죠? 여기 XX경찰서입니다. 이△△씨 고소 사건으로 조사할 게 있습니다. 좀 나와주셔야겠는데요." 만일 당신이 이런 전화를 받거나 출석통지서를 받게 된다면? 아마도 정신적 공황 상태에 빠지게 될 것이다. 설마 그러겠느냐고? 직접 한번 경험해 보면 결코 과장된 말이 아니라는 것을 알게 될 것이다. 한 해 고소가 50만 건이 넘는 대한민국 사회에서 살다 보면 수사기관의 소환장을 받는 일은 결코 희귀한 경험이 아니다. 고소를 당했다면 죄를 지었건 안 지었건 조사를 받는 것은 넘어야 할 산이다. 이제 어떻게 할 것인가. (본격적으로 들어가기 전에 사족을 붙인다. 이후에 쓰는 내용은 기자의 주관이 담겨 있기도 하다. 형사사건은 워낙 다양한 경우의 수가 있고 절차가 복잡하기 때문에 사건에 따라, 시각에 따라 대처방법이 다를 수 있다. 누구도 정답을 제시할 수는 없다. 이 점을 감안하길 바란다.) 고소당했다면 조사를 받는 건 넘어야 할 산 가장 중요한 건 마음의 부담을 털어내는 것이다. 말처럼 쉽지 않겠지만 두려하거나 회피한다고 해서 달라질 건 하나도 없다. 현실을 인정하자. 수사기관이 당신을 부른 것은 고소인의 말이 사실인지 아닌지, 사실이라면 죄가 되는지 알아보기 위해서다. 이런 중차대한 상황에서 당신이 정신을 차리지 못한다면 아무도 죄없는 당신을 보호해주지 못한다. 당신에게 한 가지 희망을 주는 사실이 있다. 고소당한 이들 중에서 실제로 형사 처벌을 받는 사람은 5명 중에 1명도 채 되지 않는다. 우리나라엔 무모한 고소가 많다는 뜻이기도 하다. (고소 사건에 관한 자세한 통계는 상자기사 참조.) 만일 당신이 죄가 없다면 검사가 무혐의로 사건을 종결할 것이며, 설사 기소되더라도 법원에서 무죄로 풀려날 길이 있다. 일단은 그렇게 믿자. 반대로 죄가 있다면 그때는 처벌을 피하거나 가벼운 형을 받는 길을 찾아야 한다. (형사사건의 절차에 관해서는 기사 '형사 고소, 홧김에 했다가 큰코 다친다'를 참고하기 바란다) ▲ 10년간 고소 현황 최근 10년간 고소사건의 현황. 한해 50-60만 명이 고소를 당하고 있다. 하지만 고소당한 사람중에서 실제로 형사처벌을 받는 사람은 5명중 1명도 되지 않는다. (출처 : 대검찰청 통계) ⓒ 통계청 관련사진보기 한 해 고소사건 얼마나 되나? 작년 58만 명 고소당해... 형사처벌은 10만 명선 수사기관은 검문, 현행범 체포, 언론보도나 여론동향을 통해 수사를 하기도 하고 피해자의 고소나 제3자의 고발 신고를 통해 수사를 개시하는 경우도 있다. 그중 고소는 형사사건에서 적지 않은 비중을 차지한다. 최근 5년간 형사 사건과 고소사건을 통해 실상을 알아보자. 대검찰청 통계에 따르면 1년 동안 수사기관에 접수된 총 사건수는 250만여 건이다. 최근 5년을 놓고 볼 때 작년(279만여 건)이 가장 많았고, 2005년(243만여 건)이 그나마 적었다. 이중에서 검사가 기소한 사건은 절반 정도이다. 작년을 기준으로 기소율은 48.1%(131만여건)이다. 쉽게 얘기하자면, 한 해 수사기관에서 조사를 받는 사람은 250만명 정도 되고, 그 중 절반은 법정에까지 서게 된다는 말이다. 이중에서 고소사건만 살펴보자. 결론부터 말한다면 고소 사건이 재판까지 가는 경우는 생각보다 많지 않다. 우리나라에서 한 해 고소당하는 사람은 50만-60만 명에 이른다. 2004년이 63만여 명으로 가장 많았고, 2007년이 55만여 명으로 가장 적었다. 작년엔 58만여 명으로, 우리나라 성인(18대 총선 유권자수 3780만명 기준) 중에서 65명에 1명꼴로 고소를 당한 셈이다. 고소사건은 수사기관의 전체 사건 중에서 20-24% 정도를 차지하며 대다수는 사기, 배임, 횡령 등 재산범죄이다. 고소하면 실제로 처벌받는 사람은 얼마나 될까. 최근 5년간 고소사건의 기소율은 17-18% 정도였다. 작년 피고소인 58만여 명 중 10만5341명이 기소되었는데 그중에서 정식 재판을 받은 사람은 3만3461명, 약식 기소된 사람은 7만1880명이다. 형사고소당한 사람 중 실제 재판까지 가는 사람은 5명 중 1명도 되지 않는다는 말이다. 준비없이 조사받다가는 큰코 다친다 수사기관에 가기 전에 할 일이 있다. 고소 내용을 파악하는 것! 그런데 그게 어디 말처럼 쉬울까. 민사사건이라면 재판 전에 상대방의 서류를 보내주기 때문에 충분히 준비할 여건이 된다. 하지만 형사사건은 다르다. 경찰서에 물어보아도 누가 무슨 죄로 고소를 했는지 정도밖에 알 수 없다. 그래서 아무런 준비 없이 수사기관의 소환에 응하는 사람이 많다. 이건 무기 없이 전쟁터에 나가는 것만큼 위험하다. 어쩔 수 없이 여기(고소인과 죄명)에서 단서를 찾자. 고소인이 아는 사람이라면 무슨 내용으로 고소했는지 대충 파악할 수 있으리라. 예를 들어 서로 돈거래를 했다거나, 동업을 하다가 다투었다거나, 몸싸움을 한 적이 있다거나 하는 식으로 추정해 볼 수 있다. 그렇다면 일단 정확한 사실 관계를 정리해보고 경찰 조사에서 답변할 내용을 미리 준비한다. 고소 내용을 반박할 수 있는 자료나 증거(예컨대 돈문제로 고소당했다면 거래내역이나 영수증, 참고인 등)가 있다면 반드시 확보한다. 죄를 인정한다면 당사자와 합의가 상책 고소 내용이 만일 사실이라고 하더라도 그것이 죄가 되는가는 별개 문제이다. 고소사건은 대개 돈 문제에 집중된다. 쉬운 예로 돈을 제때 갚지 못했다거나 혹은 사업이 실패하여 빚쟁이들로부터 고소당했다고 치자. 이것이 범죄가 되기 위해선 처음부터 돈을 갚을 능력과 의사가 없었다거나 돈을 빼돌릴 생각으로 사업을 벌였어야 한다. 단지 경제적 사정이 어려워져서 빚을 졌다는 사실만으로는 죄가 되지 않는다. 반면, 자기 재산도 없이 사업을 벌였다가(쉬운 예로 은행대출과 분양대금만으로 상가 분양사업을 하다가) 실패해서 다른 사람에게 손해를 입혔다면 범죄(사기)가 될 수도 있다. 이런 법률적인 문제도 검토해 보아야 한다. 하지만 혼자서는 해결하기가 쉽지 않다. 여력이 있다면 법률전문가의 조언을 들어보자. 여기서 한 가지 짚고 넘어가자. 당신이 죄를 지었다는 사실을 스스로 인정한다면(예를 들어 일방적으로 폭행을 했거나 명백한 사기거래를 했을 경우) 어떻게 할 것인가. 가장 좋은 방법은 고소인과 합의를 보는 것이다. 범죄 중에는 마음씨 고운 피해자의 뜻에 따라 처벌을 면할 수 있는 죄가 있으니 바로 친고죄, 반의사불벌죄이다. (친고죄 등에 관해서는 상자기사를 참조하기 바란다.) 친고죄 등이 아니더라도 피해자와의 합의는 재판결과에 많은 영향을 미친다. 합의를 본다는 것은 다소 체면을 구기는 구차한 일일 수 있으나 전과자가 되는 것보다는 낫지 않을까. 형사 피의자의 중요한 권리를 알고 가자 이제 경찰(또는 검찰) 조사를 받아야 한다. 막상 조사를 받으면 긴장하게 되고, 당신이 무슨 말을 했는지조차 기억이 안 날 수도 있다. 개인 경험을 얘기해 본다면 2차례 경찰서에 간 적이 있다. 모두 피해자 자격이었다. 경찰과 편안한 상태로 대화를 나누었는데도 조사 기간 내내 심리적으로 위축돼 있는 모습에 스스로 놀랐다. 죄를 지었다고 의심을 받는 '피의자'는 오죽할까 싶었다. 그래서 제안한다. 가능하다면 나름대로 사실관계를 정리한 서류를 들고 가자. 기억력에 의존해서 답변을 했다가는 불리한 얘기가 나올 수도 있고 진술이 오락가락할 수 있다. 질문에 서면을 보고 준비된 답변을 하는 것이 도움이 될 것이다. 또 반드시 메모지와 펜을 준비하라. 조사 도중 중요한 사항이나 의문난 점을 적어둔다. 빈손으로 가서 조사를 받고 나오면 아무런 기억이 나지 않는다. 그때 메모한 내용을 토대로 방어책을 마련하고 주변의 도움을 얻을 수도 있다. 당신이 피의자의 자격으로 경찰서에 간다면 형사 피의자의 권리를 알고 가는 것이 좋다. 피의자는 무죄로 추정되고 변호사의 도움을 받을 수 있다. 변호사와 함께 조사받을 수도 있다는 말이다. 더 중요한 권리로 진술거부권이 있다. 헌법상 권리이다. 수사기관도 피의자를 조사하기 전에 "진술의 전부나 일부를 거부할 수 있고, 이로 인해 불이익을 받지 않는다"는 점을 반드시 알려주게 되어 있다. (진술거부권에 대해서는 조만간 별도의 기사로 정리해볼 예정이다.) 진술거부권을 적절히 활용하라 ▲ 서울 서초동 대검찰청 ⓒ 인터넷사진공동취재단 관련사진보기 수사기관의 조사를 받을 때 어떻게 진술을 하는 것이 가장 좋을까. 개인 의견임을 전제로 가장 효과적인 방법은 유리한 내용은 강조해서 얘기하고, 불리하거나 불확실한 내용에 대해서는 신중한 자세를 보이는 것이다. 당연한 얘기같지만 어렵다. 생각해보라. 당신의 범죄를 추궁하는 형사나 검사 앞에서 '계획된 진술'을 하기가 쉽겠는가. 그래서 앞서 사전준비를 강조한 것이다. 경찰은 당신의 인적사항 등 사소한 사항부터 범죄에 관한 내용까지 질문할 것이다. 어떤 경우는 고소인의 입장에서 질문을 던질 수도 있다. 그중에서 증거가 명백하거나 드러난 사실까지 부인할 필요는 없다. 증거가 명백한 것은 나중에 법률적인 부분에 대해 다툴 수도 있다. 대신 당신에게 아주 불리한 내용이거나 사건에 결정적인 영향을 미칠 수 있는 질문은 준비되지 않았다면 답변을 하지 않는 것이 좋다. 그럴 때는 "더 확인하고 답변하겠다"거나 "이번에는 진술하지 않겠다"는 입장을 밝혀야 한다. 당신의 권리인 진술거부권을 적절히 활용하라는 말이다. 즉흥적인 답변을 피하라. 한 번의 말실수가 치명적인 독이 될 수도 있다. 경찰에서 질문한 내용은 대부분 검찰에서 다시 물어본다. 이러한 내용은 재판에서 다시 확인과정을 거친다. 물론 경찰에서 한 진술은 검찰에서 번복할 수 있고, 법원에서 또다른 진술을 할 수도 있다. 하지만 자꾸 진술이 바뀌다 보면 결코 믿음을 줄 수 없다. 그러니 첫단추부터 잘 끼워야 한다. 피의자의 진술은 서류로 남기게 되는데 이를 피의자 신문조서라고 한다. 이 조서는 법정에서 증거로 사용될 수 있기 때문에 반드시 본인의 확인을 거치게 되어 있다. 아무리 조사를 잘 받았더라도 그런 내용이 조서에 나타나지 않으면 아무런 소용이 없다. 피의자는 조서를 보고 이의를 제기할 수 있고 진술과 다르게 표현된 부분은 수정을 요구할 수 있다. 형사소송법에도 명시되어 있다. 따라서 어렵더라도 조서에 도장을 찍기 전에 반드시 제대로 읽어보고 본인에게 불리하게 적힌 내용은 수정을 요구해야 한다. 수정이 안된다면 이의를 제기한 근거를 조서에 남겨두어야 한다. 경찰이 난색을 표하더라도 어쩔 수 없다. 도장이 한 번 찍히면 당신은 조서에 나온 대로 말한 것이 되니까. 죄가 없다면 당당하게 임하라 한 가지 당부하고 싶다. 경찰이나 검찰에 미리부터 적대적인 감정을 가질 필요가 없다. 당신의 사건이 정치적으로 민감한 사안이거나 시국 사건이 아닌 이상 수사기관도 선입견을 갖고 당신을 대할 이유는 없다. 그들 대부분은 법에 따라 수사를 진행하는 공무원일 뿐이다. 어떤 이들은 불필요하게 경찰조사를 거부하거나 노골적으로 불신을 드러내기도 한다. 자기만족이 될지는 모르지만 상대방의 감정을 자극해서 무엇을 얻을 수 있을지 생각해보자.확실한 것은 당신을 법원에 기소하느냐 마느냐는 수사기관이 결정한다. 일단 정당한 절차에 따라 진행되는 조사에는 협조하는 것이 현명하다. 수사기관에 대한 비판은 당신이 재판에서 진 다음에, 그때 실컷 해도 늦지 않다. 이제 정리해보자. 1. 고소를 당했는데 죄를 인정한다면 우선 피해자와 합의하라. 2. 수사기관의 조사를 받기 전에 반드시 사전준비를 하라. 3. 조사받을 때는 준비된 답변만을 하고 불리한 내용은 진술을 삼가라. 4. 피의자신문조서는 반드시 꼼꼼하게 확인하고 도장을 찍어라. 한 가지 더 추가한다면, 당신이 죄가 없다면 조사에 당당하게 임하라! 합의하면 처벌 안받는 죄도 있다? - 친고죄와 반의사불벌죄란 형사사건에서 피해자와의 합의는 때로는 엄청난 힘을 발휘한다. 수사를 종결시키고, 재판은 중지시킬 수도 있다. 특히 피해자의 의사를 중요하게 여기는 범죄가 있는데 바로 친고죄와 반의사불벌죄다. 이런 죄는 합의가 관건이다. 친고죄란 고소가 공소제기 요건인 죄를 말한다. 쉽게 말해 피해자가 고소를 하지 않으면 검사는 기소할 수 없고, 판사도 유무죄를 판단할 수 없는 죄가 친고죄다. 간통, 강간, 강제추행, 혼인빙자간음, 모욕죄 등이 해당한다. 친고죄에 성범죄가 많은 이유는 피해자의 뜻과는 무관하게 사건이 알려지는 것이 오히려 피해자 명예를 훼손할 수 있기 때문이다. 단, 성범죄 중에서도 강간 상해, 집단 강간, 13세미만 성폭력 등 중범죄는 친고죄가 아니다. 반의사불벌죄는 피해자의 명시한 의사에 반하여 죄를 논할 수 없는 죄다. 피해자가 처벌을 원치 않는다고 하면 처벌할 수 없다. 친고죄와 달리 고소가 없어도 수사를 하고 재판을 할 수 있지만, 피해자가 처벌하지 말아달라고 하는 순간에 사건은 종결된다. (존속)폭행, 과실상해, 협박죄, 명예훼손 등이 여기에 속한다. 명예훼손은 인터넷상이나 언론, 출판물에 의한 것도 포함된다. 하지만 이와 비슷한 범죄인 (존속)학대, 상해죄, 집단·상습폭행 등은 반의사불벌죄가 아니다. 친고죄나 반의사불벌죄는 피해자가 수사기관(재판중이면 법원)에 고소 취하서나 처벌불원서(처벌을 원치 않는다는 내용의 서류)를 내면 기소할 수 없고, 재판중일 때는 공소기각 판결을 하게 된다. 만일 고소인과 합의를 보았다면 반드시 합의서를 작성하고, 그 내용에는 수사기관(또는 법원)에 취하서나 처벌불원서(처벌을 원치 않는다는 서류)를 제출한다는 조항을 넣는다. 한편, 친고죄 등이 아니더라도 피해자와의 합의는 판사가 형을 정하는데 중요한 요소가 된다. 특히 절도, 사기, 횡령 등 금전 범죄는 피해 회복 여부가 감옥에 가느냐 마느냐를 결정할 때도 있다. 따라서 만일 상대방에게 손해를 입혔고 피해액이 많지 않다면 변호사를 선임할 돈으로 합의금을 주는 것이 오히려 나을 수도 있다. 피해자가 과도한 금액을 요구하여 합의가 되지 않았더라도 재판 과정에서 일정한 금액을 공탁하면 양형에 참작이 된다. 저작권자(c) 오마이뉴스(시민기자), 무단 전재 및 재배포 금지
이온디
이온디 9년 전
[사례1] 2008년 1월 17일, 프리랜서 여기자 김모씨는 사진기자들과 함께 배우 송일국씨가 사는 아파트 앞을 찾았다. 인터뷰를 하기 위해서였다. 당시 송씨는 결혼설로 언론의 주목을 받고 있을 때였다. 한참을 기다리던 김 기자는 차에서 내리는 송씨를 발견하고 다가간다. 이를 본 송씨는 기자임을 직감하고 인터뷰를 피하기 위해 재빨리 현관으로 뛰어갔다. 김씨가 송씨를 부르며 뒤따라왔지만 결국 인터뷰는 성사되지 못했다. 여기까지라면 늘상 쫓는 기자와 쫓기는 연예인 사이에 흔히 있을 법한 장면… [사례1] 2008년 1월 17일, 프리랜서 여기자 김모씨는 사진기자들과 함께 배우 송일국씨가 사는 아파트 앞을 찾았다. 인터뷰를 하기 위해서였다. 당시 송씨는 결혼설로 언론의 주목을 받고 있을 때였다. 한참을 기다리던 김 기자는 차에서 내리는 송씨를 발견하고 다가간다. 이를 본 송씨는 기자임을 직감하고 인터뷰를 피하기 위해 재빨리 현관으로 뛰어갔다. 김씨가 송씨를 부르며 뒤따라왔지만 결국 인터뷰는 성사되지 못했다. 여기까지라면 늘상 쫓는 기자와 쫓기는 연예인 사이에 흔히 있을 법한 장면이다. 문제는 그 다음이었다. 김 기자는 취재 과정에서 송씨에게 폭행을 당했다고 주장했다. 그것도 "송씨가 내 얼굴을 팔꿈치로 가격하여 전치 6개월의 상해를 입혔다"는 것이다. 김 기자는 송씨의 사과를 요구했으나, 송씨는 "폭행은커녕 신체적 접촉도 없었다"며 극구 부인했다. 1주일 후 김 기자는 서울중앙지검에 고소장을 제출했고 이 같은 사실은 언론에 그대로 보도되었다. 송씨 역시 김 기자를 고소하기에 이른다. 이것이 이른바 '송일국 여기자 폭행논란 사건'이다. 수사를 맡았던 검찰은 송씨의 폭행 혐의는 인정하지 않았고, 허위 고소 등의 혐의로 김 기자를 기소하였다. 이제 진실은 법정에서 가려져야 할 상황이 됐다. 송일국 취재 여기자에겐 무슨 일이? 법원은 당사자들의 공방과 함께 현장에 있던 기자들, 아파트 사람들의 진술, 주변의 CCTV 영상 등을 토대로 사건을 추적했다. 법원은 김 기자와 동료들의 진술 내용이 번복되고 있는 반면, 송씨는 수사기관에서부터 법원에 이르기까지 일관된 진술을 한 점을 주목했다. 게다가 애초에 사과 한마디면 모든 문제가 끝났을텐데도 송씨가 연예인으로서 엄청난 위험부담을 안으면서까지 거짓말을 할 이유가 없다는 점에 비추어 송씨의 진술에 더 무게를 두었다. 법원은 또한 ▲동료 등이 폭행 장면을 보지 못했다고 한 점 ▲목격자 진술・CCTV 화면 상으로 상해(입술과 치아 등)를 입었다는 김 기자의 얼굴에서 이상을 발견할 수 없었던 점 ▲김씨가 낸 진단서 내용이 기왕증이거나 환자 진술에 근거한 점 등을 들어 송씨의 폭행은 없었다고 판단했다. 법원은 "김 기자가 취재 과정에서 다른 경위로 상해를 입었을 가능성도 있으나 송씨의 가격으로 상해를 입었다고 책임을 전가하는 내용은 허위고소로 인정된다"고 결론내렸다. 결국 김 기자는 무고죄 등으로 법원에서 징역 8월(1심에서는 징역 1년)을 선고받고 구속되었다. 김 기자는 무죄를 주장하며 상고한 상태라 대법원의 최종 판단이 남아 있긴 하다. 하지만 지금까지의 상황으로 볼 때 이 사건은 연예인과 기자 사이의 자존심 싸움 정도나 지나친 취재 열기에서 벌어진 일로 보기엔 사태가 너무 커져 버렸다. 무고죄, 도대체 어떤 죄기에 ▲ 5년간 무고죄 기소 현황 최근 5년간 무고죄로 법원에 기소된 사람의 숫자를 분석한 표다. 2006년까지는 다소 줄었다가 2007년과 작년(2090명) 급증한 것을 볼 수 있다. (참조 : 대법원 통계) ⓒ 김용국 관련사진보기 무고죄는 어떤 죄일까. 무고는 객관적 진실에 어긋나는 내용을 신고하는 행위와 상대방을 처벌받게 하려는 목적이 함께 있을 때 성립한다. 형법을 보자. [제156조] 타인으로 하여금 형사처분 또는 징계처분을 받게 할 목적으로 공무소 또는 공무원에 대하여 허위의 사실을 신고한 자는 10년 이하의 징역 또는 1천500만원 이하의 벌금에 처한다. 무고는 보통 거짓 고소장을 내는 형태를 띠지만, 경찰서에 범죄 신고를 하거나 진술을 할 때에도 허위 사실로 특정인을 처벌받게 할 목적이 있었다면 해당된다. 더 넓게 본다면 공무원을 징계받게 하려고 허위 사실을 투서하거나 해당 기관 민원게시판에 올리는 것도 무고가 될 수 있다. 무고죄는 피해자가 억울하게 수사기관에 조사를 받게 되고, 자칫하면 형사처벌까지 받게 되니 위험한 범죄임에 틀림없다. 게다가 사법 기관을 속여서 형벌권 행사를 방해한다는 점에서 공무방해죄, 뇌물죄와 더불어 국가 기능에 대한 죄로 분류된다. 최근 고소사건이 증가하면서 무고죄도 늘어가고 처벌 수위도 높아가는 추세이다. 작년 무고죄 처벌 2천 명... 징역형 절반 넘어 ▲ 2008년 무고죄 판결 현황 2008년 무고죄 피고인이 재판에서 판결받은 내용이다. 절반이 넘는 피고인이 징역형(집행유예 포함)을 받았다. ⓒ 김용국 관련사진보기 작년 한 해 동안 무고죄로 법정에 선 피고인은 2090명(1심 기준)이었다. 2006년(1533명), 2007년(1663명)에 비해 크게 증가한 수치다. 이중에서 징역형을 선고받은 사람은 절반이 넘는 1144명(집행유예 786명 포함)이나 된다. 무죄 판결을 받은 사람은 80명에 불과하다.(표 참조) 무고죄는 원한관계, 금전관계 때문에 상대방을 보복하거나 골탕먹이려고 허위 고소를 하면서 많이 발생한다. 따라서 감정만 앞세워서 고소・고발을 남발하는 일은 삼가야 한다. 상대방이 고소했다고 덩달아 맞고소로 대응하는 것도 위험하긴 마찬가지다. 최근엔 성(性)과 관련된 무고도 눈에 띈다. 한 20대 여성은 애인의 미니홈피에 딴 여자가 댓글을 단 것을 보고 감정이 상했다. 그래서 단순히 애인을 겁주려고 강간죄로 고소했다가 되레 전과자가 되어야 했다. 어느 노래주점 도우미도 돈을 더 받아내려고 손님들이 집단으로 추행했다고 신고했다가 거짓으로 밝혀지는 바람에 법정에서 선처를 호소해야 했다. 아래에 소개하는 A씨도 비슷한 사례지만 상황은 더욱 심각했다. [사례2] A씨는 경찰서를 찾았다. 그는 고소장을 접수하며 "B씨가 자기 집에 3일간 감금하여 성폭행을 저질렀다"고 호소했다. 경찰은 젊은 여성인 A씨의 말을 듣고 곧바로 B씨를 불렀다. 만일 사실이라면 B씨는 당장 구속을 피할 수 없는 처지였다. 하지만 경찰 조사 결과 석연찮은 점들이 드러나기 시작했다. 우선 B씨의 집은 이웃에서 쉽게 들여다볼 수 있는 구조였다. 또 감금당했다는 기간동안 B씨가 바깥에서 자기 집으로 전화를 건 사실이 확인된 것으로 보아 B씨는 계속 집에 있지는 않았다. 게다가 사건 직후 A씨가 2차례나 문자메시지로 돈을 보내달라고 요구한 점은 감금당한 사람의 행동으로 보기 힘들었다. 결국 A씨는 합의금을 받아내기 위해 그런 일을 저질렀던 것이다. 울산지법은 지난 7월 A씨에게 징역 6월의 중형을 선고했다. 재판부는 "A씨의 범죄는 B씨의 인생을 파멸에 이르게 할 수 있는 행위일 뿐 아니라 형사사법 기능의 올바른 집행을 해한다는 점에서도 비난받아 마땅하다"며 "앞으로 자신의 행위를 무겁게 돌아보면서 생활하라"고 충고했다. "사실에 기초하여 조금 과장했다면 무고죄 아니다" 사람의 기억은 완벽할 수 없다. 그리고 고소장을 내면서 100% 진실만을 적기를 기대하기는 힘들다. 고소 내용이 진실과 조금이라도 다르다고 해서 무조건 무고죄가 되지는 않는다는 말이다. 단순히 착각하거나 표현을 조금 과장한 경우라면 처벌하지는 않는다. 법원도 "고소내용이 터무니없는 허위사실이 아니고 사실에 기초하여 그 정황을 다소 과장한 데 지나지 아니한 경우에는 무고죄가 성립하지 아니한다"(대법원 2007도4450 판결 등)는 판례를 유지하고 있다. 대법원 판례는 "고소사실이 객관적 사실에 반하는 허위의 것이라 할지라도 그 허위성에 대한 인식이 없을 때에는 무고에 대한 고의가 없다."(95도231 판결)고 보지만 "신고사실이 허위라거나 허위일 가능성이 있다는 인식을 하면서도 이를 무시한 채 무조건 자신의 주장이 옳다고 생각하는 경우"(2006도4255)는 무고죄가 성립한다는 입장이다. 생각없이 내놓은 한 장의 고소장 때문에 철창 신세를 질 수도 있다. 무고죄는 사법 기관을 속일 뿐만 아니라 개인의 명예에도 손상을 입히는 중대한 범죄이다. 법원도 비교적 무겁게 처벌하는 편이라는 사실에 주목하자. 그러니까 고소나 범죄신고는 어디까지나 사실을 바탕으로 해야 한다. 거짓때문에 처벌받는 또다른 죄, 위증 무고죄와 비슷한 맥락에서 거짓말로 처벌받는 죄가 있다. 바로 위증죄이다. "양심에 따라 숨김과 보탬이 없이 사실 그대로 말하고 만일 거짓말이 있으면 위증의 벌을 받기로 맹세합니다" 만일 법정에서 이렇게 선서했다면 그때부터는 정말로 말조심해야 한다. 어느 한쪽을 편들기 위해서 거짓말을 했다가는 전과자가 될 수도 있다. 위증이란 법정에서 진실을 말하겠다고 선서한 증인이 자신의 기억과 어긋나게 거짓 진술을 한 것을 말한다. 위증은 최대 징역 5년, 벌금 1천만원까지 처벌받는다. 한편, 이보다 더 센 범죄가 모해위증죄다. 모해위증은 상대방을 형사처벌이나 징계받게 할 목적을 갖고 위증을 한 경우다. 모해위증은 벌금형이 없고 징역형(10년 이하)만 있는 무시무시한 범죄다. 그렇다면 아예 법정에 안 나가는 게 상책일까. 그것도 좋은 방법은 아니다. 누구든지 증인으로 채택되면 재판에서 진실을 밝히기 위해 출석할 의무가 있다. 따라서 법원의 출석통지를 받고도 정당한 이유 없이 안 나갔다는 과태료를 물거나 강제구인될 수도 있다. 위증죄로 처벌받는 사람의 숫자(작년 약 1천7백여명)도 무고죄에 버금간다. 증인석에 서는 순간 말 한마디가 천냥빚을 지게 할 수도 있다. 덧붙이는 글 | 다음 기사는 고소와 관련된 마지막 내용으로 고소당했을 때 대처요령, 최근 5년간 형사사건과 고소사건의 통계 분석 등의 내용을 담을까 합니다. 저작권자(c) 오마이뉴스(시민기자), 무단 전재 및 재배포 금지
이온디
이온디 9년 전
ㄱ씨(40·남)는 평소 아내 ㄴ씨와 돈 문제로 자주 다투었다. 이날도 밤 11시가 넘도록 부부는 심한 말다툼을 벌였다. ㄴ씨가 싸움을 끝내기 위해 "바람 좀 쐬러 나가겠다"며 자리를 피하려 하자 ㄱ씨의 분노는 행동으로 나타났다. ㄴ씨에게 발길질을 하는 등 폭력을 사용했던 것이다. ㄴ씨도 당하고 있지만은 않았다. 바로 친정식구들에게 도움을 요청했다. 전화 연락을 받은 ㄴ씨의 부모와 오빠 ㄷ씨가 집에 도착한 시각은 새벽 2시. 여동생의 처지를 보고 화가 난 ㄷ씨는 ㄱ씨에게 주먹을 휘두르며 … ㄱ씨(40·남)는 평소 아내 ㄴ씨와 돈 문제로 자주 다투었다. 이날도 밤 11시가 넘도록 부부는 심한 말다툼을 벌였다. ㄴ씨가 싸움을 끝내기 위해 "바람 좀 쐬러 나가겠다"며 자리를 피하려 하자 ㄱ씨의 분노는 행동으로 나타났다. ㄴ씨에게 발길질을 하는 등 폭력을 사용했던 것이다. ㄴ씨도 당하고 있지만은 않았다. 바로 친정식구들에게 도움을 요청했다. 전화 연락을 받은 ㄴ씨의 부모와 오빠 ㄷ씨가 집에 도착한 시각은 새벽 2시. 여동생의 처지를 보고 화가 난 ㄷ씨는 ㄱ씨에게 주먹을 휘두르며 앙갚음했고, 다른 식구들도 가세한 상황이 되었다. 급기야 ㄱ씨와 ㄴ씨 쪽은 서로 맞고소하기에 이르렀다. 부부싸움이 양쪽 집안의 폭력 사건으로 비화한 사례이다. 사건 직후 경찰서에 낸 고소장이 이들의 인생에 미친 영향은 예상보다 훨씬 컸다. 이후 어떻게 되었을까. 한밤 부부싸움, 맞고소가 가져온 결과는? 이들 5명(ㄱ,ㄴ,ㄷ씨와 ㄴ씨의 부모)은 먼저 경찰·검찰 수사를 받게 된다. 때로는 가해자로, 때로는 피해자 자격으로 조사를 수차례 받았다. 서로 진술이 맞지 않아서 대질신문도 벌였다. 그렇게 반년이 훌쩍 지나갔고 검찰이 ㄱ,ㄴ,ㄷ씨 세 사람을 기소하면서 사건은 법원으로 넘어갔다. 이들은 다시 피고인석과 증인석을 번갈아가며 법정에 섰다. 7차례 재판 끝에 폭행사실이 인정된 ㄱ씨와 ㄷ씨는 벌금형을, ㄴ씨는 무죄를 선고받았다. 사건 발생 후 판결을 받기까지 무려 1년 2개월간 이들은 송사에 휘둘렸다. 양쪽 다 마음고생은 이루 말할 수 없었다. 설상가상으로 ㄴ씨의 사건은 아직도 진행형이다. "ㄴ씨가 폭행에 가담했는데도 무죄를 선고했다"며 검사가 항소하는 바람에 2심에서 재판을 받고 있다. 이것이 아주 특별한 사례일까. 그렇지는 않다. 서민의 애환이 담긴 포장마차 안의 풍경을 떠올려보자. 옆 자리 손님과 사소한 시비 끝에 주먹다짐까지 가는 걸 자주 볼 수 있지 않나. 이들이 맞고소를 한다면 상황이 크게 다르지 않을 것이다. 폭행 사건을 두둔하거나 덮어두자고 말하려는 건 결코 아니다. 하지만 부부간의 다툼이 이렇게까지 번진 것이 바람직할까. 만일 양쪽 다 고소하지 않고 마무리지었더라면, 아니 고소했더라도 판결이 나기 전에 서로 타협점을 찾았더라면 일이 커지지는 않았을 것이다. 참고로 단순폭행은 '반의사불벌죄'로 피해자가 처벌을 원하지 않는다면 법원도 유죄판결을 할 수 없다. 이보다 더 무거운 상해죄라고 해도 서로 원만하게 합의하였다면 재판 결과는 달라졌을 수 있다. 형사사건은 어떤 단계를 거치나 한때 기분에 따라, 아니면 홧김에 고소장을 내는 것은 삼가야 한다. 하지만 살다 보면 억울하게 피해를 입어 수사기관의 도움을 얻어야 할 때가 있다. 이왕 고소해야겠다는 결심이 섰다면 몇 가지 알아야 할 사실이 있다. 첫째, 형사사건의 절차를 이해해야 한다. 형사사건은 보통 경찰-검찰-법원의 단계를 거친다(표 참조). ▲ 형사사건의 흐름 ⓒ 김용국 관련사진보기 경찰-검찰은 수사단계이고, 법원은 재판 단계라고 이해하면 된다. 여기서 고소장은 수사의 단서를 제시하고 범죄의 처벌을 촉구하는 의미를 갖는다. 앞의 사례에서도 만일 고소가 없었다면 수사기관은 이 사건이 일어난 사실조차 알지 못했을 것이다. 수사는 대개 수개월에 끝나지만 복잡한 사건은 길게는 1, 2년이 걸리기도 한다. 수사기관은 고소 내용을 토대로 금융기관이나 관공서 등에 각종 조회를 해보는 한편, 피해자를 불러서 자세한 내용을 듣는 과정을 거친다. 그 후 피의자를 소환하여 조사를 하게 되는데 이때 작성하는 서류를 피의자신문조서라고 한다. 수사기관은 필요한 경우 피해자와 피의자를 함께 불러 대질신문을 벌이기도 한다. 수사 단계에서 마지막 결정은 검사의 손에 달려 있다. 다시 말해 수사가 어느 정도 마무리되면 피의자를 기소할지 말지, 기소한다면 구속할지 불구속 상태로 재판받게 할지를 검사가 최종 판단한다는 말이다. 이 단계에서 비교적 가벼운 사건은 법정에 출석하지 않고 서류재판을 하는 약식 기소를 할 수도 있고, 그보다 경미한 사건은 기소유예 처분을 내리기도 한다. 법원은 검사가 기소한 내용(공소사실)과 증거를 토대로 피고인이 죄가 있는지를 가린다. 판사는 판결을 통해 유죄 피고인에겐 죄에 따른 형을 결정한다. 검찰은 다시 판결에 따라 집행절차를 진행한다. 집행이란 징역형을 받은 이는 교도소로 보내고, 벌금형을 받은 이에겐 돈을 받는 절차이다. 그런데 고소인에겐 피의자의 기소여부만 알려줄 뿐 나머지 과정은 따로 통지해주지 않는다. 따라서 고소를 했다면 검찰이나 법원의 담당 재판부를 통해 사건이 지금 어느 단계에 와 있는지, 어떻게 진행되는지를 파악할 필요가 있다. 참고로 형사사건의 피해자는 법정에서 진술할 권리가 있다. 고소인이 잘 모르면 판사·검사도 모른다 둘째, 고소 전에 철저한 준비가 필요하다. 고소는 수사의 단서이고, 피해자는 형사사건에서 당사자가 아니라는 점은 이미 얘기했다. 하지만 고소장 한 장만 냈다고 해서 원하는 결론이 나오는 것은 결코 아니다. 수사기관은 1년에 수백만 건을 처리한다. 당신의 사건은 그 중의 한 건일 뿐이다. 사건을 가장 잘 아는 것은 당신이다. 간혹 피해자가 시간과 날짜, 피해액수 등을 정확히 알지 못하는 경우가 있는데 그렇게 되면 유리한 결론을 내기 힘들다. 고소인이 모르는 내용은 판사나 검사도 모른다. 따라서 사실관계를 직접 일목요연하게 정리하는 것이 필요하다. 가급적이면 사건을 날짜와 시간 순서대로 정리하여 두면 고소장을 작성할 때도 편하고, 이후에 조사를 받을 때도 일관된 주장을 펼칠 수 있다. 여기서 주의할 점! 절대로 피해 사실을 부풀리거나 없는 내용을 만들어서는 안된다. 유리한 증거· 증인을 미리 확보하라 이와 함께 유리한 증거나 자료를 모으는 것도 상당히 중요하다. 재판에서 증거의 영향력은 절대적이다. 만일 부동산 분양을 받았는데 명백한 사기였다고 치자. 그렇다면 우선 계약서, 입금 내역, 그밖의 문서들을 차곡차곡 정리해 놓고 계약 내용과 실제 분양이 어떻게 다른지 설명할 수 있어야 한다. 상해나 성폭행 사건이라면 폭행 사실을 알 수 있는 사진과 동영상, 진단서 등을 갖추는 것은 필수이다. 상대방이 시인한 상황이라면 진술서, 사과의 내용을 담은 전자우편이나 문자메시지 등도 중요한 자료가 될 수 있다. 증거는 꼭 특별한 형식을 갖출 필요는 없으므로 명함, 메모지, 녹취록, 사진 등 어떠한 것이라도 도움이 된다. 형사사건에서 목격자나 사건의 내막을 잘 아는 사람이 있다면 이들을 설득하는 것도 필요하다. 그래서 진술서를 받거나 나중에 참고인이나 증인으로 세울 수 있도록 해야 한다. 유리한 증언을 해줄 사람 1명이 때로는 어떤 물적 증거보다 큰 힘을 발휘할 수 있다. 이러한 증거자료 수집은 고소하기 전에 어느 정도 갖추어야 한다. 가능하다면 제3자가 알기 쉽도록 증거별로 간단한 설명을 따로 붙여서 정리를 해놓고 필요할 때 언제든지 제출할 수 있어야 한다. 고소인도 수사기관과 법원에 나가야 한다 셋째, 고소한 사람도 고생을 감수해야 한다. 고소당한 사람은 죄가 인정되면 피의자로, 피고인으로 수사기관과 법원에 불려가게 된다. 당연한 얘기다. 그런데 고소한 사람이라고 마냥 편한 것만은 아니다. 고소장을 내게 되면 경찰은 보통 고소인을 다시 부른다. 고소 내용을 보충하고 사실관계를 확인하기 위해서다. 상대방이 범죄를 부인하면 대질신문도 벌인다. 경찰서에서 이런 조사를 마쳤다고 해서 끝이 아니다. 복잡한 사건이라면 검찰에서 다시 고소인을 부르는 때도 많다. 그뿐 아니다. 재판이 열리면 고소인은 다시 유력한 증인이 되어 증언대에 설 수도 있다. 고소인도 경찰, 검찰 조사를 받고 때로는 형사법정에 증인으로 불려나갈 수도 있다는 말이다. 고소를 하겠다면 이런 수고를 감수해야 한다. 만일 감당할 자신이 없다면 고소하는 대신 당사자끼리 합의를 하거나 아예 그냥 넘어가는 편이 낫다. 이 글을 읽고 고소가 어려운 일인 것처럼 느꼈을 수도 있겠다. 하지만 고소는 피해자의 정당한 권리이니 수사기관이나 법원에서 부른다고 해서 결코 주눅들 필요는 없다. 다만 자신의 권리를 지키기 위해서, 진실을 밝히기 위해선 사건을 가장 잘 아는 피해자의 수고도 어느 정도 뒤따라야 한다는 점을 기억했으면 좋겠다. 형사고소, 제대로 알고 해도 늦지 않다. 형사고소에 관한 몇가지 상식 고소는 누가 어떻게 할 수 있나. 원칙적으로 범죄의 피해자(또는 법정대리인)만 가해자를 고소할 수 있다. 피해자가 사망했을 때에는 배우자나 직계친족, 형제자매에게 고소권이 있다. 고소는 피해 당사자가 한다는 점에서 제3자가 하는 고발과 다르고, 가해자의 처벌의사가 들어간다는 점에서 단순한 범죄 신고와 차이가 있다. 고소는 말로도 할 수 있지만 서류(고소장)를 내는 방식이 일반적이다. 고소의 대상과 시기에는 아무런 제한이 없나. 자기 부모나 배우자의 직계존속(장인, 장모, 시부모 등)은 고소할 수 없다(형법 224조). 고소의 시기는 제한이 없으나 친고죄(모욕죄, 간통죄 등 고소가 있어야만 처벌할 수 있는 범죄)에 대하여는 범인을 안 후 6개월내에만 가능하다. 단, 성폭력범죄에 대해서는 특별 규칙이 있다. 즉 직계존속도 고소할 수 있으며, 강간 · 강제추행 등 성폭력 친고죄는 범인을 안 후 1년까지 고소장을 낼 수 있다. 한편, 간통죄 고소는 이혼 소송을 냈거나 상대방과 이미 이혼을 했을 때만 가능하다. 고소를 번복할 수는 없나. 형사소송법(232조)에 따르면 고소는 1심 판결을 내리기 전까지 취소할 수 있다. 대신 한 번 고소를 취소하면 다시는 고소하지 못하므로 고소 취소도 신중히 결정해야 한다. 가해자가 죄를 지은 것이 확실해서 고소를 했는데 검사가 기소를 하지 않았다. 너무 억울하다. 일단 검사의 불기소 처분에 대해서는 30일 이내에 항고를 할 수 있다. 고등검찰청에서 다시 한 번 판단을 받는 방법이다. 이마저 받아들여지지 않는다면 항고기각 통지를 받고 열흘 안에 법원에 재정신청을 할 수가 있다. 재정신청이란 법원이 검찰의 불기소처분이 적정했는지를 심사하는 제도로서 기소권을 쥐고 있는 검찰을 견제하는 장치이다. 원래 재정신청은 공무원의 직권남용, 가혹행위 등의 범죄에만 적용되었으나 2007년 형사소송법 개정으로 모든 범죄로 대상이 확대되었다. 첨부파일 형사사건의 흐름.ppt 덧붙이는 글 | 다시 한번 강조하지만 고소는 순간적인 기분에 따라 결정할 일은 결코 아니다. 허위 고소, 고발로 처벌받는 사람이 한해 2천명이 넘는다는 사실을 감안한다면 더더욱 그렇다. 그래서 다음 기사는 무고죄와 고소당했을 때 대처요령에 관한 내용을 담아볼까 한다. 저작권자(c) 오마이뉴스(시민기자), 무단 전재 및 재배포 금지
이온디
이온디 10년 전
1 28 0 미래세계의 희망은 모든 활동이 자발적인 협력으로 이뤄지는 작고 평화롭고 협력적인 마을에 있다.' '인도 독립의 아버지' 마하트마 간디의 책 <마을이 세계를 구한다>에 나오는 구절입니다. 2013년, ‘콘크리트 디스토피아’ 서울 곳곳에서는 ‘마을공동체 만들기’가 한창입니다. 함께 '집밥'을 먹고 책을 읽고 텃밭을 가꾸는 것부터, 아이를 같이 키우고 일자리를 나누고 주거환경을 개선하는 것까지. 반세기 전 간디의… 1 28 0 미래세계의 희망은 모든 활동이 자발적인 협력으로 이뤄지는 작고 평화롭고 협력적인 마을에 있다.' '인도 독립의 아버지' 마하트마 간디의 책 <마을이 세계를 구한다>에 나오는 구절입니다. 2013년, ‘콘크리트 디스토피아’ 서울 곳곳에서는 ‘마을공동체 만들기’가 한창입니다. 함께 '집밥'을 먹고 책을 읽고 텃밭을 가꾸는 것부터, 아이를 같이 키우고 일자리를 나누고 주거환경을 개선하는 것까지. 반세기 전 간디의 정신은 아직도 유효합니다. <오마이뉴스>는 다양한 마을만들기 사례를 통해 마을이 왜 희망인지 살펴봅니다. [편집자말] ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을에 어둠이 내리자, 가로등이 어두운 골목길을 밝혀주고 있다. 정릉생명평화마을은 홍대 앞을 기반으로 거주 및 활동하던 젊은 예술가들이 정릉의 임대료가 싼 빈집을 얻어 거주 및 작업실로 사용하며 사회적기업가 육성 사업을 벌이고 있다. ⓒ 유성호 관련사진보기 ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을에 위치한 작은 절 '자은정사'에서 '원만보살' 한은숙씨가 정상문씨, 김국희씨와 함께 저녁 식사를 마친 뒤 생기복덕 표를 보며 신년 운세에 대해 이야기해 주고 있다. ⓒ 유성호 관련사진보기 "국희야, 제주도 갔다가 언제왔노.""상무이 니는 아(애)가 옷이 와 그렇노. 옷 좀 제대로 입어봐." 김국희(30)씨와 정상문(32)씨가 '자은정사'에 들어서자, '원만보살' 한은숙(69)씨의 살가운 잔소리가 시작된다. 한씨의 저녁식사 초대에 대한 답례로 국희씨와 상문씨는 동네슈퍼에서 계란 한 판과 호빵 한 봉지를 사왔다. 한씨는 "계란 떨어진 것 어떻게 알았냐"며 계란말이를 준비한다. 이날 주 메뉴는 김치찌개. 소설을 쓰는 국희씨, 영화와 음악을 하는 상문씨 그리고 한은숙씨는 '동네 친구'다. 국희씨와 상문씨는 한씨를 "보살님"이라고 부른다. 한씨는 정릉3동 '정릉골'에서 40여 년을 살았다. 작은 절을 짓고 신을 모신 지는 20여 년 정도 됐단다. 북한산의 정기를 받은 이곳 마을에는 유난히 절이나 굿당이 많다. 현재 정릉에는 상문씨와 국희씨 같은 청년 20여 명이 살고 있다. 주로 DJ 등 음악하는 이들이 많다. 밴드 '윈디시티'도 이곳에 살고 있다(윈디시티의 노래 '모십니다'에는 '정릉 버전'이 따로있다). 이들 공동체의 이름은 '정릉생명평화마을'. 마을 페이스북에는 다음과 같은 소개 글이 적혀있다. '지구별과 정릉에 살고 있는 다양한 생명들이 평화로운 호흡을 나누는 마을입니다^^' 청년예술가들과 69세 '보살', 친구가 되다 ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을 낮은 지붕 위에 하얀 눈이 쌓여있다. 오래된 마을에 도시가스가 들어오지 않아 연탄으로 겨울을 나는 집도 있지만 마을주민들과 젊은 예술가들은 마을의 자립 순환 경제를 만들기 위해 게스트하우스와 공동텃밭, 공동작업장을 운영하며 마을커뮤니티를 형성하고 있다. 뒤로 높게 솟은 아파트 단지가 병풍처럼 늘어서져 있지만 정릉평화마을은 따뜻한 정이 느껴지는 마을이다. ⓒ 유성호 관련사진보기 ▲ 정릉생명평화마을을 처음 기획한 정상문씨가 8일 오후 서울 성북구 정릉3동에 위치한 작은 절 '자은정사'에서 '원만보살' 한은숙씨로부터 저녁 식사 초대를 받자, 가게에서 구입한 달걀 한판을 선물로 전달하고 있다. ⓒ 유성호 관련사진보기 "서울에도 이런 곳이 있어?" 8일 북한산을 뒤로 하고 있는 '달동네' 정릉3동을 찾았을 때의 첫 인상이다. 높은 고도에 가파른 경사, 한 번 길을 잘못 들면 골목길은 순식간에 미로가 된다. 마을 곳곳에 보이는 연탄이 생경하다. 얼음이 녹지 않은 골목을 걷자니 한 걸음, 한 걸음이 조심스럽다. 하지만 연고도 없는 청년들에게 "여기서 살고 싶다"는 결심을 하게 만들 정도로 마을의 경관은 아름다웠다. 조금만 고개를 들어도 볼 수 있는 탁 트인 파란 하늘, 슬레이트 지붕 위에 소복이 쌓인 하얀 눈. 봄이면 어디서든 꽃과 나무를 볼 수 있고, 여름이면 마을 아래 개울가는 '야외수영장'이 된다. 가을이면 인심 좋은 감이 주렁주렁 열린다. 5년 전 상문씨가 지인의 소개로 마을에 들어온 이후, 그처럼 예술을 하는 친구들이 하나, 둘 정릉을 찾기 시작했다. 한은숙씨와의 만남도 그렇게 시작됐다. "예전에 살던 친구들이 있었는데 동네 높은 지대에 어르신들 앉으시라고 평상을 만들어서 갖다놓으려고 하는데 보살님이 앞에 계셨던 거예요. 그 친구가 보살님한테 '방 나온 거 있냐'고 물어봤는데, 보살님이 옆집을 소개시켜주셨어요. 그 이후로 그 집에만 3, 4명이 돌아가면서 살고 있어요." 상문씨는 한씨가 이곳 마을청년들의 "어머니 같은 분"이라고 귀띔한다. 이날도 한씨는 누구네 집 수도가 동파됐다고 하던데 괜찮은지, 아픈 친구는 잘 있는지 챙겼다. 청년들도 스스럼없이 한씨의 집에 들러 함께 밥을 먹고, '번개모임'에 한씨를 초대한다. 세대를 뛰어넘은 '우정'의 비결을 묻자 한씨는 이렇게 답했다. "나이 먹은 사람들은 그 사람들 세계가 있고 나는 젊은 애들이랑 잘 통하니까. 나는 나이만 먹었지 동심이 있는 사람이야(웃음)." 방치된 마을의 빈집을 예술가들 작업실과 주거공간으로 ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을 내 공동주거 및 공동작업장으로 운영되는 '타일집'에서 상영회가 열리자, 집주인 이혜진씨가 영상물을 보러온 마을 청년과 주민들에게 빵을 대접하고 있다. ⓒ 유성호 관련사진보기 ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을 내 공동주거 및 공동작업장으로 운영되는 '타일집'에서 마을공동체를 기획하며 음악작업을 하고 있는 정상문씨가 DJ 안태열씨와 함께 음악 연습을 하고 있다. ⓒ 유성호 관련사진보기 "정릉이 너무 좋아서", 몇 년간 '마을살이'를 하던 상문씨는 마을주민들과 함께 할 수 있는 무언가를 고민하게 된다. "마을에 친구들이 점점 모이는데 다들 생계를 위해서 홍대나 멀리 일하러 다니는 거예요. 안에 있는 사람들끼리도 친한 사람들끼리만 교류하게 되고. 그래서 여기 어르신들이 많은데 이 분들하고 할 수 있는 게 없을까. 마을 아이들하고도 뭔가 할 수 있으면 좋지 않을까. 우리의 에너지를 마을을 위해 쓰면서 생계도 되고 주민들도 좋은 것이 뭐가 있을까, 하다가 사회적 기업 형태를 생각하게 됐어요." 지난해 5월 정릉생명평화마을은 예비 사회적 기업으로 선정되었다. 오랜 시간 재개발 예정지역으로 묶여있어 방치된 마을의 빈집을 예술가들의 작업실과 주거공간으로 쓸 수 있도록 임대하거나, 마을형 게스트 하우스로 활용하는 것이 주요사업이다('정릉골' 지역은 지난해 8월 주택 재개발 정비구역으로 지정되었다). 예술가 공동작업장 '타일집'이 대표적인 예다. 마을의 빈집을 빌려 3인이 살 수 있는 레지던스로 개조했다. '타일집'이라는 이름은 건물 외벽에 색색의 타일이 붙어있다고 해서 붙여졌다. 마을 페이스북에는 수시로 빈집 관련 정보가 올라온다. 외국인 여행객들도 종종 이곳 마을에 묵는다. 벼룩시장과 문화공연이 어우러진 마을축제 '영등포 달시장' 기획단으로 활동했던 국희씨는 예전부터 마을공동체 만들기에 관심이 많았다. 그는 도시와 시골을 결합한 '도시골 프로젝트'의 연구원이기도 하다. '도시골'이라는 이름은 국희씨가 만들었다. "사람들이 개인의 사적인 삶을 지키려고 하다보니까 외롭고 쓸쓸해졌잖아요. '다시 공동체로 돌아가자'고 하는데, 그렇다고 해서 옛날처럼 옆집에 숟가락까지 다 알고 그건 굉장히 불편한 공동체예요. 사적인 부분을 지키면서 공동체에 살짝 걸친 삶, 도시와 시골의 어메니티(amenity, 쾌적함·기쁨)가 결합된 형태. 그게 제가 생각하는 도시골적인 삶이에요." 국희씨는 현재 서울 정릉마을과 제주도 월평마을을 오가며 '도시골 프로젝트'를 진행중이다. "강남과는 달리 자연이나 시골의 정서가 끼어들 여지가 있거든요." 서울 정릉이 '도시골'이 될 수 있다고 보는 이유다. 국희씨는 상문씨의 소개로 창문을 열면 마당이 있고, 마당 아래로 북한산 계곡물이 흐르는 집을 구해 살고 있다. '월평마을 라디오방송 DJ'로 유명한 국희씨는 제주에서도 마을주민들과 함께 빈집을 활용한 게스트하우스 사업을 벌이고 있다. 최근에는 마을 협동조합, 로컬푸드 레스토랑 등을 준비 중이다. 달동네에서 겨울나기는 결코 쉬운 일은 아니다. 상문씨는 "이번이 다섯 번째 겨울인데 아무래도 집들이 오래됐고, 도시가스가 안 들어오는 곳도 있다 보니 추운 게 가장 힘들다"고 말했다. 올해 유난히 떨어진 기온 탓에 청년들이 동파 수리에 쓴 돈만 100만 원이 넘는단다. 이날 상문씨는 국희씨에게 "중고 해빙기를 하나 사자"고 제안했다. 상문씨의 월동용품은 연탄. 집에 들어서자 마당에 연탄이 수북이 쌓여있다. 그는 "기름으로 한 달 날 돈이면 연탄으로 한 겨울을 난다"면서 "연탄이 훨씬 저렴하다"고 말했다. '생명평화마을'이라는 이름에 걸맞게 '친환경적으로' 겨울을 나기 위해 상문씨는 집 안에도 연탄난로를 직접 설치했다. 때로는 나무를 때기도 한다. 만일을 대비해 방에 일산화탄소 측정기를 뒀다. 늘 동네 어르신과 친구들이 반찬과 밥을 챙겨준다. 그래서 어제는 승열이와 태열이와 약수터에 가서 운동도 하고 약수를 떠와서 보살님과 원진이네와 민욱이네에 나누어 주었다. 보살님댁에는 만두도 드렸는데 오늘 원진이와 민욱이와 반장형네에도 송희네 만두를 맛보여 드리려고 사러 갔더니 보살님이 어제 정릉에서 이 만두 처음 먹어보고 맛있다고 오늘 동네 친구분과 함께 먹고 계셨다. 그래서 함께 만두를 가지고 반장형네로 갔다.^^아~ 배부르다. 정릉은 참 좋다(2012년 3월 16일 상문씨의 '마을일기'). 아침에 일어나니 마당에… 두릅을 놓고 가셨다… 봄날의 산타 이웃 아주머님이 다녀가셨구나 상상하며 애틋하고 푸근한 날을 보냈다(2012년 4월 24일 상문씨의 '마을일기'). "전봇대 사이로 보이는 하늘, 이게 보물" ▲ 지난해 10월14일 서울 성북구 정릉3동 정릉천 공원에서 열린 정릉골 마을 잔치에 마을 주민들과 젊은 예술인들이 함께 어울려 즐거운 시간을 보냈다. ⓒ 정릉생명평화마을 관련사진보기 ▲ 지난해 10월14일 서울 성북구 정릉3동 정릉천 공원에서 열린 정릉골 마을 잔치에서 마을 어르신들이 사물놀이를 펼져보이며 마을 번영을 기원했다. ⓒ 정릉생명평화마을 관련사진보기 ▲ 지난해 10월14일 서울 성북구 정릉3동 정릉천 공원에서 열린 정릉골 마을 잔치에 정릉생명평화마을에서 음악작업을 하고 있는 레게밴드 '윈디시티'의 김반장이 마을 주민들을 위해 멋진 공연을 펼쳤다. ⓒ 정릉생명평화마을 관련사진보기 ▲ 정릉생명평화마을 공동체를 기획한 정상문씨가 지난해 서울 성북구 정릉3동 마을텃밭에서 주민 어르신과 이야기를 나누고 있다. ⓒ 정릉생명평화마을 관련사진보기 상문씨와 국희씨가 꿈꾸는 '정릉생명평화마을'은 단순한 청년예술가 커뮤니티가 아닌 마을주민과 함께하는 '문화예술마을'이다. 그래서 새롭게 유입된 청년들과 기존 마을 주민들의 융합은 이들에게 늘 숙제다. 지난해 10월, 정릉천에서는 청년들이 주축이 되어 '마을잔치'가 열렸다. 상문씨는 "원래 이 마을에서 매년 정월대보름 잔치가 열렸는데 재개발 여파 때문인지 지난해인가부터 없어졌다"면서 "마을잔치에 풍물 등 마을주민들이 즐길 수 있는 요소를 넣었다"고 말했다. 마을 풍물패의 길트기부터 시작해서 개울가 바위를 무대삼아 공연을 하고, 같이 밥을 나눠먹고. 국희씨는 "그렇게 많이 모이실 줄 몰랐다"면서 "마을분들이 밤까지 정릉천에 촘촘히 빙 둘러 앉아서 윈디시티 공연도 하고, 마을분들 노래자랑도 하고"라며 당시를 떠올렸다. 그러면서 "올해는 잔치를 봄에도 하고, 여름에도 하고, 가을에도 할 것"이라며 눈을 반짝였다. 봄이 오면 다시 시작할 일이 또 하나 있다. 바로 마을 골목길 탐방. 지난해 여름과 가을, 국희씨가 가이드가 되어서 마을 골목길 구석구석을 걸었다. 보물찾기도 준비되어 있다. "'지금부터 보물찾기입니다'하면 사람들이 막 보물을 찾아요. 여기는 이게 보물이에요." 취재진에게 골목길 탐방을 시켜주던 국희씨가 잠시 멈춰서며 말했다. "전봇대 사이로 보이는 하늘. 그러면 다같이 이걸 올려다봐요. 종이에 '당신의 꿈', '당신의 사랑'이라고 적혀 있을 때도 있어요. 그러면 여기에서 자신의 꿈, 사랑을 이야기하는 거죠." 국희씨는 "마을에 관심이 있는 학생들이나 다른 마을 주민들, 일반인들이 골목길 탐방을 오는데 골목이 꼬불꼬불하니까 중간에 길을 잃어도 다들 좋아한다"고 말했다. "불편함의 즐거움... 하루하루가 행복해요" ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을 내 공동주거 및 공동작업장으로 운영되는 '타일집'에서 마을공동체를 기획한 정상문씨와 마을 청년, 주민들이 이야기를 나누며 즐거운 시간을 보내고 있다. ⓒ 유성호 관련사진보기 ▲ 8일 오후 서울 성북구 정릉3동 정릉생명평화마을 내 공동주거 및 공동작업장으로 운영되는 '타일집'에서 마을공동체를 기획한 정상문씨가 정릉마을의 시간과 장소, 사람 이야기를 기록한 영상물을 마을 청년, 주민들과 함께 보고 있다. ⓒ 유성호 관련사진보기 이날 오후 9시, 정릉생명평화마을 '타일집'에서는 작은 상영회가 하나 열렸다. 상문씨가 만든 마을홍보용 다큐영상(다큐영상 예고편 보러가기)을 함께 보는 자리다. 상문씨는 "5, 6개월 동안 촬영했고 3, 4년 전에 찍은 영상도 있다"고 말했다. 국희씨는 "앞으로 마을 주민들과 함께 영화를 보는 '안방영화제'를 열 것"이라고 전했다. 타일집에 들어서자, 벽면에 있는 마을이웃 연락처가 눈에 띈다. 상문씨와 친구들이 오랜시간에 걸쳐 만든 '마을이웃 네트워크'다. 털보아저씨, 6번 마을버스 종점 미술작가, 밴드를 준비하는 20대 초반의 마을이웃, 기타를 치며 자동차 판매업 하는 마을이웃, 수도 동파시 비상복구업체, 야채 저렴한 집(2만 원 이상시 배달) 타일집은 마을 청년들에게 사랑방 같은 곳이다. 지난 크리스마스에는 타일집 거실 연탄난로에 어묵탕을 끓여놓고 파티를 열기도 했다. 상영회에 앞서 타일집 입주자 혜진(34)씨는 따뜻한 홍차를 끓였다. 쥬얼리 디자인을 하는 혜진씨는 지난해 10월 이곳에 들어왔다. 그는 "가족 이외에 모르는 이들과 이렇게 살아보는 건 처음"이라면서 "서로 다른 사람들이 모여 있으니까 내가 알고 싶거나 배우고 싶었던 것들을 자연스럽게 접할 수 있어서 좋다"고 말했다. 또 다른 입주자 진(26)씨는 타일집에 들어온 지 한 달 정도 됐다. 명동에서 태국·인도 핸드메이드샵을 운영하면서 음악을 하는 진씨는 정릉에 살게 된 것이 운명같다고 말했다. "제 고향이 경기도 안성이에요. 정말 시골이에요. 논밭이 펼쳐져있는. 그런데 중학교 때부터 도시에서 살면서 제가 제 자신이 아니라 인위적으로 산다는 느낌을 받았어요. 서울 자체에 정이 없어서 귀농하고 싶었는데, 서울의 시골 같은 정릉을 알게 된 거예요. 살기 불편하긴 하지만 '불편함의 즐거움'을 알아가고 있어요. 하루하루가 행복해요." 상영회는 오후 10시가 넘어 시작되었다. 영상에는 상문씨가 찍은 정릉의 사계절이 담겼다. 여름의 정릉이 나오자, 혜진씨와 진씨는 "우와, 예쁘다"를 연발했다. 상문씨의 1인 2역 연기가 등장할 때마다, 타일집은 웃음소리로 가득 찼다. 정릉의 밤은 그렇게 깊어갔다. 저작권자(c) 오마이뉴스(시민기자), 무단 전재 및 재배포 금지
이온디
이온디 10년 전
PHP를 사용하여 개발하다보면, 한글로 된 값이 나올때도 있을 수 있습니다. 그런데 PHP를 통하면 DB에 깨져서 들어간다던지, 아니면 html 값이 깨질 때도 있습니다. PHP 한글 깨짐현상 해결하기(html, mysql) PHP를 통했을때 한글이 깨지는 현상 해결하는 방법엔 여러가지가 있습니다. 먼저 한글 깨지는 현상이 DB나 클라이언트 문제가 아닌 PHP가 원인인지 확인후 진행하는것이 좋습니다. Mysql 입출력 방식이 … PHP를 사용하여 개발하다보면, 한글로 된 값이 나올때도 있을 수 있습니다. 그런데 PHP를 통하면 DB에 깨져서 들어간다던지, 아니면 html 값이 깨질 때도 있습니다. PHP 한글 깨짐현상 해결하기(html, mysql) PHP를 통했을때 한글이 깨지는 현상 해결하는 방법엔 여러가지가 있습니다. 먼저 한글 깨지는 현상이 DB나 클라이언트 문제가 아닌 PHP가 원인인지 확인후 진행하는것이 좋습니다. Mysql 입출력 방식이 문제였던 저 같은 경우에는 마지막 방법으로 성공하였습니다. 1. 인코딩 방식 통일(PHP 저장 방식, 웹 형식 모두 utf-8로 통일) 문서 저장 방식을 모두 하나로 통일하는 방법입니다. 2. iconv() 사용 iconv("현재 인코딩", "바꿀 인코딩", 바꿀 문자열) 사용 예시 ) $ex = iconv("utf8", "euckr", $ex); 3. Mysql 입출력 인코딩을 지정 Mysql 연동을 한다면 입출력 인코딩이 달라서가 원인이 될 수 있다고 합니다. 아래 3줄의 소스를 추가함으로써 해결하였습니다. mysql_query("set session character_set_connection=utf8;"); mysql_query("set session character_set_results=utf8;"); mysql_query("set session character_set_client=utf8;"); 4. php가 출력하는 html을 utf-8로 변경 PHP에서 출력하는 html을 utf-8로 변경함으로써 해결합니다. PHP내용 <?,?> 위 아래로 추가합니다. <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head> <body> <? PHP 내용 ?> </body> </html> 참고한 사이트 : http://ra2kstar.tistory.com/59
이온디
이온디 10년 전
CSS 수정을 통해 스케치북의 오래된 스타일을 아래와 같이 플랫하고 패딩값이 넉넉한 디자인으로 스킨을 변경할 수 있습니다. [그림1, 스케치북 웹진스킨 원본] [그림2. CSS 추가를 통해 변경된 스케치북 웹진스킨] 추가된 소스 사용하고 있는 레이아웃이나 게시판에 아래 CSS 스타일시트를 추가해서 사용할 수 있습니다. /* 웹진 목록 상세정보*/ .bd_zine.zine .info > span{display:block;bord… CSS 수정을 통해 스케치북의 오래된 스타일을 아래와 같이 플랫하고 패딩값이 넉넉한 디자인으로 스킨을 변경할 수 있습니다. [그림1, 스케치북 웹진스킨 원본] [그림2. CSS 추가를 통해 변경된 스케치북 웹진스킨] 추가된 소스 사용하고 있는 레이아웃이나 게시판에 아래 CSS 스타일시트를 추가해서 사용할 수 있습니다. /* 웹진 목록 상세정보*/ .bd_zine.zine .info > span{display:block;border-right:none;} .bd_zine.zine .info{font-size:16px;color:#3a3a3a;line-height:140%;} .bd_zine.zine .info > span:before{content:"· "} .bd_zine .info b{font-weight:normal;} .bd_zine .info b:before{content: ": "} /* 웹진 목록 글제목 */ .bd_zine h3{color:#333;font-size:21px;font-weight:700;} /* 웹진 카테고리 */ .cnb3{margin-bottom:10px;} .cnb3 .on > a, .cnb3 a:hover, .cnb3 a:focus{background:#3b7bea !important;font-size:16px;text-shadow:none;color:#fff;} .cnb3 a{background:#f5f5f5 !important;border:none;height:42px;line-height:42px;font-size:16px;} .cnb3.center li{margin-left:10px;min-width:130px;} .cnb3.center li:first-child{margin:0;} /* 웹진 페이징 */ .bd_pg .this, .bd_pg a:hover, .bd_pg a:focus{background:#515151;color:#fff;border:1px solid #374048;padding:10px 15px;border-radius:0;} .bubble .wrp{color:#888}
이온디
이온디 10년 전
천연소가죽(물소,버팔로, 내츄럴가죽)과 독고가죽(속피가죽) 구분요령 ⊙ 소파에 사용되는 가죽 1.물소가죽(버팔로, 내츄럴가죽)은 부위에 따라 다르게 나타납니다. -목,배부분은 주름이 크고 많으므로 소파, 가방, 핸드백등의 옆, 밑,뒷부분등에 사용합니다 -등,허리,엉덩이 부분은 가죽이 매끈하여 앞쪽, 윗부분, 주로 사람이 많이 사용하는 부분에 사용합니다. ※ 가죽소파의 경우 부위별로 무늬가 다른 것을 발견할 수 있습니다. 이것은 가죽의 하자가 아니라 오… 천연소가죽(물소,버팔로, 내츄럴가죽)과 독고가죽(속피가죽) 구분요령 ⊙ 소파에 사용되는 가죽 1.물소가죽(버팔로, 내츄럴가죽)은 부위에 따라 다르게 나타납니다. -목,배부분은 주름이 크고 많으므로 소파, 가방, 핸드백등의 옆, 밑,뒷부분등에 사용합니다 -등,허리,엉덩이 부분은 가죽이 매끈하여 앞쪽, 윗부분, 주로 사람이 많이 사용하는 부분에 사용합니다. ※ 가죽소파의 경우 부위별로 무늬가 다른 것을 발견할 수 있습니다. 이것은 가죽의 하자가 아니라 오히려 고급 천연가죽(물소,버팔로, 내츄럴가죽)임을 유념하시길... . 전체면이 고른 것은 독고가죽(속피가죽의 은면코팅)입니다. 2.독고가죽이란? 1)소가죽에서 은면층(가죽겉판)을 한 겹을 벗겨낸다음 그 다음 가죽을 가공 염색처리를 하여 가죽처럼 만든 것을 말합니다. 2)보통가죽가격보다 1/2가격이므로 판촉물 가죽에 많이 사용하며, 소파에는 저렴한 가격대에 사용합니다. 3)두께가 일정하고 은면코팅이 두껍지 않으며, 늘리거나 구긴 후 복원력이 좋으면 좋은 가죽임. 실용성있는 가죽을 원하시면 양피보다 우피가 내구성이 좋습니다. 4)은면이 매끈하며 깔끔하고 시각적인 아름다움이 있는 것도 좋은 가죽이라 할 수 있습니다. ※ 소파에서 사용되는 대부분의 가죽은 우피(소가죽)입니다. 소비자가 가구점에서 가죽소파를 구입하려할 경우, 물소가죽, 버팔로가죽, 내츄럴가죽 또한 천연소가죽, 면피가죽,속피가죽,독고가죽. 엠보가죽 등 여러 가지로 가죽에 대한 설명을 듣게 되는데 이해하는데 난감할 경우가 많습니다. 1)가구점에서 물소가죽, 버팔로가죽, 내츄럴가죽을 혼용하여 사용하며, 두께는 약 3mm내외, 평당 약 2,500원-3,000원 2) 독고가죽은 가구점에서 속피가죽으로 불리우고 있습니다.(가구점에서 물소 또는 버팔로가죽이라하지않고 소가죽 또는 천연가죽이라 하면 대부분 속피가죽을 말합니다.) 또한 엠보가죽은 속피가죽을 은면코팅하면서 울퉁불퉁하게 무늬를 나타나게한 가죽을 말하며 은면이 깔끔한 가죽에 비해 약간 비싼편입니다. 두께는 약1.5mm내외이며 평당 단가는 약1.500원 3)최근들어 면피 가죽을 사용하는 소파가 많아졌습니다. 면피가죽은 속피가죽에 비해 부드럽습니다. 가격도 조금 비싸구요 일반적으로 가방,핸드백 구두 지갑 소파등에서 90%이상이 소가죽을 사용하고 있다 . .외국소한마리는 50-60평 .한국소한마리 40-44평 .카프(calf)는 6개월미만의 송아지 가죽을 말한다.(한마리8-11평) .버팔로가죽은17-21평 .크기는 보통 1평(스퀘어 피 : 30.38 X 30.39 =929 cm2) [출처] ◈ 천연소가죽(물소,버팔로, 내츄럴가죽)과 독고가죽(속피가죽) 구분요령|작성자 아르누보
이온디
이온디 10년 전
http://blog.naver.com/cc_korea/220384779510 협업공간? 코워킹 스페이스? 떠오르는 아이디어로 가득한 창업가들, 그러나 초기엔 가벼운 주머니로도 사업 구상을 마음껏 펼칠 수 있는 공간을 찾기가 쉽지 않죠. 이런 경우를 위해 최적화된 환경을 찾고 계시다면 코워킹 스페이스에 주목해 보세요! 코워킹 스페이스에선 대개 인터넷, 프린터, 음료, 창업자들 간의 교류를 도울 수 있는 프로그램들을 제공하고 있습니다. 그래서 이 곳은 단순히 공… http://blog.naver.com/cc_korea/220384779510 협업공간? 코워킹 스페이스? 떠오르는 아이디어로 가득한 창업가들, 그러나 초기엔 가벼운 주머니로도 사업 구상을 마음껏 펼칠 수 있는 공간을 찾기가 쉽지 않죠. 이런 경우를 위해 최적화된 환경을 찾고 계시다면 코워킹 스페이스에 주목해 보세요! 코워킹 스페이스에선 대개 인터넷, 프린터, 음료, 창업자들 간의 교류를 도울 수 있는 프로그램들을 제공하고 있습니다. 그래서 이 곳은 단순히 공간을 나누어 쓰는 것을 넘어 같은 공간에서 어울리며 생각을 공유하고 뜻을 나눌 수 있는 기회를 얻을 수 있는 곳이죠. 최근 서울 뿐만 아니라 전국적으로 함께 모여서 일하는 코워킹스페이스(co-working space)가 많이 생기고 있어요. 그 예로는 서울시 운영으로 조건 없이 무료로 이용할 수 있는 곳(서울시 사회적 경제지원 센터, 서울시 청년 일자리 허브), 재단에서 운영하여 조건부 무료인 곳(디캠프, 오픈콘텐츠랩), 유료로 이용할 수 있는 곳(스페이스 노아, 카사갈라, 라운지 위, 카페큐브, 임팩트 허브 서울, 아이디어 팩토리) 등이 있어요. ▲ 서울시 사회적경제지원센터 협업 공간 스페이스류 (제공 : 서울시 사회적경제지원센터) ​▲ 오픈콘텐츠랩 (제공 : 오픈콘텐츠랩) ​▲ 스페이스 노아 (제공 : 스페이스 노아) 실제로 코워킹 스페이스를 이용하면 어떤 점이 좋을까요? 코워킹 이용자들을 대상으로 한 설문 조사 결과가 발표되어서 소개해드립니다. ( *이 글은 Shareable의 기사인 “Need a Happiness Boost? Try Coworking“를 참고하여 작성했습니다. 원문이 궁금하신 분들은 링크를 통해 확인하세요.) Carlos Almansa (CC-BY-NC). Follow @CatJohnson on Twitter 지난 3월에 열렸던 Global Coworking Unconference Conference (GCUC)에서 코워킹플레이스 New Work City의 공동 창립자인 Jacob Sayles가 코워킹스페이스 이용자들을 대상으로 한 설문조사 결과를 발표했습니다. 조사결과, 사람들은 코워킹을 통해 단순하게 사무 공간만을 공유하는 것이 아니라, 하나의 커뮤니티를 형성하는데 의미를 두고 있다는 것으로 밝혀졌다고 합니다. 실제로, 코워킹하면서 업무 능력과 대인관계가 향상되었다고 응답한 사람들이 대다수였다고 하는데요. 세부적인 설문 결과는 아래와 같습니다. - 84%의 사람들은 코워킹을 할 때 더 열심히 참여하고, 동기부여가 된다고 대답했습니다. - 80%의 사람들은 코워킹 멤버들의 도움이나 지도에 의지하고 있다고 답했습니다. - 69%의 사람들은 새로운 스킬을 배웠다고 답했습니다. - 68%의 사람들은 그들이 가지고 있던 스킬이 향상됐다고 답했습니다. - 87%의 사람들은 다른 코워킹멤버들을 사회적 이유때문에 만나고 있다고 답했습니다. - 54%의 사람들은 일 이후나 주말에 코워킹 멤버들과 교제하고 있다고 답했습니다. - 79%의 사람들은 코워킹은 그들의 사회적 네트워크를 확장시키고 있다고 답했습니다. - 83%의 사람들은 코워킹으로 덜 외롭다고 답했습니다. - 78%의 사람들은 코워킹은 그들이 제정신으로 일할 수 있게 도와준다고 답했습니다. - 마지막으로 89%의 사람은 더 행복해졌다고 답했습니다. 이 설문조사는 코워킹 스페이스에서 이루어지는 네트워킹을 분석하고자 실시되었는데요. 업무적 관점에서 코워킹에 대한 리서치를 진행했지만, 사회적·학습적 차원의 코워킹의 효과도 뚜렷하게 나타난것으로 밝혀졌습니다. 자세한 조사 결과는 Small Business Labs을 통해 확인해보세요~ 내가 이용할 수 있는 코워킹 공간을 찾으신다면? - 서울에도 코워킹 공간이 곳곳에 있습니다. 공간마다 개성넘치는 인테리어와 주제를 가지고 운영되고 있으니, 위치나 관심분야에 가장 적합한 곳은 어디인지 확인해보시고 방문해보시면 좋을 듯 합니다~ 한 예로, 관악구 신림동에 위치한 ‘신림 아지트(AZIT)’는 도시 내 커뮤니티가 가진 실질적인 어려움을 해결하는 사회서비스를 제공하기 위해 만들어 졌는데요. 지역커뮤니티를 기반으로 한 코워킹 스페이스외에도 주민들을 위한 프로그램을 운영하는 공간이 있습니다. (지역과 함께하는 커뮤니티 공간 ‘신림 아지트(AZIT)’ 글 보러 가기) - 무료이거나 조건부 무료, 또는 저렴한 가격의 코워킹 공간을 중심으로 소개한 블로터 기사가 있으니 같이 확인해보세요. [블로터 기사 “지갑 얇은 창업가를 위한 협업 사무공간 10곳” ] 코워킹 공간 운영에 관심이 있는 분들께는 아래 자료를 공유합니다 - 코워킹 스페이스를 운영하고 싶은데 어떻게 시작해야할지 막막하시다면, Shareable의 코워킹 스페이스 운영하기 10단계 가이드를 소개한 글을 공유허브에 번역해서 소개한 글이 있습니다. ‘성공적인 코워킹 스페이스(Co-working Space)을 위한 10단계 가이드’를 참고하세요. - 공간 운영자들의 아이디어와 고민을 엿보고 싶으시다면, 공간 공유를 주제로 한 공유허브 세미나 ‘공유가 빛나는 공간들’에서 나누었던 경험과 노하우를 들어보세요! 공유허브 세미나 ‘공유가 빛나는 공간들’ 후기 공유에 대한 다양한 생각, 다양한 소식을 더 만나보고 싶으시다면? sharehub.kr 공유허브 페이스북에 놀러오세요. https://www.facebook.com/sharehub.kr 더 많은 공유이야기가 여러분을 기다리고 있어요! https://twitter.com/sharehub_kr [출처][허브특집] 코워킹 공간 – 업무 능력 Up! 대인관계 Up!|작성자 공유허브
이온디
이온디 10년 전
Carpe Diem | 투덜이 http://blog.naver.com/aircook/90005548156 //객체 지향 자바스크립트 //참고서적 : 최범균의 Ajax Programming/최범균/가메출판사 //흠 자바스크립트로 이런게 가능했을줄이야.. Ajax 소스 보다보니까 이해가 안되는것들이 많던데, 이거 한번 정리하고 나니까 대충 이해가 가네.. 자바스크립트 함수를 JSON으로 정의했을줄이야.. 저게 이해가 제일 안되었음. //역시 한번 정리하는것 하고… Carpe Diem | 투덜이 http://blog.naver.com/aircook/90005548156 //객체 지향 자바스크립트 //참고서적 : 최범균의 Ajax Programming/최범균/가메출판사 //흠 자바스크립트로 이런게 가능했을줄이야.. Ajax 소스 보다보니까 이해가 안되는것들이 많던데, 이거 한번 정리하고 나니까 대충 이해가 가네.. 자바스크립트 함수를 JSON으로 정의했을줄이야.. 저게 이해가 제일 안되었음. //역시 한번 정리하는것 하고 안하는것하고의 차이가 있넹.. 역시 간만의 직접 포스팅.. //① prototype을 사용해서 자바스크립트 클래스 만들기 //클래스 정의 클래스명 = function(파라미터){ } //객체 생성 var 인스턴스명 = new 클래스명(파라미터); //함수 추가 클래스명.prototype.함수명 = function(파라미터){ } //② object를 사용한 개별 객체 확장하기 var 인스턴스명 = new Object(); 인스턴스명.속성명1 = "값1"; 인스턴스명.속성명2 = "값2"; 인스턴스명.함수명 = function(){ } //③ JSON 표기법 //JSON = JavaScript Object Notation //정의하기 var 객체 = {이름1:값1, 이름2:값2, 이름3:값3}; //값 가져오기 var 임시변수1 = 객체.이름1; var 임시변수2 = 객체["이름1"]; //JSON 표기법을 사용한 클래스 정의 클래스명 = function(파라미터){ } 클래스명.prototype = { 함수명1 : function(파라미터1){ }, 함수명2 : function(파라미터2){ } } //④ 자바스크립트에서 패키지 정의하기 //모듈별 함수명 중복을 방지하기 위해서 정의해야 되나, 자체 제공되지는 않고 객체의 프로퍼티를 사용해서 패키지 개념 적용한다. var 패키지명1 = new Object(); var 패키지명2 = new Object(); //위는 다음과 동일 var 패키지명1 ={}; var 패키지명2 ={}; 패키지명1.패키지명2.클래스명 = function(){ } 패키지명1.패키지명2.클래스명.prototype = { 함수명1 : function(파라미터1){ }, 함수명2 : function(파라미터2){ } } [출처] [본문스크랩] 객체 지향 자바스크립트|작성자 JYP
이온디
이온디 10년 전
http://www.webwork.kr/ http://jwysiwyg.github.io/jwysiwyg/ https://github.com/akzhan/jwysiwyg http://webresourcesdepot.com/category/goodies/wysiwyg-html-edit/ http://www.webwork.kr/ http://jwysiwyg.github.io/jwysiwyg/ https://github.com/akzhan/jwysiwyg http://webresourcesdepot.com/category/goodies/wysiwyg-html-edit/