Java9 코드로 스프링 트랜잭션 API 구조 보기 서비스 추상화와 디자인 패턴 PSA (Portable Service Abstraction) 는 로우 레벨의 기술을 추상화하여 (Service Abstraction) 다른 애플리케이션에서 적용할 수 있게 해주는 (Portable) 방법이다. 여기서 서비스의 의미를 생각해봐야 하는데, 애플리케이션의 비즈니스 로직 서비스 계층을 말하는 것이 아니라 기술 서비스 계층을 의미한다. 위 그림은 토비의 스프링 5장 서비스 추상화에서 등장한 구조도로, 트랜잭션의 서비스 추상화를 위해 계층 간 상속관계와 호출을 나타내고 있다. 트랜잭션 기술의 서비스 추상화를 위해 PlatformTransactionManager 라는 인터페이스를 두고 DataSourceTransactionManager, HibernateTransacti.. 2022. 5. 12. Spring Data JDBC 에서 연관관계 매핑 코드스쿼드에서 미션을 진행하면서 Spring Data JDBC 를 사용하게 되었다. 이전까지는 스프링 프레임워크에서 기본적으로 제공하는 JDBCTemplate 만을 사용했지만, 처음으로 자바 애플리케이션 내의 도메인 객체와 관계형 데이터베이스의 테이블을 매핑하는 모듈을 다루게 되었다. 그 과정에서 특히 어려움을 겪었던 Spring Data JDBC 에서의 1:1, 1:N, N;1, N:M 연관관계 매핑에 대해, 스스로 시행착오를 겪으면서 알게된 방법을 정리해보고자 한다. 연관관계 매핑을 연습하면서 정리한 GitHub 리포지토리의 링크는 아래와 같다. https://github.com/rxdcxdrnine/relation-spring-data-jdbc GitHub - rxdcxdrnine/relation-.. 2022. 4. 25. 열거형을 이용해 if-else 블록 제거하기 이번주에 진행한 코드스쿼드 미션에서는 다음과 같은 프로그래밍 요구사항이 주여졌다. - 메서드의 크기가 최대 10라인을 넘지 않도록 구현한다. - 들여쓰기(indent) depth를 2단계에서 1단계로 줄여라. - else를 사용하지 마라. 메서드의 크기와 들여쓰기 제한도 어려웠지만, else 를 사용하지 않고 코드를 짜라니. 어떤 의도인지 알기 어려웠다. 단순히 else 블록을 if 블록으로 조건과 함께 명시적으로 작성하라는 걸까? else 블록 제거하기 step 1 https://github.com/rxdcxdrnine/java-ladder/blob/step1/src/main/LadderChar.java GitHub - rxdcxdrnine/java-ladder: 2022 마스터즈 백엔드 사다리 게임 .. 2022. 2. 19. 주소 변환 (address translation) 의 원리 이 포스트는 OSTEP 의 15장 주소 변환에 관한 내용을 다룹니다. 메모리 가상화와 주소변환 CPU 가상화 부분에서, 대부분의 경우 프로그램은 하드웨어에서 직접 실행되지만 프로세스가 시스템 콜을 하거나 타이머 인터럽트가 발생할 때 등의 특정 순간에 운영체제가 개입하여 문제가 발생하지 않도록 하는 제한적 직접 실행 (Limited Direct Execution) 이 적용된다. 따라서 운영체제는 약간의 하드웨어 지원만 받고 실행 프로그램에게 방해가 되지 않는 효율적인 가상화를 제공하며, 중요한 순간에 운영체제가 관여하여 하드웨어를 직접 제어한다. 즉, 효율성과 제어를 바탕으로 CPU 가상화가 이루어진다. 메모리 가상화의 목적 메모리 가상화에서도 비슷한 전략이 추구된다. 가상화를 제공하는 동시에 효율성 (e.. 2022. 1. 20. JVM 과 스택 프레임 (Stack Frame) JVM JVM (Java Virtual Machine) 은 자바 코드에 있는 메인 메서드를 실제로 호출하여, 자바 어플리케이션을 실행하는 런타임 엔진 역할을 한다. 자바는 코드를 작성한 프로그래머가 개발과 배포에 사용되는 시스템에 관계없이, 실행 환경인 JRE (Java Runtime Environment) 갖춰지면 어플리케이션을 실행할 수 있으므로 WORA (Write Once Run Anywhere) 라고 불린다. 이는 JRE 의 일부인 JVM 위에서 자바 어플리케이션이 실행되기 때문에 가능한 일이다. 우리가 작성한 소스코드인 .java 파일을 컴파일하면, 자바 컴파일러에 의해 .java 파일과 같은 이름의 바이트 코드로 구성된.class 파일이 생성된다. 그리고 생성된 .class 파일을 java .. 2022. 1. 19. 스트림 (Stream) API 자바로 알고리즘 문제를 풀다가 특정 코드에 함수형 프로그래밍을 적용하고 싶어, 스트림을 공부하게 되었다. 자바스크립트의 기본 자료형인 배열에서 지원하는 map, filter, reduce 와 같이 사용이 쉬운 편은 아니지만, 막상 공부해보고 나니 파이썬의 max, min, sorted 와 같이 기본적으로 제공하는 연산함수에서 key 인자에 사용하는 람다식보다 훨씬 체계적이라고 느꼈다. 스트림을 공부하면서 정리한 내용을 공유해보고자 한다. 본 포스트는 자바의 정석 14장 - 스트림의 내용을 정리했습니다. 스트림 (Stream) 스트림 (Stream) 은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드를 정의해 놓았다. 데이터 소스를 추상화했다는 것은, 데이터 소스가 무엇이든 간에 같은 방.. 2022. 1. 13. 이전 1 2 다음