8 Yujin Kim 8 2020. 12. 4. 00:59

BIOEASY 로고 (이미지 클릭 시 BIOEASY 웹사이트로 이동합니다.)

BIOEASY는 2020.3 ~ 2020.12 까지 캡스톤디자인프로젝트A,B (졸업프로젝트) 수업을 위해 진행한 프로젝트이다.

(중간에 주제를 바꾸게 되어서 여름방학 때부터 시작하게 된 건 비밀)

 

BIOEASY는 무엇인가?

우선, BIOEASY는 "Bio 분야를 연구하려는 모든 연구자들의 선행연구 인사이트 도출을 도와주는 웹 어플리케이션"이다.

 

이 프로젝트를 처음 시작하게 된 배경에는 지난 여름방학에 있었던 나의 첫 연구실에서의 연구 경험이 있다.

줄곧 나는 학부생으로서 정해진 범위의 내용만 공부하며 학기를 보내왔었는데, 막상 연구를 하려하니 연구에는 정해진 범위가 없었다.

만약 내가 '음악과 집중력의 상관관계'에 대해서 연구하려 한다면, 이 주제와 아주 조금이라도 관련있는 논문들을 모조리 찾아서 일일이 읽고, 각 논문 별로 인사이트를 도출해야 했다.

그래도 다행히 Google Scholar 같은 논문 검색 엔진에는 거의 대부분의 논문이 등록되어 있었기 때문에, 관련 선행 논문들은 언제든지 넘쳐났지만 문제는 '인사이트 도출'이었다.

 

예를 들어, '비트와 운동 집중력의 관계' 라는 논문이 있다고 하고, 그 논문에서 도출한 결론 중 '선호도가 높은 비트들을 가지고 30명의 피실험자에게 3분간 들려주었더니 순간적으로 심폐지구력이 15% 증가했다'라는 것이 있다고 가정해보자.

이 때, 위와 같은 결론들로부터 '위 논문에서는 선호도 측정방식 때, open survey 방식을 사용했기 때문에 정확한 측정이 되었다고 보기 어려워. Wizard of OZ 방식으로 closed survey 방식을 사용하는 것이 더 좋겠어.' 와 같은 인사이트를 도출해내는 것이 선행연구 논문을 읽는 목적이라 할 수 있다.

보통은 이렇게 선행연구 논문들을 통해 얻은 인사이트를 바탕으로, 본인이 하려는 연구의 방향성과 연구 세부내용 (변수 설정, 연구 방식 설정 등) 등을 정하기 때문이다.

 

그러나 초기 연구자, 특히 HCI를 깊이 전공하지 않았던 나에게는 선행논문에 대한 깊은 이해와 탄탄한 전공지식을 필요로 하는 인사이트 도출이 어려웠다.

또한, 내 지인 중 연구를 하는 대학원생 분들 역시 인사이트를 도출해내는 것을 가장 어려워했다.

 

지인 1 曰 : 내 연구 이해하는 것도 어려운데, 남의 연구 이해하는 건 더 어렵지! 그래서 더 인사이트 뽑아내기가 어려워.
지인 2 曰 : 다 잘한 것 같은데... 뭘 알아야 왈가왈부 할 수 있지 않을까....

 

이에 초기 연구자, 타 분야 연구자, 기존 연구자 등 연구를 하려는 모든 사람들이 인사이트 도출을 쉽게 할 수 있도록 도와주는 서비스가 있으면 좋겠다고 생각했다.

 

왜 바이오 분야를 선택했나?

우선 분야를 하나로 특정한 이유는 선택과 집중을 통해 더 효율적으로 사업을 꾸려나가기 위함이었다.

처음에는 생명, 물리, 심리, 컴퓨터공학 등 다양한 분야에 대해 해당 서비스를 제공하는 것에 대해 팀원들끼리 논의를 많이 했다. 

