SlideShare a Scribd company logo
개발자, 성장하는 ‘척’ 말고,
진짜 성장하기.
Server Developer
IMPACT-CONNECT SEMINAR
2
0
2
3
발표자 소개
- 초등학교3학년,플래시게임을만들고싶어프로그래밍세계에입문
- 중학교3학년,개발한웹서비스가동시접속자900명가량을달성
그때의두근거림을항상느끼고싶어웹개발자가되기로결심
- 대학휴학후우아한테크코스교육과정에1년간참여
- 수료이후토스뱅크ServerDeveloper포지션으로즐겁게근무중
IMPACT-CONNECT SEMINAR
2
0
2
3
조동현 (Server Developer)
IMPACT-CONNECT SEMINAR
2
0
2
3
어떻게 하면 ‘진짜’ 성장할 수 있을까?
⚠️ 주의! 기술적인 내용은 모두 예시이며, 이해하지 못해도 괜찮아요.
IMPACT-CONNECT SEMINAR
2
0
2
3
문제해결능력
좋은 개발자의 필수요소
성장이란 맥락에서 이 둘은 독립적으로 존재할 수 없으며, 상호보완적인 관계이다
IMPACT-CONNECT SEMINAR
2
0
2
3
경험과 지식
문제해결능력
IMPACT-CONNECT SEMINAR
2
0
2
3
경험과 지식
문제해결능력
* 사진출처: https://ko.wikipedia.org/wiki/%EA%B3%A8%EB%93%A0%EA%B2%8C%EC%9D%B4%ED%8A%B8_%EA%B5%90
경험
지식
성장
IMPACT-CONNECT SEMINAR
2
0
2
3
경험은 무엇이고, 지식은 무엇일까?
문제해결능력
• 경험: 프로젝트를진행하며,실제문제를해결하는과정을통해얻는노하우와능력
- 소프트웨어 코드 작성
- 서버 아키텍처 설계
- 트러블 슈팅
- 안정적인 서비스 운영 경험
• 지식: 책, 강의 등에서 습득한 이론적인 내용
- 프로그래밍 언어
- 프레임워크 & 라이브러리
- 운영체제, 네트워크, 데이터베이스
- 자료구조, 알고리즘
IMPACT-CONNECT SEMINAR
2
0
2
3
• 경험만 있다면
- 자주 경험해본 특정 패턴은 쉽게 해결하겠지만, 새롭고 복잡한 문제를 풀기 어렵다.
- 문제 발생 시 더 근본적인 원인에 접근하기 어려워, 표면적인 부분만 해결하고 넘어가기 쉽다.
• 지식만 있다면
- 이론적인 내용만 알고 있어, 실제 문제를 해결해본 경험이 없다. 즉, 실상황에서의 응용이 어렵다.
• 경험과 지식의 시너지
- 지식은 기반을 제공하지만, 실제 상황의 문제를 해결할 수 있는 능력은 경험으로부터 온다.
-경험을통해이론만알고있던지식을응용하거나,새로운문제를마주하며부족한지식이무엇인지깨닫는다.
- 지식을 통해 더 복잡하고 새로운 문제를 해결하는 경험을 쌓아나간다.
경험과 지식의 시너지
문제해결능력
IMPACT-CONNECT SEMINAR
2
0
2
3
야생학습과 학교학습
문제해결능력
* 사진출처2: https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%99
* 사진출처1: https://ko.wikipedia.org/wiki/%EC%97%B4%EB%8C%80_%EC%9A%B0%EB%A6%BC
IMPACT-CONNECT SEMINAR
2
0
2
3
야생학습과 학교학습
문제해결능력
- 야생 학습은 대부분 협력적이다 (학교 학습은 대부분 개별적이다).
- 야생 학습은 대부분 비순차적이다 (학교 학습은 대부분 공부 순서가 정해져 있다).
- 야생 학습은 대부분 자료에 한정이 없다 (학교 학습은 대부분 교과서, 교재, 시험 범위 등이 정해져 있다).
- 야생 학습은 대부분 명확한 평가가 없다 (학교 학습은 대부분 시험이라는 명확한 평가기준이 있다).
- 야생 학습 대부분 정답이 없다 (학교 학습은 무엇이 정답이라고 하는 것이 명확 하다).
- 야생 학습은 목표가 불분명하고 바뀌기도 한다 (학교 학습은 대부분 합격, 자격증 같은 목표가 분명하다).
김창준, 함께 자라기 (인사이트, 2018), 12p.
IMPACT-CONNECT SEMINAR
2
0
2
3
• 프로그래머는 목표가 끊임없이 바뀌는 문제를 다룬다.
비즈니스 상황에 따라 어제의 좋았던 선택이, 오늘의 나쁜 선택이 될 수 있다.
• 프로그래머는 정답이 없는 문제를 다룬다.
Trade-Off* 만 있을 뿐이다.
• 프로그래머는 항상 새롭고 복잡한 문제를 다룬다.
우리는 모두 다른 도메인*, 레거시 코드, 리소스, 마감기한에 처해있다.
• 누군가 제시한 길을 그대로 걷기보다 (학교학습),
스스로 문제를 정의하고, 자료를 찾고, 고민하고, 결정할 수 있어야 한다 (야생학습).
야생학습과 학교학습
문제해결능력
* 도메인: 소프트웨어로 해결하고자 하는 비즈니스 영역. 예를 들어 토스의 도메인은 금융이다.
* Trade-Off: 어느 한편을 늘리면 다른 한편은 그 만큼 줄어드는 것을 이르는 말
IMPACT-CONNECT SEMINAR
2
0
2
3
• IT 산업의 변화는 너무나도 빠르다.
• 프로그래밍 언어, 프레임워크는 유행을 따르는 도구일 뿐이다.
• 더 깊은 곳에 있는 기반 지식에 집중하자.
주의! 도구와 사랑에 빠지지 마시오
문제해결능력
10년이면 강산도 변한다고 합니다. IT 산업에서 10년은 너무나 유구한 시간입니다. 5년, 혹은 그보다 짧은 기간 안에 IT 산업은 크게 변모합
니다. … 세상이 빨리 변하므로 개발자는 유행보다는 기본 지식을 쌓는 데 투자해야 합니다. 제 첫 프로그래밍 언어는 베이식입니다. 첫 상용
프로그램을 코볼로 짰습니다. 아르바이트를 할 때는 포트란을 사용했습니다. IT 30년 내내 줄곧 쓰는 언어는 없습니다. 프로그래밍 언어는
유행을 따르는 도구일 뿐입니다. 그래서 빠르게 새로운 걸 터득하는 능력과 기반 지식이 중요합니다.
박종천, 개발자로 살아남기 (Golden Rabbit , 2022), 30~31p.
IMPACT-CONNECT SEMINAR
2
0
2
3
기반지식이란 무엇일까?
문제해결능력
* 사진출처: https://www.pickpik.com/equipment-outdoors-dirt-dig-farming-garden-55431
IMPACT-CONNECT SEMINAR
2
0
2
3
기반지식이란 무엇일까?
문제해결능력
• 쉽게 변하지 않는 것들, Fundamental
언어, 프레임워크가 건축물이라면, 기반지식은 땅과 같다.
• 애플리케이션이 동작하는 환경
- 우리가 만든 애플리케이션은 운영체제 위에서 동작한다.
- 애플리케이션은 데이터를 생산하는데, 그 데이터는 데이터베이스에 저장된다.
- 데이터는 네트워크를 통해 전송된다.
• 애플리케이션을 만들기 위한 철학
- 프로그래밍 패러다임 (객체지향, 함수형 프로그래밍)
- 가독성, 유지보수성, 확장성
- 디자인/아키텍처 패턴
IMPACT-CONNECT SEMINAR
2
0
2
3
사이드 프로젝트로 경험 쌓기
의도적인 오버 엔지니어링을 통한 깊은 수준의 경험
IMPACT-CONNECT SEMINAR
2
0
2
3
왜, 사이드 프로젝트?
사이드 프로젝트로 경험 쌓기
* 자료출처: https://www.educationcorner.com/the-learning-pyramid.html
수동적 학습
능동적 학습
IMPACT-CONNECT SEMINAR
2
0
2
3
• 사이드 프로젝트를 시작하면, 자연스럽게 모르는 부분이나 막히는 부분이 등장한다.
• 이미 해결할 문제가 있다면, 그 자체로 학습에 대한 동기가 자연히 생기게 된다.
• 동기가 부여된 상태에서 높은 학습 효율으로 더욱 적극적으로 지식을 습득할 수 있다.
왜, 사이드 프로젝트?
사이드 프로젝트로 경험 쌓기
그래서 튜토리얼을 읽다가도 이 정도면 그 프로그램을 작성할 수 있겠다는 생각이 들면 그 자리에서 읽기를 멈추고 코딩을 시작합니다. 프로
그램을 완성하면 잠시 멈췄던 자리로 돌아와서 읽기를 계속합니다. 이때에는 다음 프로그램을 목표로 두면서 말이죠. 이런 것을 적극적 읽기
라고 합니다. 무언가를 읽을 때 구체적인 질문이나 목적을 가지고 있는 방법을 말합니다.
김창준, 함께 자라기 (인사이트, 2018), 83p.
IMPACT-CONNECT SEMINAR
2
0
2
3
의도적인 오버 엔지니어링
사이드 프로젝트로 경험 쌓기
* 사진출처: https://betterprogramming.pub/overengineering-why-we-do-it-and-10-ways-to-tackle-it-460663d35ff3
IMPACT-CONNECT SEMINAR
2
0
2
3
• 개발자 지망생은 아직 현업 경험이 없다.
하지만, 기업은 현업의 문제를 해결할 수 있는 문제 해결능력이 높은 개발자를 원한다.
• 사이드 프로젝트가 실제 유저가 많은 빅테크의 제품이라고 가정해보자.
100명이 사용하는 서비스와 1000만명이 사용하는 서비스는
문제의 다양성, 규모, 깊이 측면에서 큰 차이가 있다.
• 의도적으로 현재보다 과한 문제 상황을 가정하고, 해결하자.
간접적으로 현업에서 겪고 있는 문제를 체험할 수 있는 좋은 방법이다.
의도적인 오버 엔지니어링
사이드 프로젝트로 경험 쌓기
* 오버 엔지니어링: 현재 필요한 것 보다 더 과하게 설계하는 행위
IMPACT-CONNECT SEMINAR
2
0
2
3
• 한정 수량이 100개인데, 동시에 요청이 들어와 101개가 팔려버리면 어쩌지?
DB, 애플리케이션, 혹은 분산 아키텍처 수준의 Lock을 사용한다.
• 거대한 트래픽이 한번에 들어올텐데, 견딜 수 있을까?
부하 테스트를 통해 서비스가 견딜 수 있는 트래픽 수준을 측정하고,
코드 성능 최적화, WAS 및 쿼리 튜닝, 캐싱 등을 사용해 전체적인 성능 수준을 높인다.
• 큰 트래픽은 일정 시간대만 짧게 발생할텐데, 고성능 서버를 항상 돌리기 아까워!
Scale Out과 Auto Scaling을 통해 리소스를 유연하게 사용한다.
의도적인 오버 엔지니어링: 선착순 공연 티켓 판매 시스템
사이드 프로젝트로 경험 쌓기
* 위 내용은 의도적 오버 엔지니어링의 예시이며, 이해가지 않아도 괜찮습니다.
IMPACT-CONNECT SEMINAR
2
0
2
3
• 사용할 모든 기술에 대해 완벽한 학습을 끝내고 시작하려고 하지 말자.
완벽한 학습이란 허상이다. 지금 바로 시작하자.
• Learning By Doing, 사이드 프로젝트를 통한 경험과 지식 잇기.
사이드 프로젝트를 통해 스스로가 부족했던 지식을 깨닫게 되고,
원래 알고 있던 지식을 통해 더 깊이 있는 문제를 해결하게 될 것이다.
• 완벽한 서비스를 만드는데 집착하지 말자.
MVP* 수준이어도 좋다. 하나의 기능이라도 수준 높은 기술적 고민이 있었다면 말이다.
완벽하지 않아도 괜찮아
사이드 프로젝트로 경험 쌓기
* MVP: Minimum Viable Product, 최소 기능 제품
IMPACT-CONNECT SEMINAR
2
0
2
3
• 그냥저냥 동작하기만 하는 애플리케이션으로 만족해선 안된다.
프로젝트를 완성했다는 사실 그 자체로는 크게 매력적인 경험이 될 수 없다.
많은 기능을 구현한 프로젝트 경험이 항상 좋은 프로젝트 경험은 아니다.
• 기능 구현 그 자체에 목표를 두지 말고, 지금이 최선인지 치열하게 의심해보자.
지금 작성한 코드가, 구조가, 성능이 과연 최선일까? 더 좋게 만들 방법은 없을까?
• 모든 코드와 설계는 합리적인 근거를 기반으로 만들어져야 한다.
‘그냥’, ‘좋아 보여서’, ‘많이들 쓰니까’ 라는 건 없다.
내가 작성한 코드, 설계의 근거를 동료에게 자신있게 설명할 수 있을 수준으로.
치열한 고민을 하고 있나요?
사이드 프로젝트로 경험 쌓기
IMPACT-CONNECT SEMINAR
2
0
2
3
기록으로 지식 쌓기
복리적 성장, 메타인지
IMPACT-CONNECT SEMINAR
2
0
2
3
인출하는 학습
기록으로 지식 쌓기
* 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology
IMPACT-CONNECT SEMINAR
2
0
2
3
인출하는 학습
기록으로 지식 쌓기
* 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology
요약하기
강조하기
키워드 암기하기
심상 만들기
다시 읽기
IMPACT-CONNECT SEMINAR
2
0
2
3
인출하는 학습
기록으로 지식 쌓기
* 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology
연습 시험보기
나눠서 연습
여러 문제를 섞어 연습
정교화 질문
스스로 설명하기
Input
( )
IMPACT-CONNECT SEMINAR
2
0
2
3
인출하는 학습
기록으로 지식 쌓기
요약하기
강조하기
키워드 암기하기
심상 만들기
다시 읽기
여러문제를 섞어 연습
연습 시험보기
나눠서 연습
정교화 질문
스스로 설명하기
학습의 완성은 지식을 머리 속으로 입력하는 것이 아닌, 밖으로 인출하는 것에 있다
Output
( )
👍
☹️
IMPACT-CONNECT SEMINAR
2
0
2
3
• 배운 것, 고민한 것, 해결한 것을 꾸준히 기록하자
• 되도록이면, 다른 모든 사람들이 볼 수 있는 곳에 기록을 공개하자 (=블로그)
혼자만 보는 공간에 기록해도 좋지만, 공개된 곳에 기록을 공개하는 것이
남들이 본다는 부담감으로 더 정확하고 깊이있는 내용을 학습할 수 있게 해준다.
• 모르는 사람을 가르치는 것 처럼, 자세하고 깊게 기록하자 (메타인지)
앞선 자료에서 알 수 있었듯 타인을 가르치는 것이 가장 효과적인 학습 방법이다.
초심자가 여러분들의 게시글을 본다고 생각하며, 친절한 선생님의 마음으로.
기록 과정에서 스스로가 잘 이해하지 못한 부분을 깨우칠 수 있다. 이 과정에서 메타인지가 상승된다.
• 과거의 기록물을 통해 누적적으로 성장하자
인간은 망각의 동물이다. 잊은 지식을 되찾는 시간을 아껴보자.
기록과 메타인지
기록으로 지식 쌓기
IMPACT-CONNECT SEMINAR
2
0
2
3
3 Depth로 고민하자
기록으로 지식 쌓기
WHAT? WHY? HOW? X 3
IMPACT-CONNECT SEMINAR
2
0
2
3
• WHAT: 내가 마주한 개념이 ‘정확히’ 무엇인지?
‘그냥’ 학습하지 말고, 등장한 모든 개념에 대해 ‘정의’를 정확히 알고 넘어가자.
• WHY: 이기술은왜등장한것인지,내프로젝트의어떤문제를해결하기위해필요한지?
모든 기술은 어떠한 문제를 해결하기 위해 등장했다. 그 등장 배경을 알아보는 것도 좋다.
• HOW: 이 기술은 내부적으로 어떻게 동작하는 것 인지?
기술의 내부 동작 원리를 깊게 이해해야, 문제가 발생했을 때 더 능숙히 대처할 수 있다.
• WHAT?WHY?HOW?를스스로에게3Depth로질문을던지자
3 Depth로 고민하자
기록으로 지식 쌓기
3 Depth로 고민하자: 가상 면접으로 감잡기
기록으로 지식 쌓기
로그인 기능을 만드셨네요. 어떻게 만드셨나요?
면접관
세션을 사용한 방식으로 구현했습니다.
지원자
어떻게 해결하나요?
면접관
Sticky Session을 사용하거나, 세션 클러스터링을 사용하거나,
Redis 등을 사용해서 세션 저장소를 별도로 둘 것 같습니다
지원자
음.. 세션 저장소간 동기화가 되지 않아 정합성 이슈가 발생할 것 같습니다.
지원자
지금 프로젝트가 분산환경이 아닌데,
애플리케이션 서버를 Scale-Out 하면 어떤 문제가 생길까요?
면접관
괜찮은 방법이네요. 그런데 스티키 세션은 로드밸런서에 부담이 되고,
세션 클러스터링은 클러스터 과정 자체에서 오버헤드가 클 것 같네요.
타이밍에 따라 정합성 이슈가 그대로 존재할 것 같기도 하고요.
세션 저장소를 별도로 두는 방법은 세션 저장소가 SPOF가 될 것 같네요.
이런 부분을 개선하려면 어떻게 해야할까요?
면접관
Stateless 한 방법으로 해결할 것 같습니다.
지원자
* SPOF: Single Point of Failure, 단일 장애점
3 Depth로 고민하자: 가상 면접으로 감잡기
기록으로 지식 쌓기
자세히 설명해주세요.
면접관
JWT와 같은 토큰을 사용하는 것은 어떨까요?
지원자
앞서 이야기한 문제는 해결될 것 같네요.
말씀해주신 무상태 토큰 방식은 그렇다면 문제가 없나요?
면접관
많은 문제가 있겠지만, 탈취 시 치명적 문제가 발생할 것 같습니다.
지원자
어떻게 해결하나요?
면접관
리프레시 토큰을 도입하고, 액세스 토큰의 만료기한을 짧게 유지하면 어떨까요?
지원자
리프레시 토큰을 탈취당할수도 있지 않나요?
면접관
3 Depth로 고민하자: 가상 면접으로 감잡기
기록으로 지식 쌓기
IMPACT-CONNECT SEMINAR
2
0
2
3
나만의 분야 찾기
천천히, 느긋하게
IMPACT-CONNECT SEMINAR
2
0
2
3
• 프로그래밍에도 분야가 굉장히 많다.
웹 프론트엔드/백엔드, 앱 iOS/안드로이드, 임베디드, 윈도우 프로그래밍, 게임 프로그래밍 …
• 조급하지 말고 느긋하게, 끌리는 것 부터 시도해보자.
좋은 음식이 가득한 뷔페에 온 것 처럼, 여유롭게.
• 대단한 걸 만들지 않아도 된다.
튜토리얼 수준이어도 괜찮으니, 동작하는 아주 작은 프로그램을 만들어보자.
• 최대한 많은 경험을 해보자.
그 경험 중 가장 즐겁고 몰입되는 나만의 분야를 찾아보자.
천천히, 느긋하게
나만의 분야 찾기
감사합니다
devhudi@gmail.com
https://github.com/devhudi
https://hudi.blog

