Skip to content
Bae, Jin Hwan edited this page Aug 12, 2024 · 12 revisions

TIL 7/15(월)


새로 알게 된 점

선착순 쿠폰 이벤트 개발을 위해서 NoSQL 중 일종인 Redis를 사용해야 하는가?? 아니면 MySQL로 JPA에서 지원하는 LOCK을 사용해야 하는가?? LOCK을 사용한다면 비관적 락 (Pessimistic Lock) vs 낙관적 락 (Optimistic Lock) 어떤걸 사용해야 하는가?

비관적 락(Pessimistic Lock)

  • 비관적 = 앞으로의 일이 잘 안될 것이라고 보는 것.
  • 트랜잭션 충돌이 발생한다는 가정하에 우선 락을 걸고 보는 방식
  • 데이터베이스에서 사용하는 락 사용 (PESSIMISTIC_FORCE_INCREMENT 모드가 아니라면, 버전 정보 사용안함)
  • SELECT ~ FOR UPDATE 구문 사용

낙관적 락 (Optimistic Lock)

  • 낙관적 = 앞으로의 일 따위가 잘되어 갈 것으로 여기는 것.
  • 트랜잭션 충돌이 발생하지 않는다는 가정하에 진행
  • JPA가 제공하는 버전관리 기능을 사용
  • 트랜잭션 최종 커밋 전까지는 충돌을 알 수 없음 (최종 커밋하면서 버전을 비교하기 때문??)
  • 성능이 비관적 락보다 좋음

MySQL

  • 관계형 데이터베이스 관리 시스템(RDBMS)
  • 테이블 형식으로 데이터 저장
  • 고정된 스키마(structure) 필요
  • SQL (Structured Query Language) 사용

NoSQL

  • 비관계형 데이터베이스
  • 다양한 데이터 모델 지원 (문서, 키-값, 열, 그래프 등)
  • 유연한 스키마
  • 다양한 쿼리 언어 사용 (SQL 유사 언어, JSON 기반 쿼리 등)

NoSQL, SQL 언제 사용할 것인가?

  • SQL은 데이터의 일관성과 안정성을 보장, 정확성이 중요한 데이터에 사용하면 좋을 듯 합니다
  • NoSQL은 메모리에 데이터를 캐시하여 빠른 읽기와 쓰기를 지원하므로, 실시간 처리가 필요한 애플리케이션에서는 NoSQL 사용을 권장하고 있습니다(gpt 및 구글링)
  • 실제 현업에서도 두 데이터베이스를 적절히 조합해서 사용한다고 합니다

