이 글은 김영한님의 스프링 DB 1편 강의중 제목과 관련된 부분을 블로그장 입맛대로 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 1. JDBC란? JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 등장배경 위는 애플리케이션 서버가 일반적으로 DB와 통신하는 것을 나타낸 그림이다. 만약, 위 상태에서 MySQLDB가 아닌 OracleDB로 변경되면 어떻게 될까? 커넥션 연결, SQL 전달, 결과를 응답하는 방법은 모든 DB마다 다르기때문에 데이터베이스 관련 코드를 모두 변경해야 할것이다. 따라서 JDBC 표준 인터페이스를 제공하게 되면서 각 DB 벤더(회사)에서 인터페이스에 맞도록 구현하여 라이브러리로 제..
Spring
이 글은 김영한님의 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 강의중 예외 처리를 블로그장 입맛대로 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 1.서블릿의 예외 처리 서블릿은 다음 두가지 방식으로 예외 처리를 한다. 1-1. Exception @GetMapping("/error-ex") public void errorEx(){ throw new RuntimeException("예외 발생!"); } 위 요청을 실행해보면 500에러가 나는것을 확인할 수 있다. 이는 예외가 발생해서 WAS까지 전파되고, WAS가 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 생각하여 500으로 반환하기 때문이다. 1-2. response.sendError(HTTP 상태코드, 오류 메시..
이 글은 김영한님의 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 강의중 검증편을 블로그장 입맛대로 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 먼저, 아이템을 등록하는 간단한 컨트롤러의 예시를 보자. 1. Map으로 검증 오류 결과 보관 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //검증 로직 if(!StringUtils.hasText(item.g..
이 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 1단계. Servlet을 사용한 간단한 HTML 리턴 /** * 단순하게 회원 정보를 입력할 수 있는 HTML Form을 만들어 응답 */ @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws Ser..
이 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 웹 서버(Web Server),웹 애플리케이션(WAS - Web Application Server) 웹 서버와 웹 애플리케이션 서버는 모두 HTTP 기반으로 동작한다. 웹 서버는 정적 리소스(HTML, CSS, JS, image ...)만 제공하는 반면 웹 애플리케이션 서버는 애플리케이션 로직이 들어간다. (사실 둘의 용어와 경계가 모호하다고 하다.) 보통 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 부른다. (서블릿 컨테이너는 아래에서 설명한다.) 웹 서버는 NGINX,APACHE등이 있고, 웹 애플리케이션 서버는 Tomcat,Undertow등이 있다..
이글은 김영한님의 강의 스프링 핵심 원리 - 기본편에서 나온 빈의 생명주기와 스코프에 관한 내용을 정리한 글이며 강의 자료 및 링크는 가장 아래에서 확인할 수 있다. 빈의 생명주기 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음 데이터를 사용할 수 있는 상태가 된다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 크게 3가지 방법이 있는데 여기선 그중 가장 최근에 많이 사용하는 방법인 @PostConstruct,@PreDestroy를 사용하여 살펴보도록 하자. 선수지식으로 스프링 빈의 이벤트 라이프사이클은 아래와 같다. * 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링..
저번 편에선 의존성 주입을 AppConfig와 같이 설정 클래스를 두고 관리하는 이유와 스프링 컨테이너에 넣어서 관리하는 이유 및 장점까지 살펴보았다. 그렇다면 마지막 코멘트에 있던 @Bean과 @Configuration을 반복적으로 넣어줘야 한다면 불편하지 않을까? @Configuration public class AppConfig { @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return new OrderServiceImpl( memberRepository(), discountPolicy()); } ..
이 글은 김영한님의 스프링 핵심 원리 이해 강의중 중요한 의존관계 주입을 중심으로 그 원리는 무엇이고 스프링을 적용한 의존관계를 정리하기 위한 글이며, 기존의 자바코드로 이루어진 의존성 주입과 스프링을 이용한 의존성 주입까지 어떻게,왜 사용되었는지 정리해보고자한 글이다. 포스팅에 사용된 자료는 포스팅 가장 아래 링크강의에서 확인할 수 있다. 해당 포스팅에선 도출된 과정을 살펴보기 위해 기본적으로 강의자료에 사용된 클래스 다이어그램을 사용하였다. 먼저, 스프링을 적용하지 않고 Java코드로만 이루어진 예제를 정리해보자. 1. 회원 클래스 다이어그램 기본적으로 회원 서비스 인터페이스가 있고, 해당 인터페이스를 상속받는 구현체가있다. 또한 회원 DB와 연관된 repository인터페이스가 있고, 해당 인터페이..