[GDG Incheon] Hello World! 컨퍼런스 후기

전현준·2024년 3월 30일
0
post-thumbnail

👩🏻‍💻GDG Incheon / Songdo

GDG란?

  • Google Developer Groups : 구글 개발자 커뮤니티
  • 인천 외에도 서울, 대전, 부산 등.. 국내에 14개의 커뮤니티가 있다고 한다.

🤔 어떻게 행사를 알게 되었는가?

필자는 원래 이런 컨퍼런스를 가본 경험이 하나도 없다.

데브콘,, 인프콘,, 등등 다양한 컨퍼런스가 많은데, 한 번도 가보지 못했다.

근데 내가 소속되어 있는 교내 코딩 동아리에서 20명 한정으로 이번 "Hello World!" 갈 수 있는 기회가 생겼다.

🙂 : 와 무료로 갈 수 있는 기회라니 이건 못참지~

이번 GDG SongdoHello World!는 송도 컨벤시아에서 개최되었다.

컨퍼런스는 처음 와서, 대충 웅장한 스케일 기대 어쩌고..

근데 사실 기대했던 것 만큼 웅장하진 않았고, 약간 큰 강의실 크기의 회의실 5개 방에서 열렸다.

</> Hello World! 소개

Hello World는 주니어 개발자, 학생을 위한 컨퍼런스로 관련 강연도 취업, 커리어 관련이나

기술 관련해서는 간단하게 접해보는 내용으로 구성되어있었다.

상세한 세션들은 아래와 같다.

내가 몸이 5개였다면, 25개의 강연을 듣고 싶었지만, 최종적으로 5가지를 뽑았다.

"취업/커리어" : 2개 / 새로운 기술(Go lang) : 1개 / 기존 사용 기술(Flutter) : 1개 / CS : 1개

사실 정말 고민했다. Go lang은 한번 접해보고는 싶었고, 플러터도 더 듣고 싶었다.

지금 와서 후회가 있다면 Flutter Animation을 들었을걸..

하나씩 내가 들은 내용을 정리하며 후기를 남겨보려 한다.


☝🏼 세션 1 : 전문대 비전공 출신의 커뮤니티를 만나서 해외 취업과 팡까지 가게된 이야기

이분은 스토리가 엄청나게 재밌었다.

전문대 컴퓨터 관련 학과를 나왔지만, 1년만 학교 다시고, Hello World만 출력할 줄 알았던 분이셨다.

부산에서 장사를 하시다가, 장사한 이력을 관리하는 방법을 배우고 싶어 데이터베이스를 알게 되셨다고 한다. 그래서 "10년만 DB를 배우고 돌아와서 상위 1%를 찍고 다시 장사로 돌아오자" 라고 다짐했다.

그래서 그때는 무작정 부산에 무너져가는 게임회사에 취직했다고 한다.
사장님 집 컴퓨터 고쳐주고, 월급 못받고, 버스비 아끼려고 회사에서 자고..

그래서 DB를 배우고 싶어 그 당시 국내 1위 SQL 커뮤니티 였던 SQLTAG에 들어갔다.

서울 부산을 2주에 한 번씩 오가며, 집 갈 버스비를 아껴 서울에 왕복하는게 너어무 힘들어서,
돈을 빌려서라도 서울에 취직하셨다고 한다.

그렇게 국내 1위 커뮤니티라서 엄청난 분들 사이에서, 열심히 커뮤니티에서 스터디도하고, 배우고자 하는 갈망을 엄청 하면서, 커뮤니티를 통해 엄청 성장하셨다고 한다.

잠도 줄여가며, 커뮤니티 활동을 하고, 결국엔 인정받아, 커뮤니티 운영진도 하고, 이름이 널리 알려지며, Microsoft의 MVP 상도 받고, 해외 취업도 하게 된 썰을 들려주셨다.


