엔지니어링
[운영체제 공룡책] Docker 이용하여 Mac OS 에 실습 환경설정
[운영체제 공룡책] Docker 이용하여 Mac OS 에 실습 환경설정
2022.06.06인프런 '운영체제 공룡책 강의'의 실습 환경을 구축하기 위해 Docker를 사용합니다. Container 내부에 실습 코드와 자료 등을 관리하여 로컬을 깨끗하게 유지합니다 :-) 1. 도커를 이용하여 Ubuntu 이미지 설치 // 도커는 설치되었다고 가정함 // ubuntu 이미지 다운로드 및 컨테이너 실행 $ docker pull ubuntu:20.04 $ docker run -it --name myUbuntu ubuntu:20.04 // 도커 컨테이너 내로 들어옴 $ apt-get update $ apt-get upgrade -y // 교수님 업글 안하긴 하심 $ apt-get install build-essential gdb 2. 개발 편의를 위해 로컬 VS Code에 Container 연결 VS ..
디미터 법칙(Law of Demeter)과 묻지 말고 시켜라(Tell, Don’t Ask)
디미터 법칙(Law of Demeter)과 묻지 말고 시켜라(Tell, Don’t Ask)
2022.03.13💡 Oreilly의 Implementing Domain-Driven Design, 조영호님의 객체지향의 사실과 오해, 로버트 C. 마틴의 Clean Code을 인용하여 두 원칙을 설명하고 있습니다. 자세한 출처는 포스팅 하단에 적어두겠습니다. 이 글은 킹갓제너럴 동료 조셉님이 인싸이트를 제공해주어 작성하게 되었습니다 (🙌 감사) 디미터 법칙(Law of Demeter [Appleton, LoD]) 과 묻지 말고 시켜라(Tell, Don’t ASK [PragProg, TDA] 은 Aggregates 을 구현할 때 사용할 수 있는 설계 원칙이며, 두 가지 원칙 모두 메시지를 먼저 결정하고 객체가 메시지를 따르게 하도록 설계하여 정보 은닉을 강조한다. 송신자는 수신자가 어떤 객체인지 모르지만 자신이 전송한 메..
CodeDeploy에서 저장하는 배포본의 수 변경하기 (용량 줄이기)
CodeDeploy에서 저장하는 배포본의 수 변경하기 (용량 줄이기)
2022.02.19AWS CodeDeploy를 이용해서 EC2 에 Srpingboot 어플리케이션을 배포하고 있다. 그런데 EC2에 코드 디플로이를 통해 배포된 최근 5개의 이력과 파일이 관리되기 때문에 jar 파일이 뚱뚱해질 수록 EC2의 용량이 차지하게 된다. 코드디플로이에서 default로 5개의 이력을 저장하기 떄문에 jar 파일용량 * 5개만큼의 저장 공간을 차지하게 된다. 처음에 개발서버에서 낮은 용량으로 서비스를 띄울 때에는 별다른 이슈가 없었다. 하지만 기능들과 의존성이 점점 추가되면서 jar 파일 하나가 차지하고 있는 용량이 커지고, 이게 5개 만큼 누적되면서 용량이 부족해지는 현상이 생겼다. 그래서 코드디플로이에서 자동으로 인스턴스 내에 저장해주는 배포 이력의 수를 조절할 필요가 생겼다. CodeDepl..
Spring Boot 배포 자동화(CI/CD) : Github Actions와 AWS CodeDeploy
Spring Boot 배포 자동화(CI/CD) : Github Actions와 AWS CodeDeploy
2021.10.10먼저 AWS Cloud 환경에서 필요한 선행 작업을 안내하고, Github Actions와 AWS CodeDeploy에서 사용할 스크립트에 대해 설명하겠다. 👉 AWS 사전 구성하기 1. IAM 사용자 생성 디플로이용 계정을 만들어 아래 정책을 연결 AmazonS3FullAccess AWSCodeDeployFullAccess 이 사용자는 Github Actions에서 S3, CodeDeploy에 접근하기 위해 사용하는 IAM 계정이다. 액세스키와 시크릿키를 잘 저장해두자. Github Secret에 저장할거다. 참고 : 아래 EC2, CodeDeploy에서 생성하는 IAM 서비스역할과 사용자는 다르다. Github Secret에 등록 DEV_AWS_ACCESS_KEY_DEPLOY : 액세스키 등록 DEV..
AWS 계정들간의 ACM 인증서 공유하기
AWS 계정들간의 ACM 인증서 공유하기
2021.08.10회사에서 AWS 계정별로 자원을 할당하여 사용중이기 때문에, 각 계정의 자원을 서로 공유해야할 필요가 생겼다. 특정 계정에 있는 도메인 ACM 인증서를 다른 계정에 공유하는 방법을 알아보겠다. ACM 자체는 공유되지 않으나, 다른 계정에서 동일 ACM 인증서를 활용할 수 있는 방법이 있음 만약 공유받을 도메인으로 ACM을 설정한다면, Route 53 설정을 먼저 진행하는 것이 좋음 AWS 계정들간의 Route 53 공유하기 참고 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/acm-export-certificate/ 목표 prod 계정에 example.com 도메인으로 ACM 인증서 존재하는 상태 dev 계정에 dev.example.com 도메..
AWS 계정들간의 Route 53 공유하기 (하위도메인 생성)
AWS 계정들간의 Route 53 공유하기 (하위도메인 생성)
2021.08.04회사에서 AWS 계정별로 자원을 할당하여 사용중이기 때문에, 각 계정의 자원을 서로 공유해야할 필요가 생겼다. 특정 계정에 있는 도메인을 다른 계정에서 공유받아 서브 도메인을 생성하는 방법을 알아보겠다. 참고 : https://serverless-stack.com/chapters/share-route-53-domains-across-aws-accounts.html 목표 prod 계정에 example.com 도메인이 있음 dev 계정에 example.com의 하위 도메인인 dev.example.com 도메인을 추가하고자 함 1. dev 계정으로 로그인하여 Route53의 호스팅 영역 생성 이때 하위 도메인함(dev.example.com)으로 호스팅 영역을 생성 2. 도메인 생성 후 자동으로 NS, SOA ..
Connection Pool이 없는 언어(PHP, Ruby)의 DB Connection 관리
Connection Pool이 없는 언어(PHP, Ruby)의 DB Connection 관리
2021.07.16PHP와 Ruby는 Connection Pool 기능이 없다! 위와 같이 Connection Pool 기능이 없는 언어의 경우, DB 접속을 위해 Connection Pool을 관리해주는 기능을 사용하는 것이 좋다. 만약 DB로 AWS RDS를 사용하는 경우 AWS RDS Proxy는 괜찮은 대안이다. 자체적으로 Connection Pool 기능일 제공하는 DB를 이용한다면 모를까, 커넥션 풀을 하지 못하는 언어에서는 Connection Pool 없이 DB 접속 시 사용자 수가 몰리면 DB가 죽을 수 있다 (웹서버가 죽지 않았는데도!) 자세한 내용은 AWS 가이드를 참고하자! PHP 및 Ruby on Rails와 같은 언어와 프레임워크를 사용하는 애플리케이션은 일반적으로 프록시를 사용하는 것이 좋습니다...
Java로 알아보는 IoC, DIP, DI, IoC Container (하)
Java로 알아보는 IoC, DIP, DI, IoC Container (하)
2021.05.14저번 포스팅에 이어 DI 패턴과 IoC Container에 대해 알아보겠다. Step 3. DI (Dependency Injection) DI(Dependency Injection, 의존관계 주입)는 종속된 객체의 생성을 반전시키는 IoC 원칙을 구현한 디자인 패턴이다. 이전에 DIP 원칙에 따라 추상화하여 클래스간의 결합도를 낮추었다. 하지만 이전 포스팅 예제에서 여전히 CustomerBusinessLogic 클래스가 ICustomerDataAccess 객체를 반환하기 위해 DataAccessFactory 클래스를 참조하고 있다. 이제 DI 패턴을 구현하여 종속된 클래스의 객체 생성을 완전히 클래스 밖으로 내보낼 수 있다. DI 패턴은 IoC를 구현하는 디자인 패턴 중 하나이다. DI를 통해 종속된 객..
Java로 알아보는 IoC, DIP, DI, IoC Container (상)
Java로 알아보는 IoC, DIP, DI, IoC Container (상)
2021.05.13객체지향설계에서 클래스는 반드시 느슨하게 결합되어야 한다. 느슨한 결합은 한 클래스의 변경이 다른 클래스들에게 영향을 미치지 않는 것을 의미한다. 그래서 어플리케이션을 지속가능하고 확장성있게 만든다. 클래스 간의 느슨한 결합을 위해 다양한 원칙, 디자인패턴, 프레임워크가 존재한다. 그 중에서 디자인 원칙인 IoC, DIP와 디자인 패턴인 DI, 프레임워크인 IoC Container를 통해서 어떻게 클래스 간의 결합을 느슨하게 하는 지 알아보겠다. IoC 원칙만 도입한다고 해서 클래스간의 결합을 느슨하게 할 수 있는 것은 아니기 때문에 DIP 원칙, DI 패턴(IoC 원칙을 구현하는 디자인 패턴 중 하나)을 함께 사용해야한다. 그리고 이 모든 과정을 마법처럼 처리해주는 IoC Container에 대해서도 ..
RESTful API를 위한 6가지 원칙과 네이밍
RESTful API를 위한 6가지 원칙과 네이밍
2021.05.10REST와 RESTful REST는 REpresentational State Transfer 의 약어로, 클라이언트과 서버가 데이터를 주고 받는 방식에 대한 아키텍처 스타일이다. REST에는 여섯 가지의 기본 원칙이 있고, 이 가이드를 준수한 인터페이스는 RESTful하다고 표현한다. Client–server 구조 – 클라이언트와 서버는 서로 독립적이어야 하며, 클라이언트는 오직 URIs 리소스만 알아야한다. 클라이언트와 서버의 인터페이스가 변경되지 않는 한, 이 둘은 독립적으로 개발되거나 대체될 수 있게 유지해야한다. (관심사의 명확한 분리) Stateless(무상태성) – 클라이언트의 모든 요청에는 해당 요청을 이해할 수 있는 모든 정보가 포함되어야한다. 서버는 HTTP 요청에 대한 어떤 것도 저장하..
[HTTP] HTTP 메서드와 활용
[HTTP] HTTP 메서드와 활용
2021.05.05HTTP Method에 대해 알아보고, 이를 API 설계에 활용해보는 과정을 정리하였다. HTTP API 설계 강의 모든 개발자를 위한 HTTP 웹 기본 지식 와 개인적으로 공부한 내용을 정리하였습니다. Resource(리소스)라고 표현하고 있지만 최근에는 Representation이라는 표현으로 변경됨. 가장 중요한 것은 리소스 식별 (API URI 고민) URI(Uniform Resource Identifier) 리소스의 의미는 뭘까? 회원을 등록하고 수정하고 조회하는게 리소스가 아니다! 예) 미네랄을 캐라 -> 미네랄이 리소스 회원이라는 개념 자체가 바로 리소스다. 리소스를 어떻게 식별하는게 좋을까? 회원을 등록하고 수정하고 조회하는 것을 모두 배제 회원이라는 리소스만 식별하면 된다. -> 회원 리..
[HTTP] HTTP 기본
[HTTP] HTTP 기본
2021.05.02HTTP 메시지, 클라이언트 서버 구조, Stateful/Stateless, 비연결성에 대해 알아보자. 강의 모든 개발자를 위한 HTTP 웹 기본 지식 와 개인적으로 공부한 내용을 정리하였습니다. HTTP(HyperText Transfer Protocol) HTTP 메시지에 모든 것을 전송 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML (API) 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 지금은 HTTP 시대! HTTP 역사 HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X HTTP/1.0 1996년: 메서드, 헤더 추가 HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전 RFC2068 (199..