Spring

· Spring
다음 포인트컷 지시자는 단독으로 사용하면 안된다. args, @args, @target@Around("execution(* hello.aop..*(..)) && @target(hello.aop.member.annotation.ClassAop)")public Object atTarget(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[@target] {}", joinPoint.getSignature()); return joinPoint.proceed();}해당 예제를 보면 execution(* hello.aop..*(..)) 를 통해 적용 대상을 줄여준 것을 확인할 수 있다.= AOP 적용 대상을 hello.aop 하위의 패키지들로 한..
· Spring
순수한 서비스 계층을 유지해보자애플리케이션 구조에서 가장 중요한 곳은 어디일까? 바로 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 시간이 흘러서 UI(웹) 와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경해도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 서비스 계층을 순수하게 유지하려면 어떻게 해야할까? 트랜잭션을 적용한 MemberServiceV2 코드를 살펴보자 /** * 트랜잭션 - 파라미터 연동 ,풀을 고려한 종료 */@RequiredArgsConstructor@Slf4jpublic class MemberServiceV2 { private final DataSource dataSource; private final MemberRepositoryV2 memberR..
· Spring
트랜잭션데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하 나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려 해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야한다.  5000원 계좌이체A의 잔고를 5000원 감소B의 잔고를 5000원 증가계좌이체라는 거래는 이렇게 2가지 작업이 합쳐져서..
· Spring
Connection Pool 데이터베이스 커넥션을 매번 획득해야 할까? 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결 을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 ..
· Spring
JDBC 이해 JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 애플리케이션 서버와 DB - 일반적인 사용법 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다\ 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다는 점이다. 참고로 관계형 데..
· Spring
예외처리 상황을 분류하기 에러 처리를 하기전에, 우리는 API 사용자와 웹사이트 이용자는 각각 다른 환경과 요구사항을 가지고 있기 때문에, 사용자에 따라 에러 메시지 형식을 다르게 제공해야 한다. 예를 들어, 게시물 등록 api를 사용자가 테스트한다고 했을때, 에러가 난다면 어떻게 에러 메시지를 보여줘야 할까? "Error 404, 죄송합니다. 요청하신 웹페이지를 찾을 수 없습니다." 라는 메세지를 표시하는 웹페이지를 보여주는 게 맞을까? 당연히 API 사용자 입장에선 황당할 것이다. 잘못된 매개변수 형식이라면, 어떤 매개변수가 어떤 데이터 타입으로 와서 오류가 났고, 어떤 데이터 타입으로 요청해야 오류가 나지 않는지, 요청한 매개변수가 중복된 unique contraint에 위반된다면 어떤 필드가 위반..
· Spring
이전 글에서 이어집니다. https://hwlee9905.tistory.com/23 Spring Security를 활용하여 JWT 발급 자체 로그인, OAuth2 구현하기 - 2 이전글에서 이어집니다 https://hwlee9905.tistory.com/22 Spring Security를 활용하여 JWT 로그인 구현하기 - 1 Spring Security의 개념 스프링 시큐리티는 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당 hwlee9905.tistory.com OAuth(Open Authorization)란? 구글, 페이스북, 트위터와 같은 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임(Delegated Authorizat..
· Spring
이전글에서 이어집니다 https://hwlee9905.tistory.com/22 Spring Security를 활용하여 JWT 로그인 구현하기 - 1 Spring Security의 개념 스프링 시큐리티는 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크를 말하는데, 보안과 관련해서 체계적으로 많은 옵션들을 지원해준다. 스프링 hwlee9905.tistory.com Spring Security 인증 순서 로그인이 꽤나 복잡해보이지만 결국 기존 Spring Security의 로직을 알고 있다면 이해하기 쉬울 것이다. 로그인시 클라이언트가 보낸 id와 pw를 UsernamePasswordAuthenticationFilter가 호출한 AuthenticationManager를 통해 인증을 시작..
· Spring
Spring Security의 개념 스프링 시큐리티는 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크를 말하는데, 보안과 관련해서 체계적으로 많은 옵션들을 지원해준다. 스프링 시큐리티는 필터(Filter) 기반으로 동작하여 스프링 MVC와 분리되어 관리 및 동작한다. Filter와 Interceptor에 대해서 헷갈린다면, Filter는 Dispatcher Serlvet으로 가기전에 적용되므로 가장 먼저 URL 요청을 받고, Interceptor는 DispatcherServlet과 Controller사이에 위치한다. 따라서 이 둘은 적용시기에 차이가 있다라고 보면 된다. Client -> Filter -> DispatcherServlet -> Interceptor -> Control..
· Spring
공통 관심 사항 등록, 수정 ,삭제와 관한 내용은 보통 공통으로 로그인 여부를 확인해야 한다. 인증 되지 않은 사용자가 데이터 변경에 관여하면 큰 문제가 될 것이다. 따라서 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 추후에 추가될 다른 컨트롤러에서도 이는 마찬가지이다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(cross-cutting concern)이라고 한다. 이러한 공통 관심사는 스프링의 AOP로도 해결할 수 있지만 로그인과 같은 웹과 관련된 공통 관심사는 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들 이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServlet..
hwlee9905
'Spring' 카테고리의 글 목록