CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·아이포니앙 ·주식한당 ·MaClien ·일본산당 ·방탄소년당 ·개발한당 ·자전거당 ·안드로메당 ·이륜차당 ·소셜게임한당 ·나스당 ·골프당 ·가상화폐당 ·소시당 ·물고기당 ·클다방 ·덕질한당 ·요리한당 ·스팀한당 ·AI그림당 ·바다건너당 ·노젓는당 ·패스오브엑자일당 ·WOW당 ·창업한당 ·AI당 ·테스트당 ·키보드당 ·육아당 ·여행을떠난당 ·콘솔한당 ·갖고다닌당 ·PC튜닝한당 ·사과시계당 ·위스키당 ·3D메이킹 ·X세대당 ·ADHD당 ·날아간당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·디아블로당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·걸그룹당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·IoT당 ·KARA당 ·꼬들한당 ·어학당 ·가죽당 ·레고당 ·리눅서당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·방송한당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·VR당 ·시계찬당 ·WebOs당 ·와인마신당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

모두의공원

오버워치 리그 데이터를 API로 가져오기(이미지 아주 많으니 용량 주의) 13

5
2020-07-21 11:05:57 121.♡.199.69
초마짬뽕

안녕하세요

어제 다른 분이 최근 오버워치 영웅 픽률을 올려주셔서 간만에 오버워치 글을 올려보면 어떨까 해서 올려봅니다


사실 오버워치 게임에 관한 글이라기 보다는 IT 비전공자가 API라는 걸 이용해서 오버워치 리그 데이터를 가져와서 파일로 저장해보고

그걸 다시 아주 간략하게 데이터를 요래조래 본 이야기 입니다.


데이터 분석에 관한 강의를 많이 들었지만 사실 실제 강의에 있던 코드를 그대로 따라만 쳐봤지,

제가 스스로 뭔가를 수집해서 끝까지 해본 적은 없었는데 이번에 해보고 재미도 느끼고 더 다른 것도 해볼 수 있을까 하는 자신감도 아주 조금 생겨서 데이터 분석에 관심있지만 IT 전공이 아닌 분들께 미약하게나 조금 도움이 되지 않을까 해서요


제 브런치에 글을 가져왔기 때문에 이하 내용은 존댓말이 아닌 점 양해 부탁 드립니다


Intro

난 게임을 좋아했었다.

동네 오락실에서 스트리트 파이터 2라는 게임을 꽤 잘했었고, 동네엔 아마 적수가 없었던 것으로 기억한다. 그리고 여러 시리즈가 나온 킹 오브 파이터 94라는 게임도 고등학교 1학년 봄까지 거의 이겼을 만큼 게임을 좋아하고 열심히 했었다.


하지만 고등학생 시절이 본격화되고 난 후 게임을 많이 할 기회가 없었고 대학에 입학해서 크게 게임을 열심히 하진 않았던 것 같다. 그 '스타크래프트'가 그렇게 재미있게 느껴지지는 않았으니까...


지금 생각해보니 전략 시뮬레이션이란 게임을 좋아하지 않았던 것 같다. 워낙 배워야 할 게 많아서. 그래서 온게임넷에서 해주던 스타크래프트 게임 리그도 왜 보는지 이해할 수 없었다

그러다가 결혼하고 나서 플레이스테이션을 샀었다. 어렸을 때 가정용 게임기를 못 가져본 한을 깨고자 샀는데, 엔딩 한 번 보는 게임이 거의 없었다.


게임 플레이 중간에 하다가 SJ에게 게임패드를 넘기면 오히려 SJ가 게임을 깨고는 했었다.

나이 들면 게임 불감증이라니 어쩔 수가 없다고 생각했는데

오버워치라는 게임을 만났다


처음에는 정신없이 돌아가는 게임에 적응을 못 했지만 적응한 후부터는 꾸준히 즐기고 있는 게임이다. 물론 나의 티어는 실버이다... 새 계정을 판다면 좀 더 올라갈 것 같기도 하지만 플스에서 굳이 그렇게 까지 하고 싶진 않았다.


