본문 바로가기

분류 전체보기

(66)
FlyWay로 DB 형상 관리 개발을 하다보니 DB 를 마이그레이션 하는경우가 게속해서 발생되고 테스트 db 에는 마이그레이션을 했으니 운영 db에는 마이그레이션을 안해서 장애가 발생하는 경우 등 다양한 휴먼 에러가 많이 나타난다. FlyWay를 사용하여 이를 관리하려고한다. Flyway Flyway는 데이터베이스의 형상을 관리하기위한 도구로 데이터베이스의 스키마 및 데이터의 변경사항을 관리하고 일관성 있게 유지하도록 지원한다. Flyway는 여러 마이그레이션 이력을 가지고 동작을 하면서 각 버전 과 실행 여부를 관리하며 순차적으로 마이그레이션을 진행하여 최신상태를 유지한다. 현재 개발도구로 SpringBoot + JPA 를 사용하기에 여기에 Flyway를 추가한다. flyway 추가 및 활성 의존성 추가 //flyway implem..
Value Object 가 최고다. 사람의 나이를 나타날때 어느 자료형을 사용해야할까? 1. Interger 2. Boolean 3. String 정답은 셋다 아니다. 나이를 나타내는 타입 Age 를 만들어서 사용해야한다. value object 코드의 유지보수와 가독성을 향상시키며 모델의 표현력을 높일수있는 value object 는 도메인에서 한개 또는 그 이상의 속성을 묶어 특정한 값을 나타내는 객체를 의미한다. value object 의 특징 및 장점으로 는 불변성, 동등성, 자가 유효성, 휴먼 에러 방지 가 있다 불변성 한번 생성되면 그 값을 변경하지 못하게하여 중간에 변경되지 않는 안정성 과 다중 스레드 환경에서 안전하게 사용이 가능하다. public class Age { private int value; public Age(i..
Spring @Bean 과 @Component Spring 에서 IOC Containe 에 의해 관리되는 Spring Bean 을 사용하기위해서는 등록하는 과정이 있어야하는데 Bean 을 등록하는 어노테이션으로는 @Bean 과 @Component 가 있다. 둘다 Bean 을 등록하도록 하는 기능이지만 용도가 다르다. @Bean Bean의 @Target 를 보면 METHOD 로 되어있어 메소드 위에 부착하는 어노테이션이라는것을 알수있다. @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Bean {} 외부라이브러리 와 같이 개발자가 직접 제어가 불가능한 Bean 을 생성하려할때 사..
Spring Boot 및 DB 모니터링 시스템 구축 Spring Boot Actuator Spring Boot Actuator 는 다양한 엔드포인트를 통해 모니터링을 지원하는 라이브러리. 이를통해 실행 중인 호스트와 애플리케이션의 상태 정보, 메모리 사용량, 요청 횟수, HTTP 엔드포인트 등 다양한 정보를 확인 의존성 추가 //Spring Boot Actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' Spring Boot Actuator 는 자체적으로 다양한 엔드포인트를 제공하고있다 예로 /actuator/health 에 접근하면 헬스체크 엔드포인트로 {stat..
GitHub Actions 사용하여 CI/CD 적용해보기 용어Github Action 의 개념 용어로는 Workflow, Event, Job, Step, Action, Runner 가 있다.WorkflowGithub Action 의 최상위 개념Repository의 .github/workflows 폴더 아래에 저장하나 이상의 Job으로 구성되고, Push나 PR과 같은 Event에 또는 특정 시간대에 실행 될 수 있는 자동화된 프로세스EventWorkflow를 Trigger(실행)하는 특정 활동이나 규칙특정 활동이란 Push, Pull Request, Commit 특정시간(Cron) 등을 의미특정 행동이 아닌,webhook (Repository Dispatch Webhook)을 사용하면 Github 외부에서 발생한 이벤트에 의해서도 Workflow를 실행 가능R..
JPA Column의 null 제약 조건 JPA 에서 DDL 생성시 제약 조건을 매핑하는 과정에서 해당 필드에 null이 들어올수없도록 제약을 걸고 싶을때 @Column(name = "name", nullable = false) private String name; 위와같이 nullable 를 false 로 주어 null 이 들어올수없는 제약을 걸어둘수있다. create table tb_library ( id varchar(255) not null, **name varchar(255) not null,** primary key (id) ) engine=InnoDB; 실제 테이블 생성 쿼리를 보면 name 컬럼에 not null 조건이 붙은 상태로 생성하는것을 볼수있다. 이렇게되면 name 필드에 null 이 들어간 엔티티는 DB 에 들어갈수는있..
Clean Architecture for Android 아키텍쳐의 필요성 태초 기존의 서버에서 사용하던 MVC 패턴을 Android,IOS 에 적용하며 개발. 초기에는 큰 문제가없었으나 점점 클라이언트의 몸집이 키지며 관심사 분리에 안되기에 발생하는 문제를 직면 아키텍쳐 도입의 장점 일관적인 코드 작성으로 유지보수와 협업에 도움이된다. 생산성 향상 테스트의 용이성 개발의 방향성을 잡을수있다. 종류 MVC : model + view + controller 서버든 클라이언트든 일반적으로 접할수있는 아키텍쳐 하지만 비지니스 로직과 뷰의 관점 분리가 안되기때문에 안드로이드는 MVP, MVVM을 적용 MVP : model + view(view controller) + Presenter 이곳에서의 뷰는 뷰콜백을 받아 구성하는 구조 모델과 뷰를 함께 관리하긴하지만 중간 ..
?? : DB 의 인덱스 가 뭔가요? 인덱스란 인덱스란 임의의 규칙대로 부여된 임의의 대상을 가리키는 무언가 를 의미. 데이터 베이스에서의 인덱스는 대용량 데이터 에서 원하는 데이터를 빠르게 찾기위해 사용된다. 데이터 조회의 성능을 향상 시키기 위해 사용 조회만 향상시키기 위해 insert, update,delete 의 성능을 희생 대용량일시 효과가 더욱 좋다. index 또한 하나의 데이터베이스 객체이며 DB 에 따라 다르지만 스키마 객체 이거나 테이블 내의 객체로 존재하게된다. index 는 항상 최선의 정렬을 유지하며 index 를 사용하기위한 저장 공간이 필요로 한다. → 데이터베이스 크기의 약 10% 정도 차지 인덱스 = 정렬 인덱스가 적용되어있다 라고하는건 결국 데이터베이스안의 데이터들이 정해진 방식으로 정렬이 되어있다는 말이다...