결론 : 결론은 커뮤니티가 주는 에너지와, 얻어가는게 엄청 많다고 하셨다. 혹시 어떤 걸 해야할지 모른다면, 조그만한 곳에서 시작해보는게 좋다고 하셨다.

느낀점 : 최근 내 경험인데 요즘 프로젝트를 하며 협력을 하긴 하지만, 분야가 다 달라서 코드리뷰를 해보지 못했다. '같이 코드리뷰를 해줄 수 있다면 서로 성장할 수 있었을텐데'라고 생각하고 있다. 오늘 시간을 통해서 같이 지식을 나눌 수 있는 파트너나 커뮤니티의 중요성을 다시 깨닫는 시간이 되었다.


✌️ 세션 2 : Go 언어로 쉽고 빠르게 서버 만들기

선택 이유 : 원래는 Flutter 스크롤을 들으려 했는데, 내 정체성은 백엔드인데.. 라고 생각이 스쳐가서 Go lang을 처음 접해보고자 들었다!

구글에서 C/C++의 피로를 느껴 개발하게 된 것이 Go lang이다.

일단 Go 장점부터 보자.

Go 장점
1. 절차 지향 언어
2. 동시성 지원
3. Gabage Collector
4. 배워야하는 키워드가 적음
5. 캐릭터가 귀여움

그리고 간단하게 Go 문법을 알려주셨다. 기존에 배웠던 언어에 다른 점 위주로만 적어보겠다.

타입 추론, 변수 선언

num := 10  // 선언과 할당 한번에! 타입도 추론됨
var num [3]int // 배열 선언

반복문 : 반복문은 거의 for문을 활용한다고 한다.

for i := 0 ; i < len(num) ; i++ {...} // 신기한 점은 (괄호)를 쓰지 않는다는 것
for index, value := range numbers {...} // 배열을 사용하는 반복문 (python과 비슷)

switch-case : break 사용 안함~!

  • 원래 C언어는 case마다 break를 해주어야하는데, go는 그럴 필요가 없단다.

error handling

  • 에러 핸들링도 조건문 & error.nil을 통해서 사용한다고 한다.

channel : 멀티스레딩 할 때, 데이터를 주고 받기 위함.

ch := make(chan int) 
ch <- 10 // 채널에 값을 넣을 때는 <-
x := <-x
close(ch)
func (ch chan <- int) {...} // 값을 보내기만 가능한 채널
func (ch <- chan int) {...} // 값 받기만 가능한 채널

Goroutine : 스레드 생성하는데 사용? worker를 이용해서 경량 스레딩 사용

Go lang의 핵심인 것 같았는데, 40분만에 문법을 마스터 하기는 어려워서... 나중에 실제로 배우게 된다면, 다시 공부해야 할 것 같다.

서버 만들기

  • 그래서 이제 REST API로 서버를 구성하는 코드를 보여주셨다.
  • Go lang에는 class가 없어서 struct를 주로 사용한다고 한다.
  • struct 내부에서 json 매핑도 간단해 보였다.
  • 단순 CRUD 코드로 메소드를 4개 만들었는데 120 line정도 나왔다.

결론 : Go 굉장히 가볍다. 다들 츄라이 해보시라

느낀점 : 40분만에 문법을 배우고, REST API를 배울 수 있는 언어가 얼마나 될까. 스프링이였다면 40분 만에 불가능했다. 성능은 가볍다고 하고, 확실히 배우기 쉽다고 느끼긴 했다.


🥉세션 3 : 플러터 상태관리

선택 이유 : 나는 플러터 상태관리로 GetX를 쓰고 있었다. GetX를 쓰다보니, 상태관리를 내가 잘하고 있는게 맞나? 싶은 의문이 들었다. 그래서 들으면 좋을 것 같아서 들었다.

역시 Flutter 개발자들이 모이면, 플러터 상태관리 뭐 쓰세요? 라는 아젠다를 나눈다고 한다.

나도 궁금했었다. GETX가 좋은 상태관리인가?

