전체 글
-
[개발론] DB 테이블 날아가는 것을 보며 배운 포스트 모템의 중요성개발론 2024. 7. 20. 16:48
업무를 하다보면 문제가 생기기 마련이다. 얼마 전,우리 회사에서 디비 관련한 이슈가 생겼었는데 새로오신 경력직 사원분이 포스트 모템을 요청하여우리 회사의 구조의 위험성을 발견한 적이 있었다.그래서 디비 백업을 더 주기적으로 하고계정의 분리 작업을 진행하였다. 개발자가 쉽게 prod 테이블에 접근할 수 있는 것이 문제였다. 다들 그동안 문제라는 것은 알았지만 ... 모두의 타조 증후군이었던 것이었는데결국 문제가 터지고 말았다.dev 테이블을 비워야 하는데 prod 테이블을 비우신 것이다. 다행히 작업자분이 백업해두신게 있었고truncate 이후 유저 작업이 없어 큰 일은 일어나지 않았다. 그래서 포스트 모템이 무엇인가? 포스트 모템은 프로젝트나 작업이 완료된 후, 특히 문제가 발생했을 때 이를 분..
-
[AWS] 한 ec2 인스턴스로 여러 서비스 배포하기 - 2 (컨테이너 배포 이후의 프로세스)Infra/aws 2024. 7. 20. 14:11
지난 포스트에서 작성한 배포 프로세스에서는 한 ec2 인스턴스에 여러 컨테이너를 올리는 작업이었다. 그럼 이제 위의 그림에서 백엔드 파트의 ELB 설정 혹은 NGINX 를 사용한 리버스 프록시를 통해배포된 컨테이너로 DNS 주소를 라우팅하는 과정을 기록하려 한다. 먼저 ELB 는 뭘까? AWS ELB (Elastic Load Balancing)은 클라우드 환경에서 여러 대의 EC2 인스턴스나 다양한 서비스들 사이에 트래픽을 분산시켜주는 서비스다.ELB는 사용자의 요청을 여러 EC2 인스턴스로 자동으로 분배하여 각 인스턴스의 부하를 고르게 분산시켜서비스의 가용성과 신뢰성을 높이는 역할을 한다.ELB의 종류나는 Application LoadBalancer 를 사용했는데 주요 기능부하 분산: ELB는 트래..
-
[Network] CDN이 뭔지 알죠?Infra 2024. 7. 7. 15:42
내가 대충 넘겨짚고 있던 CDN에 대한 질문을 받았고나는 영 잘못알고있었다. 내가 업무하며 사용한 CDN은 aws의 cloud front 였다.나는 이 cloud front가 일종의 웹서버인줄 알았다.캐시된 웹서버. 하지만 이는 틀렸다! CDN 은 컨텐츠 전송 네트워크이다.CDN을 사용하면 이 컨텐츠들을 여러 지역에 분산된 서버들을 통해 제공함으로써 지리적으로 떨어진 사용자도 빠르게 접근할 수 있다. CDN은 성능 향상과 함께 웹사이트의 부하를 줄이고 보안을 강화하는 등의 장점을 가지고 있다. CDN은 콘텐츠를 호스팅하지 않으며 적절한 웹 호스팅의 필요성을 대체할 수는 없지만 네트워크 에지에서 콘텐츠를 캐싱하여 웹사이트 성능을 개선한다. 이렇게 CDN 을 사용하면 좋은 점이 여럿 있는데멀티 리전환경에..
-
[Ubuntu22.04] 우분투 22.04 원격 튕김 오류 해결Infra/devOps 2024. 6. 24. 21:35
최근 우분투 서버 원격 접속하느라 애 좀 먹었다. xrdp 로 원격 설정했던 서버에 문제가 생기면서 기존에 잘 되던 원격이 안돼서그냥 우분투 22.04에서 제공하는 sharing 의 RDP를 쓰려고 했는데 원격 연결은 되는데 한 5분가까이 되니 꺼져버리는 것이다.그래서 타임아웃이 되어있는 것같다는 생각을 했고원인이 맞았다. 먼저 22.04 에서 원격 연결하는 방법을 공유한다. 설정에서 sharing 을 누른 후 on 으로 슬라이드해준다.기존의 것은 off 로 되어있을텐데 클릭 후 들어가서 켜주면 된다. Remote Desktop 과 Remote Control 을 켜줬다.이후 아래의 User Name 과 Password 를 입력해주면 된다.처음 Password는 난수값이 입력되어 있으니 사용할 비밀번호..
-
[이펙티브 자바 스터디] 직렬화 - 2책/Effective Java 2024. 6. 19. 00:14
readObject 메서드는 방어적으로 작성하라 public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end 종료 시각; 시작 시각보다 뒤여야 한다. * @throws IllegalArgumentException 시작 시각이 종료 시각보다 늦을 때 발생한다. * @throws NullPointerException start나 end가 null이면 발행한다. */ public Period(Date start, Date end) { this.start = new Date(start..
-
[이펙티브 자바 스터디] 직렬화책/Effective Java 2024. 6. 13. 03:09
자바 직렬화의 대안을 찾으라 워게임이라는 영화에서 조슈아라는 컴퓨터는 이렇게 말한다고 한다."승리하는 유일한 길은 전쟁하지 않는 것이다."자바 직렬화도 마찬가지 이다."직렬화의 위험을 피하는 가장 좋은 방법은 아무것도 역직렬화하지 않는 것이다." 먼저 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하는 것이 직렬화이고그 바이트코드로 부터 객체로 재구성하는 것이 역직렬화이다. 자바의 역직렬화는 명백하고 현존하는 위험이라고 한다.신뢰할 수 없는 스트림을 역직렬화하면 Remote Code Execution , Denial of Service 등의 공격으로 이어질 수 있다. 2016년 샌츠란시스코 시영 교통국에서는 이런 직렬화의 보안 문제로 인해 랜섬웨어 공격을 받은 적이 있다고 한다. https://www.t..
-
[이펙티브 자바 스터디] 제네릭 - 2책/Effective Java 2024. 6. 7. 18:42
배열보다는 리스트를 사용하라 배열은 공변(함께 변함)이다.하지만 제네릭은 불공변이다. 배열의 공변성으로 인한 문제Object[] objectArray = new Long[1];objectArray[0] = "응 안돼"; // 런타임 에러 발생 제네릭의 이점List list = new ArrayList(); // 컴파일 에러... 배열은 실체화된다.그래서 런타임 시에도 그 타입 정보가 존재한다. 하지만 제네릭은 그렇지 않다.컴파일 시점까지만 존재하고 이후엔 Object 로 변환되거나 제거된다. 그래서 배열은 제네릭 타입, 매개변수화 타입 , 타입 매개변수로 사용할 수 없다. List[] stringLists = new List[1]; // (1)List intList = List.of(42); // ..
-
[이펙티브 자바 스터디] 제네릭책/Effective Java 2024. 5. 30. 19:18
제네릭(Generic)은 자바 5부터 도입된 기능으로, 클래스나 메서드를 선언할 때 타입을 파라미터로 받을 수 있게 해준다. 이는 코드의 재사용성을 높이고, 타입 안전성을 보장하며, 캐스팅(casting)을 줄여준다. 그니까 컬렉션이 담을 수 있는 타입을 컴파일러에게 알려줘서 엉뚱한 타입의 객체를 넣으려는 시도를 컴파일 과정에서차단하여 런타임 시의 오류를 피할 수 있게 하는 것이다.Raw 타입은 사용하지 말라먼저 Raw 타입이란 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않은 것을 말하고 List 의 Raw 타입은 List 인 것이다.이는 제네릭이 생기기 전 코드와 호환되도록 하기 위해 만들어둔 것으로 사용하지 않는 것이 좋다. 제네릭의 장점은 다음과 같다. 1. 클래스나 메소드 내부에서 사용되는 객..