논의 결과, 다양한 분야를 커버할 수 있는 서비스는 서비스 사용자 수가 높다는 점에서는 장점을 가질 수 있지만, 서비스 운영과 마케팅 방안 등이 분야 별로 달라지게 된다는 점에서 사업 진입 과정에서 비효율을 초래할 수 있다고 결론 지었다. 

따라서 최근 대두되고 있는 분야이면서 (서비스 사용자 수 파이를 크게 가져가기 위해서) 실제적으로 서비스를 통해 세상에 도움을 주고 싶다는 사명을 동시에 충족시켜줄 수 있는 바이오 분야를 대상으로 서비스를 제공하기로 하였다.

 

바이오분야는 최근 코로나 사태로 인해 연구의 수가 크게 증가하고 있고, 10년 전부터 계속 미래 유망산업으로 꼽히고 있는 분야이며 코로나로 인해 지쳐가고 있는 세상에 도움이 되고 싶다는 우리의 사명도 만족시킬 수 있는 분야이다.

 

음.. 근데 이미 이런 서비스 있는 거 아냐?

일단, 바이오 분야의 최대 논문서치엔진으로는 1. Google Scholar   2. Pubmed NCBI  가 있다.

먼저 Google Scholar는 바이오분야 뿐 아니라 거의 대부분의 분야를 커버하고 있는 서비스로, 세계에서 가장 많은 논문 정보를 보유하고 있는 서비스이다.

 

Google Scholar

그러나 Google Scholar는 논문 검색 시, 위와 같이 인용된 횟수, 논문 원문 링크, 논문 발행지, 저자정보 등의 정보만을 제공하고 있어 독자들의 인사이트 도출에 도움을 주지는 못하고 있다.

 

Pubmed NCBI 역시 마찬가지이다. Pubmed NCBI는 미국 국립의학도서관에서 운영하는 텍스트 아카이빙 검색엔진으로, Google Scholar에 비해 더 바이오 분야에 특화되어있다고 볼 수 있다.

 

Pubmed NCBI

그러나 Pubmed NCBI역시 논문 검색 시, 인용된 횟수, 저자정보, 논문 원문 링크, 논문 발행연도 등의 정보만을 제공하고 있어 독자들의 인사이트 도출에 도움을 주지는 못하고 있다.

 

즉, 현재 바이오 분야에서 가장 규모가 크고 유저 수가 많은 검색엔진 TOP 2에서 '인사이트 도출을 돕는' 서비스를 제공하고 있지는 않는 상황이다.

 

 


개발 시작!

내가 프로젝트에서 맡은 역할은 크게 5가지로,

1) 서치엔진 구현

2) 지식그래프 구현

3) 바이오 세미나 정보제공 기능 구현

4) 웹 페이지 디자인

5) 마케팅 방안 수립 및 전체 프로젝트 기획  이다.

 

1) 서치엔진 구현

서치엔진은 Bio 분야를 연구하려는 모든 연구자들의 선행연구 인사이트 도출을 도와주는 웹 어플리케이션인 BIOEASY에서 가장 기본적이자 필수적인 기능이라 할 수 있다. 

서치엔진은 프로젝트 내의 home.html과  views.py에서 구현했다.

 

home.html

form을 이용해 GET형식으로 user의 키워드입력을 받도록 함

<div>
    <form name="passUserinput" action="second" method=GET>
      <input type="text" name="userTextInput" class="searchTerm" id="searchTerm" placeholder="What are you looking for?" >
    </form>
</div>

views.py

second()에서는 home.html에서 전달받은 user의 textInput을 이용해 해당 키워드의 검색 결과를 크롤링하는 함수 linktogo를 실행시킴

def second(request):
    global userTextInput
    global totalLen
    global zipped_list

    request.encoding = 'utf-8'
    userTextInput = request.GET['userTextInput']
    linktogo(userTextInput)
    totalLen = len(titles)
    zipped_list = zip(pubid, titles, au_infos_final)
    return render(request, 'second.html',
                  {'userTextInput': userTextInput, 'totalLen': totalLen, 'zipped_list': zipped_list})

