Backend

본 포스팅은 스프링을 이용한 간단한 예제 프로젝트입니다. 1. 프로젝트 설계 일반적으로 웹 애플리케이션은 다음과 같은 형태를 가진다. 그리고 각 계층의 역할은 다음과 같다. 컨트롤러 웹 MVC구조에서 Controller의 역할을 담당한다. 클라이언트들이 요청할 엔드포인트(url)를 정의하고 받은 데이터를 서비스 계층에 넘겨주는 역할을 한다. 서비스 애플리케이션의 핵심 비즈니스 로직이 구현되는 계층 리포지토리 데이터베이스에 접근 및 도메인 객체를 DB에 저장하고 관리하는 역할을 한다. 도메인 데이터를 담고있는 객체라고 보면 될 것 같다. 회원, 주문, 쿠폰 등 주로 DB에 저장되고 관리되는 데이터들이며 일반적으로는 테이블에 매칭되는 개념이다. 이번 예제 프로젝트에서는 다음과 같은 상황에 처해있다고 가정해보..
[Spring]AOP의 개념 및 적용 예제(공통관심사 처리하기) 1. AOP가 필요한 상황? 예를 들어 당신이 프로젝트를 개발하고 있는데 상사가 와서 성능테스트를 하고싶으니 모든 메서드 로직 수행 시간을 로그로 찍어보라고 요청했다고 가정해보자. 일반적으로 이 이야기를 들으면 엄청난 노가다할 생각에 당황할 것이다. 아마도 다음과 같이 코드를 짜기시작할 수도 있을것 같다. public void joinUser(UserVO vo){ long start = System.currentTimeMillis(); vo.setRole("USER"); userRepository.save(vo); long end = System.currentTimeMillis(); System.out.println("걸린시간 = " + (..
[Spring]Request Scope를 사용해서 깔끔하게 로그남기기 스프링을 이용해서 프로젝트를 만들고 배포하여 운영해본 분이라면 문제가 생겨서 로그를 확인할 때 동시에 접속한 여러 고객들의 요청이 뒤섞이면서 로그가 뒤죽박죽으로 남아서 디버깅 작업에 애를 먹었던 경험을 한번씩 해봤을 것이다. 그럴 때 아래와 같이 로그가 찍히면 로그 추적이 한결 수월해 질 것이다. [clientA...][http://localhost:8080/login] controller test [clientB...][http://localhost:8080/login] controller test [clientA...][http://localhost:8080/login] service id = testId [clientB...][h..
[Spring]프로토 타입 빈 사용시 생기는 문제점 해결하기(ObjectProvider와 JSR-330 Provider) 1. 문제 상황 흔히 싱글톤 빈 내부에 프로토타입 빈을 두고 사용할때 이 프로토타입 빈이 싱글톤마냥 관리되면서 요청할 때마다 새로 생성되는 것이 아니라 의존관계 주입 시점에 처음 생성되고 계속 재활용 되는 문제에 직면하는 경우가 생기고는 한다. 간단한 예제 상황을 가정하여 count라는 정수를 가지고 있으면서 클라이언트가 count에 1을 더해주는 addCount, count값을 반환해주는 getCount 프로토 타입 빈이 있다고 해보자. 이 프로토타입 빈을 스프링 컨테이너에 여러번 요청해서 받은 각각의 빈들에게 addCount해주고 값들을 받아보면 어떻게 될까? 아래는 그 예시 코드..
Chung-A
'Backend' 카테고리의 글 목록 (5 Page)