스프링
-
트랜잭션스프링/스프링 DB 1편 - 데이터 접근 핵심 원리 2024. 2. 7. 20:32
트랜잭션 - 개념 이해 데이터를 저장할 때 단순히 파일을 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, 잔고를 5000원 증가해야 한다. 계좌이체는 A의 잔고 감소와 B의 잔고 증가가 하나의 작업처럼 동시에 일어나야 한다. 잔고 감소까지는 성공했는데 ..
-
커넥션풀과 데이터소스 이해스프링/스프링 DB 1편 - 데이터 접근 핵심 원리 2024. 2. 6. 20:45
커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획들할 때 다음과 같은 과정을 취한다 1. 애플리케이션 로직은 DB드라이버를 통해 커넥션을 조회한다 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결하고, 이과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB세션을 생성한다. 5. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. 6. DB는 커넥션 객체를 생성해서 클라이언트에 반환한다. 매번 이러한 과정을 통해서 새롭게 생성하는건 결과적으로 응답 속도에 영향을 끼친다. 이..
-
JDBC 이해스프링/스프링 DB 1편 - 데이터 접근 핵심 원리 2024. 2. 6. 20:21
애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 1. 커넥션 연결 : 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 : DB는 전달된 SQL을 수행하고, 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 각각의 데이터베이스 마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답하는 방법이 모두 달랐다. 하지만 관계형 데이터베이스는 수십개가 있다. 이로써 2개의 큰 문제가 발생한다. 1. ..
-
로그인 처리1 - 쿠키와 세션스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 2. 2. 00:44
로그인 처리하기 - 쿠키 사용 로그인 상태 유지하기 로그인의 상태를 어떻게 유지할 수 있을까? HTTP 강의에서 일부 설명했지만, 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업이다. 쿠키를 사용해보자. 쿠키 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하자. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다. 쿠키에는 영속 쿠키와 세션 쿠키가 있다. 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 브라우저 종료시 로그아웃이 되길 기대하므로, 우리에게 필요한 것은 세션 쿠키이다. 로그아웃 기능 로그아웃의 방법은 세션 쿠키이므로 웹브라우저 종료시 서버에서 해당 쿠키의 종료날짜를 0..
-
검증 Validation스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 1. 29. 23:48
컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 이런 검증 로직을 잘 개발하는 것이 어쩌면 더 어려운 것일지 모른다. 스프링부트가 spring-boot-starter-validation 스프링 MVC 라이브러리를 넣으면 자동으로 Bean Validation를 인지하고 스프링에 통합한다. 스프링 부트는 자동으로 글로벌 Validator로 등록한다. LocalValidatorFactoryBean를 글로벌 Validator로 등록한다. 이 Validator @NotNull 같은 애노테이션을 보고 검증을 수행한다. 이렇게 글로벌 Validator가 적용되어 있기 때문에, @Valid, @Validated만 적용하면 된다. 검증 오류가 발생하면, FieldError..
-
메시지, 국제화스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 1. 25. 23:06
메시지 label에 있는 단어를 변경하려면 이미 작성해놓은 화면들을 다 찾아가면서 모두 변경해야한다 화면의 수가 적었을 때는 큰 문제가 되지 않지만 수십개 이상의 경우에는 수십개의 화면을 전부 수정해야한다. 이경우에 다양한 메세를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라고 한다. 국제화 메시지에서 한 발 더 나아가보자 메시지를 설정해놓은 메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 스프링 메시지 소스 설정 스프링은 기본적인 메시지 관리 기능을 제공한다. 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 되는데, MessageSource는 인터페이스이다. 따라서 구현체인 ResourceBundleMessageSource를..
-
타임리프 - 스프링 통합과 폼스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 1. 24. 23:08
타임리프는 스프링 없이도 동작하지만, 스프링과 통합을 위한 다양한 기능을 편리하게 제공한다. 그리고 이런 부분은 스프링으로 백엔드를 개발하는 개발자 입장에서 타임리프를 선택하는 이유가 된다. 스프링 통합으로 추가되는 기능 스프링의 SpringEL 문법 통합 ${@myBean,doSomething()} 처럼 스프링 빈 호출 지원 편리한 폼 관리를 위한 추가 속성 더보기 th:object (기능 강화, 폼커맨드 객체 선택) th:field, th:error, th:errorclass 폼 컴포넌트 기능 더보기 checkbox, radio button, List 등을 편리하게 사용할 수 있는 기능 지원 스프링의 메시지, 국제화 기능의 편리한 통합 스프링의 검증, 오류 처리 통합 스프링의 변환 서비스 통합(Con..
-
타임리프스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 1. 23. 23:12
타임리프 특징 서버 사이드 HTML 렌더링 (SSR) 네츄럴 템플릿 더보기 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 할 수 있고, 서버를 통해서 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. JSP를 포함한 다른 뷰 템플릿들은 해당 파일을 열면, 예를 들어서 JSP파일 자체를 그대로 웹 브라우저에서 열어보면 JSP 소스코드와 HTML이 뒤죽박죽 섞여서 웹 브라우저에서 정상적인 HTML 결과를 확인할 수 없다. 오직 서버를 통해서 JSP가 렌더링 되고 HTML 응답 결과를 받아야 화면을 확인할 수 있다. 반면에 타임이르포 작성된 파일은 해당 파일을 그대로 웹 브라우저에서 열어도 정상..