중요한 건 League of Legend처럼 오버워치도 리그가 시작되었다는 것이다

이제 리그가 시작한 지 3년째가 되면서 여러 데이터가 쌓이기 시작했는데, 이 데이터를 가지고 아주 간단한 EDA를 해보았다.


사실 너무나도 간단해서 IT를 하시는 분들께 별 거 아닐 수 있지만 회사에서 프로그래밍을 다뤄보지 않은 나에게 데이터를 수집해서 간단하게 본다는 것 자체가 나에겐 쉬운 일이 아니어서 기념 삼아 글을 써보았다.


How to collect OverWatch League data

오버워치 리그 데이터는 API를 지원한다

문과 출신은 아니고 학부는 공대이긴 하지만 경영대학원 졸업 이후 파워포인트와 엑셀만 가지고 살아온 나로서는 API가 무엇인지 이해하는데만에도 시간이 많이 걸렸지만 온라인 강의로 수업을 들으면서 대략적으로나마 이해했다


그리고 깨달은 건 오버워치 리그가 API로 데이터를 제공해준다는 게 얼마나 고마운 일인지

일단 오버워치 리그 API 사이트에 들어가서 내가 얻고 싶은 항목이 무엇인지 알아보았다

사이트에 들어가 보면 여러 항목이 존재한다. 올스타 성적, 맵 데이터, 매치 데이터, 플레이어 데이터, 플레이어 데이터 by map 등이 있었다.


이 중 눈여겨볼만한 데이터는 플레이어 데이터와 플레이어 데이터 by map 이 두 개인데 일단 플레이어 데이터만 크롤링하기로 했다.


API 주소는 다음과 같았다

https://api.overwatchleague.com/stats/players

이 주소를 가지고 크롤링을 할 때 주피터 노트북으로 코드를 만들어서 크롤링할 수 있지만, 일단 난 온라인 강의에서 배운 scrapy라는 툴을 써보기로 결심했다


잘못된 형식의 이미지 링크입니다.


터미널을 이용해서 작업을 해야하는 프로그램이라 사실 잘 할 수 있을까 했지만 일단 해보기로 했다. 가장 최신 기법이라고도 했고, 사실 수강내용 중 마지막에 나왔던 방식이라 기억나는게 이 방법밖에 없었다...

스크래피를 깔고나서 오버워치 프로젝트를 시작했다


scrapy startproject overwatchstat


그러면 scrapy라는 폴더 밑에 overwatchstat이라는 폴더가 연속으로 2개 생긴다

그리고 그 폴더 안에는 이런 파일들이 생겨난다


잘못된 형식의 이미지 링크입니다.


위의 그림에서 다시 'spider'라는 폴더 안에 들어가면 아래와 같은 파일이 생기는데 'overwatchstat'이라는 파일을 편집해서 크롤링을 시작해나가야 한다


잘못된 형식의 이미지 링크입니다.


overwatchstat이라는 코드를 VisutalStudio Code 로 열고나면 사실 별 내용이 없다.

거기서 자기가 하나하나 코드를 채워나가야 한다. 일단 필요한 라이브러리를 불러와야 하는데

중요한 라이브러리는 json이라는 라이브러리이고 나머지는 초반에 어떻게 json 데이터를 정리해야 할 지 몰라서 써놓은 코드들이다

import scrapy
import json
import pandas as pd
from pandas.io.json import json_normalize

from overwatch.items import OverwatchItem

위와 같이 필요한 라이브러리를 호출하고 나면

이제 정말 필요한 코드를 작성해야 한다

class OverwatchstatSpider(scrapy.Spider):
    name = 'overwatchstat'
    start_urls = ['<https://api.overwatchleague.com/stats/players>']
    pd.read_excel
    def parse(self, response):
        # start_urls = '<http://https>://api.overwatchleague.com/stats/players/'
        watchdata = json.loads(response.body_as_unicode()) 

이 코드가 watchdata = json.loads(response.body_as_unicode())

