본문 바로가기
모임/강의

[항해99 6기] 스프링 주특기 로드맵 후기

by 고구밍 2022. 3. 26.

https://youtu.be/qzHjK1-07fI

 

오늘 쿠팡 개발자이신 이태훈 튜터님 (스프링 심화과정)의 ZOOM 스프링 로드맵 강의를 들었습니다.

 

 

 

느낀점)

 

더보기

이번 로드맵을 통하여, 막막했던 백엔드 공부의 방향성과

 

비전공자이지만 "나도 할 수 있다!"라는 자신감을 얻을 수 있는 시간이었습니다.

 

무었보다도 "좋은 개발자"가 되기위해서

 

1. 제한시간 내에 코드를 구현하는 실력의 중요성과

2. 커뮤니케이션을 통한 협업 능력,

3, 자만하지 않고 내일을 준비하는 꾸준함

 

을 강조하는 부분이 인상 깊었습니다.

 

 

 

다이아몬드가 뜨거운 열과 압력을 견뎌서 탄생하였 듯,  

 "꾸준함은 힘든 일" 이지만, 그 만큼 매력적인 직업이라는 생각을 하게 되었습니다.

길고도 짧은 99일 간의 항해기간이지만, 일단 앞만 바라보고 달려가야 겠습니다.

 

아자아자 화이팅! :D

 

 

주제 : 스프링(Spring) 주특기 로드맵

https://roadmap.sh/backend

 

Developer Roadmaps

Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve.

roadmap.sh

 

내용)

더보기

항해동안 주로 볼 것들 추천!

 

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

 

ACID - 위키백과, 우리 모두의 백과사전

다른 뜻에 대해서는 애시드 문서를 참고하십시오. ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 짐 그

ko.wikipedia.org

 

-트랜젝션

-N+1문제 -> 성능 (최적화) -> ORM

-데이터베이스 정규화

-인덱스(DB)와 작동원리 -> 어떻게 구축 -> 속도차이 발생

 (DB 튜닝 -> 이전과 이후 성능차이 비교 % 빠른지)

https://incheol-jung.gitbook.io/docs/q-and-a/spring/n+1 

 

N+1 문제 - Incheol's TECH BLOG

Query를 실행하도록 지원해주는 다양한 플러그인이 있다. 대표적으로 Mybatis, QueryDSL, JOOQ, JDBC Template 등이 있을 것이다. 이를 사용하면 로직에 최적화된 쿼리를 구현할 수 있다.

incheol-jung.gitbook.io

 

 

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

 

‘4번, 8번 중복결제’…쿠팡 오류사고 보상은?

[앵커]어젯밤(21일) 쿠팡 애플리케이션에서 주문 상품과 결제 내역을 확인하는 개인 페이지가 먹통이 됐습니다.지금은 복구가 됐지만 일부 소비자들은 수 차례 중복 결제가 됐다고 피해를 호소

biz.sbs.co.kr

제품을 구매를 할 때 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 - 쿠팡 영상>

https://youtu.be/qzHjK1-07fI

 

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

캐시 & 보안