본문 바로가기
  • Where there is a will there is a way.

분류 전체보기124

애플리케이션 설계 ( 신뢰, 확장성, 유지보수성 ) 컴퓨터의 성능이 발달된 요즘 더이상 CPU 의 성능은 애플리케이션을 제한하는 요소에 우선순위에서 밀렸다. CPU 의 성능보다 우선적으로 고려되는 사항은 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도이다. 애플리케이션을 설계 및 개발할때 서버 개발자는 다음과 같은 고민을 한다. 내부적으로 데이터를 정확하고 안전하게 유지하려면 어떻게 해야 할까? 시스템의 일부 성능이 저하되더라도 클라이언트에 일관되게 좋은 성능을 어떻게 제공할까? 부하 증가를 다루기 위해 어떻게 규모를 확장해야 할까? 어떤 api 가 좋은 서비스인가 ? 현재 읽은 책은 데이터 중심 애플리케이션이고 여기서 이야기하는 위와같은 고민은 3가지를 중점으로 다룬다. 신뢰성 ( Reliability ) 하드웨어 결함이나 소프트웨어 결함에 직면했을.. 2020. 5. 9.
java spring retrofit2 gson custom serializer 구현 spring java 서버에서 api 연동을 구현하려면 http 통신이 필요하다. http 통신을 하게 해주는 라이브러리는 restTemplate 와 retrofit2 정도를 알고 있는데, 우리는 retrofit2 를 사용하였다. retrofit2 는 gson 라이브러리를 사용하고 있다. 기본적인 설정만으로도 잘 되는게 많지만 비즈니스의 요구사항이 많아지면 당연 custom 을 피할 수 없다고 본다. retrofit2 gson dynamic serializer 구현 나는 관련 업체에 특정 필드를 dynamic 하게 exclude 해야하는 요구사항이 있었고 해당 api 를 호출할때 이 기능을 사용하고 싶었다. 우선 configuration 설정을 해준다. @Configuration @Configuratio.. 2020. 5. 7.
JPA 2차 캐시란 intro 우리는 개발할때 서비스에 데이터를 보여주기 위해서 애플리케이션에서 데이터베이스를 연결한다. 만약 실시간으로 변경되는데 영향도가 낮은 데이터를 보여주는데 매번 데이터베이스를 연결하면 어떨가? heap 메모리에서 데이터를 조회하는 것과 데이터베이스에서 데이터를 조회하는데 드는 시간비용을 비교한다면 수만에서 수십만 배 이상 비싸다고 한다. 그렇다면 인메모리 캐시를 이용해서 데이터를 저장한다면 훨씬 빠르게 데이터를 클라이언트에 보여줄 수 있지 않을까? 1차 캐시와 2차 캐시 2020/04/13 - [개발/spring-boot] - JPA 애플리케이션 영속성 관리 영속성 컨텍스트 내부에는 엔티티를 보관하는 영역이 있다. 이는 1차캐시라고 한다, 1차 캐시로도 이점이 많지만 애플리케이션 환경은 트랜잭션을.. 2020. 4. 26.
JPA 락 2020/04/23 - [개발/spring-boot] - spring transaction 이란 이전에 트랜잭션과 격리수준에 대해서 알아봤다. 트랜잭션의 격리수준을 보장하기 위해서 JPA 에서 락을 제공한다 이번 글에서는 JPA 의 락에 대해서 정리했다. JPA 락 락은 낙관적인 락과 비관적인 락이 있다. 낙관적인 락 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법이다. 데이터베이스가 제공하는 락을 사용하지 않고 애플리케이션이 제공하는 락이다. 비관적인 락 트랜잭션은 충돌이 발생한다고 가정하고 우선 락을 건다. 두번 갱신 분실 문제 ( second lost updates problem ) 두명이 동시에 같은 내용을 수정한다고 가정해보자 두명이 비슷한 시기에 수정완료 버튼을 눌렀다면 결.. 2020. 4. 25.
spring transaction 이란 나는 spring 개발을 하면서 흔히 서비스 메소드에 @Transaction 어노테이션을 보곤했다. 처음엔 아무것도 모르고 개발을 했었지만 점차 여러가지 문제에 직면하게 되었고 그러다 보니 Transaction 에 대해서 정리가 필요함을 느꼇다. 우리가 흔히 데이터를 처리하는 과정에서 트랜잭션에 대한 내용을 개념적으로나마 배웠었다. 트랜잭션은 논리적인 개념이고 4가지의 성질을 지닌다 Atomic Consistent Isolation Durability spring transaction 도 이 개념을 포함하고 있다. spring 은 @Transactional 로 표현하는데 이는 우리가 알고있는 어노테이션 방식으로 선언되어서 해당 메소드를 시행할때 메서드 위에 트랜잭션 기능이 적용된 프록시 객체가 생성된다... 2020. 4. 23.
JPA 애플리케이션 영속성 관리 처음 멘땅에 개발을 하면서 @Service Layer 에 @Transcational 을 본 기억이 많다. 그냥 아무 생각없이 붙이거나 붙여져 있는걸 보면서 개발했던 것 같다. 뭐 여러가지로 시간이 지나면서 어느정도 알게 되었지만 이참에 책에 나온내용을 토대로 정리해볼까 한다. 내가 정리할 내용은 스프링 + JPA 환경에서의 영속성 관리에 대해서이다. 1.1 트랜잭션 범위의 영속성 컨텍스트 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 이름 그대로 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다. 즉 , 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍.. 2020. 4. 13.