기존의 유가증권시장, 코스닥시장에 이어 생기는 제3의 장내 주식시장이 바로 코넥스입니다. 바로 코스닥의 요건을 만족하지 못하는 벤처, 중소기업을 위한 시장입니다.
그동안 코스닥 시장이 벤처, 중소기업의 자금조달 중개 기능을 제대로 하지 못했다는 점에서 좀 더 진입이 자유롭고 원활한 자금 조달과 회수를 할 수 있는 새로운 시장을 만들고자 한거죠.
<코넥스 진입을 위한 재무요건 :
최소 자기자본 5억원, 매출 10억원, 순이익 3억원 중 하나를 충족>
코스닥이
일반기업의 경우 - 자기자본 30억 이상 또는 시가 총액 90억이상
벤처기업의 경우 -자기자본 15억 이상 또는 시가 총액 90억 이상
의 재무요건을 요구한다는 점에서 코넥스의 재무요건이 주식시장의 진입 장벽을 상당히 낮췄다고 볼 수 있습니다.
<그림 출처 fntimes.com>
코넥스가 또 기대하고 있는 점은 이 시장을 발판으로 코스닥 진출을 마련해줄 수 있다는 것입니다.
또한 이외에도 지정자문인을 두도록 하는 특징이 있습니다. 증권사를 지정자문인으로 두고 있는데, 대신증권[003540], 신한금융투자, 우리투자증권[005940], 하나대투증권, 한국투자증권 등 대형사 5곳과 교보증권[030610], 키움증권[039490], 하이투자증권, HMC투자증권[001500], IBK투자증권, KB투자증권 등 중소형사 6곳 등 총 11곳이 선정되었다고 합니다.
지정자문인 상장 적격성 심사를 하기 때문에 코넥스에 편입된 회사가 어떤 이유로든 조기에 퇴출당하면 지정자문인은 평판에 큰 타격을 입게 될 수 있습니다. 따라서 증권사들은 더욱 신중하게 기업을 발굴하고 있습니다.
코넥스가 벤치마킹한 기존 모델이 영국의 대체투자시장(AIM. Alternatice Investment Market)이라는데 한번 간략하게 알아볼까요?
AIM은 전세계적으로 가장 성공적인 중소기업 전용 시장으로 꼽힌다고 합니다. 소규모 상장기업, 상장 전 단계 기업을 위한 시장으로 불과 10일 만에 끝날 수 있는 상장 절차와 세금 면제등의 강력한 이점을 지닙니다.
외국기업에 대한 개방의 성공 뿐 아니라 글로벌 금융위기 이후 자금조달 통로의 역할로 더욱 강조되고 있다고 합니다.
코넥스의 지정자문인제도가 AIM에서 가져왔다고 하는데 '노매드(Nomad, Nominated Advisor'로 불리는 지정자문인의 역할 또한 AIM의 성공 비결에서 빼놓을 수 없다고 합니다. 이를 통해 기업의 상장 적합 여부를 결정하고 심사, 감독할 수 있는 것이죠.
wonnytest는 내가 지정해준 앱의 namespace이고 review는 생성한 액션의 이름.
2) movie=http.... (객체)
movie객체에 대한 URL. 여기서는 샘플URL을 제공해줌. 예제 object의 URL이고, 이를 이용하여 테스트해볼 수 있다. 실제 객체에 대한 페이지로 이동한 곳에는 meta tags가 head섹션에 있을 것이다. 이를 통해 Open Graph object로 이동이 가능한 것.
< 다룰 내용 > Open Graph 프로토콜로 페이스북과 통합하는 방법. 로컬서버에 터널을 만들어 페이스북 커뮤니케이션을 백그라운드 프로세스로 돌리기.
< fb open graph이용한 기능 > 사용자가 어떤 포스트에 리뷰를 달면 페이스북에서 알림해주기. 사용자의 친구들도 리뷰를 읽고 또 그들의 리뷰를 남길 수 있음.
< 설명 > Open Graph Protocol은 앱의 어떠한 페이지든지 하나의 객체로 다룬다. 이를 통해 사용자들은 페이지와 상호작용하는 것이 가능. 페이지를 객체로 표현할 meta tags를 추가해야함. 페이스북은 이것을 분석해서 Graph API에서 객체로 사용가능하게 해준다.
테스트과정에서는 브라우저를 두개 열어서 나눠 사용하는것이 편리하다. 하나는 테스트유저로 다른 하나는 관리자로 설정변경하기 위해서.
Facebook의 Open Graph섹션에서 앱 설정 수정하기. 객체에 대한 액션을 정의. 우리 사이트에서 수행되는 액션들. 여기서는 영화모델에 대한 리뷰작성을 액션으로 정함.
People can [review] a [movie]. [Get Started버튼]
버튼을 누른 후, 액션에 대한 표현 여러가지 시제로 변경할 수 있고 커스터마이즈할 수 있는 페이지로 이동.
저장 후, 객체와 페이지를 수정하는 페이지로 이동. 여기서 우리 페이지의 meta tag들에 어떤속성이 필요하고 어떤 것을 선택적으로 사용할 수있는지 알 수 있다. 마지막 스텝은 집합. 사용자가 여러번의 액션을 수행할 경우, 예를 들어 여러개의 영화에 대한 리뷰를 다는 경우, 페이스북은 이들을 묶어줄 것이다. 우리가 할 것은 이 집합을 어떤 것에 초점을 맞출것인가 또 이 어떻게 보이게 할 것인지 레이아웃 및 기타 설정. 이과정이 끝나면, 우리앱에서 사용 가능한 액션과 객체를 갖게 된다.
우리가 이것들을 어떻게 사용할 수 있는지 몇가지 시연 예제들을 제공함.
See all your Review actions: curl 'https://graph.facebook.com/me/cinematron:review?access_to....
Create a new Review action: .. Delete a Review action: .. curl명령어는 post를 생성, 삭제 또는 모든 리뷰를 리스트할 수 있음 보여줌. 주목해야할 몇가지 사항. URL에 있는 cinematron:review. cinematron은 앱이름, review는 액션이름. 영화를 위한 URL에 대신 예제의 URL이 필요함. 이 주소로 접속하면 테그트할 수 있는 에제 객체 페이지로 옮겨짐. 소스코드 보기를 하면 head섹션에 Open Graph의 meta tags를 볼 수 있다. 오픈그래프의 객체로 다룰 수 있다는 의미.
User데이터를 가져와서 facebook통해 로그인하고, facebook메서드 이용 Koala 객체 인스턴스화 하기. 액션을 만들기 위해서, put_connections메서드를 호출하고 어떤것을 연결할 것인지 액션이름, 액션을 행하는 객체를 넘겨준다. 마지막 파라미터로는 앞서본 예제 영화의 URL을 넘긴다. 아이디를 돌려받으면 성공. /about/timeline url통해서 사용자의 타임라인에서도 확인가능.
Review 페이지 Open Graph객체로 만들기
섹션에 <%= yield :head %>만들기.
다시 페이지 리로드하면 소스들에 메타태그들을 볼 것임
문제, 로컬 서버인 우리의 컨텐츠를 페이스북이 접속하고 파싱하는게 불가능함. deploy하는 것이 어려우면 SSH tunneling이용하기.
localtunnel
$ gem install localtunnel 처음 실행시, -k 옵션 넘겨주기
$ localtunnel -k ~/.ssh/rsa_id.pub 3000
localtunnel.com에서 subdomain으로 이용가능. 이 터널을 닫거나 시간이 지나면 다른 도메인을 이용하게 되겠지만 공개된 것이므로 에러발생시 보여질 민감한 정보를 막기위해 프로덕션모드나 상연 환경모드 이용하길 바람.
Rails console에서 사용해보기. 샘플영화대신 tunnel도메인 이용해보기.
<우리 앱에 추가하기> 사용자가 "리뷰를 포스트할 때" 일어난다. 따라서 리뷰가 저장될때 current user가 있는지 체크하고 있다면, 콘솔창에서 한것을 해야함. user의 타임라인에 리뷰를 저장하기 위해.
if current_user current_user.facebook.get_connections("me", "cinematron:review", movie: movie_url(@movie)) end redirect_to @review.movie, notice: "Review has been created"
또다른 문제, 로그인후 리뷰를 남기면, Koala가 데이터를 받지못했다는 에러가 남. 페이스북이 어떤 이유로 우리 앱에 접근하지 못함. 이유! Single쓰레드 서버 in development. 페이스북이 우리서버에 접근해서 메타태그를 파싱해야하지만 우리앱은 아직 create액션 중이므로 두가지 액션이 불가능.
백그라운드 프로세싱으로 페이스북과 소통해야함.
예제에서는 gem 'delayed_job_active_record'이용.
오픈그래프가 잘 안먹히면 Facebook Debugger Tool이용하여 무슨잘못이 있는지 확인해보기.
위의 코드는 SELECT * FROM clients WHERE(clients.id IN (1,10)) 와 같은 문장을 수행한다고 한다. 따라서 이를 이용하는 것으로 코드를 바꿔보겠다.
u = User.find_by_uid(friends_uids)
* 결과에 차이점이 있다.
u = User.where(‘uid IN (?)’, friends_uids) 이 코드를 이용한 경우에는 결과값이 하나이더라도 [ ] 배열안에 결과가 들어간다.
그러나
u = User.find_by_uid(friends_uids) 이 코드는 결과가 하나인 경우에는 User객체 하나가 반환 되기 때문에 View에서 처리할 때 하나인 경우 each메서드에서 에러가 나게 된다. 하나의 객체만 반환 되는 경우 배열에 담아준다던지..어떤 조치가 필요한 것 같다. 따라서 나는 그냥 IN이용한 방식으로…가겠다.
window.location = '/users/auth/facebook/callback' if response.authResponse
, scope: "email, publish_stream"
$('#sign_out').click (e) ->
FB.getLoginStatus (response) ->
FB.logout() if response.authResponse
true
if $('#sign_out').length > 0
FB.getLoginStatus (response) ->
window.location = $('#sign_out').attr('href') if !response.authResponse
! 코드에 javascript에서 사용할 아이디 넣어주기.
자바스크립트 추가 후 문제점 : javascript에서 facebook 세션이 종료되면, 우리앱에서도 자동 로그아웃이 되는 코드가 추가 되었다. 기존에 Sign out 링크를 통해 종료를 하면 link_to 의 method: :delete가 제대로 역할을 하지만, javascript에서는 method를 읽어 오지 않는 것 같다.
해결법은 2가지로 가장 먼저 시도했던 1. devise.rb에서 ':get메서드로 sign_out하기'로 설정 변경 2. routes.rb에서 path에대한 http verb직접 지정해주기