Views.py

linktogo()는 크롤링을 수행하고, 이 때, remove_tag()를 이용해 html tag들을 제거하는 전처리과정을 수행함

def linktogo(lala):
    crawlinglink = requests.get('https://www.ncbi.nlm.nih.gov/pmc/?term=' + lala)  # n-s
    raw = crawlinglink.text
    html = BeautifulSoup(raw, 'html.parser')

    global titles  # 제목
    titles_o = html.select('div.title a')
    titles = []
    for title in titles_o:
        title = remove_tag(str(title))
        titles.append(title)

    global pubid  # 논문id
    pub_id = html.select('dl.rprtid dd')
    pubid = []
    for pub in pub_id:
        pub = remove_tag(str(pub))
        pubid.append(pub)

    global au_infos_final  # 작가
    a_infos = html.select('div.supp')
    au_infos = []
    for i in a_infos:
        au_infos.append(remove_tag(str(i)))
    au_infos_final = []
    for i in range(0, len(au_infos)):
        au_infos_final.append((au_infos[i].split(','))[0:-1])
        au_infos_final[i] = au_infos_final[i][0:int(len(au_infos_final[i]) * 0.05) + 1]
def remove_tag(content):
    cleanr = re.compile('<.*?>')
    cleantext = re.sub(cleanr, '', content)
    return cleantext

 

2) 지식그래프 구현

지식그래프는 선행연구로부터의 인사이트 도출을 도와주는 핵심 기능 중 하나라 할 수 있다.

지식그래프는 프로젝트 내의 third.html과  views.py, show_graph.html에서 구현했다.

 

third.html

form을 이용해 'See Knowledge Graph' 라고 적혀있는 버튼을 클릭하면 지식그래프 생성을 시작하도록 함

<form action="keywordToGraph" method=GET>
		<input type="hidden" name="theid" value="{{pmcID}}"/>
		<button class="btn btn-link" id='graph_button' type="submit">See Knowledge Graph</button>
</form>

 

 

views.py

keywordToGraph()는 논문 전문텍스트를 nltk 패키지를 이용하여 문장분리함으로써 csv파일로 만들고, 해당 csv 파일을 이용해 지식그래프를 만듦

지식그래프는 미리 설정해 둔 pos 패턴들을 이용해, 해당 패턴들과 매칭되는 경우 subject, object, relation을 추출하여 만들어짐

def keywordToGraph(request): 
    data = request.GET['theid']
    creating_CSV(num=str(data))
    csv_to_graph(id_num=str(data[3:])) #생성한 csv파일로 그래프를 만듭니다.
    image_path = "image_file_{}".format(str(data[3:]))+".png" #생성한 이미지 파일을 저장할 경로를 설정합니다.
    return render(request, 'show_graph.html', {'image_path': image_path})
def creating_CSV(num): 
    headers = {'User-Agent': 'yumi'}
    url = 'https://www.ncbi.nlm.nih.gov/pmc/articles/' + str(num) + '/'
    req = requests.get(url, headers=headers)
    raw = req.text
    html = BeautifulSoup(raw, 'html.parser')
    e_pubreader_html = html.get_text()
    final_full_text = only_main(remove_css(remove_tag(e_pubreader_html)))
    id = int(num[3:])  # PMC 아이디 값 넣기
    sentList = sent_tokenize(final_full_text)
    f = open('write{}.csv'.format(id), 'w', -1, 'utf-8', newline='')  
    wr = csv.writer(f)
    wr.writerow(['sentence'])
    for i in sentList:
        wr.writerow([i])
    f.close()
