본 포스팅은 스프링을 이용한 간단한 예제 프로젝트입니다. 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("걸린시간 = " + (..
내가 짠 코드가 효율적인 걸까? 알고리즘 평가의 세가지 요소 1. 알고리즘을 평가해야하는 이유 프로그래밍을 배우기 시작하면 가장 많이 듣게 되는 단어중 하나가 알고리즘이라고 할 수 있다. 알고리즘은 컴퓨터를 사용해서 어떤 문제를 해결하는 절차나 방법을 의미한다. 그렇다면 이러한 알고리즘을 왜 평가해야 할까? 다음은 9개의 printf() 함수가 있는 프로그램이다. 1) printf()가 여러개인 프로그램 int main() { printf("hello world!\n"); printf("merry christmas!\n"); printf("happy new year!\n"); printf("hello world!\n"); printf("merry christmas!\n"); printf("happy ne..
[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..