목록분류 전체보기 (15)
제리의 배움 기록
Business Delegate Pattern 목적 Presentation(view, client) 계층과 비즈니스 계층의 결합을 줄이기 위한 패턴 클라이언트는 비즈니스 구현을 직접 참조하지 않고 주입받은 delegate를 통해 비즈니스를 호출 비즈니스 서비스를 인터페이스로 추상화하여 조건에 따라 다른 구현체를 생성 아래와 같은 구조에서는 Client가 특정 비즈니스 구현체를 직접 참조합니다. business delegate pattern을 적용하면 delegate를 통해서 비즈니스계층에 접근하므로 결합도가 낮아지고 자연스럽게 관심사를 분리할 수 있게 됩니다. Session Facade Pattern 목적 클라이언트가 비즈니스 계층의 컴포넌트들을 직접 참조하고 조작하는 대신 앞단에 단일 창구 역할을 하는..
조건에 따라 실행 흐름을 분기해야 하는 경우 우리는 조건문을 사용합니다. Java에는 if-else / switch 두가지 조건문이 있습니다. 이 중 어떤 방식이 더 효율적인지, 무엇을 쓰는게 좋을지 비교해보고자 합니다. 우선, switch를 사용할 수 없는 것들은 선택의 여지 없이 if-else를 사용하면 됩니다. switch 비교대상변수 참조 다음으로 if-else, switch 두가지 방식 모두 사용할 수 있는 경우가 있습니다. 동일한 로직을 두 방법으로 구현하여 변환된 바이트 코드를 비교해보며 차이를 알아보겠습니다. if 자바코드 public class ConditionTest1Main { void doIfStatement() { int number = 5; if (number == 1) { me..
JDK 5 이전 버전에서는 String + 연산시, 매 연산마다 String 객체가 생성되는 비효율이 있었습니다. String str1 = "a"; String str2 = str1+"b"+"c"; // => str1 객체 생성, str1+"b" 객체 생성, str1+"b"+"c" 객체 생성 그래서 아래와 같이 StringBuilder(혹은 StringBuffer)를 사용하여 중간단계 객체가 생성되지 않도록 권장되었었습니다. String str1="abc" String str2 = new StringBuilder(str1).append("b").append("c"); JDK 5 버전 부터 성능 향상을 목적으로 컴파일시 StringBuilder 혹은 StringBuffer로 변환되도록 변경되었습니다. 참고..
목표 시스템 구성도 서버 구성 외부망 1대 reverse proxy용 nginx 웹서비스용 자바어플리케이션 서버 내부망 1대 웹서비스에서 사용할 데이터베이스 저장소 실행 흐름 1) 사용자가 https://jerry92k-subway.n-e.kr url을 호출 2) DNS 서버로부터 도메인을 해석한 IP를 응답받아 Server A의 443 포트를 호출(https 프로토콜) 3) Nginx는 80 포트로의 요청(http 프로토콜로 요청하는 경우)을 443 포트로 리다이렉트하고, 443 포트에 대한 요청을 웹어플리케이션으로 전달 4) 웹어플리케이션은 Server B의 데이터베이스를 참조 단계별 구성 1.서버 생성 AWS EC2 인스턴스를 이용하여 외부망에 1대, 내부망에 1대 총 2대의 서버를 생성 서버 OS..
현재 진행중인 "부동산 실거래가 비교 시스템" 프로젝트에 부하테스트를 해보았습니다. 부하테스트 툴에는 주로 nGrinder와 jmeter를 많이 사용하는데요, 저는 nGrinder를 사용해보았습니다. nGrinder를 선택한 이유는 1) 실무에서도 많이 사용되고 있는 툴이고 2) 테스트의 결과를 보여주는 레포트 UI가 심플하고 직관적이며 3) 부하테스트 스크립트 작성에 친숙한 groovy 언어를 사용하기 때문입니다. 1.nGrinder 구성 nGrinder는 Controller와 Agent로 구성되어 있습니다. Controller Controller는 Web Application으로 Tomcat과 같은 웹서버 엔진을 이용하여 구동할 수 있습니다. 사용자와의 인터페이스를 담당하여 테스트 프로세스 정의, 스..
목표 망 구성도 1. VPC 대역 생성 192.168.170.0/24 서브넷 마스크 24비트 2. 외부망, 내부망, 관리망 구성 외부망 : 외부와 직접적으로 통신함 26비트 서브넷 마스크로 2개의 망 구성 subnet별 실제 물리적 서버 지역을 다르게 선택 특정 지역의 IDC의 문제, 재해 등의 리스크에도 대비 용도 DMZ 영역으로 사용자의 요청을 직접적으로 받아 처리하는 웹서버가 위치함 SSL 인증, 압축, 정적파일 제공 등의 역할 실무에선 nginx와 같은 별도 웹서버만 두고 웹어플리케이션서버는(WAS) 내부망에 두어 분리하는 것이 보안상 좋지만, 모의 구성이므로 외부망 동일 서버에 nginx와 WAS를 함께 사용 라우팅 설정 사설망 대역대(192.168.170.0/24)에 대한 라우팅 외부 인터넷과..
요약 jackson 라이브러리로 하이버네이트 프록시 객체를 serialize 할 경우 오류가 발생합니다. 1) 프록시 객체를 가져오지 않도록 join fetch를 사용하거나 2) 엔티티는 DTO로 모두 변환하여 Response body로 전달하면 문제를 피할 수 있습니다. 이번 포스팅에서는 Lazy Loading이 포함된 엔티티를 ResponseEntity 응답 정보로 사용할때 유의 해야할 점을 다루어보려 합니다. 이전 포스팅과 동일한 프로젝트 진행중에 아래와 같은 오류를 만났습니다. 프로젝트 내용이 궁금하신 분들은 참고해주세요. No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no prope..