분류 전체보기
-
프록시 패턴BackEnd/자바 2020. 12. 20. 20:05
실제 기능을 수행하는 객체 Real Object 대신 가상의 객체 Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴. 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하기에 좋다. 비용이 많이 드는 연산(DB 쿼리, 대용량 텍스트 파일 등)을 실제로 필요한 시점에 수행할 수 있다. 사용자 입장에서는 프록시 객체나 실제 객체나 사용법은 유사하므로 사용성이 좋다. 만약 책을 대여하고 반납하는 메서드에서 다른 부가 작업을 수행하고 싶다고 하면, BookService 인터페이스를 이용해 정적인 방식, 동적인 방식으로 프록시 클래스를 생성할 수 있다. public class Book { private String title; public String ge..
-
JVM, JRE, JDK, 메모리BackEnd/자바 2020. 12. 14. 21:34
일반 프로그램은 운영체제에서 바로 실행되는 반면, 자바 프로그램은 JVM 을 거쳐 실행된다. JVM 이란 (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드를 인터프리터와 JIT 컴파일러를 이용해 OS 에 특화된 코드로 변환한다. 바이트 코드를 실행하는 표준의 의미 JAVA SE 바이트 코드를 실행하는 표준을 구현한 구현체도 JVM이라는 용어를 사용한다. Oracle, Azul, Amazon-corretto, AdoptOpenJDK 등 벤더에 따라 구현이 다르다. 바이트 코드 자바 컴파일을 하면 .class 파일이 나오고 .class 안에 있는 코드가 바이트 코드다. 이 바이트코드는 실제 실행될 때 다시 한번 기계가 읽을 수 있는 형태(native code)로 interpret..
-
자바 SOLID 원칙BackEnd/자바 2020. 12. 12. 16:05
S : Single Responsibility Principle 단일 책임 원칙 - 단 하나의 책임 , 책임이 많아지면 클래스 내부 함수끼리 강한 결합이 발생할 가능성이 많고, 이는 유지보수 비용의 증가로 이어진다. O : Open-Closed Principle - 코드의 변경에는 폐쇄적, 수정과 확장에는 개방적 , 다형성 L : 리스코프 치환원칙 - 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다. I : Interface Segregation Principle 인터페이스 분리원칙 - 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다. D : Dependency Inversion Principle 의존 역전 원칙 - 의존관계를 맺을 때, 변화하기 쉬운 것보단 변화가 어..
-
트랜젝션BackEnd/스프링 2020. 12. 6. 20:45
트랜젝션 설정 1. tx 네임스페이스를 이용한 트랜잭션 설정 tx 네임스페이스를 통해 트랜젝션 처리된 프록시 객체를 만들어 적용한다. 2. @Transactional 어노테이션을 이용한 설정 @Transactional 은 스프링 AOP를 기반하고 있는데 스프링 AOP 는 다이나믹 프록시를 기반으로 동작한다. 트랜젝션의 전파 트랜젝션 설정이 된 메서드 내에서 또 다른 트랜젝션이 설정된 메서드를 호출할 때 트랜젝션의 전파 방식을 선택할 수 있다. 예를 들면 아래 코드에서 insertAndPlusCount() 메소드 내 insert() 가 성공, plusCount() 가 실패할 때 트랜젝션을 어떻게 할 것인지 정할 수 있다. @Transactional public int insert(){ ... } @Tran..
-
messageConverterBackEnd/스프링 2020. 11. 22. 18:38
ajax 로 응답을 주고 받을 때 json 설정은 MappingJackson2HttpMessageConverter 를 이용해서 해오다, 같은 로직을 처리하지만 페이지마다 데이터형식을 다르게 보낼 때 메서드를 나누어 만들지 않도록 ContentNegotiatingViewResolver를 이용할 수 있다. ContentNegotiatingViewResolver 은 하나의 url 로 다양한 contentType 으로 응답할 수 있도록 한다. contentNegotiaingViewResolever 는 아래와 같은 사항들을 고려해 return 형식을 결정한다. 1. URL 뒤에 붙는 확장자 2. URL의 특정 파라미터에 설정되는 값 3. Request Header 중 Accept 항목에 설정되어 있는 값 4. 1..