More Related Content

PPTX
Database on Kubernetes - HA,Replication and more -
PDF
신입 웹 개발자 포트폴리오 / 댓글 게시판
PDF
나 혼자 한다: 개발자가 창업을 하면 벌어지는 일
PDF
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
PDF
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
PDF
애자일의 모든것
PDF
BigQueryの課金、節約しませんか
PDF
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
Database on Kubernetes - HA,Replication and more -
신입 웹 개발자 포트폴리오 / 댓글 게시판
나 혼자 한다: 개발자가 창업을 하면 벌어지는 일
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
코로나19로 인해 변화된 우리 시대의 데이터 트랜드
애자일의 모든것
BigQueryの課金、節約しませんか
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)

What's hot (20)

PDF
全角チルダ問題
PDF
SwiftのDI方法につい て最近考えてた話
PDF
Software engineer가 되기 위한 여정
PDF
데이터 분석 프로젝트 관리 방법론
PPTX
WIRELESS POWER TRANSMISSION USING MICROWAVE
PDF
How To Become Better Engineer
PDF
코드리뷰를 시작하려는 그대에게
PDF
Agile의 본질과 실천
PDF
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
PDF
Redis 2017
PDF
サーバーサイド Kotlin のテストフレームワーク事情
PPTX
ReactでCMSを作ったときにハマったこと
PPTX
Wireless power-transmission-using-microwave
PDF
카카오는 애자일 한가요?
PPTX
どうやらテスト駆動型開発は死んだようです。これからのCI
PDF
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
PDF
Java-Virtual-Thread-LT.pdf
PPTX
Maximum power point tracking.......saq
PDF
Laravel の paginate は一体何をやっているのか
PPTX
웹수집(Web Crawling)
全角チルダ問題
SwiftのDI方法につい て最近考えてた話
Software engineer가 되기 위한 여정
데이터 분석 프로젝트 관리 방법론
WIRELESS POWER TRANSMISSION USING MICROWAVE
How To Become Better Engineer
코드리뷰를 시작하려는 그대에게
Agile의 본질과 실천
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
Redis 2017
サーバーサイド Kotlin のテストフレームワーク事情
ReactでCMSを作ったときにハマったこと
Wireless power-transmission-using-microwave
카카오는 애자일 한가요?
どうやらテスト駆動型開発は死んだようです。これからのCI
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
Java-Virtual-Thread-LT.pdf
Maximum power point tracking.......saq
Laravel の paginate は一体何をやっているのか
웹수집(Web Crawling)
Ad