일단 들어가기 앞서 상태관리의 필요성을 살펴보자.

상태관리 필요성
1. 상태가 변경될 때 마다 재 빌드 필요, 객체 분리 -> 유지보수에 도움
2. 앱의 성능 향상
3. UI와 비즈니스 로직을 분리하여 앱의 구조를 최적화함

그래서 요즘 많이 쓰는 순위가 아래와 같다고 한다

플러터 상태관리
1. RiverPod
2. GetX / Provider
3. Bloc

이렇게 순위가 되었다고 한다. 필자의 경우 GetX만 알고 있었다.

하나씩 소개해보면,

  1. Bloc : 오래된 상태관리, BuildContext와 상태관리 모델에 종속됨. 이벤트를 잘 핸들링 하는게 중요
  2. GetX : 플러터 BuildContext에 종속되지 않음. 그래서 호불호 심함
    • 상태관리 이외에 기능이 많음
    • BuildContext에 종속되는 라이브러리들을 활용하기 너무 어렵다고 한다.
  3. Provider : 상태관리 만을 위해 만들어짐. Deprecated예정
  4. RiverPod : Provider를 개선한 상태관리 모델. 같은 사람이 만듦
    • 상태관리 모델을 전역 변수로 선언
    • 서드파티 호환성이 좋음

추가적으로.. Code Generator (+chatGPT)
시대가 변화하며 매우 편해지는 건 사실, 써도 된다.

하지만, 코드의 로직을 알고 있어야 한다. 구조를 잘 파악해서, 생성된 코드를 통해 계속 공부하는게 좋음

결론 : 상태관리는 참 많다. 본인 프로젝트에 맞는 상태관리 라이브러리를 사용하는 것이 참 좋음. 쉽지는 않지만 직접 만드는 방법도 있다...

느낀점 : 처음부터 GetX를 사용해 왔는데, 나도 기억은 안나지만, BuildContext 와의 호환이 안되었던 경험이 있었던 것 같다. 추후 이런 문제가 생긴다면, RiverPod도 고려를 해봐야겠다.


🖖 세션 4 : 언어별 동시성 프로그래밍

선택 이유 : 졸업 작품의 경우 실제 사용자가 없으니, Controller도 모두 동기 방식으로 작성했다. 하지만 이런 경우 많은 사용자들의 처리가 한번에 되지 않는다. MVC 패턴일 때 어디까지 비동기로 사용해야하는지 고민되어 듣게 되었다.


이 강연은 제일 어려웠다. 내가 완벽하게 동시성 프로그래밍에 대한 개념이 설립이 안되었는데 거기서 6가지의 언어의 동시성 프로그래밍을 이해하려니 너무 힘들었다.

강연에서 설명한 언어는 Java / Kotlin / Go / TypeScript / Dart 정도가 있었는데, 내가 알고 있었던 부분만 짚고 넘어가려한다.

일단 동시성병렬의 개념을 이해해야한다.

  • 동시성 : 멀티 프로세싱 (동기 방식)
    • 작업이 동시에 발생하는 것처럼 보이기 위해 번갈아 가면서 작업을 수행하는 것.
  • 병렬 : 멀티 스레드 (비동기 방식)
    • 실제로 독립적으로 동시에 작업을 수행하는 것.

Java

  1. Thread 생성이 가능한데, 공유 자원에 대해 synchronized 코드를 통해서 다른 자원이 접근 불가하도록 가능하다.

  2. Java 21 에서 나온 Virtual Thread 개념

  • 기존에는 1:1로 스레드가 매핑되었다면 Virtual Thread에서는 ForkJoin Pool을 통해 하나에서 관리한다고 한다. 이렇게 하면 자원을 더 효율적으로 사용할 수 있을 것 같다.

TypeScript (JavaScript)
1. Promise와 Async & Await

  • 메소드가 호출되면 Task Queue에 담기고, Promise가 성공하면 resolve 실패하면 reject로 이벤트가 발생하는데, 이 이벤트 루프를 통해 Stack로 이동하는 방식이다.