결국 모든 걸 한다. API를 통해 흘러온 json 타입 데이터를 watchdata라는 쉽게 말해서 테이블에 넣어주는 역할을 하는 것이다

그리고 그 후 해야할 일은 약간의 키보드 타이핑을 열심히 해야하는 코드이다.

for item in watchdata['data']:  
            doc = OverwatchItem()
            doc['playerId'] = item['playerId']
            doc['teamId'] = item['teamId']
            doc['role'] = item['role']
            doc['name'] = item['name']
            doc['team'] = item['team']
            doc['eliminations_avg_per_10m'] = item['eliminations_avg_per_10m']
            doc['deaths_avg_per_10m'] = item['deaths_avg_per_10m']
            doc['hero_damage_avg_per_10m'] = item['hero_damage_avg_per_10m']
            doc['healing_avg_per_10m'] = item['healing_avg_per_10m']
            doc['ultimates_earned_avg_per_10m'] = item['ultimates_earned_avg_per_10m']
            doc['final_blows_avg_per_10m'] = item['final_blows_avg_per_10m']
            doc['time_played_total'] = item['time_played_total']
            yield doc

data라는 딕셔너리 안에 프로선수들의 이름, 팀, 역할, 10분당 처치, 10분당 데미지, 10분당 힐링, 10분당 죽음 등의 데이터가 존재하고,

그 data를 각각의 item에 있는 데이터를 doc에 넣는다는 것이다

일단 나와 같이 크롤링을 많이 접해보시지 않은 분들을 위해 잠깐 설명하면

scrapy는 하나의 파일에서 모든 결과가 나오지 않는다.

최소 overwatchstat.py 라는 파일 외 다른 한 개는 더 건드려줘야 한다

바로 item.py 파일이다

위에 있는 첫번째 그림파일을 보면 items.py 라는 파일이 존재하는데

이 파일이 데이터를 담당하는 파일이라고 보면 될 것 같다

items.py 파일을 열면 처음에는 아무 내용도 존재하지 않는다.

그래서 json  타입으로 불러온 자료를 scrapy.Field() 를 이용해서 필드로 만들어줘야 한다. 비유를 들자면 아까 말한 테이블에서 칼럼명을 써준다고 보면 될 듯 하다. items.py 파일에서 저렇게 선언하지 않으면 자료를 사용할 수 없다고 온라인 강의에서 설명했음


import scrapy

class OverwatchItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    playerId = scrapy.Field()
    teamId = scrapy.Field()
    role = scrapy.Field()
    name = scrapy.Field()
    team = scrapy.Field()
    eliminations_avg_per_10m = scrapy.Field()
    deaths_avg_per_10m = scrapy.Field()
    hero_damage_avg_per_10m = scrapy.Field()
    healing_avg_per_10m = scrapy.Field()
    ultimates_earned_avg_per_10m = scrapy.Field()
    final_blows_avg_per_10m = scrapy.Field()
    time_played_total = scrapy.Field()

    pass

여기까지 코드를 만들고 나면 1차 준비는 끝났기 때문에 여기서  터미널에서 아래와 같은 명령어를 사용해서 크롤링한 데이터를 csv 파일로 저장할 수 있다


scrapy crawl overwatchstat -o (원하는 파일명.csv) -t csv


이렇게 되면 아래와 같은 csv 파일을 얻을 수 있다


잘못된 형식의 이미지 링크입니다.


자 이제 데이터를 수집해서 csv 파일을 만들었다.

사실 내가 이렇게 csv 파일을 만들 수 있을지도 몰랐다. 데이터 파일은 누가 인터넷에 첨부파일로 올려주지 않으면 다운로드 받을 수 없는 것 아닌가.


데이터 분석, 데이터 사이언티스트라는 단어들이 굉장히 유행했을 때—물론 지금도 굉장히 핫하다— 여러 곳에서 온라인 수업을 들었었다. 그것도 유료 온라인 수업을

udemy에서도 1만원, 2만원 수업을 들었고, udacity에서 nano degree 과정도 듣고, 패스트캠퍼스도 들어봤는데 그 중에서 가장 기억에 남는 건 udacity 수업이었다.


