[우아한테크코스 8기] 오픈 미션 중간 회고

오픈 미션 설명회

프리코스 4주차가 시작되기 약 5시간 전, 오픈 미션 설명회가 열렸다. 미션 안내는 아래와 같다.

 

진행 방식

  • 프리코스 경험 기반으로 관련된 분야의 미션을 설계하고 구현한다.
  • 미션 주제는 자유롭게 정한다.
  • 스스로 도전하고 싶은 목표를 설정하고, 그에 맞는 실행 계획을 세워 미션을 진행한다.
  • 2주 동안 자료 조사, 기획, 실행 후 결과물을 제출한다.

미션 예시

  • 낯선 도구 해커톤
    • 설명: 난이도는 평범하나 평소에 잘 사용하지 않는 개발 도구나 언어(예: Rust, Kotlin, WebAssembly, 하드웨어 보드 등)로 문제를 해결한다.
    • 과제: 반드시 동작하는 작은 결과물(예: 간단한 앱, CLI 툴, 시뮬레이션) 제출한다.
  • 고난도 문제 해커톤
    • 설명: 평소에 익숙한 기술을 사용하여 난이도가 높은 문제를 해결한다.
    • 과제: 난도가 높은, 정답이 없는 문제를 정의하고, 해결해 가는 과정, 결과물을 제출한다.
  • 제한 협업 미션
    • 설명: 2~3명이 한 팀이 되어 처음 보는 사람과 협업한다.
    • 과제: 제한 조건을 만들어서 진행한다.
      • 예) “소통은 하루 15분 화상회의만 가능”, “코드 작성은 깃허브 이슈/PR로만”

 

설명회를 들으며 설렘 반 두려움 반이 공존했다. 주제 선정을 앞두고 아래와 같은 질문을 계속해서 스스로에게 던졌다.

 

내가 주도적으로 문제를 해결할 수 있는 일이 무엇일까?
내가 재미있어 할만한 건 무엇일까?
내가 시도해본적 없던 일은 무엇일까?

 

오로지 우아한테크코스 합격이 목적이 아닌, 이 시간들을 기회로 삼아 스스로에게 증명해보이고 싶었다. 내가 이전에 시도해본 적 없으면서도, 재미있는 일을 하고 싶었다. 그렇게 또 다른 도전을 만들고 싶었다.

 

이전에 했던 자바/스프링 기반 프로젝트를 개선해볼까? 스프링의 생태계는 거대하기에 시도해보지 않은 일들이 충분히 있을 것이라 생각했다. 아니면 Kotlin 언어로 로또 미션을 재구현 해볼까? Go 언어로 로또 미션을 재구현 해볼까? 여러 가지의 아이디어가 떠올랐지만, 이거다 싶은 주제는 없었다. 그저 익숙함이 가득한 안전지대에서 벗어나, 시도해본적 없던 일에 도전하고 싶다는 생각 뿐이었다.

 


 

언어는 도구이다.

3주간의 프리코스를 진행하며 "언어는 도구이다." 라는 글을 본 적이 있다. 프로그래밍은 무언가를 만드는 것이고, 무언가를 만들기 위한 보조 수단이 바로 언어라는 것이다. 해당 글을 읽으며 문제 상황에 맞는 도구를 선택해, 문제를 해결하는 것이 개발자가 해야하는 일이 아닐까 라는 생각이 들었다.

 


 

주제 선정

나는 지금까지 주로 Java를 사용해왔다. Python도 조금이나마 사용한 경험이 있다. 항상 언어를 사용만 해왔을뿐, 어떻게 만들어지는지 궁금해 한 적은 없었다. 오픈 미션 설명회가 종료되고, 위 글을 다시 읽어보며 본질적인 질문에서부터 접근하기 시작했다

 

"프로그래밍 언어는 어떻게 만들어지는거지?"

 

혼자 고민하는 것보다 찾아보는 것을 좋아하기에 무작정 구글에 '프로그래밍 언어 만들기'를 검색했다.

 

 

