오늘 쿠팡 개발자이신 이태훈 튜터님 (스프링 심화과정)의 ZOOM 스프링 로드맵 강의를 들었습니다.
느낀점)
이번 로드맵을 통하여, 막막했던 백엔드 공부의 방향성과
비전공자이지만 "나도 할 수 있다!"라는 자신감을 얻을 수 있는 시간이었습니다.
무었보다도 "좋은 개발자"가 되기위해서
1. 제한시간 내에 코드를 구현하는 실력의 중요성과
2. 커뮤니케이션을 통한 협업 능력,
3, 자만하지 않고 내일을 준비하는 꾸준함
을 강조하는 부분이 인상 깊었습니다.
다이아몬드가 뜨거운 열과 압력을 견뎌서 탄생하였 듯,
"꾸준함은 힘든 일" 이지만, 그 만큼 매력적인 직업이라는 생각을 하게 되었습니다.
길고도 짧은 99일 간의 항해기간이지만, 일단 앞만 바라보고 달려가야 겠습니다.
아자아자 화이팅! :D
주제 : 스프링(Spring) 주특기 로드맵
내용)
항해동안 주로 볼 것들 추천!
1. 인터넷 -> 생활코딩 영상 (전체적인 뷰 이해하기)
2. 브라우저 어떻게 움직이는지 -> 로그인 (캐시 저장)
3. OS에 대한 전반적인 지식
-> OSI 7 LAYER (서버 최적화 -> 고급스킬) -> Application Layer -> Spring(웹 브라우저)임
- 터미널 사용법 / OS 일반적인 작동원리 / 프로세스 관리 / 스레드와 동시성 (병렬처리 - 고급) / 터미널 기본명칭
Spring
a. 비동기처리 -> 메모리
b. 프로세스간 통신 (에플리케이션)
c. 입출력 (I / O) 관리 -> Input / Out
d. posix 기초 (stdin, stdont, stderr, pipes) -> 기초 os 명령어
e. 네트워크 기본개면
4. 더 깊은 데이터베이스 지식
- ORM
-ACID (5주차 강의 : 원자성 일관성) -> 데이터베이스 동시요청
ex) A -> 100요청 / B -> 200요청 / 데이터베이스 동시요청시 최대한 보장해야 됨
https://ko.wikipedia.org/wiki/ACID
-트랜젝션
-N+1문제 -> 성능 (최적화) -> ORM
-데이터베이스 정규화
-인덱스(DB)와 작동원리 -> 어떻게 구축 -> 속도차이 발생
(DB 튜닝 -> 이전과 이후 성능차이 비교 % 빠른지)
https://incheol-jung.gitbook.io/docs/q-and-a/spring/n+1
5. 관계형 데이트베이스 (SQL) -> 과거에 잘 사용하고 있지만
-> 요구사항 & DB가 커지고있어 한계가 발생 -> NoSQL
6. NoSQL : 메모리에서 돌아감 -> 빠르지만 저장을 안 함 -> (전원 or 서버가 죽으면 데이터 손실)
HDD : 5.5~8.0 ms -> 인덱스를 가까운 곳에 모아둬야됨 (조각모음?)
SSD : 0.1ms
Memory : 빠름
예시1) 쿠팡
https://biz.sbs.co.kr/article/20000043387
제품을 구매를 할 때 DB에서 상품이 품절인지 아닌지 확인하는데,
이를 빨리 처리하기위해서 NoSQL을 사용하는데, 서버가 다운 되서 구매가 안되는 일이 발생 함
조치 : 마이크로서비스 -> 서버를 잘게 분할 함
- 마이쿠팡
- 장바구니
- 최신정보
예시2) 유튜브 좋아요
7. API : 약속된 방식
클랑이언트 <-> 서버 <-> (DB - Application)
REST API에서 GraphGL로 바뀔 수 있을 것 같음 (표현력 증대됨 - A와 B를 동시에 보내줘?)
8. 캐시 : 퍼포먼스 향상!
- CND
- 서버사이드 ( Redis / Memcached)
-클라이언트 사이드
9. 테스트
- 통합 (intagration) 테스트
- 단위 (unit) 테스트
- 기능 (functional) 테스트
-> 굉장히 중요함 : 만약 토스회사에서 1시간동안 금액이 잘못 보내졌을 경우 손해가 막심 하게 발생
몇몇 회사들이 테스트를 불필요하다고 이야기하지만, 괭장히 중요함
테스트 커버리지를 할 경우 작업속도가 1.2배 낮아짐
따라서 비즈니스 속도를 고려하여 선택적으로 테스트 코드를 할 필요가 있음
만약 취업해서 테스트 쪽으로 업무를 하게되면 처음에 많이 힘들어도, 많이 배울 수 있음
10. 보안 -> 요즘은 보안이 중요해서 보안팀이 따로 있음 (해쉬 / HTTPS 등)
11. 개발설계의 원칙 (전략집) - SOLID등 -> SPRING에 많이 적용되어 있어서 배우다보면 쉽게 이해할 수 있음
12. 아키텍쳐 패턴
- 모놀리식애플리케이션
- 마이크로서비스 -> 쿠팡이 성공케이스 -> 서버분할 (마이쿠팡 / 장바구니 / 최신정보)
- SOA
- 서버리스
13. 언어배우기 -> JAVA (하나의 언어를 마스터하자!)
14. GIT -> 코드 버전 관리 시스템
15. 관계형데이터베이스 (RDB) -> 하나만 일단 잘해보자
-Postgre : 외국에서 많이 사용 -> 굉장히 좋음
-SQL
-MYSQL : 무료DB -> 한국의 90%가 사용
-MariaDB
-Oracle -> 유료DB -> 기능이 많고, 안전성이 좋다 -> 은행과 정부기관 같이 정말 중요한 곳에서 사용
16. 검색엔진 - Elastcsearch (최근엔 검색팀이 따로 있음)
17. 메시지 브로커 -> 서버가 한번에 처리할 수 이쓴 숫자가 제한 됨
- RabbitMQ (비동기)
- kafka
확장성 문제 / 구매를 할 경우 -> 상품 밴더에 전부 정보를 보냄 -> 상품 제공 회사
(1 ~ 100개 회사에 다 보내야 1의 요청이 끝남 -> 5~10초를 기다리는 고객은 답답 함)
따라서 클라이언트는 끝났다고 하지만, 뒤에서 따로 처리하는 과정이 필요하다
이유 : 고객의 수와 요구들이 많아지기 때문에
18. 컨테이너화 vs 가상화 -> Docker
<Rereal 2021 - 쿠팡 영상>
19. 완화전략 / 확장성 있는 구축
- 마이즈레이션 전략
- 수평확장 vs 수직확장
- 관측 가능성을 고려한 구축 -> JVM머신 -> 메트릭로그 -> 문제로그를 남겨야 됨
그림 )
이태훈 튜터님의 이야기 )
1. "모든 사람이 똑같이 겪고있다."
러닝 커버 : JAVA는 배우기 어렵지만 그 만큼 경쟁력이 있다.
2. 터미널은 왜 필요할까?
-> 리눅스 (cmd)
웹서버 로그 / 배포시 os를 사용하지 않는다.
이유 : 가벼움 / 무료 / 리눅스가 빠르다 -> 최대한 많은 사용자가 이용해야 하기 때문
3. 스프링 동작 중에 DB를 읽지 않는다 -> 필요할 때 Entity를 가져온다.
4. 좋은 개발자란? (내가 한 질문 ㅎㅎㅎ)
ㄱ. 주어진 시간안에 결과물을 낼 수 있어야함 (개발 실력)
-> 구글링, 같은 목적의 코드 복사 -> 내 프로젝트에 녹이는 것
ㄴ. 커뮤니케이션 능력
-> 많은 사람들의 의견을 맞춰야함
ex) 기획자 / 디자이너 / 프론트엔드 / 백엔드 개발자 / 사장님 -> "스택홀더" - 의견조율
ㄷ. 자기개발 (학구열 - 거북이 같이 꾸준한)
꾸준히 새로운 지식을 배움으로써 내 프로젝트의 조금 더 기어할 수 있는 부분을 찾는것
-> 더 많은 곳에서 선택을 받을 수 있는 능력
주니어 개발자 -> 성장가능성을 봄 -> 짧은 시간 내 성장 / 배우고자 하는 욕구 / 부족한점 채여나가기
취업 후 3~5년 후 착각 : 정체 -> 더이상 공부하지 하지않고 관심이 없음. -> 도태 됨
(중요한 것은 그 3~5년차에서 실력이 갈리기 때문에 더욱 열심히 공부해야 한다.)
5. 객체지향 -> 경험이 많이 필요함 -> 그냥 고민없이 짜기 (서비스에서 막짜보고 리팩토링을통해 개선하기)
고민없이 짜기(실전프로젝트) : 하나의 메소드에 100 line ~ 1000 line이 있을 경우 중복된 코드가 발생한다.
-> 막 해보고 -> 고민하고 -> SOLID같은 요소들을 적용해보기 (여유 있을 경우)
그래도 코드는 비슷한 역활을 하는 것 끼리 모아놓고, 이쁘게 하면 좋음 -> 전체적인 흐름에 익숙해지기
6. 이력서 / 깃허브 -> 코드 깔끔하게 잘 정리하기 (일단 클린코드는 잠시 미루자 - 완성부터하자)
7. 취업준비할 때 프로젝트 위주로 준비하기 -> 필요한 지식을 종합적으로 채우기
- 공통되는 지식 것이 쌓임
- 사람마다 목적성에 따라 어려움이 다름
8. API설계 분담은 상황에 따라서 다름 (주어진 시간에 따라 효율적으로 나누기)
기능1 / 기능2 / 기능3 이 있는경우 A / B / C로 나눌 수 있고,
한 기능이 비중이 클 경우에는 여러명이 같이 협업 하기도 함.
MVP - 계발주기가 짧아짐 (Lean Start up / Agile)
기획 -> 설계 -> 구현 -> 데모
(기획, 설계, 구현을 작게작게쳐서 조금씩 키우는 능력) -> 시간나면 이것도 해보자 (쌓아가기)
스터디의 방향성)
인터넷
JAVA
MYSQL
데이터(ORM, 트랜젝션 등)
API(REST)
--------
비중 하
OS
캐시 & 보안
'모임 > 강의' 카테고리의 다른 글
[항해99 6기] 마케팅 특강 - 스파르타 황순영이사님 (0) | 2022.05.16 |
---|---|
[항해99 6기] 김병욱님 특강 (쌀 팔다) (0) | 2022.03.22 |