이 수업은 정말 프로젝트를 내주고 답을 주지 않는다. 그리고 그 프로젝트가 자신들의 기준에 맞지 않으면 통과를 안 시켜줬기 때문에 초기에 프로젝트를 하면서 머리를 쥐어뜯었던 기억이 생생하다. 그럼에도 불구하고 아직도 파이썬은 어렵다.

여튼 이 수업들은 미리 잘 정리된 데이터셋을 주는 것이다. 그러니 데이터를 이렇게 저렇게 해보면 되는데 실제 내가 원하는 데이터를 얻는 과정에서 포기했었다.


데이터가 없는데 어떻게 분석을 하지? 아 BeautifulSoup로 하면 되는구나. 어? 이 사이트는 강의에서 알려주는대로 해도 안 되는데? 아 여기 오타가 있었네. 오타를 고쳐도 안 되네.. 왜 그럴까.. 흠


지금까진 저기서 다 멈춰있었는데 csv 파일을 스스로 얻었으니 감개무량 했다. API를 이용해서 받았지만

이 csv 파일을 가지고 뭘 해볼까?


이제 온라인 강의로 배운 걸 활용해보기로 했다

먼저 데이터를 요캐조캐 해볼려면 데이터프레임 형식이 필요하니 csv 파일을 불러와서 데이터 프레임으로 전환했다. 그러기 위해서는 필요한 라이브러리를 불러왔다


잘못된 형식의 이미지 링크입니다.

그리고 csv 파일을 구글코랩에 불러와야 하니 file.upload 명령어를 써서 overwatchstat 데이터를 업로드 했다

잘못된 형식의 이미지 링크입니다.


그리고 csv 파일을 데이터 프레임으로 전환. 사실 이게 먹히지 않으면 아무 것도 할 수 없었기 때문에 조금 긴장했었다. 결론은 성공


잘못된 형식의 이미지 링크입니다.


여기서 고민을 꽤 했던 건, 실제 제공되는 데이터의 범위가 야구의 sabermetrics 처럼 깊게 들여다 보기에는 한정적이었다. 오버워치 리그 팀간의 승패를 결정하는 주요 요인이나, 야구의 WAR 처럼 어떤 선수가 더 가치있는 지 판별할 수 있는 지표가 나올 것 같진 않았다.


그래도 생각해보니 오버워치라는 게임은 각 라운드마다 한타승부에서 누가 이기느냐가 중요한데 위 데이터로는 알 수 없으니 그냥 모든 플레이어가 한 번 죽을 때 몇 명의 플레이어를 처치했는가를 보기로 했다


즉, 내가 한 번 죽을 때 3명을 처치하고 죽었다면, 한 번 죽을 때 2명을 처치한 플레이어보다는 우리 팀에 더 많이 기여했을 거라고 가정한 것이다. 이렇게 가정하지 않으면 앞으로 더 진행을 할 수 없었다.

리그의 평균 목숨당 처치 비율을 구하기 전에 일단 딜러 / 탱커 / 힐러 역할별로 10분당 처치 수를 확인해봤다


잘못된 형식의 이미지 링크입니다.


역시 딜러가 16.68 명으로 가장 높았는데 의외로 탱커가 16.49 명으로 거의 근접했다?

왜 그러지? 내 라인은 맨날 죽는데? 라고 생각했는데 의문은 나중에 풀렸었다

일단 udacity에서 배운대로 그래프를 그려봐야 할 것 같아서 그래프를 그렸다(주입식 교육 짱!)


잘못된 형식의 이미지 링크입니다.


그리고 선수들 중 출전 시간이 없는 선수들은 제외해야 할 것 같아서 출전 시간이 없는 선수들은 제외했다


잘못된 형식의 이미지 링크입니다.


제거하기 전에 df1.info()를 실행했던 내용과 비교해보니 출전시간이 0인 선수들은 원래 없었다!(만인 평등의 오버워치 리그!)

