스프링 AOP 자동 프록시 생성 중복 문제의 접근 방법 반복적인 프록시의 메소드 구현을 코드 자동생성 기법을 이용해 해결했다면 반복적인 ProxyFactoryBean 설정 문제는 설정 자동등록 기법으로 해결할 수 없을까? 또는 실제 빈 오브젝트가 되는 것은 ProxyFactoryBean을 통해 생성되는 프록시 그 자체이므로 프록시가 자동으로 빈으로 생성되게 할 수는 없을까? 하지만 한 번에 여러 개의 빈에 프록시를 적용할 만한 방법은 없었다. 빈 후처리기를 이용한 자동 프록시 생성기 스프링은 OCP의 가장 중요한 요소인 유연한 확장이라는 개념을 스프링 컨테이너 자신에게도 다양한 방법으로 적용하고 있다. 그래서 스프링은 컨테이너로서 제공하는 기능 중에서 변하지 않는 핵심적인 부분외에는 대부분 확장할 수 있..
6. AOP AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나다. AOP를 바르게 이용하려면 OOP를 대체하려고 하는 것처럼 보이는 AOP라는 이름 뒤에 감춰진, 그 필연적인 등장배경과 스프링이 그것을 도입한 이유, 그 적용을 통해 얻을 수 있는 장점이 무엇인지에 대한 충분한 이해가 필요하다. 스프링에 적용된 가장 인기 있는 AOP의 적용 대상은 바로 선언적 트랜잭션 기능이다. 서비스 추상화를 통해 많은 근본적인 문제를 해결했던 트랜잭션 경계설정 기능을 AOP를 이용해 더욱 세련되고 깔끔한 방식으로 바꿔보자. 트랜잭션 코드의 분리 메소드 분리 public void upgradeLevels() throws Exception { TransactionStatus status = th..
1. final 클래스 final class FinalClass { } public class FinalTest extends FinalClass { //컴파일 에러 } final이 클래스 앞에 사용되면 다른 클래스가 상속할 수 없다. final class FinalClass extends FinalClass{ } public class FinalTest { } 반대로, final 클래스가 다른 클래스는 상속할 수 있다. 2. final 메소드 메소드에 final이 붙게 되면 재정의(Overriding)을 할 수 없다. public class FinalTest extends FinalClass { public void test() { // 컴파일 에러, 'test()' cannot override 'te..
1. String, String에서 + 연산을 하면 안되는 이유 Java를 사용하면서 자주 사용하는 String은 Immutable 특성을 가지고 있습니다. Immutable 이란 변경할 수 없는, 불변이라는 뜻으로 String의 값은 한번 생성이 되면 할당된 공간이 변하지 않는다는 특성이 있습니다. 그러면 아래와 같이 + 연산을 했을 때, 합쳐지는 것은 어떻게 처리 되는 것일까요? String str = "a"; str += "b"; 위 코드 처럼 + 연산을 하면 메모리를 할당받아 새로운 String 클래스 객체를 만들어서 문자열을 나타냅니다. 그리고 이전에 참조하던 "a"는 쓰레기가 되고 나중에 가비지 컬렉터에 의해 제거됩니다. 이러한 이유 때문에, 시간과 메모리가 많이 소모됩니다. 연산을 많이 할수..
예외 자바 개발자가 가장 신경 쓰기 귀찮아 하는 것 중의 하나가 바로 예외처리다. 사라진 SQLException 초난감 예외처리 개발자들의 코드에서 종종 발견되는 초난감 예외처리의 대표선수들을 살펴보자. 예외 블랙홀 try{ ... } catch(SQLException e){ } 예외가 발생하면 그것을 catch 블록을 써서 잡아내는 것까지는 좋은데 아무것도 하지 않고 별문제 없는 것처럼 넘어가 버리는 건 정말 위험한 일이다. 원치 않는 예외가 발생하는 것보다도 훨씬 더 나쁜 일이다. 왜냐하면 프로그램 실행 중에 어디선가 오류가 있어서 예외가 발생했는데 그것을 무시하고 계속 진행해버리기 때문이다. 단순히 예외를 출력하는 경우도 마찬가지이다. } catch(SQLException e) { System.ou..
템플릿 템플릿이란 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로 부터 독립시켜 효과적으로 활용할 수 있도록 하는 방법을 말한다. 예외처리 기능을 갖춘 DAO DB Connection이라는 제한적인 리소스를 공유해 사용하는 서버에서 동작하는 JDBC 코드에는 반드시 지켜야 할 원칙이 있다. 바로 예외 처리다. 정상적인 JDBC 코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환하도록 만들어야 하기 때문이다. 리소스 반환과 close() JDBC의 Connection이나 PreparedStatement에는 close() 메소드가 있다. 단순하게 생각하면 단들어진 걸 종료하는 것이라고 볼 수도 ..
테스트 스프링이 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 이 장에서 설명할 테스트 기술은 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 준다. 또한, 테스트는 스프링이나 처음 사용하는 기술을 학습하는 데 있어 가장 효과적인 방법의 하나이다. 테스트의 유용성 테스트는 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 웹을 통한 테스트 방법의 문제점 웹을 통한 테스트는 많은 문제가 있다. 하나의 테스트를 수행 하는데 참여하는 클래스와 코드가 너무 많은 것이다. Dao를 테스트하는데 서비스 클래스, 컨트롤러, 뷰 등 모든 레이어의 기능을 다 만들고 나서야 테스트가 가능하다. 이런 방식은 번거..
오브젝트와 의존관계 스프링의 핵심 철학은 객체지향 기술의 진정한 가치를 회복시키고, 그로부터 객체지향 프로그래밍이 제공하는 폭넓은 혜택을 누릴 수 있도록 기본으로 돌아가자는 것이다. 그래서 가장 관심을 많이 두는 대상은 오브젝트이다. 자바빈(JavaBean) 자바빈은 다음 두 가지 관례를 따라 만들어진 오브젝트를 가리킨다. 디폴트 생성자 : 자바빈은 파라미터가 없는 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 프로퍼티 : 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 메소드(setter)와 get으로 시작하는 접근자 메소드(getter)를 이용해 수정 또는 조회할 수 있다. 리팩토링 기존의 코드를 외부의..
[Linux] 로그 실시간으로 보는 명령어 - tail tail 명령어는 특정파일에 계속 추가되는 내용을 실시간으로 확인할 수 있어서 모니터링하는데 유용합니다. 기본 사용 방법 tail 옵션 파일명 기본 출력은 파일의 마지막 10줄을 보여줍니다. 옵션 및 예제 파일명은 message로 통일 하겠습니다. -f : 파일의 마지막 10라인을 실시간으로 계속해서 출력 tail -f message -F : 파일 변동 시 실시간으로 출력하되 로그파일처럼 특정 시간이 지난 후 파일이 변하게 되면 새로운 파일을 오픈하여 출력한다. tail -F message -n n : n만큼의 라인을 출력 tail -n 20 message -n +n : n번째 라인 이후를 출력 tail -n +20 message 참고 https:/..
1. $ java -jar SpringbootSample.jar 위와 같이 실행하면 ssh 연결이 끊어질때 프로그램도 같이 종료된다. 2. $ java -jar SpringbootSample.jar & 백그라운드로 실행은 되지만 실행한 사용자가 로그아웃하면 프로그램은 역시 종료된다. 3. $ nohup java -jar SpringbootSample.jar & 사용자가 로그아웃해도 백그라운드로 실행된다. 3번으로 하면 실행은 되지만 프로그램 종료를 자동적으로 하기가 어렵다. 종료를 하기 위해서는 pid 를 알아야한다. 따라서 쉘스크립트를 작성하여 서비스에 등록하는 방법으로 문제를 최종적으로 해결하였다. 4. 쉘스크립트 작성 후 서비스 등록 /etc/init.d/webService 로 등록하여 servic..
- Total
- Today
- Yesterday
- StringBuilder
- IoC
- 쉘스크립트
- gradle
- java
- AOP
- Tomcat
- shellscript
- 스프링프레임워크
- 토비의스프링
- 413
- springboot
- jar 실행
- DI
- 빈팩토리
- 자바
- final
- 애플리케이션컨텍스트
- apache
- 스프링
- Spring
- lombok
- 빌드도구
- JsonProperty
- 연동
- JsonIgnore
- stringbuffer
- EmbededTomcat
- mod_jk
- 템플릿
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |