목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 감사한 일
0. 오늘의 학습 시간
[스파르타 내일 배움 교육]
09:00 ~ 24:00: 약 15시간
1. 오늘 배운 것
1. 백앤드 개발자의 소양
: 백앤드 개발자가 고려해야 할 사항은 많지만, 가장 기본이 되는 3가지는 아래와 같다.
(1) 가용성
: 서비스가 계속 서비스 해줄 수 있는 성능. 내가 만드는 프로그램이 정상적으로 서비스를 할 수 있도록 리소스를 관리하는 것은 쉽지 않겠지만 가장 기본적인 소양이라고 생각한다. 이를 고려하기 위해 방대한 분야가 연계해야 하기 때문에 당장 큰 통찰을 얻을수는 없지만, 조금씩 공부해 그 간극을 메꾸는것이 나와 내 동료들이 만든 서비스에게 갖추어야 할 최소한의 예의라고 생각한다.
(2) 시스템 확장
: 나와 내 동료들이 만든 시스템은 언제든지 확장될 수 있다. 따라서 시스템 확장시 발생하는 문제들에 대처하는 방법이나 확장성 있는 아키텍처를 설계하는 방법을 알아 두는것도 하나의 소양이다. 아키텍처로서의 일로 보이지만 나는 개발자가 단순히 코딩만 하는 사람이 아닌 만들어내는 사람이라고 생각하기 때문에 이러한 관점을 조금이라도 고려하면서 공부해야겠다는 생각을 했다.
(3) 시스템 이중화
: 이중화는 여러 분야가 있지만 내가 공부하는 백앤드의 경우 로드 밸런싱등의 분산처리 작업을 의미한다. 이는 위의 시스템 확장의 링크에도 달려있는데, 클라우드 시스템이 등장하면서 더 쉽게 사용할 수 있게되었다. 따라서 이중화를 잘 하는 방법을 익히는것이 앞서 설명한 고가용성등에 큰 도움을 줄 수 있기 때문에 고민할 수 있는 역량을 키워야한다.
2. [성능 요인 1]: GC
1. JVM - memory 관련 GC 관련 (Trade Off): 자바의 경우, 파이썬 인터프린터, c++등 외 언어들은 각자 방법있음
1. 강한 참조 (Strong References)
2. 소프트 참조 (Soft References)
3. 약한 참조 (Weak Reference)
4. 팬텀 참조 (Phantom Reference)
3. [성능 요인 2]: Web Server
: apache, nxinx, IIS등의 웹 서버등을 의미한다. 우리는 AWS ELB를 통해 이미 Web Server를 써봤는데, 아파치나 nxinx 서버들도 자주 쓰인다. WAS로 아싸리 다 처리해줄 수 있지 않느냐 할 수 있는데, 사실 정적인 처리를 한다는게 연산이 엄청 많이 일어난다. 그래서 정적인 데이터는 웹 서버를 통해 주는데 부하분산 관점에서 더 적합한 판단이다. 예를 들어 AWS에서 클라우드 프론트를 통해 정적 페이지를 캐싱해 둘 경우 관련된 처리에 대해 부하분산 관점에서 큰 효과를 볼 수 있다.
4. [성능 요인 3]: WAS
: spring(tomcat), django, flask등의 영역인데 이 떄부터 Thread갯수나 accept의 갯수등을 고려해야한다. AWS 기준 EC2의 스펙이 t2 micro일 때, 해당 cpu의 가용률을 보고 적정 쓰레드의 갯수를 고려해야한다. 관련 레퍼런스는 차후에 찾아보기로 했다.
5. [성능 요인 4]: DB
: DB Connection Pool의 적정 갯수를 잘 파악하는게 중요하다. 이와 관련된 연구를 하는 사람(경수's)들도 있는데, 쓰레드다 보니까 트랜잭션 때문에 얽혀서 락킹이 생길 수 있다. 논문 보고 계산하기 어려울 때는 일반적으로 2n-1을 잡는다. DBCP를 너무 많이 잡아도 잉여 자원이 생겨 일을 안해 효율이 비슷할 수 있는 원리이다.
6. [성능 요인5]: 쿼리 튜닝
: 요즘 ORM이 하도 잘나와서 많이 없어지는 추세라고 한다. 간략히 최소한의 내용만 정리하면 아래와 같다.
(1) join 문 최대한 줄여(ORM 없었을 때는, RDB 관계를 최대한 맞춰 셀렉트로 쭉 가져오는게 좋았는데 이젠 아님)
(2) 인덱싱 꼭해라
7. [성능 요인6]: 트랜잭션 레벨
: acid, isolation(4LV, 5LV)에 대해서 이해해보면 좋다.
8. [성능 요인7]: replica와 cluster
: 공부해봐라
2. 감사한 일
사실 오늘 대부분의 내용도 잘 이해하지 못했다. 하지만 중요한 훌륭한 튜터님들이 알려주셨으니 중요한 내용이라고 믿고 잘 기록해뒀다 감사한 마음으로 반드시 이해해보겠다.
오늘 하루도 공부할 수 있어 크게 감사합니다
2022-05-03 개발자 최찬혁
'꾸준히' 카테고리의 다른 글
[TIL-14] 팀프로젝트 설계, 문장 요약 ai기반의 api 호출, 뉴스 크롤링 (0) | 2024.01.04 |
---|---|
[TIL-13] 스프링 기초, 미니 프로젝트 설계 (1) | 2024.01.04 |
[TIL-09] 개발자로 성공하려면, 생각하는 개발자 (2) | 2024.01.03 |
[TIL-08] 강의 학습 내용 문서화, AWS 서비스 분석 (1) | 2024.01.03 |
[TIL-07] CI/CD 통합 개발 환경을 위한 AWS 기능 전반 (1) | 2024.01.03 |