1. 인트로
2019년 11월 16일 DevFest on Campus 2019가 드디어 끝났다!!!!
GDG Campus에서 DSC Korea로 먼저 요청이 오면서 행사 규모가 점점 커졌던 행사였습니다. 초반만 해도 200을 생각했었는데, 판이 점점 커져서 약 500명 정도의 인원이 DevFest on Campus로 모였습니다
DSC Lead님들 GDG Campus Organizer분들 모두 고생했던 행사였던 만큼 강의 퀄리티, 행사 만족도 모두 높았던 행사여서 개인적으로도 앞으로 어떤 활동을 해야 할지 느끼는 바가 많았습니다. 발표자와 장소 쪽을 맡으면서 고생도 많았지만, 그래도 이번 기회에 좋은 사람들을 알게 되고 스스로도 성장할 수 있는 기회였어서 제 기회를 제가 만든 기분?! 행복하네요★
2. 장소 - 이화여대 아산공학관
이번 DevFest on Campus의 장소는 이화여대로 결정이 되었습니다
초기 기획을 할 때 Campus라는 특성에 맞게 대학교 대관을 알아보다가 교수님이 긍정적으로 답변해주셔서 저희학교로 결정이 났는데요
이번 대관, 이화여대 후원으로 진행하면서 주관 대표라는 명목으로 교수님, 학과사무실, 소프트웨어 중심대학 사무실, 여러 학교 부처에도 전화를 돌리면서 엄청 귀찮게 했었는데요. 학교 선생님들 네 접니다.. 학교 선생님들 이제 끝났으니 귀찮은 학생이었던 저를 당분간 안 보셔도 됩니다!!ㅋㅋㅋㅠ
장소를 저희학교로 하다 보니 책임감이 생기면서 힘들었는데, 그래도 마지막이 좋으니까 다 좋았던 기억으로 남더라고요. 무엇보다도 교수님 소프트웨어 중심대학 선생님과 더 끈끈한 관계를 맺게 되어서 이화여대 컴퓨터공학과 내에 DSC Ewha의 입지를 키울 수 있는 기회로 만들어서 Lead로서 의미 있던 행사였습니다 :)
3. 세미나 - 발표자 초청
발표자에 정말 엄청난 분들이 많았는데, 청중으로 갔어도 엄청 좋았을 것 같아요. 행사 신경쓰고, 왔다 갔다 하다 보니 저는 유경수 님의 웹 초보도 할 수 있는 WebVR/AR with aframe, 박재성 님의 의식적인 연습으로 TDD, 리팩토링, 클린 코드 연습하기 세션밖에 못 들어서 아쉬웠습니다ㅠㅠ
발표자 담당을 맡으면서 메일을 엄청 보냈는데요 다들 친절하게 피드백주셔서 너무 감사했습니다
직접 만나서 얘기도 많이 하고싶었는데 트랙 A에서 계속 담당해서 있다 보니 그럴 기회가 없었네요ㅠㅠ
그리고 세션을 듣다보니, 한 번쯤은 저도 발표자로 나서고 싶더라고요! 꼭 다음에는!!!ㅎㅎ
3-1. 유경수 - 웹초보도 할 수 있는 Web VR/AR with aframe
작년에 이화여대 게임동아리 King에서 cardboard VR 방탈출 게임을 개발했던 기억 때문에 열심히 들었던 세션이었는데, 와 진짜 재밌었습니다!! 유니티로 VR요소 하나하나 스크립팅하고, 위치에 재질에 이벤트 클릭 raycast 하나하나 개발해서 결과물을 만들었을 때가 생각났네요. 그런데 웹이라니! 그것도 HTML과 비슷한 방식으로 만들어진다니!! 웹을 좋아하는 저에게 딱이었습니다.
만약 이 세션을 먼저 알았으면 졸프로 Web VR/AR을 했을지도 몰라요...ㅠㅠ
여느때와 같이 세션 필기 노트입니다! 그런데 오늘은 세션 정리도 해보려고 해요 궁금한 분들은 클릭!!!
● 민정 피셜 색깔
VR : 존재하지 않는 가상공간
AR : 증강현실
{VR AR} = XR
보통은 Unity나 Unreal 엔진을 이용해 C#이나 C++로 개발을 하지만, 유경수 님은 웹 개발자로 시작했기에 조금 거부감이 느껴졌다. > 그렇게 발견한 게 Javascript API
Javascript API는 브라우저를 통해 XR을 구현할 수 있었다. (웹 개발자들은 친숙한 JS!!)
> 근데 위기 공부하니까 deprecate 되었다 함
> 알고 보니 Javscript API -> Web XR로 용어를 변경
Aframe = Web XR Device API + Three.js (렌더링)
Aframe의 장점
1. visual Inspector (Unity의 Scene window와 비슷한 개념인 듯!)
모델을 마우스로 줄이거나 크게 할 수 있다! (경수님은 이전에 숫자 하나하나 대입하면서 비교했다 한다.)
2. 렌더링이 자동으로 된다!
Entity Component Architecture
3. 무엇보다 코드가 HTML과 비슷하게 이루어져 있다!
마치 부트스트랩 쓰는 것처럼 속성을 지정해줘서 반가웠다
4. Modeling 적용 가능
코드를 보면 Cube와 같은 간단한 컴포넌트만 가능한가? NO
3D 모델러가 작업한 결과물도 HTML 태그 형식으로 만들 수 있다 : Gltf 파일을 지원한다
이때 Animation도 적용이 가능하며, Animation은 3D 모델 자체가 가진 Animation과 JS에서 조작하는 것 둘 다 가능하다.
Aframe의 단점
1. 고사양(100MB도 안된다)이면 구동이 어렵다.
2. 공간 배치가 어렵다 > solution : visual inspector
Aframe으로 JSON파일에서 자동 모델링하기 - Event로의 상호작용
Entity : Componet의 집합 (Vue js의 템플릿 구조와 비슷했음)
Component를 어떻게 섞냐에 따라 요소 1개 1개가 그려진다. > DOM 구조가 아니라 컴포넌트 단위로 렌더 되는 듯
이때 Entity는 HTML 태그 형식으로 그대로 표현이 가능하다! : 진짜 Vue js <template> 이거 같았음
JS에서도 마찬가지로 getDocumentId() 등의 HTML 표현이 가능하기 때문에, 이벤트를 넣는 것 역시 가능하다. (click 이벤트 시 텍스트 작성 등등의 이벤트, or xyz값을 수치로 받아서 event 구현!)
JS를 사용해서 이벤트 구현이 가능하니 Unity처럼 총알이 타 다다다 발사되는 것도 구현이 가능!!
경수님은 학교 축제 소개 페이지를 만드셨다 하셨음!
AR은 Location Based AR과 Marker Based AR이 있었다 : Marker를 이용해서 부스의 스탬프를 구현!
이때 Marker방식은 특이한 게 QR과 Marker 둘 다 준비해야 한다는 점!
AR과 HTML의 호환으로 컴포넌트 재사용성 good 그러나 내가 정리한 단점 외에도 단점이 뚜렷하다
(경수님 ppt에 적혀있는데 안 적음 가장 기억나는 건 무조건 https로 해야 해서 SSL을 붙여야 한다는 점)
마무리
추가로 Aframe을 사용하더라도 기본적인 3D에 대한 이해가 필요하다!
그렇지만 HTML 포맷의 AR/VR이기 때문에 빠르게 습득해서 구현하고 싶다면 추천!!
--개인적으로 드린 질문--
Q. 슬라이드 지나간 사진 중에 VR 장비를 찬 걸 보았다 혹시 오큘러스 빌드가 되는 것인가?
A. 그건 그냥 cardboard 장비였다. 웹에서 cardboard 모드로 설정한 후, 카드보드용 VR 장비를 낀 것!
Q. Raycast 구현 쪽이 궁금하다. 유니티에서는 일정 반경 안에 들었을 때 Raycast를 통한 클릭이 가능하게 활성화되는데, 아까 좌표 얘기를 하신 얘기를 생각했을 때 설마 xyz 좌표를 하나하나 설정하면서 비교하는걸 Raycast로 대체하는 건가?
A. 아니다 Raycast 기능도 제공을 하고 있다!! 처음에 xyz좌표 하나하나 지정해야 하는 줄 알았는데 아니었다!
세션을 정리하고 보니 엄청 뿌듯하네요!! 해커톤이나 프런트엔드 중심 토이 프로젝트를 하게 되면 Aframe의 사용도 고려해봐야겠습니다! 아니면 DSC관련 프로젝트로 하나 혼자 만들어버리거나
3-2. 박재성 - 의식적인 연습으로 TDD, 리팩토링, 클린 코드 연습하기
발표자분들을 섭외하면서 아무래도 스프링 공부를 하고 클린코드 테스트 코드 공부를 하다 보니 정말 정말로!! 뵙고 싶었던 자바지기님인 박재성 님께 개인적으로 요청을 드렸는데 흔쾌히 수락해주시고, 재성님의 세미나를 들을 수 있어서 자기 계발에 정말로 큰 도움이 되었습니다 :)
처음에 의식적인 연습에 대해 말씀하실 때 음,, 추상적이라고 생각했는데 뒤로 가면 갈수록 더 상세히 구체적으로 공부 방법론을 제시해주는 게 너무 도움이 되었습니다.
아무래도 코드를 하다 보면 내 코드가 정말 깔끔한가?라는 생각이 들 때가 많아요. 그리고 대부분이 구현만 되는 코드를 짜면 되지라고 생각을 하는데 재성님이 대학생들에게 그런 방식의 공부가 정말 옳은가?라는 메시지를 주고 떠나신 것 같아서 , 참여자분들에게, 이화여대 학생들에게, 저에게 정말로 좋았던 세미나였습니다.
세션 정리 내용입니다!! 궁금하다면 클릭!! 아니 꼭 클릭!! 진짜 너무 좋았던 세미나라 공유하고 싶네요
● 민정 피셜 색깔
"요즘 개발자의 수요가 증가합니다. 그러나 학생들은 취업난, 회사는 개발자 인력부족 문제는 무엇일까요?"
회사에서 원하는 개발자
1) 클린 코드로 유지보수가 좋은 코드를 짜는 개발자 (여기서 클린 코드란 TDD 리팩토링에 중점)
2) 협업능력이 좋은 개발자
3) 주도적으로 문제를 찾고 근본적 문제를 해결하는 개발자
의식적인 연습이란?
[재성님 강조 부분]
1) 컴포트 존을 벗어나라 (편한 상태를 깨트리고 더 어려운 걸 도전하기!)
2) 명확하고 구체적인 목표 세우기
3) 피드백 주기 (내 생각엔 코드 리뷰 이야기인 것 같다)
[ppt 글씨 부분]
4) 효과적인 훈련기법이 수립된 기술을 연마한다.
5) 개인이 온전히 집중하고 '의식적'으로 행동한다
6) 효과적인 심적 표상을 만들어내는 한편 심적 표상에 의존한다
7) 기존에 습득한 기술의 특정 부분을 집중적으로 개선함으로써 발전시키고 수정하는 과정을 수반한다.
1. 단위 테스트
나의 API를 테스트한다 : 내 API가 Input Output에 따라 명확한 코드로 이루어져 있는 잘 동작하는 코드인가?
- 자바 String 클래스의 다양한 메서드를 사용해보고 단위 테스트로 확인한다.
- 자바 ArrayList에 데이터를 추가, 수정, 삭제한다.
단위 테스트가 잘 짜여 있다면 API의 사용법을 익힐 수 있다.
단위 테스트를 해야 하는 것
내가 구현하는 메서드 중 Input과 Output이 명확한 클래스나 메소드
> 대학생 눈높이 : 알고리즘!!
알고리즘을 학습할 때 알고리즘의 구현을 단위 테스트로 검증해본다!
Input, Output이 명확해서 단위 테스트를 연습하는데 효과적이다.
2. TDD
1. 회사 프로젝트 말고 토이 프로젝트를 활용하기
2. 웹 모바일 UI나 DB에 의존관계가 없는 요구사항으로 연습한다 > 순수 Java Project 말씀하시는 듯
Test를 짠다 > 이후에 해당하는 메서드를 만든다!! (production 코드를 나중에 만든다)
TDD는 복잡도가 너무 높은 건 좋지 않다!
3. 리팩토링 연습
3-1. 메서드 분리
이때 중요한 건 테스트 코드는 변경하지 말고 테스트 대상 코드(프로덕션 코드)를 개선하는 것!!
어디서부터 해야 할지 막막하다!
메서드 분리의 중요점 : 메서드가 1가지 역할만 하게 하는 게 좋다 (추상적, 정성적인 기준)
> 정량적이고 측정 가능한 방법으로!!
[예시 : 문자열 덧셈기]
정량적인 방법 수치화
1. 인덴트 즉 들여 쓰기는 1단계만 한다 -> 이를 위해 메서드를 분리하게 된다. (대표적으로는 for안의 if문)
2. else를 쓰지 않는다 -> return을 사용해서 if만을 사용한다.
3. 메서드가 한 가지 일만 하도록 구현한다 -> parsing로직과 sum로직을 분리하셨음!
4. 로컬 변수가 정말 필요할까? -> 줄이는 것도 효과적이다!
compose method 패턴
메서드(함수)의 의도가 잘 드러나도록 동등한 수준의 작업을 여러 개로 나눈다.
즉, 추상화 레벨을 똑같이 한다!
이때 외부 개발자는 public만 본다. public을 봤을 때 직관적으로 읽히면 ㅇㅋ! : 프로그램 로직 한눈에 볼 수 있다.
return sum(toInt(split(text))) : text를 split 해서 int로 바꾸고 sum 한다!
리팩토링 관점
- 클린 코드를 만드는 경험이 중요한 것!
- 기능을 변경하지 않고 코드의 구조만 바뀌는 것이다
- 리팩토링 후 테스트가 너무 힘들다 : but 테스트 코드가 있으면 빠른 피드백이 가능하다 (fast 핑퐁!)
의식적인 공부 : 한 번에 모든 원칙보단 한번에 한 가지 명확하고 구체적인 목표 가지기!
ex ) 메서드의 라인수 줄이기 15 -> 10
3-2. 클래스 분리
예외사항 throw 관련 클래스 분리
모든 원시 값과 문자열을 포장한다!
클래스 분리를 위한 원칙
1. 일급 컬렉션
2. 3개 이상의 인스턴스 변수 가진 클래스 쓰지 않기
3-3. 의존 관계 추가를 통한 난이도 높이기
웹, 모바일, UI, DB와 같은 의존관계를 추가한다.
이때! 테스트하기 쉬운 것과 어려운 것을 불리하는 역량 즉 센스가 있어야 한다!
3-4. 더 어려운 단계
1. 컴파일 에러 최소화 하기
2. ATDD기반으로 응용 애플리케이션 개발하기
3. 레거시 애플리케이션에 테스트 코드 추가하기 (제일 어렵다)
--개인적으로 물어본 질문--
Q. 게터, 세터를 쓰지 말라고 하셨는데 게터는 쓸 수도 있지 않은가? 그래서 저는 lombok의 @Data를 경계하라는 의미를 내 포한 건가?라는 생각이 들었다
A. 재성님이 구현한 로또게임 코드를 보여주심!
게터 세터를 쓰지 말라는 것은 A라는 클래스의 기능은 A클래스 안의 메서드로 해결하길 권장한다는 점에서 이야기한 것이다! 만약 게터를 쓴다면 A클래스 안에서 해결해야 하는 기능을 B클래스에서 getter로 불러와서 고치고 검증하는 코드가 될 것이다.
모든 원시 값을 포장하라고 했던 거 기억나는가? 로또 번호는 Integer이지만 번호를 가리키는 LottoNumber라는 클래스를 만들고, 해당 클래스 안에서 1~45까지의 숫자인지 검증하는 로직 등 정말 LottoNumber라고 확신할 수 있는 객체를 만드는 게 질문의 대답이 될 것 같다.
Q. 클린 코드 공부를 하다 보니까 나도 모르게 알고리즘 짤 때 Enum을 사용하고 그 안에 Abstract method를 구현하기도 하고, 알고리즘 짜다가 갑자기 변수명을 고민하고, 변수명이 길어지는 이상한 짓을 하고 있다. 조언 부탁드린다.
A. 그걸 의식적으로 연습해라!!! 그건 당연히 분리해야 하는 영역이다! 좋은 개발 습관이지만 취업에는 치명적이니 꼭 분리해야 한다!! 근데 정말 좋은 자세이다. 내가 추천하는 건 의식적으로 목표를 잡을 때
1단계 정말 빠르게! 알고리즘만 생각해서 풀기 > 2단계 그렇게 짠 알고리즘을 리팩토링 해서 클린 코드로 바꾸기!
이렇게 공부한다면 본인의 실력에 도움이 될 것이다.
특히 요즘 클린코드 테스트 코드와 관련해서 있던 고민(알고리즘과 관련)을 재성님 옆에 붙어서 귀찮게 질문을 드렸는데 '의식적인 연습'이란 가르침 너무 감사했습니다!!
4. 후원사 부스
후원사 부스가 들어가니 원래는 저의 학업 공간이었던 학교가 정말 행사장이 된 분위기가 들더군요.
그리고 오랜만에 보는 반가운 얼굴들 때문에 기억에 남습니다.
수철님이 먼저 나서서 후원해주시겠다고 얘기해주신 이노베이션 아카데미, 딱 지금 1년 전 스마일게이트 윈터 데브 캠프로 인연을 맺었는데 오랜만에 봐서 너무 좋았던 스마일게이트 식구분들!! 그리고 오픈 핵, 중국 해커톤 멘토로 항상 저한테 많은 도움을 주시는 Common Computer 민현 님까지 후원도 해주시고 너무 감사했습니다 :)
스마일게이트 서버 개발 캠프를 문의하느라 학생들이 몰려있었는데, 면접관 두분이 직접 상담을 해주고 계시니까 역시 학생들의 입장에서 생각해주시는 캠프장님의 모습이 멋졌습니다!! 혹시 서버개발캠프 관련 여쭤보고 있으신 점 있으면 연락 주세요. 선착순으로 스마일게이트 블루투스 키보드 이벤트도 진행했는데 저희 DSC Ewha 멤버 중 한 분도 알차게 가져가셨어요!!ㅋㅋ
그리고 WTM!! WTM은 따로 글을 쓰고 싶은 게 있어서 오늘은 패스~!
그리고 이노베이션 아카데미는 워후... 안 그래도 5000명 돌파했다는 소식에 놀랐는데, 지나다니면서도 학생들이 나 원래 이거 지원하려고 했는데! 이런 말을 지나가면서 스쳐들으니까 확실히 홍보를 엄청 잘하셨구나 싶었습니다!
그리고 커먼 컴퓨터 부스!! 아니ㅋㅋㅋ 오픈핵 때문에 커먼컴퓨터 가방부터 굿즈 스티커 다 있는데 직원분들이 또 가져가라고 더 챙겨주시고 AFAN 유저라고 하니까 invest도 해주시더라고요!
AFAN은 커먼 컴퓨터에서 만든 리워드형 SNS입니다. Invest와 Crush On을 이용해서 유저들끼리 서로의 포스팅에 가치를 매기고 내가 invest 한 사람이 AFAN을 이용한 광고 등으로 수익을 얻을 경우엔 나는 가치 있는 사람에게 invest 했다는 value가 있어서 일정 수익을 같이 얻을 수 있습니다!
https://apps.apple.com/kr/app/afan/id1434385630
5. DevFest on Campus 굿즈
크으 후원사 부스의 스티커부터 짱짱한 Devfest 스탭 후드, 반팔, 배지, 목도리~! 아주 짱짱해요!! 특히 우리 스티커에 있는 코린이 너무 귀엽지 않나요! 굿즈 열심히 제작해주신 두리님께 감사를ㅎㅎㅎ
6. 코드 랩 & 액티비티
사실 코드 랩을 많이 못갔어요 세션장에만 있다보니까 스태프분들 놔두고 혼자 코드랩을 할 수가 없어서..ㅠㅠ
코드랩 콘텐츠 기획은 대학생 관련 행사라면 하나 정도는 있으면 좋겠다는 생각이 들었습니다. 얼마 전에 DSC Ewha에서 했던 코드 랩도 반응이 좋았고, 또 열어달라는 요청이 있었거든요.
처음에 GDG Campus랑 DSC랑 회의할 때 대학생들이 생각보다 코딩하는걸 막막해하고, 직접 구현해보는 시간을 가져봤으면 좋겠다는 말을 했었는데 이렇게 현실화가 되었습니다!! 다들 만족하셨겠죠?
이대 무선랜 문제가 있었다 들었는데,, 어음,, 학교 측에서 대규모 다운로드가 힘들 수 있다고 사전에 말씀하셨고 토요일이라 증설을 못하는 상황이었습니다ㅠㅠ 불편했을 텐데 현장 분들이 잘 해결해주셨을 거라 생각합니다..!
그리고 액티비티!! 크으 한결님이 나만의 시간표 만들기 웹을 직접 만들어 주셨어요! 저도 하고 싶었는데 아쉽네요
7. DSC와 GDG Campus
사실 DevFest의 가장 큰 장점은 여러 사람들을 만날 수 있는 거라고 생각합니다. 이번 행사에서 그동안 저는 DSC Lead 님들 그리고 DSC Ewha만 만났었는데, 다른 학교 DSC 멤버분들도 만날 수 있어서 좋았습니다.
사진도 왕창 찍고 친해지고! 이번 DevFest를 기념하면서 잘 마무리했습니다!
무엇보다도 GDG Campus 오거나이저 분들 우리 DSC Lead분들 다들 너무 고생했고, 스태프, 코드 랩 튜터 참가자 홍보까지 이화여대 안에서 DSC 활동을 활발하게 해주는 우리 DSC Ewha 멤버들에게도 감사했습니다.
8. 이화여대 내 반응
처음에는 사실 걱정이 앞섰습니다. 저희 학교에서 주최를 하면 벗들에게 도움이 되는 부분이고 정말 좋은 행사지만, 혹시라도 문제가 생기면 앞장서서 책임을 져야 했으니까요.
그런데 행사를 마치고, 에브리타임에 들어갔는데 DevFest관련 글이 하나 있더라고요
그거보고 사실 눈물이 핑돌았어요ㅋㅋㅋ
엄청 동기부여가 됐다고 했다는 글이었는데, 댓글에서 현업에서 오래 일한 베테랑 발표자분들도 좋았지만 현재 학부생인데 커리어 탄탄히 쌓은 분을 보고 용기를 얻고 전공 공부를 더 열심히 해야겠다고 결심하는 내용이었습니다
그러면서 아래 댓글에 DSC 아니었으면 이 행사 주최도 못했을 텐데 학교에서 열어줘서 고맙다는 댓글 때문에 힘나더라고요.
대학교 새내기 20살 때부터 멋사로 개발을 시작하면서, 사실 주변에 학점을 챙기는 친구는 많았지만, 같이 콘퍼런스를 간다거나 해커톤을 같이 나가는 친구가 없어서 항상 고민이었습니다. 그런데 저 글을 보니 DSC 활동을 학교 내에 개발을 좋아하는 벗들을 더 많이 이끌어 내고 서로 협업할 메이트를 찾는 활동으로 만들면 좋겠다는 생각이 들었습니다.
특히나 이번 행사 참여자 성비가 1:1이었대요. 사실 오픈 핵, 멋사, junction x seoul 어느 행사나 해커톤을 가도 여성 개발자는 소수였고, 발표자도 마찬가지였어요. 그래서 그런지 이번 DevFest가 저에게 엄청 크게 다가왔네요
9. 마무리
열심히 홍보를 했더니 지인분들이 많이 와주시고, 발표자로도 나서 주셨는데 생각만큼 많이 못 챙겨드린 것 같아서 죄송했습니다. 오픈 핵 사람들하고도 멋사 언니들하고도 사진 찍고 오랜만에 얘기도 하고 싶었는데 아쉬워요.
다음 DSC 활동도 으쌰 으쌰 하겠습니다!
장장 2개월간의 DevFest 기획단 후기 끝!!!!
이제 기획단 아니야 다시 개발자로 돌아갈래! 당장 이번 주 네이버 핵 데이 어쩌지...
'Daily > Code Fest' 카테고리의 다른 글
HashCode 2020 참가 후기 (0) | 2020.02.23 |
---|---|
Google Cloud OnBoard 후기 & 정리본 링크 (3) | 2019.11.28 |
2019 google cloud summit 후기 (0) | 2019.11.15 |
DevFest Seoul 2019 Staff 후기 (2) | 2019.10.22 |
[DSC Lead] - google Korea 방문기 & DSC Lead onBoarding (9) | 2019.08.14 |