
오늘은 서블릿의 개념에 대해서 알아본 후, 실제로 자바와 스프링에 구현된 코드를 보며 컴포넌트들의 역할을 이해해본다. Servlet 서블릿은 클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바의 프로그래밍 기술이다. 컨테이너가 클라이언트의 동적인 요청을 처리할 수 있도록 도와주는 컴포넌트인 것이다. 일반적으로 웹 서버는 클라이언트의 정적인 요청에만 응답하고 동적인 요청에 대한 처리는 웹 컨테이너에게 위임한다. 이 때 웹 컨테이너는 클라이언트의 HTTP Request를 해석해서 HttpServletRequest 객체를 생성하고, 응답을 전달해줄 수 있는 HttpServletResponse 객체를 생성한다. 그리고 웹 컨테이너는 요청 URL에 매핑되는 적절한 서블릿..

웹 기본 Spring MVC를 정리하기 이전에 웹의 기본 지식을 짚고 넘어가겠습니다. HTTP 먼저 HTTP에 대해서 간단하게 알아보겠습니다. 자세한 내용은 추후 업로드 할 예정입니다. HTTP(HyperText Transfer Protocol)는 HTML 문서와 같은 데이터를 주고 받기 위한 통신 규약입니다. HTTP의 가장 큰 특징은 클라이언트-서버 아키텍쳐, 비연결성, 비상태성 프로토콜이라는 것입니다. 클라이언트-서버: 클라이언트와 서버가 분리되어 요청(Request)/응답(Response) 메시지를 교환하며 통신합니다 비연결성: 클라이언트가 서버에 요청하고, 서버가 이에 응답하면 바로 연결이 끊어집니다. 비상태성: 연결을 끊는 순간 통신이 종료되며 서버는 클라이언트의 정보를 저장하지 않습니다. H..

예외 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보되는 것이 예외 처리의 핵심 원칙이다. 잘못된 예외처리 예외를 처리하는 가장 기본적인 방법은 try-catch 구문을 사용하는 것이다. 하지만 catch 구문에서 아무 작업도 하지 않는 코드들이 발견되는데 이러한 코드는 잘못된 코드이다. try { ... } catch (Exception e) { // 아무것도 하지 않음 } 예외를 제대로 처리하지 않아 메모리나 리소스가 소진되거나 결과적으로 오작동으로인한 시스템 오류가 발생할 수 있다. 아래 두 가지 경우도 마찬가지로 좋지 않은 예외 처리이다. 단순히 예외 메시지를 처리하는 것은 올바른 예외처리 방법이 아니다. try { ... } catch (Except..

3장 템플릿 JDBC 리소스 반환 JDBC의 Connection 이나 PrepareStatement는 풀 방식으로 동작한다. 여기서 풀 방식은 제한된 개수의 DB 커넥션을 만들어서 재사용 가능한 풀을 만드는 것을 의미한다. 리소스 반환을 위해 close() 메소드를 호출하는데, 만약 예상치 못한 에러로 인해 리소스를 반환하지 못한다면 커넥션 풀의 여유가 없어지고 결국 리소스가 모자라는 에러를 발생시킬 수 있다. public void deleteAll() { Connection c = dataSource.getConnection(); PrepareStatement statement = c.prepareStatement("DELETE FROM users"); statement.executeUpdate(); ..

2장 테스트 IoC, DI, Test 스프링의 핵심인 IoC와 DI는 오브젝트의 설계와 생성, 관계, 사용에 관한 기술 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용할 수 있다 테스트는 만들어진 코드를 확신할 수 있게 하고, 변화에 유연하게 대처할 수 있게한다 테스트의 유용성 테스트는 내가 예상하고 의도했던 대로 코드가 정확히 돌아가는 지 확인하여, 코드에 확신을 가질 수 있게 하는 작업 웹 개발에서 테스트를 진행하면, 데이터가 웹 화면에 보여지기까지 개발을 진행해야한다 하지만 이러한 테스트는 시간도 오래 걸릴 뿐더러 테스트의 실패 원인이 테스트 대상에 있다는 보장도 없다. 따라서 단위 테스트를 진행해야한다 단위 테스트 작은 단위의 코드에 대해 테스트를 수행하는 것을 단위 테스트라고한다...

스프링의 핵심 철학 자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복 객체 지향 프로그래밍이 제공하는 폭 넓은 혜택을 누릴 수 있도록 기본으로 돌아가는 것 관심사의 분리 변경이 일어날 때 필요한 작업을 최소화 하기 위해서는 분리와 확장을 고려한 설계가 필요하다 관심사의 분리는 친한 객체는 모이게하고, 관심이 다른 객체는 떨어져 서로 영향을 주지 않도록 하는 것이다 템플릿 메소드 패턴 상속을 통해 슈퍼 클래스의 기능을 확장할 때 사용하는 대표적인 방법 변하지 않는 기능은 추상클래스에 만들어두고 자주 변하며 확장할 기능은 서브 클래스에 만들어 둔다 슈퍼 클래스에서는 추상 메소드 혹은 오버라이드 가능한 메소드를 정의해둔다 서브 클래스에서 선택적으로 오버라이드할 수 있도록 만든..

에러 상황 Spring boot application을 실행하면 아래 에러가 발생하여 서버가 동작하지 않는다. Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 에러 분석 datasource의 url이 특정되지 않고, 내장 datasource 설정이 없다. 따라서 데이터베이스 연결 설정을 해줘야한다. h2 데이터베이스 연결 설정하면 될 것 같다. 에러 해결 1. 데이터베이스 파일 생성 https://www.h2database.com 에서 h2 데이터베이스 다운로드 h2 웹 콘솔을 열고 jdbc:h2:~/[데이터베이스이름] 으로 최소 한번 접속 ~/[데..