TIL - 0526
스프링
스프링이 추구하는 가치에 맞게 개발해보기 - 스프링이 DI를 사용하게된 이유
- 자바가 추구하는 가치 그대로 객체지향이다 : 이전 엔터프라이즈 기술은 기술 개발에만 치중해있었음
- 오브젝트 중심 개발 : 객체 존재, 객체 관계, 객체지향적인 설계(역할 분리, 변경이 생기더라도 한 곳에만 변경을 할 수 있게 확장을 고려한 설계, 쪼갤 수 있을 때까지)
- User(자바빈)와 UserDAO(데이터베이스 - 데이터 핸들링)
- 관심사란? 객체가 처리해야할 일
- UserDAO를 예를 들어서 : DB 커넥션, SQL 생성 / 실행, 사용한 자원 반환
- 아래 UserDAO의 문제점은 무엇일까? 데이터베이스 변경이 일어난다면? add 작업 말고 get, delete 등 작업할 때마다 코드 중복은? 다른 관심사가 하나에 몰려있음
- 문제점 해결하기 : 관심사항을 분리시켜서 변경점 하나로 만들기
- 직접 작성하고 리팩토링
- 우선 중복되는 코드를 메소드로 분리함 - 중복 있는 코드에 한 부분 변경이 생겼을 때 모두 변경해야하니 변경점을 하나로 만듦
- 독립시키기 - 상속 : 같은 사용 방법인데, 일부분만 다를 때 서브 클래스를 만들어 서브 클래스에서 구현하도록 함, 확장/축소하더라도 그 부분만 변경하면 됨, 어떻게 생성되는지는 관심없고 생성되는 것에만 관심을 두게끔
- 완전히 독립시키기 - DAO가 여러 종류가 생긴다면? 의존관계로 만들어보자 : dependency injection 으로 해결하기, 스프링 DI가 이해가 된다, 사용되는 오브젝트(서비스) / 사용하는 오브젝트(클라이언트) - 서비스의 종류를 클라이언트가 정할 수 있음(완전 독립적)
- 단계별 의미를 정리해보자
- 단순히 코드 중복 문제를 해결함 : 사용하는 곳에서 데이터베이스가 각각 다를 떄 어떻게 대처할 것인가 라는 문제점이 남음
- 상속으로 각각 사용처마다 구현을 다르게 할 수 있도록(팩토리 메소드 패턴) 위 문제를 해결함 : 이미 상속을 하고 있는 상황이라면? 상속으로 해결한 부분이 변경되거나 없어지거나 한다면? 모두 고쳐야함
- 아예 관심사를 분리하자 : 객체 역할을 분리해버려서 사용하는 관계로 바꾸자, 필요없을 땐 디펜던시만 삭제하면되고, 해당 디펜던시가 기능이 추가/삭제에 상관없이 내가 쓰고 싶은 것만 쓸 수 있음, 표준 인터페이스를 사용하자(DIP 지키기 - 큰 개념에 의존하기) - 구체적인 정보는 모두 감춰버리고 표준 사용 방법으로 사용하게하기
- 모두 정리해보자 : 관심사(를 한 곳에 몰아두지말고, 사용할 땐 구체적인 모습은 모르도록 추상화하여 감추자(사용에 초점을 맞출 수 있게 - 완전….. 객체지향…)
리눅스
리다이렉션이란
- 표준 입출력, 표준 오류 방향을 재지정하는 것
표준 입출력 리다이렉션
- 기본적으로 표준 입출력은 키보드와 화면
>
: 표준 출력을 화면이 아닌 다른 곳(파일)으로 지정할 수 있음>>
: 위와 같은 역할이지만, 파일로 지정했을 때 덮어쓰기가 아닌 붙여쓰기가 됨<
: 표준 입력을 변경(파일)할 수 있음
표준 오류 리다이렉션
- 표준 오류의 표준 출력은 화면, 그 방향을 재지정할 수 있음 : 파일 디스크립터를 통해 표준 오류를 가리키고 >, » 로 리다이렉션
파일 디스크립터
: 열려있는 파일을 참조하는 값(자연수 지정), 표준 입력 / 표준 출력 / 표준 오류는 각각 0 / 1/ 2 할당(시스템이 할당)
$ ls -l /bin/usr 2> list-err.txt
$ ls -l /bin/usr 2>> list-err.txt
- 표준 오류를 표준 출력으로 출력하기
$ ls -l /bin/usr > list-output.txt 2>&1
$ ls -l /bin/usr &> list.output.txt
- 표준 오류 버리기
- /dev/null : 입력받고도 아무런 동작하지않음, 쓰레기통과 같은 역할
$ ls -l /bin/usr 2> /dev/null
파이프
-
명령어 실행을 연결하는 명령어(‘ ’) - 앞의 명령어 실행 결과(표준 출력)를 뒤의 명령어 실행(표준 입력)에 전달하는 역할
$ ls -l /usr/bin | less
- 파이프로 엮는 필터 명령어
- sort
- uniq
- wc
- grep
$ ls -al /usr/bin | sort | uniq | grep zip