본문 바로가기

전체 글160

[DB] 트랜잭션 이해 트랜잭션 개념 트랜잭션을 이름 그대로 번역하면 거래라는 뜻입니다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 기능입니다. 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많습니다. 예를 들어, A의 5000원을 B에게 계좌이체한다고 생각해봅시다. 5000원 계좌이체 A의 잔고를 5000원 감소 B의 잔고를 5000원 증가 만약, A의 잔고를 5000원 감소시킨 후, B의 잔고를 5000원 증가시킬 차례에 서버가 먹통이 되었다면 어떻게 될까요? B의 잔고는 아무런 변화없이 그대로인데, A의 잔고의 5000원만 날아간셈입니다. 아주 심각한 문제가 발생합니다. 이렇듯, 계좌이체라는 거래는 이 두 작업이 하나의 작업처럼 동작해야 합니다. .. 2023. 10. 8.
[DB] 커넥션풀과 데이터소스 이해 커넥션 풀 이해 데이터베이스 커넥션 획득 과정 데이터베이스의 커넥션을 획득하는 과정은 다음과 같이 매우 복잡합니다. DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 TCP/IP 커넥션을 연결한다. (물론 이 과정에서 3-way-handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생합니다.) DB 드라이버는 TCP/IP 커넥션이 연결되면, ID, PW, 부가정보들을 전달한다. DB는 전달받은 부가정보를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성하여 클라이언트에게 반환한다. 문제점 과정이 복잡하므로 시간이 많이 소모됩니다. TCP/IP 커넥션을 새로 생성하기 위해 리소스를 매번 사용해.. 2023. 10. 7.
[DB] JDBC 이해 JDBC 등장 애플리케이션 서버와 DB는 일반적으로 다음과 같은 로직을 통해 동작합니다. 커넥션 연결 : 애플리케이션 서버와 데이터 서버는 TCP/IP를 사용해서 커넥션을 연결합니다. SQL 전달 : 애플리케이션 서버는 연결된 커넥션을 통해 SQL을 DB에게 전달합니다. 결과 응답 : DB는 전달받은 SQL을 수행하여 얻은 결과를 응답합니다. 애플리케이션 서버는 응답 결과를 활용합니다. 문제점: DB의 변경 만약, MySQL DB를 사용하고 있다가 Oracle DB로 변경해야 한다면 어떻게 될까요? 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답하는 방법이 모두 다릅니다. 그리고 관계형 데이터베이스의 종류는 수십개입니다. 쓰던 DB를 다른 DB로 바꿈으로써 생기는 문.. 2023. 10. 7.
[SpringBoot] 파일 업로드 목차 HTML Form 전송 방식 HTML에서 Form을 통한 데이터 전송방식에는 2가지가 있습니다. application/x-www-form-urlencoded mulipart/form-data application/x-www-form-urlencoded 일반적으로 데이터들을 문자타입으로 전송할 때 HTTP Body에 & 구분자를 사용하여 전송하는 가장 기본적인 방식입니다. Content-Type: application/x-www-form-urlencoded 하지만, 파일은 문자가 아니라 바이너리 데이터를 전송해야 합니다. 문자를 전송하는 방식으로 파일을 전송하지 못합니다. 또한, 파일만 전송하는 것이 아니라 다음과 같이 다른 타입의 데이터들도 함께 전송합니다. - 이름 - 나이 - 첨부파일 이름과 나.. 2023. 10. 2.
[SpringBoot] 예외 처리 - API 목차 서론 예외가 발생했을 때 HTML 페이지를 반환하는 경우 이외에 JSON으로 오류와 관련된 정보를 반환해야하는 경우가 있습니다. 오류 페이지의 경우 4xx, 5xx와 같은 오류 페이지를 단순히 고객에게 전달하면 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정의하고, 해당 데이터를 JSON으로 내려주어야 합니다. 지금부터 API의 경우 어떻게 예외를 처리하는지 알아보겠습니다. 먼저 서블릿이 어떻게 처리하는지 알아본 후, 스프링부트가 처리하는 방법에 대해 알아보겠습니다. 서블릿 - API 예외 처리 WebServerCustomizer - 에러 페이지 등록 @Component public class WebServerCustomizer implements WebServerFactoryCust.. 2023. 9. 30.
[SpringBoot] 예외 처리 - 오류 페이지 목차 서론 서블릿과 스프링에서 각각 예외를 처리하는 방법에 대해 알아보겠습니다. 예외 발생에는 다음과 같이 2가지 방식이 있습니다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception (예외) 웹 애플리케이션은 사용자 요청별로 쓰레드가 할당이 되고, 서블릿 컨테이너 안에서 실행이 됩니다. 만약, 애플리케이션에서 예외가 발생했을 때, try~catch로 예외를 잡아서 처리하지 않는다면 다음과 같은 방향으로 예외가 전파됩니다. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러 (예외발생) 우선 톰캣과 같은 WAS는 예외를 어떻게 처리할까요? 이를 확인하기 위해선 우선, 스프링 부트가 제공하는 기본 예외 페이지 설정을 false로.. 2023. 9. 26.