생각보다 꽤 많은 사람들이 자신만의 프로그래밍 언어를 만드는 것에 대해 호기심을 가지고 있었다. 프로그래밍 언어가 근본적으로 인터프리터와 컴파일러로 이루어져 있다는 사실은 알고 있었다. 인터프리터가 '소스 코드를 직접 실행하는 프로그램'이라는 것까지도 알고 있었다.  다만, 내부적으로 어떻게 동작하는지 알지 못했다.

 

인터프리터가 정확히 어떻게 만들어지는거지?

 

질문은 꼬리에 꼬리를 물었다. 뿌리가 내리듯 생기는 호기심을 해결해야 했다.

 


 

자료 조사

관련 자료를 계속해서 찾아보니 시중에 인터프리터 만들기, 컴파일러 만들기에 대한 책들이 많이 나와있었다.

 

 


 

인터프리터? 컴파일러? 뭘 구현해야 할까?

컴파일러는 최적화와 기계어 생성에 집중하지만, 인터프리터는 토큰 → 파싱 → 실행으로 언어의 핵심 동작원리를 명확하게 보여준다고 판단했다. 따라서 인터프리터를 먼저 구현하기로 결정했다.

 


 

도서 선정

도서는 '밑바닥부터 만드는 인터프리터 in go'로 선정했다. 이 책을 선택한 이유는 우선 난 늘 Go라는 언어가 궁금했다. 매년마다 제공되는 스택오버플로우의 언어 인기 순위를 확인해보면, Go 언어가 그리 낮지 않은 순위에 머물러있다. 따라서 이번 기회에 Go를 학습해보면 좋겠다는 생각이 들었다.

 

 

또한 책 소개가 가장 마음에 들었다. 레고 부품을 조립하듯, 인터프리터의 작은 부품들을 조립해나가는 과정이 재미있어보였다.

 

 

이뿐만 아니라 책의 목차에서도 인터프리터가 구현되어가는 과정이 상세히 기술되어 있었다.

더보기

1장 렉싱
1-1 어휘 분석
1-2 토큰 정의하기
1-3 렉서
1-4 토큰과 렉서 확장하기
1-5 첫 번째 REPL

2장 파싱
2-1 파서
2-2 파서 제너레이터를 사용하지 않는 이유
2-3 Monkey 프로그래밍 언어 파서 만들기
2-4 파서의 첫 단계: Let 문 파싱
2-5 Return 문 파싱
2-6 표현식 파싱
2-7 프랫 파싱은 어떻게 동작하는가
2-8 파서 확장하기
2-9 Read-Parse-Print-Loop

3장 평가
3-1 심벌에 의미 담기
3-2 평가 전략
3-3 트리 순회 인터프리터
3-4 객체 표현하기
3-5 표현식 평가
3-6 조건식
3-7 Return 문
3-8 에러 처리
3-9 바인딩과 환경
3-10 함수와 함수 호출
3-11 누가 쓰레기를 치울까?

4장 인터프리터 확장
4-1 데이터 타입과 함수
4-2 문자열
4-3 내장 함수
4-4 배열
4-5 해시
4-6 그랜드 피날레

 


 

언어 학습 방법

그럼 Go는 어떻게 학습해야 하지? 사실 요즘은 꼭 유료 강의가 아니더라도 유튜브에 유익한 강의가 많이 존재한다. 따라서 곧바로 유튜브에 Go 강의를 찾아보았다. 많은 영상들 중 아래 영상이 가장 눈에 띄었다.

 

https://www.youtube.com/watch?v=fqnKJa02GK0&t=98s

 

평소 노마드코더의 영상을 종종 봐왔던 나에게 이보다 더 좋은 선택지는 없다고 판단했다. 강의 사이트에 들어가보면 각 챕터별 강의 시간이 그렇게 길지 않았고, 실습 위주라 재미있어보였다.

 

https://nomadcoders.co/go-for-beginners

 

Go 프로그래밍 언어 무료 강의

Channel, Goroutines 등 Go의 핵심 개념을 익히고, 간단한 스크래핑 서비스를 만들며 실습 위주로 기초부터 배웁니다. 17,000명이 선택한 인기 무료 입문 강의로, 지금 Go 입문을 시작하세요!

nomadcoders.co

 


 

결론