def csv_to_graph(id_num):
    candidate_sentences = pd.read_csv("write{}.csv".format(id_num))
    candidate_sentences.shape
    entity_pairs = []
    for i in tqdm(candidate_sentences['sentence']):
        entity_pairs.append(get_entities(i))
    relations = [get_relation(i) for i in tqdm(candidate_sentences['sentence'])]
    # extract subject
    source = [i[0] for i in entity_pairs]
    # extract object
    target = [i[1] for i in entity_pairs]
    kg_df = pd.DataFrame({'source': source, 'target': target, 'edge': relations})
    # create a directed-graph from a dataframe
    G = nx.from_pandas_edgelist(kg_df, "source", "target",
                                edge_attr=True, create_using=nx.MultiDiGraph())
    plt.figure(figsize=(60, 50))
    pos = nx.spring_layout(G, k=0.5)  # k regulates the distance between nodes
    nx.draw(G, with_labels=True, node_color='orange', font_size='28', node_size=10000, node_shape='d',
            edge_cmap=plt.cm.Blues, pos=pos)
    # plt.show()
    plt_final.savefig("static/img/image_file_{}".format(id_num))

show_graph.html

views.py에서 만들었던 지식그래프 이미지를 화면에 뿌려줌

<body>
<img src="/static/img/{{image_path}}" width="1000" height="1000"/>
</body>

 

3) 바이오 세미나 정보제공 기능 구현

바이오 세미나 정보 제공기능은 연구자들과의 커뮤니케이션과 전공지식 함양을 도모하여 사용자의 선행연구로부터의 인사이트 도출을 돕는 기능이다. 

바이오 세미나 정보 제공기능은 프로젝트 내의 home.html에서 구현했다.

 

home.html

바이오세미나에 대한 정보를 제공하고 있음. 하이퍼링크로 세미나 홈페이지를 연결해놓음

<div id="half_background">
    </div>

    <div id="seminarStart">
    "Bio seminars for 2020"
    </div>

    <a href="https://globalcancermeet.com/">
    <img id="bio1" src="https://c1.10times.com/images/event/500196/eventlogo-28-1590479098.jpg"> </a>

    <a href="https://globalcancermeet.com/" id="bio1title">
    <div>
      Virtual Online Conference on Molecular Biology, Genetics & Cancer Research
    </div>

    <div style="font-size:14px;">
      ( 8 - 10 Dec 2020 )
    </div>

    </a>

    <a href="https://www.embl.de/training/events/2020/ISS20-01/">
      <img id="bio2" src="https://cdn4.euraxess.org/sites/default/files/styles/news_and_events_details/public/events/embo_logo_tagline_narrow_cmykblack_outlined_2.jpg?itok=SplDOVaH">
    </a>

    <a href="https://www.embl.de/training/events/2020/ISS20-01/" id="bio2title">
      <div>
        EMBL Conference: In situ Structural Biology - From Cryo-EM to Integrative Modelling
      </div>

      <div style="font-size:14px;">
        ( 6 - 8 Dec 2020 )
      </div>
    </a>

 

4) 웹 페이지 디자인

웹 페이지 디자인은 개발자인 나에게 가장 어려운 파트였다.

그래서 다른 웹디자인 포트폴리오들을 많이 참고하고, css를 공부하며 만들었다. 

 

Ex 1) home.html

