1. 이 포스트는 간단한 프로젝트의 pom파일을 web과 data두개의 프로젝트로 분리하는 내용이다. 2. 아래는 아주 단순한 pom 파일이다. 스프링 부트를 사용하고 있으며 웹부분과 데이터부분이 다 포함되어 있다. 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.1.RELEASE pe.pilseong multiple-module 0.0.1-SNAPSHOT multiple-module multiple-module demo 11 org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-starter-data-jpa org.springfram..
1. 이 에러는 Multiple Module Maven 프로젝트를 생성할 경우에 발생하는 경우가 많다. 2. 이런 경우가 아니라도 한번씩 이렇게 maven은 특정한 폴더를 원하는데 없다고 아우성 치는 상태이다. 3. 해결책은 3-1 실제 필요한 코드를 제외한 프로젝트에서 생성된 부수적인 파일을 모두 삭제한다. 3-2 C:\Users\heops\AppData\Roaming\Code\User\workspaceStorage 에 가서 폴더를 통째로 날려버린다. 3-3 사용자가 작업한 내용들이 여기에 저장되는 것이 많은 것 같은데 그 설정들이 계속 적용되어 버려서 발생한다. 3-4 안되면 C:\Users\heops\AppData\Roaming\Code\CachedData 이것도 날려 버린다. 4. Visual S..
1. 인터페이스에는 불필요한 메소드가 있어서는 안된다. 2. 필요한 기능에 맞는 인터페이스를 여러 개 생성하는 것이 모든 메소드를 다 가지는 인터페이스보다 낫다. 3. 아래는 지난 Open Close 원리에서 붙였던 도면을 여기에도 가져다 쓰고 있다. 3-1 아래의 도식 역시 Interface segregation의 원칙이 반영되어 있다. 3-2 FlyBehavior, QuackBehavior라는 두개의 별도의 기능을 가지는 인터페이스를 사용하고 있기 때문이다. 4. 하지만 아래의 예제의 경우, Duck 클래스는 두 개의 인터페이스를 구현한 객체를 소유하는 형식으로 구현한다. 4-1 즉 Duck 클래스가 가지는 기능의 형태를 다양한 방식으로 확장하고 있는 것이지 4-2 Duck 자체의 기능을 추가하는 방..
1. 확장에는 열려있고 수정에는 닫혀 있어라 2. 코드 수정을 하지 않는 방향으로 작성해야 한다. 3. 항상 기능 확장 가능성을 고려하여 설계해야 한다. 4. 확장을 하려면 추상 레이어가 필요하다. 5. 이 원리를 가장 잘 설명해 주는 패턴이 strategy 패턴이다. 아래는 Head First Degisn pattern에 나오는 건데 인터넷에서 찾아서 붙였다. 6. Duck을 확장하기 위해서 FlyBehavior 인터페이스를 사이에 두고 나는 방법에 대한 클래스를 구현하고 있다. 6-1 Duck은 FlyBehavior의 fly()를 호출하면 실제 구현체에 따라서 다른 기능을 사용할 수 있게 된다.
1 이전에 작성한 것이 있긴 한대 내용이 좀 부실해서 다시 정리한다. 2. 스프링 라이프 사이클은 스프링 컨테이너가 어떻게 스프링 빈을 관리하는지에 대한 내용이다. 3. 인터넷을 찾아보면 위의 라이프 사이클에 맞게 작성한 코드가 있어 언제 호출하는지 확인 할 수 있다. 3-1 아래 수 많은 interface가 구현되고 있다. 각각의 인터페이스는 하나 혹은 두 개 정도의 메소드를 가지고 있다. 3-2 sysout안에 어떤 interface의 메소드인지를 명시하였다. 3-3 Aware 인터페이스는 스프링이 프레임워크의 내부적인 동작을 수정하기 위한 기회를 제공한다. 3-4 InitializingBean, DisposableBean은 이벤트에 따라 실행되는 call back 메소드를 제공한다. 3-5 @Pos..
1. 스프링 컨테이너에 하나 이상의 동일한 타입의 객체가 존재할 경우 1-1 @Qualifier로 어떤 객체를 사용할지를 명시해 주어야 한다. 1-2 아니면 @Primary로 지정하여 @Qualifier가 없는 경우 기본으로 사용될 객체를 지정해 준다. 2. 사용법 2-1 우선 예제로 사용할 공통 인터페이스와 구현 클래스 두개를 만들었다. 2-1-1 PrimaryGreetingServiceImpl은 @Primary가 지정되어 있어 동일한 타입의 여러 객체가 있을 경우 2-1-1-1 우선 순위를 갖게 된다. // 인터페이스 정의 package pe.pilseong.demodi.services; public interface GreetingService { String sayGreeting(); } // P..
1. SOLID는 객체지향 프로그래밍에서 지켜야 할 더 나은 소프트웨어를 개발을 위한 필수 지침이다. 1-1 5가지의 원리는 의존성 관리에 대해 초점을 맞추고 있다. 1-2 잘못설계된 의존성 관리는 코드 확장과 수정을 힘들게 만든다. 1-3 스프링은 이 의존성에 작성에 대한 최소한의 제약만 제공하기 위한 프레임워크이다. 2. Single Responsibility - 하나의 클래스는 하나의 책임만 가져야 한다는 원리 3. Open Close - 확장에는 열려있고 수정에는 닫혀있어야 한다는 원리 3-0 프로그램의 기능이 확장되거나 변경될 때 기존의 소스는 수정하지 않고 추가로 코드를 작성한다. 3-1 인터페이스를 두고 다양하게 확장 가능하도록 구현 3-2 변경될 것과 고정될 것을 구별한다. 변경될 것은 하..
1. maven wrapper는 빌드하는 컴퓨터에 maven이 없어도 빌드가 가능하게 도와주는 script이다. 2. 이 wrapper를 만드는 방법은 mvn plugin의 goal을 실행하는 것인데 아래처럼 실행하면 된다. $ mvn -N io.takari:maven:wrapper 2-1 문제는 버전인데 원하는 버전을 지정할 수 있어야 한다. 현재는 최신 버전 3.6.3을 사용하는 것을 볼 수 있다. 2-1-1 생성된 .mvn/wrapper 폴더 안의 maven-wrapper.properties 파일이 아래처럼 설정되어 있다. 2-1-2 설정 파일에 이미 url이 지정되어 있기 때문이다. 2-1-3 해결책인 위의 properties의 url을 변경하는 방법과 goal을 실행할 때 버전을 넣어주는 방법이..
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib