6개월 간의 안드로이드 앱 개발자로서의 이야기
▶ 프롤로그
길다면 길고 짧다면 짧은 6개월간 코빗에서의 다사다난했던 장기현장실습(IPP)이 끝나고,
이직을 준비하는 동안 작성했던 글입니다.
대학생 신분에 회사에서의 개발자로써의 삶이 어떤지 직•간접적으로 느낄 수 있었고, 진로에 대한 고민도 할 수 있는 유의미한 경험이였다고 생각합니다.
그래서 단순히 이런일도 있었구나하고 잊혀지기엔 아쉽기도 하고 업무 환경속에서 생각한 것들, 표현못한 것, 그리고 선배님들의 조언을 정리하는 시간을 가져보고자 이 글을 작성하였습니다.
다소 부족한 면이 있더라도 첫 실무느낌이 이랬구나 정도로 가볍게 생각해주시면 좋을 것 같습니다.
댓글로 조언이나, 잘못된 점 지적도 주시면 겸허히 듣도록 하겠습니다.
해당 글이 프로그래머스 메인 피드로 선정되었습니다. 방문해주셔서 감사의 말씀드립니다.
목차
장기현장실습(IPP) 지원 동기
직종 선택
- ERP 소프트웨어 개발
- 안드로이드 앱 개발
면접 준비
- 자기소개서
- 1분 자기소개
- 포트폴리오
- 질의 준비
학습 과정
- Kotlin
- Android
- 디자인패턴과 Convention
실무 작업
- 안드로이드 앱 유지보수
- 트레이딩 위젯 개발
후기
- 선배님의 조언
- 어려웠던 점
- 종합 후기
에필로그
- 개발자 로드맵
장기현장실습(IPP) 지원 동기
가상화폐 거래소 Korbit에서 안드로이드 개발자로 재직한 기간은 2021년 7월 1일부터 2021년 12월 31일로
6월달에 자소서 작성과 면접을 본 후 6개월간 업무를 맡아왔습니다.
본래 4학년 2학기 수업을 진행해야 하지만 평소 전공수업은 거의 대부분 수강하여 학점은 이미 다 채운상황이였고,
추가로 들을 수업이 거의 없었습니다.
그래서 수업과 과제의 틀에서 벗어나 실무역량을 키우고자 대학에서 진행하는 IPP에 참여하였습니다.
직종 선택
컴퓨터공학을 나오면 다양한 분야를 기초적인 측면에서 만나본 덕분에 나아갈 수 있는 스펙트럼은 넓어지지만 그 만큼 전문가가 되기 위해선 특정 분야에 심도있는 학습은 스스로 해야하는 단점이 있습니다.
먼저, 개발 직종에는 아래와 같은 여러 분야가 있습니다.
- 프론트엔드Frontend
- 백엔드Backend
- 인프라DevOps
- 정보보안ISP
- 게임Game Engineer
- 머신러닝/AI
- 빅데이터분석
분야를 선택하는 방법은 연봉, 전공 연관성, 커리어, 흥미, 워라벨, 사내 분위기, 복지 등이 있는데,
처음에는 연봉과 복지를 보고 ERP(전사적 자원 관리)쪽에 지원했습니다.
▷ ERP 소프트웨어 개발
첫 서류 면접에 합격하였고 면접을 앞둔 상황에서 고민에 빠졌습니다.
ERP 개발의 경우 자사에서 제작한 Maker Tool을 사용하는 경우가 대부분입니다.
연봉과 복지는 매우 좋았지만 사내에서 개발한 스크립트 언어와 GUI기반 툴을 이용하여 만드는 환경탓에 개발자로써의 관련 커리어를 쌓기 힘든점이 있었고, 이는 이직 시에 큰 결점이 될 것이라 생각하였습니다.
(ERP 자격증 취득을 통해 ERP 관리 등의 일을 계속하는 경우도 있다고 합니다.)
그래서 면접 과정에서 원하는 커리어에 대해 말씀드리고 다른 회사를 찾아보기로 했습니다.
▷ 안드로이드 앱 개발
저의 경우 군인 시절 사지방에서 안드로이드에 흥미가 생겨 독학을 했었고 4학년 1학기 팀프로젝트로 Java8 기반의 안드로이드 전자명함 어플리케이션을 제작했던 상황이였습니다.
디자인 패턴부터 Android Jetpack과 필수 라이브러리에 대한 지식이 전무했던 당시, 기초적인 코딩 지식을 가지고 OkHttp, Glide, ViewPager, Recycler Listview, Room 정도를 활용해서 만든 기억이 있는데, 지금 보니 여러모로 미숙한 점이 많은 코드입니다.
위의 것들을 발판삼아 안드로이드 개발자로 진로 방향을 결정하였고, 현재까지도 코인 관련 투자를 진행하고 있기 때문에 관련이 많은 가상화폐 거래소 코빗에 지원하였습니다.
면접 준비
▷ 자기 소개서
학교에서 요구한 IPP 자기소개서의 경우, 일반적인 문서 양식과 사뭇 다릅니다.
그래서 교수님의 첨삭을 받고 회사측에 전달이 되었음에도 생각보다 많은 양에 적잖히 놀라셨던 기억이 납니다.
기본적으로 학교 정보와 수상 내역, 성적을 작성하고 재학하면서 학습했던 내용이나 전공관련 기술들을 서술하는 방식이고, 당시 작성한 기술 스펙으로는 C, Java8, Python3, MySql, HTML, JavaScript(ECMA6), CSS3, Unity 정도로 학교에서 학습한 내용과 토이 프로젝트 관련 내용이였습니다.
▷ 1분 자기소개
1차 서류 합격 후, 1분 자기소개 내용은 컴퓨터 공학부 출신이라는 점과 이 분야에 대해 어떻게 관심을 가졌으며 방향을 꿈꾸고있는지, 그리고 직종과 관련된 관련 경험을 간략하게 넣는 방향으로 준비하였습니다.
안녕하십니까 OO대학교 컴퓨터공학과 4학년 OOO입니다.면접의 기회를 주셔서 고맙습니다.제가 OO에 지원하게 된 이유는 ...
▷ 포트폴리오
면접관님에게 말로 설명하는 것 보단 직접 보여드리는 게 좋을 듯 하여 빠르게 만든 간단한 포트폴리오인데, 처음 작성하다보니 꽤나 아마추어적인 면모가 많아 보이네요.
▷ 질의 준비
면접 질의에 관하여 안드로이드 관련 기초 지식과 회사와 관련된 뉴스 소식들을 찾아보고, 왜 이곳에 지원하였는지, 회사에 들어와서 무엇을 하고 싶은지 정도 준비하였습니다.
저의 경우 기술 면접과 인성 면접을 1시간씩 진행하였습니다.
시간이 지나서 모든 내용이 기억나진 않지만 아래와 같은 질문들을 받았었네요.
- 실력있는 개발자가 되고 싶다 하였는데 실력있는 개발자란 무엇인지?
- MVC 패턴과 MVVM 패턴의 차이점은?
- Observer 패턴이란?
- 오버로딩과 오버라이딩의 차이점은?
- 멀티 프로세싱과 멀티 스레드의 차이는?
- 최근 카카오와 같은 IT회사에서 주간근무시간을 초과하는 일에 대해 어떻게 생각하는지
- 정시 퇴근 후 정말 중요한 약속이 잡혔을 때 팀장님께서 추가업무를 부탁하면 어떻게 대처할지
대부분 기초 지식 위주로 질문이 나왔었고
중간에 대답을 제대로 하지 못했을 땐, 지금은 모르는 부분을 인정하고 배워 오겠단 의지를 나타내 넘어갔었습니다.
학습 과정
▷ 먼저 Kotlin을 이용해서 개발해야하니 언어에 대해 이해하자
안드로이드 앱의 경우 MVVM 패턴의 Kotlin 언어기반으로 제작되어 있었고, 저의 경우 아래처럼 Kotlin Document 레퍼런스 문서를 보며 학습하였습니다.
눈으로만 보는 것 보단 https://play.kotlinlang.org 에서 간단한 코드를 작성하거나 intellij 또는 Android studio에서 Scratch file을 생성하여 코드를 작성해가며 연습한 것이 도움이 되었습니다.
또한 주로 Java와 비교하며 학습하였는데, 이는 공통적으로 바이트코드로 변환된 후 가상머신 위에서 돌아간다는 점과 객체지향 언어와 함수형 언어라는 큰 차이점을 갖고 있기 때문입니다.
아래는 Kotlin의 주요 특징들을 생각나는대로 적은 것인데, 경험담만 듣고 싶은 분은 넘기시면 됩니다.
최신 안드로이드에 사용되는 ART의 경우 JVM & DVM에서 사용하는 JIT(Just-In-Time)방식이 아닌 앱 설치 시 AOT(Ahead-Of-Time) 컴파일 과정이 추가되어 기계어로 미리 번역되어 저장 후 호출하기 때문에 속도가 보장됩니다.
여담으로 어떤 글에서 자바와 코틀린의 차이점에 Garbage Collector, 멀티스레드, 동적로딩 등이 들어간 것을 보았는데 이 부분은 두 언어 모두 구현이 가능하며 실질적으로 가상머신에서 지원하는 기능들 이므로 차이점으로 보기는 힘듭니다.
- Kotlin에 추가된 개념
- Nullable
- Nullable 타입을 지정할 수 있으며 NPE 예외를 컴파일 시점에 방지할 수 있습니다.
- Java의 경우 Null Check를 if문으로 구현하거나 Wrapper 객체인 Optional 을 이용하여 예외처리가 가능합니다.
- First-Class Citizen일급객체 & High Order Function고차함수
- 변수에 함수를 할당 할 수 있습니다.
- 함수를 다른 함수에 인자로 전달 할 수 있습니다.
- 함수를 다른 함수에 Return 값으로 전달 할 수 있습니다.
- Nullable
고차함수는 함수나 람다식을 인자로 받거나 함수를 반환하는 함수를 의미합니다.
-
- 제네릭Generic과 와일드카드Wildcard 선언
- Java에서 WildCard 선언 시 특정 클래스나 상위 클래스, 하위 클래스라는 제약을 해당 클래스나 메소드를 사용하는 위치에서 "<? extends SuperClass>" 또는 "<? super ChildClass>"로 선언하며 제네릭 클래스를 사용하는 시점에 선언하는 Use-site Variance을 사용
- Kotlin의 경우 공변성Covariance, 반공변성Contravariance 을 사용될 클래스나 인터페이스에 "<out T>", "<in T>" 로 선언 후 사용하는 곳에서 제네릭 타입을 선언하는 Declaration-site Variance과 클래스에는 T인자를 넘겨받지만 제네릭을 넘길 때 "<out Number>"과 같이 타입을 넘겨주는 Use-site VarianceType projection 방식이 있습니다.
- Type Eraser: 자바와 마찬가지로 제네릭 유형은 컴파일 시에만 유지되고 지워집니다. 따라서 자바에선 Class<T>객체로 전달해야하지만 코틀린에선 inline과 reified 키워드를 사용하여 객체 T를 전달 받을 수 있습니다.
- 제네릭Generic과 와일드카드Wildcard 선언
-
// Declaration-Site Variance interface WriteOnly<in T> { fun addItem(item: T) fun addAll(list: List<T>) } // Use-Site Variance (type projections) fun copy(from: Array<out Any>, to: Array<Any>) { ... }
- Lazy evaluation느긋한 계산법
- Eager evaluation조급한 계산법 과 반대로 연산이 필요한 순간에 연산을 진행합니다.
- Java의 경우 Functional 함수들을 사용하여 구현
- Kotlin은 Sequence 객체를 사용하여 스트림 형식으로 구현
- Extension Function
- 확장함수의 개념은 Java의 static의 개념과 비슷하나, 명백히 클래스의 밖에 선언되므로 Overriding오버라이딩이 불가능합니다.
- Lazy evaluation느긋한 계산법
-
// In Kotlin fun Music.stop() = println("stop music") // Same as public class ExtensionUtils { public static void stop(Music music) { System.out.println("stop music") } }
- it, this 키워드
- Kotlin에는 Receiver수신자 또는 해당 클래스를 this로 선언할 수 있고, 람다식 내에서 it을 사용하여 파라미터를 사용할 수 있습니다.
- Scope Function
- Label
- it, this 키워드
참고로 순서지향, 객체지향, 함수형 언어 등은 서로 배타적인 개념이 아닌 서로 섞일 수 있는 개념으로, 위의 차이점이 순수 객체지향과 함수형 언어의 차이점이라고 볼 수는 없습니다.
각 언어 패러다임별 차이: 나무위키(프로그래밍 언어)
▷ Android 앱을 개발하려면 Android OS에 대해 이해해야지
안드로이드 학습은 '개발하는 정대리' 채널 영상을 통해 학습하니 배우는 속도도 빠르고 궁금한 부분만 구글링으로 찾아보면 되서 좋은면이 있었습니다. (Jetpack 관련 내용은 빠져있어 ViewBinding, ViewModel, LifeCycleOwner, Observe 등의 내용은 다른 영상을 통해 학습하셔야 합니다.)
또한 어떠한 플랫폼 앱을 개발하기에 있어 컴포넌트를 효율적으로 활용하여 개발하는 것도 중요하지만, OS 자체의 특성을 이해할 필요가 있습니다.
예를 들어 안드로이드의 경우, 앱을 실행하면 Application 클래스를 먼저 인스턴스화하여 어플리케이션을 초기화 한 후 Activity 및 Fragment Class를 인스턴스화 하여 UI를 표현합니다.
이 때, Activity 또는 Fragment는 LifeCycle을 부여받으며 생명주기에 따라 앱을 관리할 필요성이 있어 아래의 그림은 필수로 알아야 하는 요소입니다.
저의 경우 팀장님께서 기초를 매우 강조하셔서 필기하며 학습했었습니다.
아래 Jetpack과 같은 공식 레퍼런스에서 권유하는 트렌드 라이브러리에 대해서도 학습하는 것도 좋은 방법입니다.
해당 라이브러리의 주요내용은 Android 아키텍처 구성요소에서 확인할 수 있습니다.
추가적으로 아래와 같은 라이브러리가 필요하여 따로 학습하였습니다.
- KoinDependency Injection
- Gsonserialization/deserialization
- Retrofit2 & OkHttp3network
- GladeImage
- LottieAnimation
- RoomObject Relational Mapping
- MP ChartChart Graph
- FlowData Stream
▷ 좋은 코드란? 개발팀에 소속하려면 알아야하는 디자인패턴과 Convention
디자인패턴은 코드의 구조를 직관적으로 만들어 유지보수를 용이하게 만들고, 코드의 재사용이 훨씬 용이하며, 팀원과의 의사소통을 원활히 만들어 줍니다.
패키지 구조는 어떻게 짤 것인지, 각 레이어가 하는 역할을 신경쓰며 코드를 작성하는 것! 중요합니다.
Code Convention 역시 코드작성에 관한 약속이므로 지켜주는 것이 좋습니다. 만약 사람마다 코드마다 띄어쓰기라던지 Camel Case같이 표기법이 다르면 굉장히 지저분한 코드를 마주치게 될 것 입니다.
실무 작업
▷ 주요 업무내용
- 가상화폐 거래소 어플리케이션 유지보수
- 가상화폐 차트(즐겨찾기, 시세, 보유코인) 위젯 및 가이드라인 페이지 제작
- Jira를 통한 Issue Report
- Bug Fix & Pull Request
- KYCKnow Your Customer 영문 번역
- Gradle & Python 을 통한 String 리소스 번역 자동화 작업
▷ Android App 유지보수
기업에서 운영하는 앱의 경우 기획, 디자인, 개발, DevOps에 의한 CI/CD, QA 등을 거쳐 계획적으로 만들어졌단 느낌을 받았습니다.
그 중 앱의 유지보수는 Jira라는 협업 관리툴을 통해 앱의 Issue를 전달하고 코드를 수정하는 과정을 거칩니다.
소스코드를 Fix하거나 새로운 Function을 추가하는 과정에서 분업을하게 되는데 서로의 소스코드가 잘못 엮이거나 버그가 발생하여 롤백이 필요한 상황 등을 방지하기 위해 GitHub를 통한 버전관리는 가히 필수적이라고 할 수 있습니다.
명령어를 알고 있는 것도 중요하지만 이것을 어떤 과정에서 사용해야하는지 이해하는데 있어 Git-Flow에 대한 학습이 도움이 되었습니다.
인용자료: https://techblog.woowahan.com/2553/
아래는 제가 코드를 수정할 때 주로 사용하던 패턴입니다.
- Release, Develop 브랜치가 있는 상태에서 새로운 기능 추가나 버그 픽스 과정 예시
1. Develop 브랜치에서 Feature 브랜치를 생성
2. 코드 작업 진행
Develop 브랜치의 변경된 소스코드를 불러오려면 git pull
히스토리 제거작업이 일어났을 경우 git pull --rebase 또는 git fetch 후 git rebase origin/develop 진행
3. 기업의 Convention에 따른 메모추가와 함께 Commit
4. Push 및 Pull Request(관련 Jira 이슈 페이지 링크와 함께 Merge 가능 여부 태그 추가)
5. Jira Issue의 작업 상태 변경
6. Develop 브랜치에 Feature 브랜치를 Merge
7. QA테스트 및 릴리즈 준비가 되면 Release 브랜치에 Develop 브랜치를 Merge
▷ 트레이딩 위젯 개발
국내 1위인 업비트를 제외하면 빗썸, 코인원 그리고 세계 1위 바이낸스까지 자체 위젯 서비스를 제공하고 있습니다.
하지만 코빗의 경우, 위젯 서비스를 제공하지 않았고 이 기능을 추가하기 위해 11월달 부터 12월 릴리즈를 목표로 기획, 디자인, 개발자를 각 1명씩 모아 TFTask Force팀을 구성하였습니다.
매주 1회 이상의 회의를 통해 타사 서비스의 위와 같은 문제점들을 발견하여 어떻게 하면 편의중심의 위젯을 만들 수 있을지 생각하였고, 그 결과 아래와 같은 기능들을 생각하였습니다.
- 30분 간격으로 자동 업데이트 (수동 업데이트 버튼도 함께 추가)
- 절전 상태에서도 업데이트가 가능하도록 서비스 구현
- 업데이트 시간 출력
- 위젯 크기 변경 기능
- 업데이트 중 Progress Bar 표시
- 라이트 모드와 다크 모드 지원
- 네트워크 오류 및 로그인 요구 문구 출력
- 각 코인 리스트 클릭 시 해당 트레이딩 뷰 액티비티 실행
이에 기획팀에서 제작한 와이어프레임을 기반으로 디자인팀에서 도안을 전달받았고 11월 말에 개발에 착수했습니다.
그런데 BigDecimal을 통한 숫자 데이터 결합방법이나, Observer 패턴과 Flow, Retrofit 등의 실사용 경험이 부족한 탓에, 프로토타입으로 만든 위젯의 결과는 겉모습은 그럴싸해 보여도 숫자가 일부 안뜨거나 리스트 출력에 3~5초 정도의 시간이 걸리기도 했던 것 입니다.
그래서 주변 선배님들에게 API관련 코드에 대해 질문도 여럿하고, 금융서비스 특성 상 연산 관련 클래스가 몇십개에 달하기에 꽤나 애먹으며 어떻게하면 속도를 높힐 수 있는지 자주 물어보았습니다.
그리고 조금 번거롭더라도 중간중간 코드 리펙토링을 강행하였고, 최대한 Flow를 활용하여 Observal 패턴 중심으로 구현한 결과 로드시간을 획기적으로 감축하였고, 현재는 1초 내외로 불러오는 모습을 볼 수 있습니다.
후기
▷ 선배님의 조언
책을 많이 읽으라 그리고 먼저 나서서 능동적으로 배우는 자세를 강조하셨습니다.
책을 통해 이해할 수 있는 가치관과 타인과의 의사소통 능력, 그리고 생각의 폭이 넓어지기 때문이라고 생각이 들었습니다. 그런데 막상 어떤 책이 좋은지 몰라 여쭈어보니 어떤 책이든 상관없으시다고 말씀해 주셨습니다.
또 나머지, 능동적으로 배우는 자세를 강조하셨는데 이것은 제가 어려움에 부딪혔을 때, 혼자서 해결하려 했던 점과 개인적으로 소통이 다소 부족하여 아쉬워하셨습니다.
모르는 것을 전혀 창피한 것이 아니고, 의사소통을 통해 더 좋은 개발자로 발돋움 할 수 있단 것을 알았습니다.
▷ 어려웠던 점
- 생소한 업무용어 (Tip. 신입사원이 알아야 할 업무 용어)
'Custody팀', 'HR/GA 팀', 'CC', 'TFT', 'OT', '온콜', '컨펌', '리갈이슈' 같은 기본적인 업무 용어와
'CI/CD', 'uat 서버', 'prod 서버', '미들웨어', 'Git-Flow' 등 IT용어들이 점심시간만 되면 처음 듣는 생소한 용어가 자주들려 여럿 여쭈었던 기억이 있습니다.
혹시라도 회의 중에 모르는 용어라도 나와 당황하진 않을까 까먹을 때마다 찾아봤습니다.
- 자주 변경되는 기획과 디자인
기획과 디자인이 한번에 결정되어 개발에만 신경쓸 수 있다면 업무 효율에 많은 도움이 될 것 입니다.
제가 진행한 프로젝트의 경우, 새로 추가하는 작업인 점과 각 팀장님, 디자인팀의 의견이 다르다보니 대략 위젯 하나당 십여회 정도의 수정이 존재하였습니다. 그에 따라 소스 추가와 삭제가 진행되었고, 정리를 진행하였음에도 실수로 Dead Code가 남아있거나 제거한 소스를 다시 제작해야 하는 일 등이 발생하였습니다.
이럴 때 팀장님께서 해주신 말씀이 휩쓸리지 않아야 한다는 것이였네요. 인턴인 상황이라 거절하기 다소 힘든감이 있겠지만 가능한 것과 불가능 한 것 의사를 명백히 전달해야할 필요를 느꼈습니다.
▷ 종합 후기
어찌보면 대학에서 배운 4년보다 알차게 보내지 않았나하는 생각이 들었습니다. 동료분께서도 대학다니며 코드랩 백번하는 것 보다 실무 한번 하는 것이 얻는 것이 많다는 말씀도 하셨는데 저는 공감이 되었습니다.
소스코드만으로 따지자면 학교에서는 과제 마감기한에 쫒겨 제출하기 급급하였고, 주로 개인 프로젝트라 팀원과의 소통을 해볼 기회는 많지 않았기에 추후 유지보수는 신경쓰지 않은 스파게티 코드spaghetti code 가 일상이였습니다.
반면 회사에서는 공동 작업을 통해 계속해서 개발할 수 있도록 Convention 이 명확하게 정의되어 있고, 디자인 패턴을 적극 활용하며 매번 PR시 코드리뷰를 진행하는 등의 노력을 하는 등 철저히 관리받는 환경이 구비되어 있습니다. 본인이 작성한 코드를 본인만 보는 것이 아니니 열심히 최대한 깔끔하게 작성하려고 노력하게 되었단 생각이 듭니다.
또한 기획과 디자인도 개발자와 별개인 영역이 아닌 서로 의논해야 하며, Back-end, QA 팀 등 각 파트간의 대화를 통해 프로젝트를 진행해 나아가는 등 우물안 개구리에서 벗어나 더 넓은 시야를 볼 수 있었습니다.
음.. 이제 새로운 직장을 찾아보아야하는데 들었던 이야기 중에 기억남는게 "면접 볼 때 반응이 좋았던 곳은 오히려 떨어지고 대답하기 어려운 질문을 던지는 곳에 잘 붙었다. 오히려 상대가 관심을 갖고 더 어려운 질문을 던지는 것이다"
생각해보니 그럴싸하단 생각이 들었습니다. 어려운 질문이 나오는게 떨어뜨리려고 하는 질문이 아니란거.. 신박하네요 ㅋㅋ
그리고 가장 중요한 건.. 기초지식을 그 때 면접보셨던 팀장님이 강조하셨는데, "가끔 영어도 중요하다 생각해서 토익, 토플, 자격증 들고오는 사람들이 있는데 결국 기초지식이 빠삭한 사람, 코딩 잘하는 사람이 아니면 뽑질 않는다" 였네요. 회사에서도 개발할 때 크롬 번역기 많이 사용한단 것도 알았습니다. 물론 똑같은 실력이라면 영어까지 잘하는 사람을 뽑긴 하겠지만요.
에필로그
▷ 개발자 로드맵
개발자를 꿈꾸는 분들이라면 무얼 공부해야하지? 란 생각은 한번 쯤 해보셨을 거라 생각합니다.
저 역시도 그렇고 대학가면 다 알려주지 않을까 생각했었는데 지금보니 조금 어리석은 생각이 아니였을까 의심이 됩니다 ㅎㅎ
저와 같은 고민을 했던 분들은 아래 사이트의 로드맵을 보는 것을 추천드립니다.
https://github.com/kamranahmedse/developer-roadmap
위에서는 안드로이드 로드맵만 가져왔지만 링크에 들어가시면 번역본과 함께 FrontEnd, BackEnd, DevOps, Go, Web 등 다양한 로드맵이 나열되어 있습니다.
처음엔 다소 힘들 수 있어도 천천히 따라가다보면 언젠간 쉽게 따라갈 수 있을 것이란 생각이 듭니다.
저 역시도 모르는 부분이 많아 당분간은 위의 로드맵에 따라 학습을 계속하면서 취업 준비를 해 나아갈 생각입니다.
2022년 새해에는 꼭 취업할 수 있길바라며
화이팅!
2022.05.04 추가
스타트업에 취직한지 한 달이 지나 블로그를 새로 이전하여 글을 다시 업로드 하였습니다.
갑자기 조회수가 올라가서 무슨일이지 했는데 프로그래머스에 제 글이 상단배너로 뜬 걸 보았고, 한 동안 기분이 들떠있었네요 ㅎㅎ
아마 이 글을 보는 분들은 그 만큼 개발에 관심이 많다는 뜻이니 잘 해내실 수 있을 것이라고 생각합니다.
부족한 글이나마 도움이 되셨으면 좋겠습니다.
감사합니다.
- 참조
ⓒ 2021. daryeou@gmail.com all rights reserved.
'회고록' 카테고리의 다른 글
길고 길었던 2년간의 투자 아니.. 투기, 그리고 끝 (2) | 2023.09.02 |
---|---|
[안드로이드] 컴포즈 모각코 캠핑지기 2주차 (with Zepeto) (2) | 2022.11.19 |
댓글