<style type="text/css">
    @import url('https://fonts.googleapis.com/css2?family=Caveat:wght@700&display=swap');
    @import url('https://fonts.googleapis.com/css2?family=Permanent+Marker&display=swap');
    body{
      background-image: linear-gradient(0deg, #08AEEA 0%, #2AF598 100%);
      background-repeat: no-repeat;
      background-attachment: fixed;
      background-color: #e577ff;
    }

    #rec_1{
        position: fixed;
        width: 233.6px;
        height: 235.1px;
        left: 38.7px;
        top: 150px;
        opacity: 0.7;
        border-radius: 51px;
        border: solid 1px #ffffff;
        transform: rotate(20deg);
        background-color: #62ddcd;
        box-shadow:10px 10px 5px #000808;
    }

    #rec_2{
      position: fixed;
      width: 233.6px;
      height: 235.1px;
      left: 288.7px;
      top: 90px;
      border-radius: 51px;
      border: solid 1px #ffffff;
      transform: rotate(20deg);
      background-color: #62ddcd;
      opacity: 0.7;
      box-shadow:10px 10px 5px #000808;
    }
    #rec_3{
      position: fixed;
      width: 233.6px;
      height: 235.1px;
      left: 208.7px;
      top: 290px;
      border-radius: 51px;
      border: solid 1px #ffffff;
      transform: rotate(20deg);
      background-color: #62ddcd;
      opacity: 0.7;
      box-shadow:10px 10px 5px #000808;
    }
    #titleText_1{
      font-family: 'Permanent Marker', cursive;
      font-size: 60px;
      position: fixed;
      left: 70px;
      top: 220px;
    }
    #titleText_2{
      font-family: 'Permanent Marker', cursive;
      font-size: 30px;
      position: fixed;
      left: 85px;
      top: 310px;
    }

    #searchTerm{
      font-family: 'Caveat', cursive;
      font-size: 37px;
      text-align:center;
      width: 550px;
      height: 60px;
      position: fixed;
      top: 165px;
      left: 700px;
      border-top: none;
      border-bottom: none;
      border-left: none;
      border-right: none;
      background-color: ##A2C9D9;
      border-radius: 11px;
      box-shadow:10px 10px 30px #000808;



    }
    #real_half{
      position: fixed;
      background-color: #A2C9D9;
      width: 660px;
      height: 800px;
      position: fixed;
      left: 630px;
      top: -100px;
      box-shadow:3px 3px 15px #000808;
      z-index: -8;

    }


    #half_background{
      position: fixed;
      top: 70px;
      background-color: white;
      width: 660px;
      height: 40%;
      border-radius: 11px;
      position: fixed;
      opacity: 0.2;
      left: 630px;
      z-index:-3;
    }


    #seminarStart{
      position: fixed;
      top: 360px;
      left: 680px;
      font-family: 'Caveat', cursive;
      font-size: 27px;
      color: black;
    }

    #bio1{
      position: fixed;
      top: 425px;
      left: 680px;
      width: 135px;
      height: 135px;
      background-color: black;
      box-shadow:10px 10px 10px #000808;

    }

    #bio1title{
      font-family: 'Caveat', cursive;
      font-size: 16px;
      width:120px;
      position:fixed;
      left: 830px;
      top: 430px;
    }

    #bio2{
      position: fixed;
      top: 425px;
      left: 980px;
      width: 135px;
      height: 135px;
      background-color: black;
      box-shadow:10px 10px 10px #000808;

    }

    #bio2title{
      font-family: 'Caveat', cursive;
      font-size: 16px;
      width:120px;
      position:fixed;
      left: 1130px;
      top: 430px;
    }

    #justline{
      width:200px;
      height:3px;
      position:fixed;
      left:660px;
      top:350px;
      background-color: white;
      box-shadow:10px 10px 30px #000808
    }





  </style>

 

Ex 2) second.html

