본문 바로가기

전체 글

(120)
넷플릭스 마이크로 서비스 가이드 출처 및 링크 : https://www.youtube.com/watch?v=OczG5FQIcXw&feature=youtu.be
모듈화에 대하여 문득 모듈화에 대해서 생각하다가, 의식의 흐름대로 작성하였습니다. 문맥도 두서도 개연성도 없습니다. 대단한 내용은 더더욱 없습니다 ! : ) 의식의 흐름 #0.모듈화를 생각하기에 앞서 나의 코드를 보자.눈앞에서 흩날리고 있는 코드들 속에서 공통적인/반복적인 부분을 뽑아 내서 중복부터 제거하고. haha. DRY ! 의식의 흐름 #1.개발자는 역할과 책임을 특징 짓고 그것에 따라 적절히 분리할 수 있어야 해. 관찰력이 있어야해.왜냐하면? 무엇인가를 찾아낼 수 있어야 해.우리가 찾아야 할 대상은 다음과 같은 일련의 문장들로 표현될 수 있어.무엇 ?= 클라이언트에게 알리지 말아야 할 비밀= 클라이언트가 알 필요가 없는 사항= 변경될 가능성이 높은 부분= 복잡하고 어려운 부분= 세부적인 사항들 및 구현= 실제 작업해..
3월 회고 게을러 졌다. 이제야 3월 회고를 쓴다. 1,2월에 나름 열심히 블로그를 한 탓일까? 신기한 일이 일어났다. 어느 날 댓글 알람들이 울리고 실시간 방문자 수가 평소대비 엄청나게 치솟았다. 내가 쓴 여행 포스팅이 다음 메인에 게시된 것이었다. 심지어 2번이나 ! 다음 메인에 2번이나 선정 ! 글을 너무 가벼운 말투로 쓰는 것 같아서 조금 차분하게 바꾸었는데 그 글들이 모두 다음 메인 게시글로 올라갔다. 나에게 이런 일이 일어났다는 게 굉장히 신기했다. 그런데 이런 일이 있고 나니 글을 쓸 때 잘 쓰고 싶다는 욕심과 압박이 느껴지기 시작했다. 간단한 문장을 쓰는 데도 몇 번이고 고쳐가며 오래 걸리곤 했다. 이러면 안 되는데. 이전에 읽었던 '대통령의 글쓰기'에서 글을 잘 쓰기 위해서는 좋은 글을 쓰려는 욕심..
톰캣에 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..
2. 스위스 여행에 비는 치명적이다. 마이엔펠트 이후로 우리는 많은 도시를 방문했다. 루체른, 인터라켄, 로이커바드, 베른 그리고 마지막 취리히. 그런데 글을 쓸 소재가 없다. 마이엔펠트 이후 모든 스위스 일정에서 비가 내리는 초유의 사태가 가장 큰 원인이다. 물론 중간중간 맑아지는 때도 있었지만 일정의 80% 이상이 비가 왔던 것 같다. 자연경관 감상이 주를 이루었던 스위스 여행에서 흐린 날씨와 비(심지어 폭우)는 치명적이었다. 유럽 여행하기에 최적의 기온과 날씨를 품은 5월에 이게 웬일인가 싶었다. 모든 계획이 다 틀어졌고 제대로된 여행은 단 하루도 하지 못했다. 심지어 로이커바드에서는 비를 맞으며 야외 온천을 했고 모든 여행 일정이 액티비티로 채워져있던 인터라켄에서는 하루도 쉬지 않고 3일 내내 비가 오는 탓에 집 밖에 나갈 수조차 없..
스프링 JPA 그리고 LazyInitializeException 1. 스프링 컨테이너의 기본전략 스프링 컨테이너를 사용하면, 컨테이너가 트랜잭션과 영속성 컨텍스트를 관리해준다. 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다.이는 다음을 의미한다.트랜잭션의 범위 = 영속성 컨텍스트의 생존 범위 즉 , 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고, 트랜잭션이 종료될 때 영속성 컨텍스트를 종료한다 2. @Transactional 어노테이션 @Transactional을 통해 동작하는 스프링 트랜잭션 AOP는 대상 메소드를 호출하기전에 트랜잭션을 시작하고 메소드가 종료되면 커밋을 하면서 종료한다. 이때 트랜잭션을 커밋하기 직전 JPA는 영속성 컨텍스트를 플러시해서 변경 내용을 데이타베이스에 반영한다. 트랜잭션을 시작할 때 영속성 컨텍스트를 생..
NULL 제약 조건과 조인 전략 JPA는 매핑관계의 필수 여부에 따라 실제 데이타베이스로 보내는 SQL 구문이 달라진다선택적 관계 @Entity public class Member { //... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "teamId") private Team team; //... }@ManyToOne 의 optional 속성이 true (default) 이거나 @JoinColumn 의 nullable 속성이 true(default) 인 경우에는 Team이 없는 Member도 조회될 것을 보장해야 하기 때문에 Outer Join 을 수행한다. SELECT * FROM Member m left outer join Team t ON m.teamId = t.teamId..