1. 체크 예외와 인터페이스이전 서비스 코드를 보면 아직 서비스 계층이 SQLException이라는 서비스에서 처리할 수 없는 예외에 의존하고 있는 것을 알 수 있다.@Slf4j@RequiredArgsConstructorpublic class MemberServiceV3 { private final MemberRepositoryV3 memberRepository; @Transactional public void accountTransfer(String fromId, String toId, int money) throws SQLException { bizLogic(fromId, toId, money); } private void bizLogic(String fromI..
BackEnd
1. 기존 코드의 문제점1.1. 애플리케이션 구조애플리케이션에서 단순하지만 많이 사용하는 방법은 아래와 같이 3계층으로 나눈 방식이다.프레젠테이션 계층: UI와 관련된 처리를 한다.서비스 계층: 비지니스 로직을 담당한다.데이터 접근 계층: 데이터베이스 접근을 담당한다. JDBC, JPA 등이 해당한다.세 가지 계층 중 가장 중요한 것은 서비스 계층이다. 비지니스 로직이 담겨있기 때문에 최대한 변경 없이 유지되어야 하며 이를 위해 특정 기술에 종속적이지 않게 해야한다. 따라서 UI 관련 기술들은 프레젠테이션 계층에서, 데이터 접근 기술들은 데이터 접근 계층에서 담당하여 서비스 계층은 기술에 종속되지 않도록 한다.1.2. 문제점이전 비지니스 코드의 내용은 다음과 같다.@Slf4j@RequiredArgsCon..
1. 트랜잭션이란?1.1. 트랜잭션의 기본 이해트랜잭션의 사전적 정의는 "거래"다. 이때 데이터베이스에서 트랜잭션이란 하나의 거래를 안전하게 처리하도록 보장함을 의미한다. 근데 하나의 거래를 안전하게 처리하려면 고려할게 많다. 예를 들어, A의 돈을 B에게 이체한다고 하자. 그럼 A의 잔고 값을 감소시키고, B의 잔고 값은 증가시켜야한다. 만약 두 작업 중 하나는 성공하고, 하나는 실패하는 경우는 문제가 된다. 이런 경우 트랜잭션은 작업 1, 2가 모두 성공되어야 데이터를 저장한다. 하나라도 실패하면 거래 전의 상태로 되돌린다. 이때, 모든 작업이 성공하여 데이터베이스에 반영하는 것을 Commit이라고 부르고, 하나라도 실패하여 이전 상태로 되돌리는 것을 Rollback이라고 부른다.1.2. ACID트랜..
1. Connection Pool이란?데이터베이스 커넥션을 획득할 때는 다음과 같은 과정을 거친다.사용자가 요청을 보낸다.애플리케이션 로직은 DB Driver를 통해 커넥션을 조회한다.DB 드라이버는 DB와 "TCP/IP" 커넥션을 연결한다. DB 드라이버는 3 way handshake 이후 connection이 연결되었다면, ID, PW, 부가정보 등을 전달한다.DB는 받은 정보로 내부 인증을 완료하고, 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해 클라이언트에게 반환한다.결국 위와 같은 과정을 거쳐 커넥션이 반환된다. 하지만 이 과정은 너무 복잡하고, 시간도 많이 소요된다. 이런 문제를 해결하기 위해서 커넥션을 미리 생성하고, 사용하는 커넥션 풀..
1. JDBC 이해애플리케이션 개발시 데이터는 주로 데이터베이스에 보관하며, 보통 애플리케이션 서버의 구조는 다음과 같다.이때, 클라이언트가 데이터의 저장, 조회 등을 요청하면, 서버는 해당 요청을 처리하기 위해 DB에 접근해야 한다. 이를 위해, 어플리케이션 서버는 아래 과정을 통해 데이터베이스에 접근한다. 커넥션 연결은 주로 TCP/IP를 사용한다.하지만, (옛날에는) 각각의 데이터베이스마다 사용 방법이 달랐다. 커넥션 연결, SQL 전달 방법, 응답 받는 방법 모두 달라 아래와 같은 문제가 생겼다.사용하던 데이터베이스를 변경하면, 데이터베이스 사용 코드도 변경해야 한다.개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 응답 받는 방법을 숙지해야 한다.이러한 문제 때문에 JDBC가 등장한다..
1. 메시지란?만약, 기획자가 "상품명"이라는 단어를 모두 "상품 이름"으로 고쳐달라고 하며 어떻게 해야 할까? 만약, HTML 파일에 메시지가 하드코딩된 경우 경우 수십 개, 수백 개의 파일을 고쳐야 할 수 있다. 이런 문제를 해결하기 위해, 다양한 메시지를 한 곳에서 관리하도록 하는 기능이 메시지 기능이다. 예를 들어, messages.properties라는 메시지 관리용 파일에 다음과 같은 내용을 작성할 수 있다.item=상품item.id=상품 IDitem.itemName=상품명item.price=가격item.quantity=수량이렇게 되면 HTML에서 다음과 같이 해당 데이터를 key값으로 부를 수 있다.2. 국제화한국에서 혹은 미국에서 접속하는 사이트의 경우 여러 언어를 지원해야 한다. 이런 ..
1. 타임리프 스프링 통합타임리프는 일단 메뉴얼을 크게 두 가지를 제공한다.기본 메뉴얼: Tutorial: Using Thymeleaf스프링 통합 메뉴얼: Tutorial: Thymeleaf + Spring기본 메뉴얼은 순수한 타임리프, 즉, 스프링 없이 타임리프를 사용할 때 그리고, 앞에서 살펴본 타임리프의 기본적인 기능이 설명된 메뉴얼이다. 그리고 스프링 통합 메뉴얼이라는 것이 있다. 이건 타임리프와 스프링을 통합해서 지원하는 기능들을 가지고 메뉴얼을 만든거다. 타임리프는 스프링이 없어도 동작한다. 하지만 스프링 통합을 위한 다양한 기능을 제공한다. 그리고 이런 부분이 스프링으로 백엔드를 개발하는 개발자 입장에서 타임리프를 사용하는 이유다. 스프링 통합으로 추가되는 기능은 다음과 같다.스프링의 Sp..
1. 타임리프 소개타임리프의 특징은 다음과 같다.서버 사이드 HTML 렌더링 (SSR)타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다.네츄럴 템플릿타임리프는 순수 HTML을 최대한 유지한다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용 확인이 가능하다. 또한 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다.JSP를 포함한 다른 뷰 템플릿들은 소스코드와 HTML이 뒤죽박죽 섞여있기 때문에 웹 브라우저로 접근시 정상적인 HTML 결과를 확인하기 힘들다. 하지만 타임리프는 웹 브라우저에서 열어도 정상적인 결과 확인이 가능하다. 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 것이 타임리프의..