규칙 8. 일급 컬렉션을 사용한다. 일급 컬렉션이란 컬렉션을 wrapping 하면서 wrapping 한 컬렉션 외 다른 멤버변수가 없는 상태를 일급 컬렉션이라 한다. 즉 이번 여덟 번 째 지침은 도메인 클래스를 컬렉션으로 감싸 처리해야 하는 경우 이를 일급 컬렉션으로 구현하라는 지침이다. 우리는 이전에 세 번째 지침인 '모든 문자열과 원시 자료구조를 포장하라'에서 기본 자료구조를 포장하며 얻는 이점에 대해 다뤄본 적이 있다. 여기선 '단수형 클래스'에 도메인적 요소를 부여는 것에 초점을 두었다면, 이번 여덟 번째 지침에서는 '복수형 클래스'에 도메인적 요소를 부여하여 단수형 클래스가 가질 수 없는 비즈니스 로직을 구현하도록 초점을 두는 것이다. 예시 먼저 일급 컬렉션이 무엇인지 예시를 통해알아보자. 다음..
규칙 7. 인스턴스 변수가 2개 이상인 클래스를 쓰지 않는다. 클래스의 인스턴스 변수의 수를 제한하라는 원칙이다. 여기서 말하는 인스턴스 변수는 원시타입, 문자열 또는 컬렉션을 포함한 기본 자료구조를 의미한다. 클래스에서 인스턴스 변수는 클래스가 관리하는 '상태'를 의미한다. 클래스의 상태는 정체성을 나타내는 요소로 상태가 많다는 것은 정체성 또한 많이 가지고 설계되었다는 것을 의미한다. 우리는 이전에 비슷한 문제를 해결한 경험이 있다. 세 번째 규칙인 '모든 원시값과 문자열을 포장한다.'에서 상태에 도메인적인 의미를 부여해보았다. 일곱 번째 지침에서는 의미를 가지는 상태를 효율적으로 관리하는 법을 이야기한다. 예시 다음과 같이 제목, 작가, 카테고리, 출판사, 가격의 속성을 가지는 Book 클래스가 있..
우리는 지난 포스팅에서 Github Actions를 이용해 CI 환경을 구축하는 방법을 알아보았다. 우리는 이전에 EC2 인스턴스를 생성하고 스프링 부트 프로젝트를 띄울 때 scp 명령어를 이용해 로컬의 빌드 파일을 EC2 인스턴스로 복하한 후 ssh 로 접속해서 실행시켰다. 하지만 매 수정사항마다 이렇게 배포 하면 번거롭기 때문에 이러한 작업들을 자동화해보겠다. 1. 배포방법 우리는 main 브랜치로 수정사항을 푸시하면 EC2까지 배포되는 워크플로우를 만들어볼 것이다. AWS에 배포를 하기 위해서는 소스코드를 압축하여 AWS 스토리지에 저장 후 서버에 전달하여 실행하는 방법을 사용한다. AWS에서 공식적으로 안내하는 방법은 크게 두 가지가 있다. AWS S3 빌드파일 압축해서 업로드 -> AWS EC2..
1. CI/CD 한 프로젝트를 여러명이 공유하며 발생할 수 있는 문제점은 매우 많다. 오류를 방지하기 위해 테스트코드를 작성하지만 매 PR 리뷰마다 리뷰어들이 일일히 테스트 코드를 돌려보면 생산성이 저하된다. 따라서 매 테스트의 성공을 확실히 보장 해주는 수단이 필요한데 그것이 CI/CD 라는 개념이다. CI (Continuous Integration) '지속적 통합' 이라는 의미로 애플리케이션 변경 사항 반영시 즉 PR시 자동으로 빌드 및 테스트 되어 잘못된 코드가 공유되는 것을 방지한다. CD (Continunous Deployment) '지속적 배포' 라는 의미로 변경 사항을 배포할 때 사용하는 파이프라인을 공유하여 배포 플로두을 자동화해 번거로움을 없애는 것이다. 2. Github Actions ..
지난 포스팅에서 스프링 부트의 데이터베이스를 AWS RDS(Mysql)로 변경하는 작업을 해 보았다. 하지만 변경한 AWS RDS(Mysql)는 테스트 환경이 적합한 데이터베이스가 아니기 때문에 테스트용 DB를 H2로 분리해 보겠다. H2 기본 설정 은 해당 포스팅에서 자세히 다루고 있으니 해당 포스팅을 참고하도록 하자. 1. Dependencies 추가 runtimeOnly 'com.h2database:h2' 우리는 테스트용 데이터베이스로 H2 데이터베이스를 사용할 예정이기 때문에 H2 의존성을 추가한다. 2. application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/h2test username: sa password: driver-clas..
우리는 RDS 인스턴스 만들기 를 통해 AWS RDS 인스턴스를 만드는 법을 알았다. 이제는 생성한 데이터베이스를 우리 Spring Boot 프로젝트에 연결해보자. 1. Dependencies 추가 runtimeOnly 'com.mysql:mysql-connector-j' mysql 드라이버를 이용해야 하기 때문에 mysql 의존성을 추가해준다. 다른 블로그 글 들을 보면 runtimeOnly 'mysql:mysql-connector-java' 로 알려주는 경우가 대부분인데 버전이 맞지 않아 cannot load driver class: com.mysql.jdbc.driver 라는 오류가 발생한다. 'com.mysql:mysql-connector-j' 가 최신 버전이나 적절한 의존성을 추가해주도록 하자...
지난 포스팅에서 AWS EC2 인스턴스를 생성하고 Spring Boot 서버를 띄우는 작업까지 해보았다. 이번에는 DB 연동을 위해 RDS 인스턴스를 생성하고 이전에 만든 EC2와 연동하는 것까지 해보자. 1. RDS 인스턴스 생성 1.1. RDS 메뉴 이동 EC2 때와 마찬가지로 검색을 통해 RDS 메뉴로 이동 후 좌측 '데이터베이스' 카테고리를 누르면 이와 같은 화면을 볼 수 있다. 우측 상단의 '데이터베이스 생성' 버튼을 통해 새 데이터베이스를 만들어보자. 1.2. 데이터베이스 생성 1.2.1. 데이터베이스 종류 선택 먼저 원하는 데이터베이스의 종류를 선택한다. 1.2.2. 템플릿 선택 템플릿 선택이다. 프리티어를 사용하고 있기 때문에 프리티어를 선택해준다. 1.2.3. 기본 설정 데이터베이스의 기..
1. EC2 인스턴스 생성 1.1. AWS Rsgion 설정 위치를 서울로 설정한다. 위치에 따라 인스턴스 위치가 결정되기 때문에 서울이 아닌 곳으로 설정하면 속도가 낮을 수도 있다. 1.2. ec2 메뉴 진입 후 새 인스턴스 생성 검색을 통해 ec2 메뉴로 이동한다. 이동 후 좌측 인스턴스 카테고리를 선택해 우측 상단의 인스턴스 시작 버튼을 클릭해 인스턴스를 생성한다. 1.3. Amazon Machine Image(AMI) 및 인스턴스 유형 선택 이름을 입력해 주고 AMI를 선택한다. AMI는 서버의 종류를 선택하는 것이다. 본인이 원하는 걸 선택하면 된다. 인스턴스는 프리티어를 이용한다면 t2.micro 외에 다른 선택권은 없다. 1.4. 키페어 생성 키페어는 EC2 서버에 SSH 접속을 하기 위한 ..