<style type="text/css">
        @import url(https://fonts.googleapis.com/css?family=Open+Sans);
        @import url('https://fonts.googleapis.com/css2?family=Caveat:wght@700&display=swap');
        @import url('https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@1,300&display=swap');

        body{
          background-image: linear-gradient(0deg, #08AEEA 0%, #2AF598 100%);
          background-repeat: no-repeat;
          background-attachment: fixed;
        }
        .solid {
            border-left: 23px solid #8AB7C9;
            border-top: none;
            border-right: none;
            border-bottom: none;
            border-radius: 13px 13px 13px 13px;
            box-shadow: 3px 3px 3px 3px;
            padding:10px;
            height:180px;
            width:1100px;
            text-align:left;
            margin-left: auto;
            margin-right: auto;
            margin-top: -30px;

            }
            #searchTerm{
              font-family: 'Caveat', cursive;
              font-size: 26px;
              text-align:center;
              width: 550px;
              height: 60px;
              border-top: none;
              border-bottom: none;
              border-left: none;
              border-right: none;
              background-color: #1dd9b7;
    }

    #searchTerm{
        position: relative;
        left: 100px;
        top: -110px;
        width: 900px;
        box-shadow:3px 3px 15px #000808;
        background-color: #A2C9D9;
        font-size: 35px;

    }
    #small_rec{
        position: relative;
        width: 1100px;
        height: 150px;
        box-shadow:4px 4px 8px #000808;
        background-color: #ffffff;
        z-index: -3;
        opacity: 0.4;

    }
    #big_rec{
        position: relative;
        top: 3px;
        left: -40px;
        width: 1200px;
        height: 12000px;
        background-color: #ffffff;
        box-shadow:11px 11px 21px #000808;
        z-index: -3 ;
        opacity: 0.3;

    }






    </style>

 

Ex 3) third.html

<style type="text/css">

	@import url('https://fonts.googleapis.com/css2?family=Caveat:wght@700&display=swap');
    @import url('https://fonts.googleapis.com/css2?family=Permanent+Marker&display=swap');

	body{
	  background-image: linear-gradient(0deg, #08AEEA 0%, #2AF598 100%);
	  background-repeat: no-repeat;
	  background-attachment: fixed;
	}

	#main{
		position: fixed;
		left: 30px;
		top: 80px;
		width:800px;
		height:500px;
		box-shadow:2px 2px 5px #000808;

	}
	.buttons{
		font-family: 'Caveat', cursive;
     	font-size: 17px;
		position: fixed;
		left: 900px;
		top: 120px;

	}

	#question_button{
		position: fixed;
		left: 870px;
		top: 140px;
		border-radius: 12px 12px 0px 0px;
		height: 35px;
		background-color: #A2C9D9;
		box-shadow:4px 4px 8px #000808;

	}
	#comments_button{
		position: fixed;
		left: 930px;
		top: 140px;
		border-radius: 12px 12px 0px 0px;
		height: 35px;
		background-color: #A2C9D9;
		box-shadow:4px 4px 8px #000808;

	}
	#memo_button{
		position: fixed;
		left: 874px;
		top: 140px;
		border-radius: 12px 12px 0px 0px;
		height: 35px;
		background-color: #A2C9D9;
		box-shadow:4px 4px 8px #000808;

	}
	.rec_main{
		position: fixed;
		left: 850px;
		top: 80px;
		width: 400px;
		height: 500px;
		background-color: #A2C9D9;
		z-index: -2;
		opacity: 0.7;


	}
	.rec_small{
		position: fixed;
		width:358px;
		height: 380px;
		left: 871px;
		top: 180px;
		background-color: white;
		box-shadow:4px 4px 8px #000808;

	}
	#graph_button{
		border-radius: 13px;
		position: fixed;
		left: 1010px;
		top: 100px;
		font-size: 13px;
		height: 33px;
		color: black;
		background-color: #7BB3CA;
		box-shadow:2px 2px 5px #000808;

	}
	#bookmark_button{
		border-radius: 13px;
		position: fixed;
		left: 1140px;
		top: 100px;
		height: 33px;
		font-size: 13px;
		border: 0px solid;
		color: black;
		background-color: #7BB3CA;
		box-shadow:2px 2px 5px #000808;

	}
	#question_button{
		border-radius: 13px;
		position: fixed;
		left: 910px;
		top: 100px;
		font-size: 13px;
		border: 0px solid;
		height: 33px;
		color: black;
		background-color: #7BB3CA;
		box-shadow:2px 2px 5px #000808;
	}
	#Board{

		position: fixed;
		left: 900px;
		top: 220px;
		z-index: 3;
		width: 300px;
		height: 300px;
		text-align: left;
		text-align: top;


	}
	#Comments{
		position: fixed;
		left: 900px;
		top: 220px;
		z-index: 3;
		width: 300px;
		height: 300px;
		text-align: left;
		text-align: top;
	}

	#addmemo_button{
		border-radius: 13px;
		position: fixed;
		left: 1020px;
		top: 340px;
		font-size: 13px;
		border: 0px solid;
		color: black;
		background-color: #7BB3CA;
		box-shadow:2px 2px 5px #000808;

	}
</style>

 

5) 마케팅 방안 수립 및 전체 프로젝트 기획

우선, 내가 전체 프로젝트 기획을 맡게 된 (?) 이유는 내가 BIOEASY 아이디어를 처음 냈기 때문이다.

우리 팀은 지난 1학기 때 다른 주제로 프로젝트를 진행하다가 장비 상(gpu), 데이터 상(약 40여개의 국가별 음성 및 번역 데이터를 얻는 것이 어려웠음)의 어려움으로 인해 프로젝트 주제를 중간에 변경하게 되었다.

이 때, 바이오이지 아이디어를 낸 사람이 나였기 때문에 자연스럽게 전체 프로젝트 기획까지도 맡게 되었다.

 

또한, 팀원 중 유일하게 경영과 관련된 경험 (경영학회, 전략기획 인턴, 창업 경험 등)이 있었기 때문에 마케팅 방안 수립도 담당하게 되었다.

 

- 기대 유저 수 추산 -

 

 

 

 

- 실제 사업계획서 내용 중 일부 - 


  • 판매 및 마케팅 전략 

저희 서비스가 커뮤니티 기반 서비스이기 때문에 서비스 이용자를 되도록 많이 확보하는 것이 key success factor 라 판단했습니다. 

따라서, 판매전략 및 마케팅 방안을 서비스 이용자 수를 바탕으로 시장진입 초기단계와 시장진입 안정화단계로 나누어 two-track 전략을 펼칠 예정입니다. 

  • 시장진입 초기단계는 서비스 이용자 수가 0~2,616명 일 때로 합니다. 

2616 = 327 (2017년 기준 국내 총 대학교 개수) x 2 (대학별 생명관련 연구실수의 평균) x 4 (한 연구실 당 연구자 수의 평균)

 

  • 시장진입 안정화단계는 서비스 이용자 수가 2,616~명 일 때로 합니다. 

 

<시장진입 초기단계>

 먼저 저희 서비스는 community-based service이기 때문에, 시장진입 초기단계에는 신규 유저확보가 마케팅의 주요목적입니다. 또한, 목표 유저 수를 달성하여 시장진입 안정화 단계에 돌입하고 나서야, 해외 유저 대상 마케팅과 같이 문화나 국가별 주요 경쟁사 등을 고려한 더 고차원적 마케팅을 할 수 있다고 판단했기 때문에 시장진입 초기 단계에서는 국내 유저를 대상으로 마케팅을 추진할 예정입니다.  

지금까지 저희 서비스가 충족하고자 하는 니즈를 해결하고자 한 경쟁사가 없었기 때문에, 해당 니즈에 대한 타겟 유저의 인지가 부족한 상황이라 판단하였습니다. 따라서, IMC 전략을 통해 니즈를 인지시키고 확산시킬 수 있는 마케팅을 진행할 예정입니다.

I (인지) : 선행연구 논문으로부터 인사이트를 도출하는 것의 어려움을 ‘공감’조로 표현한 포스터를 제작하여 국내 최대 대학원생 커뮤니티인 ‘김박사넷’과 국내 최대 대학교별 커뮤니티인 ‘에브리타임’ 에서 광고함.

M (체험) : 신규 고객 선착순 1500명에게 2개월간 BIOEASY 프리미엄 기능을 무료로 제공해줌. 또한, BIOEASY 커뮤니티 상위 이용자 200명에게 자사에서 주최한 bio 세미나 무료 참가권 제공 이벤트를 진행함. 