소켓 통신

  • TCP 통신은 언제 사용하는가?
    • 연속성보다 신뢰성이 중요한 전송을 필요로 하는 프로토콜에서 사용된다. 채팅, 파일 전송과 같은 경우가 될 수 있다
    • 데이터가 전송된 순서대로 도착하도록 보장합니다. UDP보다는 느립니다.
  • UDP 통신은 언제 사용하는가?
    • 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에서 사용될 수 있다.
    • 데이터그램이 전송된 순서대로 도착하지 않을 수 있습니다.
    • 또한 데이터그램이 손실되거나 중복되거나, 순서가 바뀌어 도착할 수 있습니다.
  • 스프링 프레임워크에서 웹소켓을 사용하는 경우, 이는 TCP 기반 이라고 합니다.
  • TCP 연결을 통해 양방향 통신을 유지합니다.
  • 사용하기 위해서는 의존성 추가, ConfigClass, 핸들러 이렇게 3가지를 작성 해주면 됩니다.
  • (http://start.spring.io/) 시작 할 때 WebSocket 종속성 추가 시켜 줘야 합니다.
  • 웹 소켓이란?
웹소켓(WebSocket)은 클라이언트와 서버(브라우저와 서버)를 연결하고 실시간으로 통신이 가능하도록 하는 첨단 통신 프로토콜이다. 웹소켓은 하나의 TCP 접속에 전이중(duplex) 통신 채널을 제공한다.
  • 결국 스프링 웹소켓을 쓴다는 건 TCP를 쓴다는 뜻이라고 생각합니다.

좋았던 점

팀 프로젝트를 시작하면서 DB부터 어떻게 짤 지 고민하는, 진짜 백엔드 개발자가 된 듯한 느낌이었다.

내가 보완할 점

오늘은 딱히 못느꼈다.

TIL 7/29(월)

새로 알게 된 점

AWS

  • ap-northeast-2 가 서울 Region
  • Availability Zone(가용 영역) -> 최소 2개 이상 1 리전 구성
  • VPC (Virtual Private Cloud) 가상 사설 네트워크 망
  • VPC를 만들면 Region 안에 리소스를 만들 수 있다
  • EC2를 생성할때는 Region이란 표현을 안쓴다
  • VPC를 구성하는,EC2를 생성하는 작은 단위의 그룹은 어떤 이름을 가지고 있는가? Subnet
  • VPC > Subnet
  • VPC 는 private IP를 사용한다
  • 하나의 서브넷은 하나의 Availability Zone을 못벗어나고, 하나의 VPC는 리전을 못벗어난다.

IGW, Routing Table, EC2의 IP 또는 Domain Name이 필요하다!! 또한 EC2의 방화벽이 필요하다. 그것은 바로....SG(Security Group) port별로, ip별로, protocol별로 설정할 수 있게 되어 있다. Authentication(인증), Authorization(인가 , 권한 부여)

Policy 정책상 무조건 Deny가 이긴다. 아무런 언급이 안되어있다면 deny가 default

IAM ( Identity and Access Management) : 내가 누구인지 밝히고 , 내가 어디까지 권한이 있는지까지. 4가지로 분류가 가능하다

  1. User : policy를 넣어줘야 판단 가능
  2. Group
  3. Role
  4. Policy(일종의 JSON 문서)

CIDR

  • 10.0.0.0/16 -> 어디서부터 어디까지 , 2의 16승개를 사용할 수 있다. 16은 mask라고 부른다(maksing,mask 등등...)
  • 16은 즉 고정할 숫자이다. 그렇다면 위의 10.0.0.0/16 이면 앞의 10.0 은 고정이다.
  • 10.0.0.0/24 면 앞의 3칸이 고정, 즉 10.0.0.0~10.0.0.255 까지 256개의 IP주소 사용 가능하다.

TIL 8/6(수)

VPC가 없으면 EC2를 돌릴 수가 없다.

EC2 방화벽 이름은 Security Group (SG) 이다

사람의 작업 없이 , 애플리케이션이 실행되고 있는 상태로 EC2를 늘려주거나 줄여주는 역할을 해주는게 Auto Scaling. Auto Scaling 하기 위해선 AMI가 필요하다.

서버 있는 세상에서 살겠다 -> Serverless EC2를 대체 할 수 있는 Serverless 서비스는 AWS에서 lambda 라고 한다. 서버가 없는데 도대체 lambda는 코드를 어떻게 돌릴까? 정확히 얘기하자면 서버에 대한 관리를 사람이 안 하는게 lambda 라고 한다. 즉, 사람이 관리 할 필요 없는 환경.

람다의 성능 설정은 cpu가 아닌 RAM(최소 128MB , 최대 10GB)에 비례해서 네트워크성능, vCPU성능이 설정된다. 람다의 실행 시간은 Execution time. 실행 시간 15분 안에 모든 코드를 못 돌리면 람다를 사용할 수 없는 코드이다.

TIL 8/12(월)

람다는 따로 로그를 안써도 CloudWatch에서 Log를 확인 할 수 있다. S3가 람다를 호출 하려고 할 때, 람다를 invoke할 수 있는 권한이 있어야 한다. 어디에? S3에 권한이 있어야 한다 람다에서 invoke가 수행이 되었을 때 로그를 Cloud Watch에 작성한다. 람다를 호출하려고 할때 S3는 람다의 API를 호출 한다. 람다가 코드 수행을 하다가 로그 프린트 찍어야 되네? 할 때는 Cloud Watch야 로그 만들어라!! 라고 한다. 이때 Cloud Watch의 API를 호출하는 것이다.

이 때 API를 호출 할 때 권한이 있는걸 확인하는 게 바로바로 IAM 이다.