1. 트랜잭션이란?1.1. 트랜잭션의 기본 이해트랜잭션의 사전적 정의는 "거래"다. 이때 데이터베이스에서 트랜잭션이란 하나의 거래를 안전하게 처리하도록 보장함을 의미한다. 근데 하나의 거래를 안전하게 처리하려면 고려할게 많다. 예를 들어, A의 돈을 B에게 이체한다고 하자. 그럼 A의 잔고 값을 감소시키고, B의 잔고 값은 증가시켜야한다. 만약 두 작업 중 하나는 성공하고, 하나는 실패하는 경우는 문제가 된다. 이런 경우 트랜잭션은 작업 1, 2가 모두 성공되어야 데이터를 저장한다. 하나라도 실패하면 거래 전의 상태로 되돌린다. 이때, 모든 작업이 성공하여 데이터베이스에 반영하는 것을 Commit이라고 부르고, 하나라도 실패하여 이전 상태로 되돌리는 것을 Rollback이라고 부른다.1.2. ACID트랜..
BackEnd/Spring
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을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 것이 타임리프의..
1. 요구사항 분석 먼저 상품은 "상품 ID", "상품명", "가격", "수량"에 대한 정보를 가진다. 이때 상품 관리 기능으로는 "상품 목록", "상품 상세", "상품 등록", "상품 수정" 총 4가지 기능이 있다. 지금부터 해당 웹 페이지를 만들어보자. 서비스의 흐름은 다음가 같다. 클라이언트는 상품 목록에 들어가서 상품들을 볼 수 있다. 상품 목록에서는 상품 등록 폼으로 이동할 수 있다. 상품을 등록하면 상품을 저장한다. 상품을 저장하면 내부 호출을 통해 해당 상품에 대한 상세 화면을 띄워준다. 상품 상세에서는 상품 수정 폼으로 이동할 수 있다. 상품을 수정하면 상품 상세로 Redirect 된다. 2. 상품 도메인 개발 우리가 사용할 상품 클래스는 다음과 같이 만들 수 있다. @Getter @Set..
1. 로깅 간단히 알아보기앞으로 "System.out.println()"은 사용하지 않을 것이다. 실무에서는 이를 쓰면 안된다. 로그라는 것을 통해 콘솔로 출력해야한다. 기본적으로 스프링 부트의 Dependencies를 보면 항상 spring-boot-starter가 들어있다. 여기에 spring-boot-starter-logging이라는 라이브러리를 자동으로 가져오 그 안에 몇 개의 라이브러리가 또 들어있다.세상에는 Logback, Log4J, Log4J2 등 굉장히 많은 로그 프레임워크들이 있다. 이들을 통합하여 인터페이스로 제공하는 것이 SLF4J이다. 즉, SLF4J가 인터페이스인 것이고, Logback은 구현체 중 하나다. 실무에서는 스프링 부트가 제공하는 Logback을 주로 사용한다고 한다..