전체 글

https://github.com/dhmin5693 dhmin5693@naver.com
· Java
Java Stream 개요 자바는 90년대 공개된 이후 현재도 가장 인기가 많은 언어 중 하나로 손꼽히고 있다. 이유는 간단하다. 사용자가 필요로 하는 기능이 자바에 계속 추가되니까. 2014년 공개된 자바 8엔 함수형 프로그래밍을 지원하는 스트림이 포함되었다. 스트림의 추가는 자바를 완전히 새로운 형태로 작성할 수 있는 새로운 장을 열었다고 보아도 무방하다. '함축적이고 짧아진 코드' 그 이상을 제공하고 있기 때문이다. 자바 8 설계에 쓰인 프로그래밍 개념 자바 8을 설계하는데 고려한 프로그래밍 세 가지 개념을 소개한다. 🖇 스트림 처리 스트림은 한 번에 한 개씩 만들어지는 연속적인 데이터 항목의 모임이다. 이론적으로 프로그램은 입력 스트림에서 하나씩 읽어들이고, 출력 스트림에 하나씩 기록한다. 한 프..
Spring에서 AOP를 구현하는 방법과 Transactional AOP에 관한 간략한 개념이 필요하다면 다른 글을 참조한다. 이 내용은 공식 문서를 참조하여 작성하였다. Spring Framework Document AOP 구현 방식 Spring에서 AOP는 두 가지 방법으로 구현되어 있다. Dynamic Proxy (Reflection) CGLIB (Byte Code Instrument) 인터페이스를 클래스로 구현하여 사용하는 경우 Dynamic proxy, 단일 클래스는 CGLIB를 사용한다. 1. 인터페이스에 선언되지 않은 메소드를 권고하는 경우 2. 메소드의 인자로 프록시된 객체를 구체적으로 전달해야 하는 경우 또한 비즈니스 로직을 구현할 때 클래스보다는 인터페이스로 유연하게 설계할 것을 권장하..
· Database
트랜잭션 격리 수준 개발을 하다 보면 여러 스레드에서 동시에 하나의 자원에 접근하는 경우가 있다. 접근을 적절하게 제한하지 않는다면 생각지 못한 버그가 발생할 수 있다. 게다가 이런 경우는 디버깅하기도 굉장히 어렵다. 데이터베이스도 N개의 트랜잭션을 동시에 처리하다 보면 같은 데이터에 접근할 수 있다. 트랜잭션의 목적은 로직의 흐름 속에서 데이터를 일관되게 처리하기 위한 것이나, 동시에 같은 데이터에 write 접근을 하는 경우엔 문제가 될 수 있다. 동시성 문제를 해결하기 위해 데이터베이스는 격리 수준이라는 기능을 제공한다. 격리 수준의 종류 격리 수준은 4개로 구분된다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 4에 가까울 수록 동시..
Spring boot 초기화 코드 작성하기 서버가 켜지자마자 상태를 지정해줘야 하는 일들이 더러 있을 것이다. 몇 가지만 알아두면 요긴하게 사용할 수 있다. EventListener와 Runner를 사용한 방법 Spring boot에서만 사용할 수 있다. 관련 이벤트와 Runner는 boot 패키지에 포함되어 있기 때문이다. public ConfigurableApplicationContext run(String... args) { // Do something... SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting(); try { // Do something... // spring context prepar..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 😀 다양한 연관관계 매핑 엔티티 연관관계 매핑 시 고려할 3가지 다중성 단방향/양방향 연관관계의 주인 1. 다중성 연관관계는 보통 4가지 다중성을 갖는다. 다대일 일대다 일대일 다대다 다대일, 일대다 관계를 많이 사용하며 다대다 관계는 거의 사용되지 않는다. 2. 단방향/양방향 테이블과는 달리 객체는 참조용 필드를 가지며, 그 필드를 통해 연관 객체를 조회한다. 한 쪽이 다른 한 쪽을 일방적으로 참조하면 단방향이며 서로 참조하면 양방향이다. 3. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관 관계를 가질 수 있기 때문에 연관관계를 관리하는 포인트는 외래키 하나이다. 엔티티가 양방향으로 참조되면 A → B,..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 애그리거트(Aggregate) 테이블이 100개 이상 있는 ERD를 보고 있다고 생각해보자. 하나 하나 따라가보면 개별 테이블의 연관 관계는 알 수는 있지만, 한 눈에 전체의 구조를 파악하기는 굉장히 어렵다. 도메인 모델도 마찬가지이다. 그렇게 되면 수정사항이 생겼을 때 코드를 변경하고 확장하는 일이 매우 힘들어질 것이다. 애그리거트를 활용하면 이러한 어려움을 해결할 수 있다. 🔗애그리거트 애그리거트는 관련 도메인을 하나의 군집으로 묶은 것 애그리거트를 사용하면 연관 도메인을 묶어서 이해하기 때문에 모델 관계를 파악하기가 더 쉽다. 또한 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하면 코드도 일목조연하게 작성할 수 있다. 코드의 ..
Amazon Web Service의 무제한 스토리지, S3 S3 (Simple Storage Service) AWS의 스토리지 특화 서비스. 생성 즉시 용량 한도 없는 스토리지가 할당되며 사용한 만큼 금액을 지불하여 사용한다. EC2와의 비교 EC2는 VM Computing Machine으로, 일반적인 PC 1대의 컴퓨팅 파워를 제공하고 있다. 인스턴스를 새로 만들 때 정해진 양 만큼의 스토리지를 할당한다. 스토리지를 더 추가하고 싶다면 고정된 양의 스토리지인 EBS를 추가하고 마운트한다. S3는 데이터 저장에 특화된 서비스이다. 용량 제한이 없는 스토리지를 생성하여 사용하기 때문에 EC2처럼 추가 스토리지 할당/마운트 작업이 불필요하다. 구성요소 버킷 데이터를 저장하는 컨테이너 버킷 하나가 하나의 저장..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 아키텍처 네 가지 영역 아키텍처를 설계할 때 등장하는 4가지의 전형적인 영역이 있다. 표현 사용자의 요청을 응용 영역에 전달 응용 영역의 처리 결과를 (시각화하여) 사용자에게 전달 응용 사용자에게 제공해야 할 기능 구현 도메인 도메인 모델을 로직으로 구현 인프라 스트럭처 DBMS, Message Queue 등 인프라 영역과의 연계 Spring에 빗대면 아래 그림과 같은 구조를 이룬다. 표현 계층은 응용 계층에 의존적이고, 응용은 도메인에, 도메인은 인프라 스트럭처에 의존한다. 상황에 따라 상위 계층이 하위 계층에 의존하지 않을 수 있지만, 하위 계층은 상위 계층을 의존하지는 않는다. 아래 예시 코드는 금액 계산 로직이 복잡하여 '인프라 스트..
감동이중요해
티끌모아 산을 쌓아보자