본문 바로가기

Spring13

[Spring] Proxy를 적용하는 다양한 방법 : ProxyFactory (1) 프록시 패턴 프록시 패턴은 하나의 객체가 다른 객체의 대리자 역할을 하도록 설계하는 디자인 패턴으로 대리자는 실제 객체와 동일한 인터페이스를 가지며, 클라이언트는 실제 객체를 직접 사용하는 대신 대리자를 통해 간접적으로 상호작용한다. 이 패턴을 사용함으로써 얻는 이점은 다음과 같다 : 1. 로깅 : 프록시 객체는 클라이언트의 요청과 실제 객체의 작업 결과를 로깅할 수 있다. 2. 보안 강화 : 프록시 객체가 클라이언트의 요청을 검증하고 필요한 권한 확인 등의 작업을 수행함으로써 보안상의 이점을 가져간다. 3. 성능 최적화 : 실제 객체가 생성 및 초기화에 많은 비용이 드는 경우, 프록시 객체를 사용하여 실제 객체가 필요한 시점에 생성하거나 초기화할 수 있다. 스프링에서는 프록시 객체를 만드는 여러 가지 .. 2024. 2. 2.
[Spring] Bean을 stateless하게 설계해야하는 이유 서론 최근에 인턴 면접관으로 참여할 일이 생겨 지원자들이 제출한 코드를 훑어보던 중 재밌는 코드를 발견했습니다. @Component public class SessionStore { // key : userId // value : session string private final HashMap memorySession = new HashMap(); // CRUD method ... } 바로 유저의 세션을 인 메모리 방식으로 관리하는 컴포넌트가 정의되어 있었습니다. 유저의 세션을 인 메모리 방식으로 구현한 것도 흥미로웠는데 무엇보다 싱글톤 빈에 정의한 멤버 변수에 이목이 끌렸습니다. 빈의 생명주기에 대해서 공부할 때 줄곧 싱글톤 빈에 상태를 저장하지 말라고 배웠으니 말이죠. 그렇다면 앞선 코드는 정상 동.. 2023. 12. 3.
[Spring] Interface로 간단한 Listener 구현하기 ✍️ 서론 이벤트의 콜백 메서드를 인터페이스의 추상 메서드로 정의하고, 이벤트에 관심 있는 클래스는 콜백 인터페이스를 구현함으로써 간단한 Listener를 만들 수 있다. 예제 코드로 이해해 보자. 여기 Member의 가입 로직이 포함된 MemberService가 있고, @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberDao memberDao; @Override public void join(int memberId, String name) { Member exist = memberDao.get(memberId); if (exist != null) throw new RuntimeExcepti.. 2022. 11. 28.
[Spring] Argument Resolver란 (HandlerMethodArgumentResolver, WebMvcConfigurer) ✍️ Argument Resolver, 아규먼트 리졸버 개념 Argument Resolver란, Client가 요청한 Request로부터 값을 참조하거나 객체를 생성해서 Handler(Controller)의 파라미터에 바인딩 할 때 사용하는 객체이다. 가령, 로그인 인증을 마친 Client가 Server로부터 자신의 UserId가 기입된 인증용 Token을 발급받았다고 가정해 보자. Client는 Request를 보낼 때마다 인증의 일환으로 Token을 보낼 것이고, Server는 유효한 토큰인지 검증을 거친 후 (필요에 따라) 토큰에 저장된 UserId를 꺼내서 Client의 요청을 처리할 것이다. Argument Resolver 없이 단순 User 조회 Controller는 다음과 같이 세 단계에 걸.. 2022. 10. 11.
[Spring] Interceptor란 (HandlerInterceptor, WebMvcConfigurer) ✍️ Interceptor, 인터셉터 개념 사전적인 의미로 Intercept란 가로막다, 가로채다라는 의미를 가지고 있다. 이와 유사하게 Spring에서 제공하는 Interceptor도 Cilent의 Request와 Server의 Response를 가로채는 역할을 한다. 일반적으로 Login 검증, Token 검증에 Interceptor가 사용된다. Spring이 Request를 처리하는 흐름에서 인터셉터를 살펴보면 1. Client로부터 Request가 들어오면 프론트 컨트롤러인 DispatcherServlet이 이를 가장 먼저 받는다. 2. DispatcherServlet은 HandlerMapping을 거쳐 Request를 처리할 Controller를 찾는다 3. Controller를 찾고 나서, H.. 2022. 10. 3.
[스프링 입문] Section 7. AOP 본 포스팅의 내용은 인프런 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 기반으로 작성했습니다. 🌱 AOP가 필요한 상황 예를 들어, 모든 메서드의 호출 시간을 측정하고 싶다면? 어느 날 직장 상사가 어플리케이션의 모든 메서드 호출 시간(초)을 측정하라고 지시했다. 밤을 새며 아래와 같이 모든 메서드에 하나하나 시간 측정하는 로직을 추가했다. public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } /.. 2022. 7. 7.
[스프링 입문] Section 6-2. 스프링 DB 접근 기술(2) 본 포스팅의 내용은 인프런 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 기반으로 작성했습니다. 🌱 스프링 JdbcTemplate 순수 JDBC와 동일한 환경설정을 하면 된다. 스프링 JdbcTemplate과 MyBatis와 같은 라이브러리는 순수 JDBC API에서 본 반복 코드(Connection, ResultSet 등...)를 대부분 제거한다. 하지만 SQL은 직접 작성해야 한다. 순수 JDBC와 다르게 DataSource를 직접 사용하는 것이 아닌, DataSource를 감싼 JdbcTemplate 인스턴스를 사용해서 DB에 접근한다. Insert시 테이블과 컬럼명 그리고 값만 넘겨주면 SimpleJdbcInsert가 Insert 쿼리를 자동으로 생성한다.. 2022. 7. 7.
[스프링 입문] Section 6-1. 스프링 DB 접근 기술(1) 본 포스팅의 내용은 인프런 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 기반으로 작성했습니다. 🌱 H2 DB 설치 H2 DB는 개발이나 테스트 용도로 가볍고 편리한 DB로 웹 화면을 제공한다. 다운로드 및 설치 : https://www.h2database.com/html/main.html 권한 주기: chmod 755 h2.sh (윈도우 사용자는 x) 실행: ./h2.sh (윈도우 사용자는 h2.bat) 데이터베이스 파일 생성 방법 jdbc:h2:~/test (최초 한번) ~/test.mv.db 파일 생성 확인 이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속 DB 테이블 생성하기 drop table if exists member .. 2022. 7. 7.
[스프링 입문] Section 5. 웹 MVC 개발 본 포스팅의 내용은 인프런 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 기반으로 작성했습니다. 🌱 회원 웹 기능 - 홈화면 추가 HomeController @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } Hello Spring 회원 기능 회원 가입 회원 목록 🍃 회원 웹 기능 - 등록 회원 등록 폼 컨트롤러 MemberController @Controller public class MemberController { private final MemberService memberService; @Autowired public Membe.. 2022. 7. 7.
반응형