Similar to 개발자, 성장하는 '척' 말고, 진짜 성장하기 (20)

PPTX
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
PDF
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
PDF
개발을잘하고싶어요-네이버랩스 송기선님
PDF
퇴근 후 해볼만한 N 가지 활동(개발자 ver.)
PPTX
멘토6장
PPTX
Django Girls 12월 Meetup 발표 자료
PDF
2022 경희대학교 테크콘서트
PDF
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"
PDF
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"
PDF
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
PDF
소프트웨어교육론 전체
PPTX
Fearless Change
PDF
Agile SW 개발
PDF
훌륭한 개발자로 성장하기
PDF
2011~2012 소프트웨어 관련도서 추천 리뷰 모음
PDF
"행복한 백발의 개발자"라는 제목으로 2024-03-06 어느 IT 업체에서 직책자로 승진한 분들을 대상으로 한...
PPTX
현장에서 사용하는 Software production
PDF
취업캠프 특강 - 기업의 서비스 개발 프로젝트
PPTX
창의적 인재
PPTX
어느 40대 아저씨 이야기
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
개발을잘하고싶어요-네이버랩스 송기선님
퇴근 후 해볼만한 N 가지 활동(개발자 ver.)
멘토6장
Django Girls 12월 Meetup 발표 자료
2022 경희대학교 테크콘서트
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
소프트웨어교육론 전체
Fearless Change
Agile SW 개발
훌륭한 개발자로 성장하기
2011~2012 소프트웨어 관련도서 추천 리뷰 모음
"행복한 백발의 개발자"라는 제목으로 2024-03-06 어느 IT 업체에서 직책자로 승진한 분들을 대상으로 한...
현장에서 사용하는 Software production
취업캠프 특강 - 기업의 서비스 개발 프로젝트
창의적 인재
어느 40대 아저씨 이야기
Ad

