목록분류 전체보기 (157)
Rootable의 개발일기

📌 목적 서비스 계층이 다른 계층에 의해 변경 영향을 받지 않도록 하기 위함 🔎 트랜잭션 추상화 ✔ 문제점들 예를 들어 서비스 계층에서 계좌이체라는 비즈니스 로직을 수행한다면 반드시 필요한 두 메서드는 조회와 변경이다. 두 메서드 모두 DB에 접근을 해야만 결과를 내줄 수 있다. 하지만, 서비스 계층에서 트랜잭션 관련 로직인 트랜잭션 획득, 커밋, 롤백 등을 포함하면 순수 Java 로직과 데이터 접근 로직이 섞여 유지보수나 테스트에 불리하다. 그리고 가장 큰 문제는 데이터 접근 기술을 교체할 수 없다는 것이다. 그 이유는 서비스 계층에서 구체적인 접근 기술에 의존하기 때문이다. ✔ 해결책 서비스 계층이 인터페이스에 의존하도록 하자 스프링은 트랜잭션의 주요 기능을 추상화한 PlatformTransa..

작가 rawpixel.com 출처 Freepik 📌 개요 트랜잭션은 ATM이나 데이터베이스 등의 시스템에서 더 이상 나눌 수 없는 업무 처리의 단위로, 하나 이상의 SQL문으로 구성된다. 여기서 나눌 수 없다는 것은 나눌 경우 시스템이나 데이터베이스에 심각한 오류를 초래할 수 있다는 의미이다. 이러한 개념의 기능을 데이터베이스에서 제공하는 것을 트랜잭션이라고 한다. 📌 트랜잭션 관리 트랜잭션은 하나의 논리적 작업 단위를 구성하는 하나 이상의 SQL문으로 구성되며, 모든 트랜잭션은 두 가지 상황으로 종료된다. 실행한 논리적 작업 단위 전체가 성공적으로 종료되면 그 트랜잭션은 영구적으로 데이터베이스에 저장된다. 이를 COMMIT이라 한다. 반면, SQL 실행 중 하나라도 정상적으로 종료되지 않으면 논리적인 ..

📌 HTML 폼 전송 방식 🔎 application/x-www-form-urlencoded 방식 HTML 폼 데이터를 서버에 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type으로 application/x-www-form-urlencoded를 추가한다. 폼에 입력한 전송할 항목을 HTTP body에 문자로 "username=kim&age=20"과 같이 &로 구분해서 전송한다. ✔ 문제점 파일은 문자가 아니라 Binary 데이터를 전송해야 하므로, 해당 방식으로는 전송이 어렵다. 또한, 보통 폼을 전송할 때 파일뿐만 아니라 다른 데이터도 함께 전달한다. 따라서, Binary 데이터와 문자 데이터를 동..

📌 BasicErrorController의 한계 🔎 BasicErrorController 코드 errorHtml() : 클라이언트 요청의 Accept 헤더 값이 text/html인 경우, error 디렉터리의 뷰를 반환error() : 그 외 경우에 호출되고 ResponseEntity로 HTTP body에 JSON 데이터를 반환 스프링 부트는 BasicErrorController가 제공하는 기본 정보들을 활용해서 오류 API를 생성해 준다. 🔎 한계 스프링 부트가 제공하는 BasicErrorController는 HTML 응답을 하는 경우에는 매우 편리한 방법이다. 하지만 API 오류 처리는 매우 세밀하고 복잡하다. 각각의 컨트롤러마다 또는 예외마다 API 오류 스펙을 정의해야 할 수도 있다. 예를..