다음으로 팀간 10분당 처치 항목을 비교해보기로 했다.


작년 우승팀인 샌프란시스코 쇼크가 제일 높지 않을까? 라고 생각하면서 코드를 실행해보니


잘못된 형식의 이미지 링크입니다.


샌쇽이 아닌 뉴욕 엑셀시어가 16.99로 가장 높게 나왔다. (역시 정규시즌의 최고명가, 하지만 포스트 시즌은?)

생각해보니 포스트 시즌 데이터 API가 따로 있었던 게 기억이 났다. 아 그렇지 이건 정규시즌만 해당하는 구나.


오버워치 리그 첫 시즌의 뉴욕 엑셀시어의 압도적 포스가 생각났다

그리고 의외로 서울 다이너스티의 수치가 높다


그 다음은 이제 한 번 죽을 때 내가 몇 명을 데려가는 지 알아보기 위해 새로운 칼럼을 만들어야 했다


잘못된 형식의 이미지 링크입니다.


오버워치 리그에서는 딜러, 탱커, 힐러 모든 역할을 아울러서 자신이 한 번 죽을 때 3.3명은 처치하고 죽는 다는 뜻이다. (놀랍다? 난 3번 죽을 때 한 명 처치하는데!! 역시 FPS는 젊은이들의 게임, 프로리그니까 그렇겠지?)

이제 어떤 선수들이 이 기준으로 잘하는 선수들이고, 평균의 선수들이고, 그저 그런 선수들인지 알아보기로 했다


잘못된 형식의 이미지 링크입니다.


그 다음은 통계량을 기준으로 구간을 설정하고, 잘하는 선수들을 super-performer, 평균 구간에 해당하는 선수들을 avg-performer, 평균 이하의 선수들을 low-performer로 이름지었다


잘못된 형식의 이미지 링크입니다.


잘못된 형식의 이미지 링크입니다.


그리고 모든 데이터에(선수들에게) 어느 구간에 해당하는 지 적용해보니


잘못된 형식의 이미지 링크입니다.


udacity 에서 배운대로 적용이 되었다.(배운걸 써먹다니 ㅠㅠ)

그 다음은 그렇다면 리그에 최고 10명은 누구인지 알아보기로 했다


학살? 카르페? 등 최고 수준의 딜러들의 이름이 스쳐갔는데


잘못된 형식의 이미지 링크입니다.


10명 중 2명 빼고 다 섭탱 유저들이었다. (사실 뉴욕의 넨네도 초반에 자리야 한 걸 생각하면 섭탱으로 봐야할지도 모른다)

딜러가 다 처치하는 거 아닌가? 갑자기 어떤 섭탱 선수의 인터뷰가 생각이 났다.


"섭탱의 중요 역할 중 하나는 끝까지 쫓아가서 킬캐치 해야 하는 것입니다(끝까지 쫓아가서 죽여야 합니다)"

나를 끝까지 쫓아오던 디바를 생각해보니 맞는 말이었다.


그런데 Void가 1등? 최근 최고의 폼을 가졌다고 생각하긴 했었는데 1등을 할 줄을 몰랐는데?

그리고 서울의 미셀? 3등인데 미셀 왜 안 쓰지? (시그마?)


다시 그렇다면 저 탑텐이 팀에 몇 명 있는 지 그래프를 그려보기로 했다.

결과는 그래픽으로 뽑아야 일을 한 것이다라는 상사의 옛말이 귀에 스쳐지나갔다


잘못된 형식의 이미지 링크입니다.


역시 전통의 명가 뉴욕, top-ten에서 3명이나 보유하는 걸 그래프로 확인할 수 있었다(저기 그래프 안 그려도 바로 보이는데?!)

리그에서 팀별로 super-performer, avg-performer, low-performer가 몇 명 있는지 확인하기로 했다



잘못된 형식의 이미지 링크입니다.


항저우? 서울???

그렇다면 avg-performer는??

샌쇽??? 샌쇽이 제일 많다니... (역시 오버워치는 팀게임이라 super-performer 같은 애들보다 애들이 다 고만고만 잘해야 하는 것인가?)


