본문 바로가기

(6)
ORM 사용 이유와 장점 첫째, SQL 안써도 됨OOP와 RDB 간의 패러다임 불일치 때문에 생기는 여러 부작용 중에 하나가 SQL을 앱에서 직접 써줘야 한다는 것이다. ORM은 클래스와 관계형 DB 테이블을 매핑해주는 접근 방식 혹은 프레임워크로서, 개발자 대신 SQL을 작성해주는 역할도 한다.  둘째, 객체의 정보가 온전히 유지됨 자바 앱은 OOP를 지향하므로, 처음부터 끝까지 현실 세계에 존재하는 객체처럼 데이터를 다룰 수 있어야 한다. 예를 들어서 "상품(Product)"이라는 부모를 가지는 "책(Book)"은 앱 내에서는 처음부터 끝까지 부모가 있는 객체로서 다루어져야 한다. 그러나 DB에서 Select를 할 때 개발자가 부모에 해당하는 데이터를 같이 select 해오지 않으면 해당 객체는 앱에서만큼은 부모가 없는 것처..
AWS Code Deploy 사용법 appspec.yml 작성하기codedeploy가 appspec.yml hooks 섹션에 쓰여 있는대로 호출할 스크립트 파일, jar 파일들이 압축파일 형식으로 S3에 업로드 되도록 artifact를 명세한다.  buildspec.yml에 artifact 저장 경로 명세하기빌드가 끝나고 나서 어느 경로에 있는 파일들을 artifact로써 S3에 업로드할 것인지는 buildspec.yml에 artifacts 섹션에 다음과 같이 써주면 된다. 저장할 S3 경로랑 저장할 때 압축은 할건지, 압축 형식은 뭐로 할건지는 콘솔에서 build project 설정값으로 정한다.artifacts: files: - build/libs/*.jar  codedeploy 작동 프로세스이렇게 artifact로 남기는 파일..
OSIV와 SSE OSIV의 구현Spring Boot는 `OpenEntityManagerInViewFilter`라는 기본 필터를 사용해 OSIV(🔗)를 지원한다. 요청을 받으면 DB 세션을 열고, HTTP 요청이 끝나면 DB 세션을 닫는다. 필터는 DB 세션이 살아 있는 내내 JPA의 엔티티 매니저를 열어둠으로써 HTTP 요청이 끝나기 전까지 Lazy Loading을 가능하게 한다. SSE요청 없이도 웹페이지에 text/event-stream MIME type으로 데이터를 전송할 수 있는 W3C의 HTML 표준으로 EventSource라는 인터페이스로 구현되어있다. EventSource 인터페이스는 EventSource.close() 호출 전까지 HTTP 서버와 지속적인 커넥션을 맺게 해준다. 웹소켓과는 달리 서버측에서..
OSIV는 안티패턴? OSIV의 단점OSIV가 안티패턴(🔗)이라고 주장하는 의견이 있어 그 내용을 정리해보면 다음과 같다.  UI rendering phase*에서는 서비스 레이어가 명시적으로 트랜잭션을 수행할 일이 없기 때문에 auto commit 모드로 실행되게 되며, 이는 DB 서버에 트랜잭션 로그를 flush 하는 부하를 줄 수 있으므로 connection을 read-only로 설정하여 트랜잭션 로그를 쓰지 않도록 최적화 하는 방법이 있다.DB statement를 View와 Service 둘 다 생성하게 되므로 레이어 간의 관심사가 분리되지 않게 된다. 쿼리 실행 위치와 타이밍을 예측 하기도 검증하기도 어려워진다는 뜻이다.예를 들어 만약 불필요한 statement가 생성되진 않는지 statement 갯수를 asser..
OSIV(open-in-view)란? (feat. LazyInitializaionException) OSIV란OSIV(Open Session In View)는 '세션을 뷰에서 연다'는 직역에서 유추할 수 있듯이 DB 세션의 생명주기를 뷰 레이어에서 관리하는 전략을 말한다. 웹 어플리케이션에서 Hibernate와 같은 ORM을 사용할 때 이 전략이 대개 동반되는데, ORM이 OOP와 RDB의 패러다임 불일치를 해결하는 과정에서 Lazy Loading 옵션을 지원하기 때문이다.   패러다임 불일치란여기서 말하는 패러다임 불일치란 다음 세 가지 대표적인 예시에서 세 번 째 예시를 말한다. [객체의 동일성 관리 안됨] ID가 같은 객체면 DB에서는 동일한 객체이지만, Java 앱에서 Select를 따로 따로 한 다음에 Java 객체에 담아 equals 비교를 하면 별도의 @equals 오버라이딩 없이는 해시코..
JAVA 앱 배포하기 Packaging and Deploying Desktop Java Applications Lesson: Packaging Programs in JAR Files (The Java™ Tutorials > Deployment) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe docs.oracle.com