전체 글
-
[Spring] Constructor injection(생성자 주입) vs Field injection (필드 주입)개발 2023. 1. 16. 15:24
오늘 기존소스를 수정하다 보니 @RequiredArgConstructor를 선언하고 private final로 주입해서 사용하는 생성자 주입 케이스와 @Autowired를 사용해서 주입하는 필드 주입 케이스가 공존하는 것을 보고 일괄로 수정하려다 두가지가 정확히 무슨차이가 있을까 고민한 내용을 포스팅한다. 1. Contructor Injection (생성자 주입) @RequiredArgsConstructor public class DataAggregationController { private final DataImportService dataImportService; private final DataExportService dataExportServcie; ... } 2. Field Injection ..
-
Spring Multi Module개발 2022. 12. 29. 15:52
최근 프로젝트를 진행하며, 단일 모듈 프로젝트를 멀티 모듈 프로젝트로 나누는 작업을 진행했어야 했다. 단일 모듈 프로젝트를 각 역할 별로 나누어 Interface / 서비스 기능을 수행하는 Domain / Batch 로 3개의 멀티 모듈로 나누게 되었다. 여기서 멀티 모듈이란 독립적인 프로젝트를 하나의 프로젝트 단위로 묶어 모듈로 사용하는 구조를 뜻하는데, 프로젝트 별로 공통적인 기능을 모아 하나의 모듈로 만들 수 있다. 즉 하나의 시스템에서 중심 도메인을 모듈별로 분리하여 보장 메커니즘을 제공받을 수 있게 하는 것 기본 Root Project Gradle에서 공통적인 설정 요소는 subproejcts{ } 내부에 정의한다. 각 모듈 별로 필요한 Dependency는 개별 모듈의 Gradle에서 각자 설..
-
Eureka - [Spring Cloud]개발 2022. 12. 29. 14:28
Eureka? Cloud 환경의 다수의 서비스(ex. api server)들의 Load Balancing 및 Health check, 장애 조치 목적을 가진 Middleware Server. Load Balance : 특정 서비스를 운영하는 서버들이 존재 할때 한 서버에 트래픽이 몰리지 않게 트래픽을 분산 시켜주는 기술 Middleware : 데이터를 주고받는 서비스와 서비스의 사이의 중간의 매개체 역할 Eureka는 middleware 기능을 수행하기 위해 각 연결된 서비스의 IP, Port, Instance Id(host name)를 소유하고 있고, REST방식으로 동작하며, MSA의 핵심 중 하나인 Service Discovery 역할을 수행한다 (지속적으로 변동하는 서비스의 IP,Port를 확인)..
-
Gradle 기본 정리개발 2022. 12. 21. 11:28
Groovy 기반 Build Tool ant,maven 같은 이전세대 빌드 도구들의 단점을 보완 및 장점을 취합한 오픈소스 빌드 도구 의존성 주입 방식 implementation 'org.junit.jupiter:junit-jupiter:5.4.2' compile group: 'com.amazonaws', name: 'aws-java-sdk-sqs',version: '1.11.415' compile : 상위 Module 수정 시 해당 Module을 의존하는(연관된) 모든 Module이 Rebuild 되는 방식(오래걸림) 연결된 모든 Module의 API가 노출된다. -> B를 가져와도 A까지 다 가져온다. 현재 deprecated 상태 (api로 대체 되었음) compileOnly : Compile 시에..
-
Effective Java Study - 1개발 2022. 9. 8. 00:43
더보기 Chapter 4 Class & Interface Item 15. 클래스와 멤버의 접근 권한을 최소화 한다 (캡슐화 하자) 잘 설계된 컴포넌트 ? 외부에 내부 데이터와 구현 정보를 얼마나 잘 은닉화 했는지로 판단. - API로 외부와 통신하며 서로 내부 동작 방식에 관여 하지 않게 한다. -> 캡슐화를 이야기 한다. 캡슐화의 장점 시스템을 구성하는 컴포넌트를 독립시켜 사이클을 개별적으로 수행한다. 병렬로 개발할 수 있어 생산성이 좋아진다. 개별로 개발 하기 때문에 각 컴포넌트별 최적화가 가능하다. 독립적으로 기능을 수행하기 때문에 재사용성이 높다. 큰 시스템을 작은 시스템으로 쪼개 조립할 수 있기 때문에 난이도를 낮춰준다. 자바의 접근 제어 메커니즘 보통 접근 제한자와 선언된 위치로 정해진다. 접..
-
JPA 연관 관계 매핑개발 2022. 8. 2. 23:12
연관 관계 매핑 시 고려사항 다중성 (데이터베이스 관점의 다중성) 다대일 @ManyToOne 일대다 @OneToMany 일대일 @OneToOne 다대다 @ManyToMany 단방향, 양방향, 테이블, 객체 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체의 양방향 관계는 a -> b , b -> a 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데가 존재, 둘중 테이블의 외래 키 관리할 객체를 지정해야한다. 연관관계의 주인 : 외래 키를 관리하는 참조 주인의 반대편 : 외래 키에 영향을 주지않고 단순 조회만 가능함. 다대일 관계 [N:1] 항상 다수의쪽에 외래 키가 존재해야 한다 -> 아니면 잘못 설계 한것. 일대다 관계 [1:N] 일대다 단방향은 일대다 (1:N)에서 1..
-
OS 기초 지식CS 2022. 8. 2. 23:09
Interrupt(인터럽트) 인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트로 나뉜다. 하드웨어 인터럽트 (인터럽트) 소프트웨어 인터럽트 (트랩) 인터럽트 핸들링 인터럽트가 발생한 경우에 처리해야 할 일들의 절차를 말한다. 프로그램 a가 실행되고 있을 때, 인터럽트가 발생한다면 ? a의 현재 상태를 먼저 저장한다. (현재 상태는 현재 CPU에서 실행중인 명령의 메모리 주소 및 부가적인 정보를 의미 한다.) 인터럽트 처리 루틴을 통해 인터럽트 들어온 것을 수행한다. 저장된 a의 상태를 불러와 다시 수행한다. 좀더 구체적인 설명으로 OS는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 PCB(프로세스 제어 블록)을 가진다. PCB는 각각의 프로그램 마다 하나 씩 존재하며, 해당 프로그램의 어디를 ..
-
Index (2)개발 2022. 7. 5. 00:24
Index는 모두 균형트리 (Balanced Tree) 구조로 구성된다고 했었다. Index가 어떻게 동작하는지 이해하기 위해 균형 트리의 개념을 살짝 짚고 넘어가보자. 균형트리에서 데이터는 Node라는 공간에 저장된다. MySQL에서는 Page라고도 한다. Root Node 가장 최상위의 Node를 말하며 모든 Node는 여기서 부터 시작 된다. Internal Node Root, Leaf 사이에 있는 Node들을 말한다. Leaf Node 제일 마지막에 존재하는 Node를 말한다. 페이지는 최소한 16Kbyte크기를 가진다. 균형트리는 데이터 검색(SELECT)시 뛰어난 성능을 발휘 한다. 만약 일반 리프페이지만 존재 할시 데이터를 검색할때 10개의 페이지가 있다면 특정 데이터를 찾기위해서 처음부터 ..