이로써 사전 자료 조사가 완료되었다. Go 강의를 들으며 언어를 학습한 후, 인터프리터를 구현해 나만의 프로그래밍 언어를 만드는 것이 최종 목표이다. 말은 쉬워보이지만, 사실 모든 과정이 처음으로 시도해보는 것들이라 마음 속에 설렘 반, 두려움 반이 존재했다. 하지만 무엇보다도 재미있어보였고, 심장이 뛰는게 느껴졌다. 내 손으로 무언가를 만들고, 그 안에서 문제를 해결해나가는 과정이야말로 내가 하고싶은 도전이었다. 실패하더라도 약 2주간의 시간동안 최선을 다해보자고 다짐했다. 이 시간들을 나중에 돌아봤을 때, "아 그 때 진짜 열심히 했는데"라고 기억되었으면 좋겠다.

 


 

오픈 미션 목표

1. Go 언어 학습하기

2. '밑바닥부터 만드는 인터프리터 in go' 도서를 학습하며 인터프리터 구현하기

3. 나만의 한글 프로그래밍 언어 만들기

4. 구현한 한글 프로그래밍 언어 -> 충청남도 방언 버전으로 확장하기

 

최종적으로 충청남도 방언 버전으로 한글 프로그래밍 언어를 만드는 것이 목표이다. 왜 하필 충남이냐?라고 한다면 필자가 대전 사람이기 때문이다😅 충남 방언에 익숙한데 이를 적용해보면 재미있을 것 같았다.

 

예시

출력하슈("안녕하세요!")

 


 

Go 언어 학습

학습한 내용은 잊지않도록 블로그에 정리했다.

 

https://jihyun-devstory.tistory.com/66

 

[Go] 1. package, function, for, if, switch

Package패키지명은 컴파일을 위한 필수 요소다. 패키지명을 선언하지 않으면 컴파일 오류가 발생한다. 현재 파일의 위치가 프로젝트 최상위가 아니라면, 위치하고 있는 폴더명을 패키지명으로 명

jihyun-devstory.tistory.com

 

https://jihyun-devstory.tistory.com/73

 

[Go] 2. pointer, map, arrays

Pointer포인터 때문에 C를 싫어했는데,, Go에서 다시 만나게 되었다. 값 복사 vs 참조일반적인 변수 할당 (값 복사)package mainimport ( "fmt")func main() { a := 2 b := a a = 10 fmt.Println(a, b)} 출력 결과10 2 b는 a의

jihyun-devstory.tistory.com

 

https://jihyun-devstory.tistory.com/68

 

[Go] 3. struct, method, dictionary

struct구조체(Struct)는 여러 필드를 하나로 묶어서 새로운 타입을 정의하는 방법이다. 기본 구조체 정의package mainimport "fmt"type person struct { name string age int favFood []string}func main() { favFood := []string{"kimch

jihyun-devstory.tistory.com

 

https://jihyun-devstory.tistory.com/70

 

[Go] 4. URL Checker & Go routines & Channel

URL Checker 구현기본 URL 체크 함수package mainimport ( "errors" "fmt" "net/http")var errRequestFailed = errors.New("Request failed")func main() { urls := []string{ "https://www.airbnb.com/", "https://www.google.com/", "https://www.amazon.com/", "ht

jihyun-devstory.tistory.com

 

깃허브 리포지토리는 아래와 같다.

 

https://github.com/Jihyun3478/study-go-language

 

GitHub - Jihyun3478/study-go-language: Go 학습 리포지토리

Go 학습 리포지토리. Contribute to Jihyun3478/study-go-language development by creating an account on GitHub.

github.com

 


 

진행 상황

현재는 '밑바닥부터 만드는 인터프리터 in go' 도서에 있는 monkey 인터프리터 구현을 완료한 상태이다. 아직 인터프리터 속 렉서, 파서, 평가기의 개념을 100% 알고있다는 생각이 들지않아, 복습을 하며 나만의 지식으로 만들려고 한다. 이후 한글 프로그래밍 언어 만들기를 시작할 것이다. 깃허브 리포지토리는 아래와 같다.

 

https://github.com/Jihyun3478/logi-lang

 

GitHub - Jihyun3478/logi-lang: 인터프리터 만들기 (feat. 밑바닥부터 만드는 인터프리터 in go)

인터프리터 만들기 (feat. 밑바닥부터 만드는 인터프리터 in go). Contribute to Jihyun3478/logi-lang development by creating an account on GitHub.

github.com

 


 

스터디

이번 주차도 스터디에 참여했다. 3주차 미션이 종료되고, 주제 선정 및 자료 조사를 하느라 참여하지 못했다. 어느 정도 방향을 잡고나니, 다른 분들은 오픈 미션을 어떻게 진행하고 계신지 함께 얘기해보고 싶어 4주차에는 서울로 올라갔다. 이번 주차는 4명이서 진행되었다. 오픈 미션 주제와 미션을 진행하며 어려웠던 점을 이야기해보고, 프리코스가 종료된 이후의 스터디 방향성을 함께 정해나갔다. 다들 재미있는 주제로 미션을 진행하고 계셔서 흥미로웠다. 우아한테크코스 8기에서 함께한다면 더 재미있을 것 같다.

 

스터디가 종료된 후 인증샷

 


 

회고

러닝 시작

사담이지만 인생 첫 러닝을 시작했다. 프리코스 커뮤니티에 러닝 챌린지 카테고리가 있어 맨날 염탐만 하다가, 드디어 시작했다.

 

1회차
2회차-1
2회차-2

 

아직 2번밖에 안 뛰었지만, 그래도 나름 뿌듯했다. 처음 나가기까지 마음 먹기가 쉽지 않았지만, 막상 시작하니 바람을 느끼고 풍경을 보며 뛰는게 기분이 좋았다. 또한 러닝 챌린지에 인증하는 재미가 쏠쏠하다. 함께하는 사람이 있으니 몸이 먼저 움직이게 된다. 이를 기회 삼아 프리코스 종료 이후에도 꾸준히 일주일에 2~3번씩 뛰는게 목표이다.

 

프리코스를 하며 러닝, 인터프리터 만들기처럼 이전에 시도해보지 않았던 일들을 도전해보고 있다. 더이상 안전지대에서 머무르지 않고 도전하는 것을 두려워하지 않기 위해, 마치 의식적인 연습을 하고 있는 듯 하다. 

 


 

페이커

며칠 전에 롤드컵 결승 영상을 보았다. 남자친구가 열광하길래 얼른 유튜브를 켜 봤는데, 끝까지 보니 T1이 우승을 했다. 사실 페이커 선수밖에 알지 못했기에 내심 T1을 응원하고 있었다. 

 

https://www.youtube.com/watch?v=5F-hg0B_BSE

 

롤드컵이 종료되고, 몇년 전 페이커 선수가 연설을 했던 게 떠올라 다시 찾아보았다.

 

https://www.youtube.com/watch?v=YGAFaLEoK8M

 

영상 속에서 페이커 선수가 하신 말씀 중 인상깊은 문장을 몇 가지 가져와봤다.

 

1. 실패는 성공의 일부다.
2. 성공을 외적요인보다는 자신의 안에서 정의해라.

 

사실 오픈 미션을 진행하며 너무 어려운 주제를 잡았던 것은 아닌지, 목표한 바를 다 이룰 수 있을지 가끔씩 걱정이 앞서기도 했다. 하지만 위 영상을 보며 마음가짐을 달리 했다.

 

성공은 사실 실패 없이 존재할 수 없다. 크고 작은 실패들이 모여 목표를 이루는 것이다. 꼭 성공해야만 하는가? 그것도 아니다. 목표를 이루기 위해 노력했던 과정 속에서 내가 깨닫고 배운 점이 있다면 그것만으로도 성공일 수 있지 않겠는가? 스스로에게 떳떳할만큼 최선을 다했다면 그것만으로도 뿌듯한 경험이지 않겠는가?

 

어느덧 오픈 미션 마감까지 일주일을 앞두고 있다. 목표는 하나다. 이 시간들을 되돌아보았을 때, "아 그 때 나 진짜 열심히 했는데"라는 생각이 들 수 있도록 끝까지 최선을 다하자. 그것만으로도 미래의 나는 조금은 성장해있을거라 믿는다.