잔망준형 두서없는 컴퓨터공학 기술 블로그 전체 글 (49) 썸네일형 리스트형 스레드 풀(Thread Pool) 스레드 풀이란?미리 생성되어 있는 스레드들의 집합이다.스레드 풀이 필요한 이유?요청마다 스레드를 새로 생성하여 작업을 처리할 수도 있다.하지만 그럴 때 발생하는 문제가 있는데 먼저, 스레드 생성 자체에 비용이 든다.그리고, 스레드 생성에는 제한이 없기 때문에 많은 요청에 스레드가 계속 생성되다가 리소스 부족 문제로 서버가 죽을 수 있다. 그래서 이를 해결하기 위해 차라리 미리 최댓값이 정해진 생성되어 있는 스레드 풀을 이용하여, 요청마다 새로 생성할 필요 없이 스레드 풀에서 놀고 있는 스레드로 작업을 처리하면 된다.팁WAS 서버의 성능 튜닝의 핵심은 스레드 풀의 크기 조절이다.이게 너무 적다면, 놀고 있는 리소스가 생길 것이고너무 크다면 반대로 리소스 부족으로 서버가 죽을 것이다.적당한 타협 지점을 찾.. 컨텍스트 스위칭(Context Switching) 컨텍스트 스위칭이란?CPU가 프로세스(또는 스레드)를 실행하다가 다른 프로세스로 작업을 교체하는 과정이다.일반적인 상황으로는 CPU 현재 실행 중인 작업의 상태를 저장하고, 다른 작업의 상태를 복원해서 작업을 전환하는 과정이다.컨텍스트 스위칭이 필요한 이유?멀티태스킹 지원을 위해서 컨텍스트 스위칭이 존재한다. (물론 CPU 코어 하나는 하나의 일 밖에 처리하지 못해 실제로 동시 진행은 아니지만, 컨텍스트 스위칭을 통해 여러 작업을 돌아가며 수행하면 사용자 입장에서는 동시에 진행되는 거처럼 느껴진다.) 만약 컨텍스트 스위칭이 되지 않는다면 여러 작업이 있을 때 하나의 작업이 마무리될 때까지 CPU 코어에 할당되지 않은 작업들은 계속해서 대기를 해야 하는 현상이 발생한다.컨텍스트 스위칭의 과정컨텍스트 스위칭.. [AWS] NAT Gateway에서 NAT 인스턴스 전환을 통한 비용 절감하기 * 실제 프로덕션 환경에서는 NAT Gateway를 사용하는 것이 NAT 인스턴스를 이용하는 것에 비해 장점이 많습니다.* 개발 환경에서의 비용 절감을 위한 솔루션입니다.왜 NAT Gateway에서 인스턴스로 전환을 하는지?우리는 현재 대학교 4학년 졸업 작품을 진행 중이다.배포 환경을 AWS로 구성하고 사용 중인데, RDS하나, EC2 두 개를 띄워두는데 지난달 비용이 5만 원 넘게 나왔다.(이거는 심지어 지난달 초중반부터 돌린 거라 다음 달은 더 나올 거다.) 비용 절감이 필요하다고 느껴지기에 일단 가장 큰 지출부터 확인해 보자.지난달 청구서를 확인해 보니, 가장 큰 비용을 차지하고 있는 게 NAT Gateway다. 프라이빗 서브넷에서 외부로의 통신을 가능하게 해 주는데, 필수적으로 필요한 기능이긴 .. [AWS] Elastic Container Service ECS란 무엇인가?AWS의 컨테이너 오케스트레이션 서비스이다.ECS Task해당 컨테이너에 어느 정도의 리소스를 사용하고 어떤 이미지로 컨테이너를 가동할지 컨테이너에 대한 사전 작업 정의 영역이다.ECS ClusterECS 컨테이너를 띄울 영역을 정의한다. 서버리스 방식의 Fargate도 있고, EC2와 ASG를 이용하여 컨테이너를 가동할 서버를 확보하는 방식도 있다.ECS Service정의된 ECS Task를 바탕으로 실제 ECS Cluster에 컨테이너를 띄우는 작업을 정의한다. 정리하자면, 서버 자원을 확보하고, 서비스는 그 자원을 이용하여 컨테이너로 마음대로 관리하는 서비스이다.MSA 환경에서 매우 편리! 배포 단위가 서버가 아닌 컨테이너에만 집중!Tips대상 그룹을 ECS 서비스 단위로 하고싶을.. Jenkins와의 한따까리 Jenkins는 확실히 암덩어리 같은 존재다. 클라우드 엔지니어를 꿈꾸는 입장에서 CI/CD 환경 구성 한번 정도는 확실하게 해봐야 하지 않을까? 싶어서 이번 졸업작품에서 내가 우리 팀원들을 위한 빌드/배포 자동화를 구현하기로 마음을 먹었다. 흐름은 요거 --> GitHub -> Jenkins -> App Build -> Docker Build -> ECR -> ECS GitHub Actions라는 요즘 좋은 기술도 있지만, 취준생 입장에서는 기업에서 쓰는 도구를 그래도 한번 써보는 게 좋지 않을까? 싶어서 국밥 같은 Jenkins로 구축해 보기로 정했다. 젠킨스 서버로는 AWS의 EC2 중 t2.micro 인스턴스를 사용했다. 원래는 private subnet 이용하는 게 정배지만, 개발단계이기도 하고.. 관계형 데이터베이스에서 외래키는 필수일까? 나는 백엔드 개발을 할 때, 데이터베이스 설계의 비중을 높게 가져간다.(얘가 탄탄해야 나중에 되돌아 갈 일도 없고 그냥 내 마음이 편하다..) 근데 평소와 다르지 않게 외래키 제약을 걸면서 느낀 점이 외래키의 불편한 점일단 내가 개발을 하면서 느낀 불편한 점을 말해보겠다.외래키를 걸면 동시에 제약 조건들도 관리를 하게 되는데 이게 양이 많아 지고 데이터베이스에 종속이 되다 보니 오히려 관리가 어려워지는 느낌이 들었다.이럴 거면 차라리 한번에 애플리케이션 레벨(코드)에서 처리를 하는게 더 관리를 하기 쉬울 것 같았다. 그리고 또한 외래키가 걸려있으면 테이블을 생성하는 순서도 중요해지는데 이게 내가 쓰는 ORM 기술인 JPA 에서는 테이블 생성 순서 제어가 안되는 거 같아서 개발 단계에서 번거로워진다. 코.. [AWS] EFS <-> EC2 마운트 문제 해결 feat. VPC ❗️ 문제 상황EC2를 생성할 때 생성해 둔 EFS를 다음과 같이 간편하게 연결할 수 있다.아래의 "필요한 사용자 데이터 스크립트를 연결하여 공유 파일 시스템을 자동으로 탑재" 항목을 체크하면 우리가 EC2에서 수동으로 마운트 할 필요 없이 자동으로 스크립트가 돌아가 EC2 생성 시 마운트 작업을 진행해 준다.근데 여기서 문제가 기존에는 잘 마운트가 되었는데 이번에는 EC2 여러 대를 띄우면서 사용을 하다 보니 /mnt/efs/fs1 영역에 파일 작업을 하는데 이상하게 파일 공유가 안되고 있었다. 그래서 혹시나 해서 df -hT로 파일시스템을 확인해 보니 애초에 EFS와의 연결이 되어있지 않았다.대체 무엇이 문제일까?❓ 문제 원인이전의 작업과 달라진 환경이 무엇이 있을까 곰곰이 생각해 봤다. Defaul.. [AWS] IAM이란 무엇인가? IAM이란?Identity and Access Management의 약자로 AWS의 권한 관리 서비스이다.또한 특정 리전에 종속되지 않는 글로벌 서비스이다.IAM의 주요 구성 요소사용자AWS 자원에 접근하는 개별 사람이나 애플리케이션을 의미한다.애플리케이션이라 함은 권한 부여를 실제 사람이 아닌 EC2와 같은 AWS 서비스도 대상이 될 수 있다.그룹사용자들을 묶어놓은 집합이다. 그룹에 정책을 적용하면 그룹 내에 사용자들에게 동일한 권한이 적용된다.그리고 하나의 사용자는 여러 그룹에 속할 수도 있다.정책누가 어떤 자원에 어떤 작업을 할 수 있는지 명시한다. 다음과 같이 Json 형태의 문서 구조로 되어있다.{ "Version": "2012-10-17", "Statement": [ {.. 이전 1 2 3 4 ··· 7 다음