Flutter (Dart)
1. Future : JS의 Promise와 굉장히 유사한 개념. 성공하면 Data가 실패하면 Error 발생
2. Stream : 순차적 비동기 스트림을 사용 사실 이 부분은 이해가 잘 가지 않았다.
3. isolate : PID가 생성되어, channel로 사용함. 이 부분도..

결론 : 다양한 언어에서 동시성 프로그래밍 방식이 다 다르다는 것은 알았고, 언어마다 적절한 방식을 더 공부해야겠다고 생각했다.

느낀점 : 나의 동시성 프로그래밍 개념이 굉장히 부족하다라는 것을 느꼈다. 스레드 & 자원 공유에 대한 개념을 더 공부해야겠다.


🖐️세션 5 : 잡식성 개발자에서 주니어 개발자 되기

선택 이유 : 마지막은 커리어로 장식하고 싶었다. 나도 Spring하다가, Flutter하다가, 이것저것 해보는 잡식성 개발자 같은데, 어떻게 커리어를 정해야 할까 라는 고민이 들어 듣게 되었다.

솔직히 다들 그런 고민 할 것이다.

"이 길이 내 길인가? 배울게 너무 많은데..? 잡무 하다가 퇴화되는 것 같은데.."

불안한 감정을 컨트롤 하고 감정 극복할 필요가 있다!

잡무를 하는, 다시 말해서 성과 인정받기 어려운 일만 맡는 것은 커리어가 꼬이기 굉장히 쉽다.

그렇다고 또 잡식성은 나쁘냐? 라는 고민에는 NO이다!

우리는 잡식성을 키우면 Generalist를 키울 수 있다.

그리고 내가 잘하는 커리어를 발전 시키면 Specialist를 키울 수 있다.

분명히 Generalist는 프로젝트 전체적인 부분을 이해하는데 도움이 되어 타 부서와 협업하는데 굉장한 시너지가 난다. 하지만 나만의 무기를 개발하는 것도 매우 중요하다!

전략적 잡식성 되기

➜ 중간적 커리어 점검을 하자

  • 분기마다 한 번, 이력서 업데이트 (내가 맡은 업무, 아쉬운점, 성과,,)
  • 나의 역량과 시장의 수요를 확인하기 ➜ 채용 공고를 통해 키워드를 찾기 ➜ 부족한 부분 보완

    추가 : 레거시 시스템은 비난 못한다
  • 회사 입장에서도 그때는 그것이 최선이였기 때문에, 레거시 시스템이 탄생한 걸지도,
  • 귀중한 교훈을 얻은 기회 비용이라고 생각하자!

결론 : 조급해 하지 말자

  • 사람이 하는 모든 일에는 의미가 있다. 아직 못찾은 것 뿐
  • 노력이 눈에 보이기 까지 오래걸린다.
  • 잡식성이라도 의미없는 경험은 없으니, 학부생일 때 다양한 경험 굉장히 좋다.
  • 하지만 본인의 Specialist 찾기!

느낀점 : 멘탈 관리를 받은 느낌이였다. 제일 인상 깊었던 강연이였다. 최근 나는 내가 과연 잘 하고 있는 걸까? 의미 없는 건 아닐까? 라는 고민을 했었는데, 의미없는 고민이였다. 그냥 현재에 최선을 다하자!

마무리

오늘 내게 가장 와 닿았던 말씀은

"의미없는 도전은 없다. 의미를 아직 못찾았을 뿐"

이 말이 가장 좋았던 것 같다. 계속 도전하고, 계속 뭔가를 하는 내가 되도록 하자.

인증샷

인증샷 찍을 만한 공간이 없었다.. 이건 좀 아쉽.

profile
백엔드 개발자 전현준입니다.

0개의 댓글

관련 채용 정보