잘못된 형식의 이미지 링크입니다.


Outro

데이터 분석이라는 것에 흥미를 가지면서 이런저런 책도 사고 온라인 강의도 들어봤지만 거의 대부분 수업에 나와있는 내용과 책에 있는 코드를 그대로 답습하는 것에 지나지 않았었다.


영어로 설명하자면 50문장 외우기 책을 사서 그 문장을 그대로 외우기만 할 뿐 활용을 못하는 것과 비슷하다고 해야할까?

혼자서 데이터를 수집하고 기초적 수준의 EDA라도 해보고 싶었다.


그러다가 평소 즐겨보는 오버워치 리그의 데이터가 API로 제공된다는 걸 알고, 최근 배운 scrapy를 한 번 써먹어볼까 생각하고 실행해보니 처음으로 csv 파일로 저장되는 일을 해낼 수 있었다.

그리고 나서 그 csv 자료로 온라인 강의로 배운 걸 적용해보니 뿌듯하고 재미있었다.


여기는 클리앙이라 데이터 분석을 하시는 많은 분들이 계시지만 이 글을 쓴 이유는 문과 출신이라도,
또는 엑셀에 익숙해진 30~40대라도 관심을 가는 분야의 데이터를 수집해서 시도를 해볼 수 있다라는 걸 알리고 싶었기 때문입니다 ^^


이미지가 너무 많아서 죄송합니다 ㅠㅠ

긴 글 읽어주셔서 감사합니다





출처 : https://brunch.co.kr/@sanghunchae/167
초마짬뽕 님의 게시글 댓글
SIGNATURE
..
서명 더 보기 서명 가리기
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [13]
negev
IP 14.♡.10.16
07-21 2020-07-21 11:07:10
·
음 완벽히 이해했습니다.
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:14:19
·
@NEGEV님 읽어주셔서 감사합니다 ^^
달뱅이
IP 221.♡.201.37
07-21 2020-07-21 11:10:53
·
음 완벽히 이해했습니다.22222
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:14:41
·
@달뱅이님 오버워치 리그 시청을 즐기시면 도움이 될 수도 있을 거 같습니다 ^^
JINX
IP 121.♡.69.140
07-21 2020-07-21 11:17:08
·
음... scrapy가 웹 크롤링 하는건가요..?
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:19:36
·
@JINX님 넵. 뷰티풀 수프 라이브러리보다 더 강력한 크롤링 툴 같아요!
miolletA
IP 211.♡.22.161
07-21 2020-07-21 11:18:02
·
요즘 상하이 경기를 보면 보이드가 1등 할만 한것 같아요... 너무 잘합니다
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:20:25
·
@Niflheimr님 상하이 너무 잘해요. 서울은 왜 또 이런 상하이를 만나서 ㅎㅎㅎ

피어리스도 잘하고 다 넘 잘합니다 ^^
woogler
IP 1.♡.201.219
07-21 2020-07-21 11:20:57
·
팁과 강좌 게시판으로 가버렷!! 여기도 좋지만 팁과 강좌 게시판이 이런 글에는 딱입니다요
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:27:44
·
@woogler님 거기는 고수분들만 글 올리는 것 같아 모공에 올렸습니다 ^^
강선영
IP 58.♡.91.8
07-21 2020-07-21 11:29:43
·
정성스런 글 앤 추천이죠.

완벽히 이해 했습니다.

40초입니다만 목처 3.0 진입을 위해 열심히 총질 하고 있습니다.
초마짬뽕
IP 121.♡.199.69
07-21 2020-07-21 11:33:15
·
@강선영님 추천 감사합니다 ^^
목처 3.0 이면 겐지유저 이신가요?

제가 요즘 겐지에 빠져있습니다 ㅎㅎㅎㅎ
강선영
IP 58.♡.91.8
07-21 2020-07-21 11:37:48
·
@초마짬뽕님 애쉬에요.

애쉬로 다이아 찍으면 둠발놈 or 겐지로 가려고요!
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.