Spring29 [Spring] JDBC, 커넥션 풀, 트랜잭션 추상화 JDBC란?Java Database Connectivity의 약자로, 자바 프로그래밍 언어에서 관계형 데이터베이스에 쿼리를 보내고 결과를 받을 수 있도록하는 APIJDBC 드라이버 → 각각의 DB가 자신의 DB에 맞도록 JDBC 인터페이스를 구현해서 제공하는 라이브러리요청 흐름JDBC 드라이버 로드 → JDBC가 제공하는 DriverManager 클래스를 통해 라이브러리에 등록된 DB 드라이버를 로딩데이터베이스 연결 → DriverManager를 통해 데이터베이스와 연결되는 세션인 Connection 객체 생성Connection connection = DriverManager.getConnection(url, user, password);SQL 문장 실행을 위한 Statement 객체 생성String s.. 2024. 12. 27. [Spring] MultipartFile 바인딩 일반적으로 HTML 폼 전송 방식에는 2가지 종류가 있다.application/x-www-form-urlencoded요청 HTTP 헤더에 Content-Type: application/x-www-form-urlencoded을 추가하여 전송하는 방식으로 HTML 폼 데이터를 서버로 전송하는 기본적인 방법이다.이는 폼에 입력한 항목을 쿼리파라미터 형식과 같이(username=hbb&age=20) &로 구분하고 이를 HTTP 바디에 문자로 전송하는 방식이다.multipart/form-data만약 위에서 이름, 나이 외에 첨부파일을 전송해야 한다면 어떻게 해야할까?첨부 파일의 경우 바이너리로 전송해야 하므로 문자와 바이너리를 동시에 전송을 해야하는 상황이 발생한다.따라서 HTTP는 multipart/form-d.. 2024. 12. 27. [Spring] 스프링의 예외 처리 스프링은 예외 처리를 위한 다양한 방법을 제공한다.1. BasicErrorController다음과 같은 컨트롤러가 있다고 하자.@RestController@RequestMapping("/exception")public class ExceptionController { @GetMapping("/login") public String loginException() { throw new LoginRequiredException("인증이 필요한 서비스입니다."); }}기본적으로 요청이 들어오면 다음과 같은 호출 과정을 거친다.WAS → 필터 → 서블릿 → 인터셉터 → 컨트롤러 근데 만약 컨트롤러에서 예외를 잡지 않고 throw 한다면 어떻게 될까?위에서 컨트롤러는 호출 시 직접 만든.. 2024. 12. 27. [Spring] 필터와 인터셉터 로그인해야 게시판에 접근할 수 있다는 요구 사항이 있을 때, 로그인 여부를 확인하는 로직은 여러 컨트롤러에서 공통적으로 필요하다.위와 같이 애플리케이션의 여러 로직에서 공통으로 관심이 있는 사항을 공통 관심사라고 한다.스프링은 공통 관심사를 처리하여 중복 코드를 제거할 수 있도록 다음과 같은 기능을 제공한다.필터인터셉터AOP이번 시간에는 이 3가지 중에서 필터와 인터셉터에 대해서 알아보려고 한다.필터와 인터셉터는 HttpServletRequest를 제공함으로써 웹과 관련된 공통 관심사를 처리할 때 유용하다.서블릿 필터필터는 서블릿이 지원하는 기능으로 Dispatcher Servlet에 요청이 전달되기 전 또는 처리한 후에 추가 작업을 수행할 수 있도록 한다. 즉 스프링 컨테이너가 아닌 서블릿 컨테이너에 .. 2024. 12. 27. [Spring] Bean Validation 개발을 진행하다 보면 사용자의 요청이 요구에 맞게 들어왔는지 검사할 필요성이 있다.예를 들면 회원 가입 시 필수 입력 사항이 모두 들어왔는지 여부, 나이가 음수로 입력되는 경우 등 입력에 따라 다양한 검증이 필요하게 된다.컨트롤러는 HTTP 요청이 정상적인지 검증할 필요가 있는데 이를 직접 구현하면 컨트롤러의 코드 대부분은 검증로직이 될 것이다.따라서 검증 로직을 표준화하여 애노테이션으로 편하게 적용할 수 있도록 Bean Validation 기능을 지원한다.implementation 'org.springframework.boot:spring-boot-starter-validation' 위와 같이 라이브러리를 추가하면 스프링 부트는 자동으로 글로벌 Validator를 등록한다. 그리고 해당 검증기가 애노테.. 2024. 12. 27. [Spring] 메시지, 국제화 메시지, 국제화 기능메시지 기능이란 화면이나 사용자에게 전달되는 텍스트 정보를 한 곳(messages.properties)에서 관리할 수 있는 기능을 의미한다. 그리고 이런 메시지 파일을 나라별로 만들어서 서비스의 다국어 처리를 하는 것을 국제화라고 한다.MessageSource위 기능을 사용하려면 MessageSource를 스프링 빈으로 등록해야 한다. (스프링 부트의 경우 자동 등록)스프링에서 국제화, 로컬화를 지원하기 위한 인터페이스로 구현체는 ResourceBundleMessageSource가 있다./resources 하위에 messages.properties 파일을 생성하면 이를 기본으로 사용하며, 국제화 기능을 사용하려면 messages 뒤에 언어 정보를 입력하면 된다. (messages_en.. 2024. 12. 27. [Spring] Spring MVC MVC 패턴하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것모델(Model) : 뷰에 출력할 데이터를 담아두는 영역으로 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근없이, 화면을 렌더링 하는 일에 집중 가능뷰(View) : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중하는 역할컨트롤러(Controller) : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행하는 역할을 수행하며 뷰에 전달할 결과 데이터를 조회해서 모델에 담음비즈니스 로직은 주로 서비스 계층에 있다. 즉 컨트롤러는 서비스를 호출하는 역할Spring MVC 구조동작 순서HTTP 요청이 오면 서블릿 .. 2024. 12. 27. [Spring] 서블릿과 컨트롤러 서블릿(Servlet)자바 EE (Enterprise Edition)에서 웹 애플리케이션을 개발하기 위한 서버 측 컴포넌트로클라이언트의 요청을 동적으로 처리하고, 그에 대한 응답을 생성하여 웹 브라우저에 전달하는 역할을 한다.서블릿은 자바 스레드를 이용하여 동작하고 HTTP 프로토콜 서비스를 지원하는 HttpServlet를 상속받아 service 메서드를 구현하여 사용 가능하다.@WebServlet(name = "testServlet", urlPatterns = "/test")public class TestServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse.. 2024. 12. 27. [Spring] @Qualifier, @Primary @Autowired로 의존 관계를 자동 주입할 때 해당 애노테이션은 타입으로 빈 조회 후 주입한다.이 때 조회 대상의 빈이 2개 이상이면 자동 주입 시 문제가 발생할 수 있다.이 문제를 해결하기 위한 방법은 크게 3가지로 나눌 수 있다. 예를 들어 다음과 같은 서비스가 있다고 하자.public interface PaymentService { void pay();}@Servicepublic class NaverPayService implements PaymentService { @Override public void pay() { System.out.println("네이버 페이 결제"); }}@Servicepublic class KakaoPayService implemen.. 2024. 12. 27. 이전 1 2 3 4 다음