개발자, 성장하는 '척' 말고, 진짜 성장하기

  • 1. 개발자, 성장하는 ‘척’ 말고, 진짜 성장하기. Server Developer IMPACT-CONNECT SEMINAR 2 0 2 3
  • 2. 발표자 소개 - 초등학교3학년,플래시게임을만들고싶어프로그래밍세계에입문 - 중학교3학년,개발한웹서비스가동시접속자900명가량을달성 그때의두근거림을항상느끼고싶어웹개발자가되기로결심 - 대학휴학후우아한테크코스교육과정에1년간참여 - 수료이후토스뱅크ServerDeveloper포지션으로즐겁게근무중 IMPACT-CONNECT SEMINAR 2 0 2 3 조동현 (Server Developer)
  • 3. IMPACT-CONNECT SEMINAR 2 0 2 3 어떻게 하면 ‘진짜’ 성장할 수 있을까? ⚠️ 주의! 기술적인 내용은 모두 예시이며, 이해하지 못해도 괜찮아요.
  • 5. 성장이란 맥락에서 이 둘은 독립적으로 존재할 수 없으며, 상호보완적인 관계이다 IMPACT-CONNECT SEMINAR 2 0 2 3 경험과 지식 문제해결능력
  • 6. IMPACT-CONNECT SEMINAR 2 0 2 3 경험과 지식 문제해결능력 * 사진출처: https://ko.wikipedia.org/wiki/%EA%B3%A8%EB%93%A0%EA%B2%8C%EC%9D%B4%ED%8A%B8_%EA%B5%90 경험 지식 성장
  • 7. IMPACT-CONNECT SEMINAR 2 0 2 3 경험은 무엇이고, 지식은 무엇일까? 문제해결능력 • 경험: 프로젝트를진행하며,실제문제를해결하는과정을통해얻는노하우와능력 - 소프트웨어 코드 작성 - 서버 아키텍처 설계 - 트러블 슈팅 - 안정적인 서비스 운영 경험 • 지식: 책, 강의 등에서 습득한 이론적인 내용 - 프로그래밍 언어 - 프레임워크 & 라이브러리 - 운영체제, 네트워크, 데이터베이스 - 자료구조, 알고리즘
  • 8. IMPACT-CONNECT SEMINAR 2 0 2 3 • 경험만 있다면 - 자주 경험해본 특정 패턴은 쉽게 해결하겠지만, 새롭고 복잡한 문제를 풀기 어렵다. - 문제 발생 시 더 근본적인 원인에 접근하기 어려워, 표면적인 부분만 해결하고 넘어가기 쉽다. • 지식만 있다면 - 이론적인 내용만 알고 있어, 실제 문제를 해결해본 경험이 없다. 즉, 실상황에서의 응용이 어렵다. • 경험과 지식의 시너지 - 지식은 기반을 제공하지만, 실제 상황의 문제를 해결할 수 있는 능력은 경험으로부터 온다. -경험을통해이론만알고있던지식을응용하거나,새로운문제를마주하며부족한지식이무엇인지깨닫는다. - 지식을 통해 더 복잡하고 새로운 문제를 해결하는 경험을 쌓아나간다. 경험과 지식의 시너지 문제해결능력
  • 9. IMPACT-CONNECT SEMINAR 2 0 2 3 야생학습과 학교학습 문제해결능력 * 사진출처2: https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%99 * 사진출처1: https://ko.wikipedia.org/wiki/%EC%97%B4%EB%8C%80_%EC%9A%B0%EB%A6%BC
  • 10. IMPACT-CONNECT SEMINAR 2 0 2 3 야생학습과 학교학습 문제해결능력 - 야생 학습은 대부분 협력적이다 (학교 학습은 대부분 개별적이다). - 야생 학습은 대부분 비순차적이다 (학교 학습은 대부분 공부 순서가 정해져 있다). - 야생 학습은 대부분 자료에 한정이 없다 (학교 학습은 대부분 교과서, 교재, 시험 범위 등이 정해져 있다). - 야생 학습은 대부분 명확한 평가가 없다 (학교 학습은 대부분 시험이라는 명확한 평가기준이 있다). - 야생 학습 대부분 정답이 없다 (학교 학습은 무엇이 정답이라고 하는 것이 명확 하다). - 야생 학습은 목표가 불분명하고 바뀌기도 한다 (학교 학습은 대부분 합격, 자격증 같은 목표가 분명하다). 김창준, 함께 자라기 (인사이트, 2018), 12p.
  • 11. IMPACT-CONNECT SEMINAR 2 0 2 3 • 프로그래머는 목표가 끊임없이 바뀌는 문제를 다룬다. 비즈니스 상황에 따라 어제의 좋았던 선택이, 오늘의 나쁜 선택이 될 수 있다. • 프로그래머는 정답이 없는 문제를 다룬다. Trade-Off* 만 있을 뿐이다. • 프로그래머는 항상 새롭고 복잡한 문제를 다룬다. 우리는 모두 다른 도메인*, 레거시 코드, 리소스, 마감기한에 처해있다. • 누군가 제시한 길을 그대로 걷기보다 (학교학습), 스스로 문제를 정의하고, 자료를 찾고, 고민하고, 결정할 수 있어야 한다 (야생학습). 야생학습과 학교학습 문제해결능력 * 도메인: 소프트웨어로 해결하고자 하는 비즈니스 영역. 예를 들어 토스의 도메인은 금융이다. * Trade-Off: 어느 한편을 늘리면 다른 한편은 그 만큼 줄어드는 것을 이르는 말
  • 12. IMPACT-CONNECT SEMINAR 2 0 2 3 • IT 산업의 변화는 너무나도 빠르다. • 프로그래밍 언어, 프레임워크는 유행을 따르는 도구일 뿐이다. • 더 깊은 곳에 있는 기반 지식에 집중하자. 주의! 도구와 사랑에 빠지지 마시오 문제해결능력 10년이면 강산도 변한다고 합니다. IT 산업에서 10년은 너무나 유구한 시간입니다. 5년, 혹은 그보다 짧은 기간 안에 IT 산업은 크게 변모합 니다. … 세상이 빨리 변하므로 개발자는 유행보다는 기본 지식을 쌓는 데 투자해야 합니다. 제 첫 프로그래밍 언어는 베이식입니다. 첫 상용 프로그램을 코볼로 짰습니다. 아르바이트를 할 때는 포트란을 사용했습니다. IT 30년 내내 줄곧 쓰는 언어는 없습니다. 프로그래밍 언어는 유행을 따르는 도구일 뿐입니다. 그래서 빠르게 새로운 걸 터득하는 능력과 기반 지식이 중요합니다. 박종천, 개발자로 살아남기 (Golden Rabbit , 2022), 30~31p.
  • 13. IMPACT-CONNECT SEMINAR 2 0 2 3 기반지식이란 무엇일까? 문제해결능력 * 사진출처: https://www.pickpik.com/equipment-outdoors-dirt-dig-farming-garden-55431
  • 14. IMPACT-CONNECT SEMINAR 2 0 2 3 기반지식이란 무엇일까? 문제해결능력 • 쉽게 변하지 않는 것들, Fundamental 언어, 프레임워크가 건축물이라면, 기반지식은 땅과 같다. • 애플리케이션이 동작하는 환경 - 우리가 만든 애플리케이션은 운영체제 위에서 동작한다. - 애플리케이션은 데이터를 생산하는데, 그 데이터는 데이터베이스에 저장된다. - 데이터는 네트워크를 통해 전송된다. • 애플리케이션을 만들기 위한 철학 - 프로그래밍 패러다임 (객체지향, 함수형 프로그래밍) - 가독성, 유지보수성, 확장성 - 디자인/아키텍처 패턴
  • 15. IMPACT-CONNECT SEMINAR 2 0 2 3 사이드 프로젝트로 경험 쌓기 의도적인 오버 엔지니어링을 통한 깊은 수준의 경험
  • 16. IMPACT-CONNECT SEMINAR 2 0 2 3 왜, 사이드 프로젝트? 사이드 프로젝트로 경험 쌓기 * 자료출처: https://www.educationcorner.com/the-learning-pyramid.html 수동적 학습 능동적 학습
  • 17. IMPACT-CONNECT SEMINAR 2 0 2 3 • 사이드 프로젝트를 시작하면, 자연스럽게 모르는 부분이나 막히는 부분이 등장한다. • 이미 해결할 문제가 있다면, 그 자체로 학습에 대한 동기가 자연히 생기게 된다. • 동기가 부여된 상태에서 높은 학습 효율으로 더욱 적극적으로 지식을 습득할 수 있다. 왜, 사이드 프로젝트? 사이드 프로젝트로 경험 쌓기 그래서 튜토리얼을 읽다가도 이 정도면 그 프로그램을 작성할 수 있겠다는 생각이 들면 그 자리에서 읽기를 멈추고 코딩을 시작합니다. 프로 그램을 완성하면 잠시 멈췄던 자리로 돌아와서 읽기를 계속합니다. 이때에는 다음 프로그램을 목표로 두면서 말이죠. 이런 것을 적극적 읽기 라고 합니다. 무언가를 읽을 때 구체적인 질문이나 목적을 가지고 있는 방법을 말합니다. 김창준, 함께 자라기 (인사이트, 2018), 83p.
  • 18. IMPACT-CONNECT SEMINAR 2 0 2 3 의도적인 오버 엔지니어링 사이드 프로젝트로 경험 쌓기 * 사진출처: https://betterprogramming.pub/overengineering-why-we-do-it-and-10-ways-to-tackle-it-460663d35ff3
  • 19. IMPACT-CONNECT SEMINAR 2 0 2 3 • 개발자 지망생은 아직 현업 경험이 없다. 하지만, 기업은 현업의 문제를 해결할 수 있는 문제 해결능력이 높은 개발자를 원한다. • 사이드 프로젝트가 실제 유저가 많은 빅테크의 제품이라고 가정해보자. 100명이 사용하는 서비스와 1000만명이 사용하는 서비스는 문제의 다양성, 규모, 깊이 측면에서 큰 차이가 있다. • 의도적으로 현재보다 과한 문제 상황을 가정하고, 해결하자. 간접적으로 현업에서 겪고 있는 문제를 체험할 수 있는 좋은 방법이다. 의도적인 오버 엔지니어링 사이드 프로젝트로 경험 쌓기 * 오버 엔지니어링: 현재 필요한 것 보다 더 과하게 설계하는 행위
  • 20. IMPACT-CONNECT SEMINAR 2 0 2 3 • 한정 수량이 100개인데, 동시에 요청이 들어와 101개가 팔려버리면 어쩌지? DB, 애플리케이션, 혹은 분산 아키텍처 수준의 Lock을 사용한다. • 거대한 트래픽이 한번에 들어올텐데, 견딜 수 있을까? 부하 테스트를 통해 서비스가 견딜 수 있는 트래픽 수준을 측정하고, 코드 성능 최적화, WAS 및 쿼리 튜닝, 캐싱 등을 사용해 전체적인 성능 수준을 높인다. • 큰 트래픽은 일정 시간대만 짧게 발생할텐데, 고성능 서버를 항상 돌리기 아까워! Scale Out과 Auto Scaling을 통해 리소스를 유연하게 사용한다. 의도적인 오버 엔지니어링: 선착순 공연 티켓 판매 시스템 사이드 프로젝트로 경험 쌓기 * 위 내용은 의도적 오버 엔지니어링의 예시이며, 이해가지 않아도 괜찮습니다.
  • 21. IMPACT-CONNECT SEMINAR 2 0 2 3 • 사용할 모든 기술에 대해 완벽한 학습을 끝내고 시작하려고 하지 말자. 완벽한 학습이란 허상이다. 지금 바로 시작하자. • Learning By Doing, 사이드 프로젝트를 통한 경험과 지식 잇기. 사이드 프로젝트를 통해 스스로가 부족했던 지식을 깨닫게 되고, 원래 알고 있던 지식을 통해 더 깊이 있는 문제를 해결하게 될 것이다. • 완벽한 서비스를 만드는데 집착하지 말자. MVP* 수준이어도 좋다. 하나의 기능이라도 수준 높은 기술적 고민이 있었다면 말이다. 완벽하지 않아도 괜찮아 사이드 프로젝트로 경험 쌓기 * MVP: Minimum Viable Product, 최소 기능 제품
  • 22. IMPACT-CONNECT SEMINAR 2 0 2 3 • 그냥저냥 동작하기만 하는 애플리케이션으로 만족해선 안된다. 프로젝트를 완성했다는 사실 그 자체로는 크게 매력적인 경험이 될 수 없다. 많은 기능을 구현한 프로젝트 경험이 항상 좋은 프로젝트 경험은 아니다. • 기능 구현 그 자체에 목표를 두지 말고, 지금이 최선인지 치열하게 의심해보자. 지금 작성한 코드가, 구조가, 성능이 과연 최선일까? 더 좋게 만들 방법은 없을까? • 모든 코드와 설계는 합리적인 근거를 기반으로 만들어져야 한다. ‘그냥’, ‘좋아 보여서’, ‘많이들 쓰니까’ 라는 건 없다. 내가 작성한 코드, 설계의 근거를 동료에게 자신있게 설명할 수 있을 수준으로. 치열한 고민을 하고 있나요? 사이드 프로젝트로 경험 쌓기
  • 23. IMPACT-CONNECT SEMINAR 2 0 2 3 기록으로 지식 쌓기 복리적 성장, 메타인지
  • 24. IMPACT-CONNECT SEMINAR 2 0 2 3 인출하는 학습 기록으로 지식 쌓기 * 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology
  • 25. IMPACT-CONNECT SEMINAR 2 0 2 3 인출하는 학습 기록으로 지식 쌓기 * 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology 요약하기 강조하기 키워드 암기하기 심상 만들기 다시 읽기
  • 26. IMPACT-CONNECT SEMINAR 2 0 2 3 인출하는 학습 기록으로 지식 쌓기 * 자료출처: Improving students' learning with effective learning techniques: Promising directions from cognitive and educational psychology 연습 시험보기 나눠서 연습 여러 문제를 섞어 연습 정교화 질문 스스로 설명하기
  • 27. Input ( ) IMPACT-CONNECT SEMINAR 2 0 2 3 인출하는 학습 기록으로 지식 쌓기 요약하기 강조하기 키워드 암기하기 심상 만들기 다시 읽기 여러문제를 섞어 연습 연습 시험보기 나눠서 연습 정교화 질문 스스로 설명하기 학습의 완성은 지식을 머리 속으로 입력하는 것이 아닌, 밖으로 인출하는 것에 있다 Output ( ) 👍 ☹️
  • 28. IMPACT-CONNECT SEMINAR 2 0 2 3 • 배운 것, 고민한 것, 해결한 것을 꾸준히 기록하자 • 되도록이면, 다른 모든 사람들이 볼 수 있는 곳에 기록을 공개하자 (=블로그) 혼자만 보는 공간에 기록해도 좋지만, 공개된 곳에 기록을 공개하는 것이 남들이 본다는 부담감으로 더 정확하고 깊이있는 내용을 학습할 수 있게 해준다. • 모르는 사람을 가르치는 것 처럼, 자세하고 깊게 기록하자 (메타인지) 앞선 자료에서 알 수 있었듯 타인을 가르치는 것이 가장 효과적인 학습 방법이다. 초심자가 여러분들의 게시글을 본다고 생각하며, 친절한 선생님의 마음으로. 기록 과정에서 스스로가 잘 이해하지 못한 부분을 깨우칠 수 있다. 이 과정에서 메타인지가 상승된다. • 과거의 기록물을 통해 누적적으로 성장하자 인간은 망각의 동물이다. 잊은 지식을 되찾는 시간을 아껴보자. 기록과 메타인지 기록으로 지식 쌓기
  • 29. IMPACT-CONNECT SEMINAR 2 0 2 3 3 Depth로 고민하자 기록으로 지식 쌓기 WHAT? WHY? HOW? X 3
  • 30. IMPACT-CONNECT SEMINAR 2 0 2 3 • WHAT: 내가 마주한 개념이 ‘정확히’ 무엇인지? ‘그냥’ 학습하지 말고, 등장한 모든 개념에 대해 ‘정의’를 정확히 알고 넘어가자. • WHY: 이기술은왜등장한것인지,내프로젝트의어떤문제를해결하기위해필요한지? 모든 기술은 어떠한 문제를 해결하기 위해 등장했다. 그 등장 배경을 알아보는 것도 좋다. • HOW: 이 기술은 내부적으로 어떻게 동작하는 것 인지? 기술의 내부 동작 원리를 깊게 이해해야, 문제가 발생했을 때 더 능숙히 대처할 수 있다. • WHAT?WHY?HOW?를스스로에게3Depth로질문을던지자 3 Depth로 고민하자 기록으로 지식 쌓기
  • 31. 3 Depth로 고민하자: 가상 면접으로 감잡기 기록으로 지식 쌓기 로그인 기능을 만드셨네요. 어떻게 만드셨나요? 면접관 세션을 사용한 방식으로 구현했습니다. 지원자 어떻게 해결하나요? 면접관 Sticky Session을 사용하거나, 세션 클러스터링을 사용하거나, Redis 등을 사용해서 세션 저장소를 별도로 둘 것 같습니다 지원자 음.. 세션 저장소간 동기화가 되지 않아 정합성 이슈가 발생할 것 같습니다. 지원자 지금 프로젝트가 분산환경이 아닌데, 애플리케이션 서버를 Scale-Out 하면 어떤 문제가 생길까요? 면접관
  • 32. 괜찮은 방법이네요. 그런데 스티키 세션은 로드밸런서에 부담이 되고, 세션 클러스터링은 클러스터 과정 자체에서 오버헤드가 클 것 같네요. 타이밍에 따라 정합성 이슈가 그대로 존재할 것 같기도 하고요. 세션 저장소를 별도로 두는 방법은 세션 저장소가 SPOF가 될 것 같네요. 이런 부분을 개선하려면 어떻게 해야할까요? 면접관 Stateless 한 방법으로 해결할 것 같습니다. 지원자 * SPOF: Single Point of Failure, 단일 장애점 3 Depth로 고민하자: 가상 면접으로 감잡기 기록으로 지식 쌓기
  • 33. 자세히 설명해주세요. 면접관 JWT와 같은 토큰을 사용하는 것은 어떨까요? 지원자 앞서 이야기한 문제는 해결될 것 같네요. 말씀해주신 무상태 토큰 방식은 그렇다면 문제가 없나요? 면접관 많은 문제가 있겠지만, 탈취 시 치명적 문제가 발생할 것 같습니다. 지원자 어떻게 해결하나요? 면접관 리프레시 토큰을 도입하고, 액세스 토큰의 만료기한을 짧게 유지하면 어떨까요? 지원자 리프레시 토큰을 탈취당할수도 있지 않나요? 면접관 3 Depth로 고민하자: 가상 면접으로 감잡기 기록으로 지식 쌓기
  • 34. IMPACT-CONNECT SEMINAR 2 0 2 3 나만의 분야 찾기 천천히, 느긋하게
  • 35. IMPACT-CONNECT SEMINAR 2 0 2 3 • 프로그래밍에도 분야가 굉장히 많다. 웹 프론트엔드/백엔드, 앱 iOS/안드로이드, 임베디드, 윈도우 프로그래밍, 게임 프로그래밍 … • 조급하지 말고 느긋하게, 끌리는 것 부터 시도해보자. 좋은 음식이 가득한 뷔페에 온 것 처럼, 여유롭게. • 대단한 걸 만들지 않아도 된다. 튜토리얼 수준이어도 괜찮으니, 동작하는 아주 작은 프로그램을 만들어보자. • 최대한 많은 경험을 해보자. 그 경험 중 가장 즐겁고 몰입되는 나만의 분야를 찾아보자. 천천히, 느긋하게 나만의 분야 찾기