본문 바로가기

Development

(45)
개발자도 비즈니스 참여를 (번역) 루비에서 상속을 피하는 방법 을 읽고. (링크 유실) 요즘 '객체 지향 이란 무엇일까?' 라는 원론적인 질문에 꽂혀 있어서 그런지, 굉장히 흥미를 일으키는 제목의 글이었습니다. 저는 2년간 자바만 해서 루비를 전혀 모릅니다. 그래서 읽으면서 어림짐작으로 루비 소스를 자바 소스로 뇌컴파일 해가며 읽었는데 역시나 재밌었습니다. 상속이 아닌 위임으로 이 글은 제목 그대로 '상속을 피하기 위한'에 대한 솔루션을 제공하고 있습니다. 상속(확장)이 아닌 위임을 통해서 말이지요. 템플릿 메서드 패턴이냐 스트래티지 패턴이냐로 구분지어 볼 수도 있을 것 같아요. 물론 절대적으로 상속보다는 위임이 좋다는 건 아닙니다. 상황에 따라 충분히 선택의 여지가 있습니다. 이 글의 예에서는 스트래티지 패턴이 더 적합하다고 ..
Java Wrapper Class 의 캐싱 Wrapper Class Java에는 Primitive Type을 Reference Type으로 사용하기 위해서 만든 Wrapper Class가 있습니다.Primitive TypeWrapper ClassbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBooleanvoidVoid Primitive Type 값을 Wrapper Class의 인스턴스로 변환하여 쓰는 과정을 Boxing, 그 반대를 Unboxing 이라고 하는데 Java 1.5 부터는 이를 자동으로 해주는 AutoBoxing/AutoUnBoxing을 지원해 줍니다. Boxing/Unboxing Integer n1 = 1; Integer n1 = new I..
Why Spring - 왜 스프링을 사용하지? Why Spring ? 스프링을 사용하기만 했지, 왜 스프링을 사용해서 개발하는 지에 대한 고찰을 해본적이 없다. 그래서 또 의식의 흐름대로 글을 써내려가 봅니다. 스프링은 프레임워크(Framework)다. 프레임워크 ! 즉, 소프트웨어의 설계와 구현에 있어서 전체적인 뼈대와 틀을 제공한다는 것이다. 조금 더 높은 추상화 레벨에서 보면 개발자가 개발하기 편하게 해주는 녀석이다.그렇다면 스프링은 어떤 방식으로, 어떤 컨셉으로 우리를 도와주느냐 ? 이 말을 설명하기에 앞서 그렇다면 스프링 혹은 다른 프레임워크 없이 오직 JDK로만 소프트웨어를 개발한다고 생각해보자. 개발 과정에서 끊임없이 인스턴스는 생성과 소멸을 반복할테고, 클래스들 사이에는 복잡한 의존관계를 가지기도 할 것이며, 반복되는 로직이 수없이 호..
객체지향 개발 5대 원칙 : SOLID 좋은 글 그간 SOLID 원칙에 대한 설명을 굉장히 많이 보았는데, 최근에 굉장히 명쾌하게 설명한 글을 발견 !객체지향 개발 5대 원리: SOLID클린 소프트웨어 : 애자일 원칙과 패턴, 그리고 실천 방법을 읽던 중에.
넷플릭스 마이크로 서비스 가이드 출처 및 링크 : https://www.youtube.com/watch?v=OczG5FQIcXw&feature=youtu.be
모듈화에 대하여 문득 모듈화에 대해서 생각하다가, 의식의 흐름대로 작성하였습니다. 문맥도 두서도 개연성도 없습니다. 대단한 내용은 더더욱 없습니다 ! : ) 의식의 흐름 #0.모듈화를 생각하기에 앞서 나의 코드를 보자.눈앞에서 흩날리고 있는 코드들 속에서 공통적인/반복적인 부분을 뽑아 내서 중복부터 제거하고. haha. DRY ! 의식의 흐름 #1.개발자는 역할과 책임을 특징 짓고 그것에 따라 적절히 분리할 수 있어야 해. 관찰력이 있어야해.왜냐하면? 무엇인가를 찾아낼 수 있어야 해.우리가 찾아야 할 대상은 다음과 같은 일련의 문장들로 표현될 수 있어.무엇 ?= 클라이언트에게 알리지 말아야 할 비밀= 클라이언트가 알 필요가 없는 사항= 변경될 가능성이 높은 부분= 복잡하고 어려운 부분= 세부적인 사항들 및 구현= 실제 작업해..
톰캣에 Spring Profile 지정하기 tomcat/bin 디렉토리에서Linuxsetenv.sh 파일 생성 후 아래와 같이 작성 JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active={profile_name}"Windowsetenv.bat 파일 생성 후 아래와 같이 작성 JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active={profile_name}
Lazy Initialize Exception 방어코드 뷰에 필요한 엔티티를 미리 로딩해줌으로서 지연 로딩 익셉션에 대한 방어를 할 수있다.1. Global Fetch 전략 수정가장 간단한 방법으로 글로벌 페치를 fetch = FetchType.EAGER 로 잡아주면 즉시로딩을 하기 때문에 지연 로딩에 대한 문제가 발생하지 않는다. 단점해당 엔티티가 필요없는 경우에도 무조건 로딩한다.N+1 Problem 발생 가능성 2. JPQL 페치 조인기존 //JPQL select o from Order o //SQL select * from orderJPQL 페치 조인 사용 //JPQL select o from Order o join fetch o.orderItem //SQL select o.*, i.* from Order o join OrderItem i on o.o..