본문 바로가기

전체 글52

Spring - ConnectionPool 기존 데이터베이스 접근 방식을 사용하다 문제점을 알게 되었습니다. 데이터베이스에 접근할 때마다 연결을 열고 닫는 과정에서 비용이 많이 든다 것이었습니다. 이번 포스트에서는 이러한 문제점을 해결하기 위한 방법인 ConnectionPool에 대해 정리해보았습니다. DB Connection 문제점 기존 데이터베이스의 연결 흐름은 다음과 같습니다. 응용 프로그램이 데이터 소스에 데이터베이스 연결을 요청 데이터 소스는 데이터베이스 드라이버를 사용하여 데이터베이스 연결 수행 연결이 생성되고 TCP 소켓이 열림 응용 프로그램이 데이터베이스 작업 수행 연결이 닫히고 소켓이 닫힘 이 흐름에서 문제점은 연결을 열고 닫는 과정이 연결 흐름에 계속 포함되어 있다는 것입니다. 데이터베이스 연결은 TCP연결입니다. 따라서 클라이.. 2022. 11. 21.
Spring - Log4j2 Log4j2는 이전 버전인 Log4j의 업그레이드 버전으로 Logbakc 아키텍처에 내재된 몇 가지 문제를 해결하면서 Logback에서 사용할 수 있는 로깅 프레임워크입니다. Logback처럼 필터링 기능과 자동 리로딩 기능을 지원하며 멀티 스레드 환경에서 비동기 로거는 다른 로깅 프레임워크보다 더 많은 처리를 할 수 있고, 대기 시간도 더 짧다는 장점을 가지고 있습니다. 이번 포스트에서는 Log4j2를 이용한 로깅에 대해 정리해보았습니다. Log4j2 환경설정 log4j2.xml을 작성하고 WEB-INF/classes 하위에 포함될 수 있도록 위치시켜야 합니다. Log4j2가 초기화될 때 해당 설정 파일을 읽어들이기 때문입니다. [xml 파일 정의] Logger Logger는 로깅 작업을 수행하는 Lo.. 2022. 11. 21.
Spring - ExceptionHandler 이번 포스트에서는 스프링의 예외처리에 대해 정리해보았다. 스프링의 기본 예외처리 방식 다음과 같은 예시코드가 있다. @Service public class MemberService implements IMemberService { private MemberDAO memberDAO; // null public MemberService() {} //@Autowired //public MemberService(MemberDAO memberDAO) { // this.memberDAO = memberDAO; //} ... } 원래라면 MemberDAO가 Autowired를 통해 외부에서 객체가 주입이 되어야 하는데 그러지 못하여 null인 상태이다. 이 상태에서 고객이 회원가입을 하면 내부에서는 데이터베이스에 접.. 2022. 11. 21.
Spring - JUnit+Mock 기반 스프링 단위테스트 이번 포스트에서는 JUnit과 Mock을 기반으로 스프링에서 단위 테스트를 하는 방법에 대해 정리해보겠습니다. Mock 가장 먼저 Mock에 대해 알아보겠습니다. Mock은 테스트를 위한 가짜 객체를 말합니다. 테스트를 할 때 객체가 필요하면 객체를 만들어야하는데 실제 객체를 만들기 위해서는 비용/시간/의존성문제가 걸쳐져 있습니다. 때문에 실제 객체를 구현하기 어려울 경우 Mock이라는 가짜 객체를 이용하여 테스트를 진행합니다. Mokito Mokito는 개발자가 동작을 직접 제어할 수 있는 가짜 객체를 지원하는 테스트 프레임워크입니다. [스프링 객체 의존도 그림] [Mock 객체를 이용한 단위 테스트] 보통 스프링으로 웹 어플리케이션을 개발하면 여러 객체들의 의존성이 생기는데, 이러한 의존성은 단위 테.. 2022. 11. 21.
Spring - ResponseEntity, RequestEntity 지난 포스트에 @RestController는 객체 데이터를 JSON 또는 XML형태로 HTTP응답에 담아 전달하며 주로 ResponseEntity에 감싸서 반환한다는 내용이 있었습니다. 이번 포스트에서는 ResponseEntity가 무엇인지, RequestEntity까지 함께 정리해보도록 하겠습니다. ResponseEntity ResponseEntity는 스프링 프레임워크에서 제공하는 클래스인 HttpEntity클래스를 상속받으며 응답 자체의 독립된 값이나 표현을 사용자 요청에 대한 응답 데이터와 함께 포함하는 클래스로, 해당 클래스를 이용하여 HTTP 메시지를 상세하게 보낼 때 주로 사용합니다. ResponseEntity에는 HttpHeaders, HttpBody, HttpStatus가 포함되며 각 요.. 2022. 11. 21.
Spring - @RestController 스프링에서 컨트롤러를 지정해주기 위한 어노테이션으로는 @Controller와 @RestController가 있습니다. RestController는 RestAPI 또는 Web API를 개발하기 위해 등장한 어노테이션인데, 이번 포스트에서는 이 둘은 어떤 차이가 있는지 @RestController를 중심으로 정리해보도록 하겠습니다. Controller Controller와 RestController의 차이를 알기 위해서는 이 둘이 어떻게 동작하는지에 대해 알 필요가 있습니다. 우선 @Controller의 경우입니다. 뷰를 반환하기 위해 @Controller를 사용하는 경우 (일반적인 경우) 전달과정 클라이언트는 URI 형식으로 웹 서비스에 요청을 보냄 DispatcherServlet이 요청을 위임할 Hand.. 2022. 11. 21.