기본적으로 스프링에서는 @Configuration 어노테이션을 선언해서 POJO를 빈으로 만들 수 있다. @Configuration 이 선언된 클래스가 많다면 어떻게 해야 할까? @import 어노테이션을 사용 한다면 구성 클래스를 하나로 모을 수 있다. 아래와 같이 config 클래스가 2개가 존재 한다. @Configuration Class AppConfig { @Bean public User user() { User user = new User(); user.setUserId("1"); return user; } } @Configuration Class IbatisConfiguration { @Bean public UserDao userDao() { UserDao userDao = new UserD..
Proxy 패턴은 아래와 같은 경우 사용 될 수 있다. - 실제 객체 접근시 권한 체크가 필요 할 때 - 실제 객체 동작이 무겁고 복잡하여, 캐싱이 필요 할 때 - 기타, 실제 객체 동작 이외에 다른 작업이 필요 할 때 실제로 개발을 하다 Controller 에서 Dao 접근을 해야 하는데, 로컬개발 환경이다 보니 권한체크 문제가 있었다. 이 문제를 해결하려고 하면 배보다 배꼽이 더 커지기 때문에 Proxy 패턴을 이용하여 ProxyDao 를 만들어서 내가 원하는 작업만 하도록 바꾸어 보았다. 대충 이런 식이다. (문법은 틀릴 수도 있다. 흐름만 보자) Interface Dao { public List work(String param); } @Component Class DaoImpl implements..
옵저버 패턴을 살펴 보다가 어떤식으로 활용 할 수 있을 지 고민 해 보았다. 노트 어플리케이션을 예로 들어보자. 텍스트노트와 그림노트를 추가 할 수 있으며 새로운 노트가 생성 될 때마다 갱신되어 최신 기준으로 정렬 된다. 텍스트 노트는 타이틀이 없을 경우 자동으로 타이틀과 썸네일을 만들어 준다. 그림 노트는 썸네일만 만들어 준다. 옵저버 패턴으로 구현 한다면 충분히 만들 수 있을 거 같다. 1. 먼저 Note 인터페이스를 만들자 이 인터페이스는 노트가 추가되거나 수정 삭제 되었을 때 전달을 받아서 update를 실행 할 수 있다. Note.java public Interface Note() { update(); } 2. TextNote와 PictureNote 객체를 만들자. - Note 인터페이스를 상속..
파일 수정 부터 add, commit 까지의 세부 동작을 알아보자(맥환경) 먼저 디렉토리를 만든 후 git init 을 하자 find .git 을 하면 git 의 구조를 볼 수 있다. 현재는 index 는 보이지 않고 objects 만 보인다. 왜냐하면 git 디렉토리에 아직 아무런 변경 사항이 없기 때문이다. echo "test" > test.txt. 로 파일을 만들고. git add test.txt 로 stage에 올리게 되면 index 에서 앞으로 git 에서 변경이 일어나는 모든 파일을 추적하여 기록한다. find .git 으로 확인 해 보자 위의 그림에서 확인 할 수 있는 것은 git add 를 하면 2가지가 생성 된다. - object(blob) - index 이게 무엇일까? 복잡하게 설명하면..
1. gradle wrapper 는 무엇 일까? 프로젝트 개발을 할 때 개발자 별 로 각기 다른 버전의 gradle 를 사용 하고 있을 수가 있다. 예를 보자 " A 개발자는 gradle 5.6 버전을 사용하고, B 개발자가 gradle 3.0 을 사용 한다. A 개발자가 개발하던 프로젝트에 B개발자가 합류하게 되었다. B개발자는 빌드 중 알수없는 오류가 생겨서 한참을 헤멘뒤에 gradle 버전이 다르기 때문이란것을 알게 되었다. " 만약에 B 개발자가 수백명이었다면? 버전이 달라서 발생한 오류를 찾기 위해 수 많은 시간이 낭비 되었을 것이다. 이런 문제를 해결하기 위해서 나온 것이 gradle wrapper 이다. gradle wrapper 는 각기 다른 개발 환경에서도 기본으로 설치된 gradle 버..