일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 포트앤어댑터 아키텍처
- DP
- 데이터 flow
- ddd
- 스프링
- 파이썬
- series
- dfs
- pandas
- 알고리즘
- 백준
- dataframe
- docker
- BFS
- equals
- spring security
- 비트마스크
- 헥사고날 아키텍처
- disjoint set
- 위상정렬
- Redis
- springboot
- 다익스트라
- 문자열
- 세그먼트 트리
- java
- UML
- 자바
- 이펙티브 자바
- JPA
- Today
- Total
목록스프링(Spring) (10)
코딩못하는사람
@Transactional 어노테이션을 AOP와 PSA의 관점에서 공부해보았다. AOP(Aspect Oriented Programming) @Transactional 어노테이션을 사용하면 별도의 트랜잭션 관련 코드없이 트랜잭션 서비스를 이용할 수 있다. 트랜잭션에 대한 공통 코드를 어노테이션이 AOP를 통해 대신 처리해주어 우리가 구현해야 할 비즈니스 로직에 집중할 수 있게 해주는 것이다. Spring에서는 Proxy pattern을 이용해 AOP를 구현한다. @Transactional을 사용하고 있는 aspect를 보자. @Transactional어노테이션이 붙어있는 곳에서 transactionalMethodExecution메서드를 실행하라는 aspect이다. transactionalMethodExec..
스프링 시큐리티를 활용하여 인증,인가를 처리할 때 @AuthenticationPrincipal를 쓰면 쉽게 UserDetails를 구현하여 만든 Principal 인스턴스를 얻을 수 있었다. 쉽게 사용했지만 어떻게 동작하는지 궁금해져 찾아 보았다. Spring Security에서 AuthenticationFilter를 거쳐 인증을 완료하게 되면 Authentication 인터페이스를 구현한 UsernamePasswordAuthenticationToken을 SecurityContextHolder에 설정하게 된다. @AuthenticationPrincipal는 스프링 시큐리티의 AuthenticationPrincipalArgumentResolver 클래스를 활용하여 SecurityContextHolder에 ..
Filter란? Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공해준다.말 그대로 client와 Dispatcher Servlet사이에 필요한 작업을 할 수 있도록 필터를 사용하는 것이다. - init() : 필터 초기화 - doFilter() : 전, 후처리용 메소드, 내부에서 filterChain.doFilter를 호출하여 해당 비즈니스처리를 계속해서 수행한다. - destory() : 필터 종료이후 실행. Intercepter란? Spring이 제공하는 기술로,Dispatcher Servlet을 통과하고 handler mapping을 완료한 후 Controller에 들어가기 전과 후에 요청과 응답을 참조하거나 가..
스프링 부트란? 스프링을 통하여 개발을 할때는 설정이 반이다 라는 말이 있을정도로 개발 환경설정이 힘들었다고 한다. 하지만 스프링부트는 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성해준다. 어떤점들이 있을까? 1.Tomcat같은 내장 웹서버를 자동으로 내장해줘서 웹 서버 설치가 필요없다. 기존에 웹서버를 설치해서 관리해주어야했던 불편함이 없어졌다. 2.손쉬운 빌드 구성을 위한 starter 종속성 제공 starter 종속성을 가져오면 관련 종속성을 모두 끌어와주면서 설정을 편리하게 해준다. 예를들어 starter-security를 설정하게 된다면 security관련 작업에 필요한 모든 의존성을 설정해준다. 3. 스프링과 외부 라이브러리 자동 구성 스프링의 버전과 특정 라이브러리의 버전이 호환이..
스프링이 어떤점이 감동이고 잘 만들어졌길래 사람들이 그렇게 좋아하고 많이 쓰일까? 라는 질문을 던졌을때 대답이 잘 안나오는거보니 나는 그저 스프링 '사용자'였나보다. 스프링이 왜 나왔고 어떤점이 좋은지 알아보자. 내가 읽은 책에서 스프링을 OOP 프레임워크라고 부른다. 이유가 뭘까? 자바는 대표적인 객체지향 언어중에 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 독립된 단위인 "객체"들의 모임으로 보자는 뜻이다. 각각의 객체는 메시지를 주고받을 수 있고 데이터를 처리할 수 있다. 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들어 준다. 객체지향의 다형성이라는 특징은 프로그램을 레고 블럭을 조립하듯이, 컴퓨터에 원하는 키보드,마우스를 갈아 끼..
-SOLID란? 클린코드의 저자인 로버트 마틴이 객체지향 지향 프로그래밍 설계의 다섯가지 기본 원칙으로 제시한 것이다. SRP 단일 책임 원칙 OCP 개방-폐쇄 원칙 LSP 리스코프 치환 원칙 ISP 인터페이스 분리 원칙 DIP 의존관계 역전 원칙 응집도는 높이고 결합도는 낮추라는 원칙을 재정립한 것이다. 개발자들 마다 해석의 차이가 있다고 하지만, 객체지향을 이해하고 디자인 패턴 및 스프링을 이해하는데 큰 도움이 되는 SOLID를 나에게 맞는 예시를 들어 생각하며 정리하자. SRP 단일 책임 원칙 "한 클래스는 하나의 책임만 가져야 한다," 스프링으로 프로젝트를 만들때를 생각해보자. 우리는 주요 클래스들을 컨트롤러 단, 서비스 단, 레포지토리 단 으로 나눠서 개발을 한다. 이렇게 주요 기능별로 나눠서 ..
템플릿 메서드 패턴이란? 어떤 작업을 처리하는 부분에서 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바뀌지 않으면서 필요한 특정 부분만 변경하면서 써야하는 형식을 (동일한 부분+각각 다르게 쓸 부분) 형태의 템플릿 형태로 만들어서 사용하는 패턴이다. 여기서 각각 다르게 쓸 부분을 추상 메서드로 만들어 준다. 추상 클래스의 사용 이유는 중복을 줄여주는데 있다. 템플릿 메서드는 그 추상 클래스의 특징을 사용해서 대부분의 같은 부분중 각각 다르게 쓰여야할 중요 부분들만 override해서 쓰는 것이다. 학생들에게 다니기만 하면 주는 모범상을 준다고 가정해보자.(예시이기 때문에 간단하다) 진부한 상장 내용이 중복될 것이고 그 사이에 바뀌는 학생들 이름이 들어가야 할 것이다. Awards 추상클래스에 pri..
프록시 패턴이란? 클라이언트와 서버사이에서 대리자 역할을 하며 중계해주는 프록시 서버의 느낌과 같이 프록시 패턴도 구체화해서 사용하는 객체를 대신해서 대리자 객체(인터페이스)를 사용하여 클라이언트쪽에서 어떤 클래스를 주입받는지 알 수 없게 만들어주는 (클라이언트단만 신경쓰게 해주는)패턴입니다. 프록시 패턴의 특징 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다. 대리자는 실제 서비스에 대한 참조 변수를 갖는다(Proxy가 RealSubject를 가짐) 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다. 대리자는 실제 서비스의 메서드 호출 전후에도 별도의 로직을 수행할 수도 있다. 프록시 디자인패턴 사진입니다. 클라이언트가 Subj..
1.어댑터 패턴 어댑터 패턴의 이해는 콘센트로 이해할 수 있다. 우리나라에서는 220V의 콘센트를 쓰지만 필요에 따라서 110V,22V,11V에 맞춰서 다양하게 연결되어야 할 때가 있다.이럴 때 우리는 중간에 220V와 110V가 연결될 수 있도록 호환을 도와주는 인터페이스를 만들어 주어야 한다. 설계도는 다음과 같다. 클라이언트에서는 Target Interface 를 호출하는 것 처럼 보인다. 하지만 클라이언트의 요청을 전달받은 (Target Interface 를 구현한) Adapter 는 자신이 감싸고 있는 Adaptee 에게 실질적인 처리를 위임한다. Adapter 가 Adaptee 를 감싸고 있는 것 때문에 Wrapper 패턴이라고도 불린다. 예제를 만들어 보았다. 내가 220V 폰 충전기를 가지..
스프링 빈(Spring Bean)이란? 스프링 IoC(Inversion of Control) 컨테이너에 의해서 관리되고 애플리케이션의 핵심을 이루는 객체들을 스프링 빈(Beans)이라고 한다. 빈은 스프링 컨테이너에 의해서 인스턴스화 되어 조립되고 관리됩니다. 스프링 컨테이너가 관리해준다는 점을 제외하면 자바 객체이다. Singleton 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 코드에서 private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 하지만 스프링 컨테이너를 사용하면 컨테이너에 등록되는 빈들을 알아서 싱글톤으로 관리해준다. (클라이언트들이 스프링 빈을 요구할 때..