Spring 43

[Spring/DB] 02. 커넥션풀과 데이터소스 이해

02. 커넥션풀과 데이터소스 이해정리이전 챕터에서 학습한 코드의 동작 방식에는 한 가지 큰 문제점이 있다. 쿼리를 날릴 때 마다 커넥션을 매번 획득한다는 점이다.데이터베이스 커넥션을 획득할 때는 복잡한 과정을 거친다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다..

Spring/DB 2025.01.19

[Spring/MVC] 12. Bean Validation

12. Bean Validaiton정리이전 챕터에서 검증 로직을 스프링 Validator를 구현하여 처리하는 방법까지 살펴봤다. 그런데, 매 번 코드로 검증 로직을 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다.이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화 한 것이 바로 Bean Validation 이다.public class Item { private Long id; @NotBlank(message = "공백 X") // 이런 식으로 메시지를 지정할 수도 있다. private String itemName; @NotNull @Range(min = 1000, max = 10000..

Spring/MVC 2025.01.19

[Spring/MVC] 11. Validation

11. Validation주의) 이번 챕터의 정리 글은 매우 깁니다~정리폼 입력 시 숫자를 문자로 작성하거나 해서 검증 오류가 발생하면 오류 화면으로 바로 이동한다. 이렇게 되면 사용자는 처음부터 해당 폼으로 다시 이동해서 입력을 해야 한다. 웹 서비스는 폼 입력 시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려주어야 한다.참고: 클라이언트 검증, 서버 검증클라이언트 검증은 조작할 수 있으므로 보안에 취약하다.서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다.둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨주어야 함상품 저장 Validation 실패사용자가..

Spring/MVC 2025.01.19

[Spring/MVC] 10. 메시지 국제화

10. 메시지 국제화정리메시지악덕? 기획자가 화면에 보이는 문구가 마음에 들지 않는다고, 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 한다. “상품명”이라는 메시지가 하드코딩되어 있다면, 여러 HTML 파일에 흩어져있는 “상품명”을 직접 일일히 찾아서 “상품이름”으로 수정해야 할 것이다.이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다.예를 들어서 messages.properties라는 메시지 관리용 파일을 만들고item=상품item.id=상품 IDitem.itemName=상품명item.price=가격item.quantity=수량각 HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다.국제화메시지의 기능을 조금 더 확장해서 생각해보면, 메시지 파일을 ..

Spring/MVC 2025.01.19

[Spring/DB] 01. JDBC 이해

1. JDBC 이해#Spring/DB/Jdbc정리JDBC 등장이유클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다.애플리케이션 서버와 DB - 일반적인 사용법커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다.SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다.결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다.문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다는 점이다또한, 데이터베이스 종류를 변경하면 애플리케이션 서버에 개발된 데이터베..

Spring/DB 2024.12.29

[Spring/MVC] 09. 타임리프 - 스프링 통합과 폼

09. 타임리프 - 스프링 통합과 폼#Spring/MVC정리타임리프 스프링 통합타임리프는 스프링을 위해 기능을 제공한다고 말해도 과할 정도가 아닌 수준의 스프링 통합을 위한 다양한 기능을 제공한다.스프링 통합으로 추가되는 기능스프링의 SpringEL 문법 통합${@myBean.doSomething()}처럼 스프링 빈 호출 지원편리한 폼 관리를 위한 추가 속성th:object (기능 강화, 폼 커맨드 객체 선택)th:field, th:errors, th:errorclass폼 컴포넌트 기능checkbox, radio button, List 등을 편리하게 사용할 수 있는 기능 지원스프링의 메시지, 국제화 기능의 편리한 통합스프링의 검증, 오류 처리 통합스프링의 변환 서비스 통합 (ConversionServic..

Spring/MVC 2024.12.28

[Spring MVC] 08. 타임리프 기본기능

08. 타임리프 기본기능정리타임리프 사용 선언(스프링 부트에 타임리프를 추가했으면 선언하지 안하도 타임리프 문법이 적용되는 것 같긴 합니다)기본 표현식• 간단한 표현: ◦ 변수 표현식: ${...} ◦ 선택 변수 표현식: *{...} ◦ 메시지 표현식: #{...} ◦ 링크 URL 표현식: @{...} ◦ 조각 표현식: ~{...}• 리터럴 ◦ 텍스트: 'one text', 'Another one!',… ◦ 숫자: 0, 34, 3.0, 12.3,… ◦ 불린: true, false ◦ 널: null ◦ 리터럴 토큰: one, sometext, main,…• 문자 연산: ◦ 문자 합치기: + ◦ 리터럴 대체: |The name is ${name}|• 산술 연산: ◦ Binary ope..

Spring/MVC 2024.12.27

[Spring MVC] 07. 스프링 MVC - 웹 페이지 만들기(타임리프, PRG, RedirectAttribute)

7. 스프링 MVC - 웹 페이지 만들기(타임리프, PRG, RedirectAttribute)정리Item - 상품 객체, Repository@Datapublic class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; }}리포지..

Spring/MVC 2024.12.26

[Spring/MVC] WebMvcConfigurer

김영한님 Spring MVC 강의를 통해 공부하다가 Spring MVC에 WebMvcConfigurer 라는 확장 포인트가 있다는 점을 알게 되었다. (강의에서는 ArgumentResolver와 MessageConverter를 WebMvcConfigurer에서 확장할 수 있다 정도만 설명하고 넘어감)Spring MVC에는 대부분의 기능이 이미 구현되어 있어 확장 포인트가 많지 않다고 했는데, WebMvcConfigurer에서는 어떤 부분을 확장할 수 있는지 구체적으로 알아보자. WebMvcConfigurer란?WebMvcConfigurer 는 스프링 부트 혹은 스프링 MVC 애플리케이션에서 MVC 관련 설정을 직접 확장하거나 추가할 수 있게 해주는 확장 포인트 인터페이스이다. 스프링 부트가 제공하는 We..

Spring/MVC 2024.12.24