C (확산) : BIOEASY 가입 시 추천인 코드를 입력받고, 추천인과 추천받아 신규 가입한 고객에게 BIOEASY 프리미엄 기능 2주 이용권과 bio세미나 30% 할인권을 제공함.

 

<시장진입 안정화단계>

  안정화 단계에서는 각 국 타겟유저들의 니즈에 대한 인지도, 온라인/오프라인 상 타겟유저의 주요 활동 영역 등을 조사하여 도출한 인사이트를 통해 마케팅 전략을 수립해야 하고, 초기단계에서 진행했던 마케팅 전략을 바탕으로 마케팅 효과를 높일 방안을 재 수립하여 반영해야 하므로 우선 현재 단계에서는 전략을 미리 선정하는데 어려움이 있을 것이라 판단하였습니다. 

또한, 저희가 수립한 수익모델은 아래와 같습니다.

  • 수익모델

  1. 프리미엄 고객 유치 : 매 달 5900원으로 산정하였음

  2. 광고비 

  3. 자사에서 주최하지 않은 타 bio 세미나 홍보비

  4. 자사에서 주최한 bio 세미나 수익 (참가비 등)


 


후기

사실 주제를 바꿔야 한다는 결론에 도달했을 때, 우리 팀은 매우 막막해했다.

졸업프로젝트는 원래 두 학기동안 진행되지만, 이미 한 학기가 지나버린 시점에서 남은 한 학기동안 하나의 온전한 프로젝트를 완성시킬 수 있을까? 하는 자기 의문이 계속 들었기 때문이다.

 

처음 이 주제를 졸프 주제로 진행하기로 했을 때는, 우리 모두가 웹 개발이나 앱 개발 경험이 부족했기 때문에 완전히 마음이 놓이지는 않았다.  

특히 팀원 모두가 웹 개발 경험은 전무해서 html, css, javascript 라는 단어만 봐도 살짝 무서웠다...^^

 

그래서 우리 모두에게 어려운 과정이었음에도, 누구 하나 빠지지 않고 프로젝트를 잘 수행해주었기에 결국 바이오이지를 완성시킬 수 있었다! 첫 도전에 이렇게 선방하다니!

 

바이오이지 프로젝트의 모든 코드는 전부 우리가 직접 작성했다.

어느 하나 깃허브에서 따온 것 없이 우리가 직접 책이나 영상 등을 통해 공부해서 짠 코드들이다.

만약 깃허브에서 오픈소스를 따 와서 사용했다면, 그 코드에 대한 이해도도 떨어질 뿐더러 애착도 덜 생겼을 것 같다.

 

1년간의 장기간 팀프로젝트를 하며 내가 어떻게 일하는 사람인지, 어떤 방식의 소통을 선호하는지와 같이 나를 더 잘 알 수 있었다. 정말 뿌듯하고 기쁜 시간들이었던 것 같다.

 

이번 졸업 프로젝트 경험으로 프로젝트에 대한 자신이 생겨서 겨울방학 때는 따로 인공지능 프로젝트에도 도전해 볼 예정이다.

 

이 블로그에 다 못적을 만큼 느낀 점이 많지만, 후기를 이만 줄여야 겠다.

 

프로젝트 진행하느라 고생한 우리 팀원들, 도움을 요청드릴 때마다 프로젝트를 검토해보시고 아이디어를 주셨던 박현석 지도교수님, 예민했던 여름 방학 때의 나를 너그러이 받아주고 사랑해준 우리 엄마 아빠 영준이 

모두 감사해요 ♡  


추가 자료

 

PaperEasy

Virtual Online Conference on Molecular Biology, Genetics & Cancer Research ( 8 - 10 Dec 2020 )

bioeasy.site

 

  • 팀원 정보 (저를 제외한 팀원 정보는 공개하지 않을 예정입니다.) 

        김유진 (23) komgi0715@ewhain.net

        박기은

        고현지