본문 바로가기

전체 글

(208)
쿠버네티스 기본 쿠버네티스 네임스페이스 클러스터 안에 가상 클러스터를 또 다시 만들수 있다. 가상 클러스터를 네임스페이라고 한다. 클러스터를 처음 구축시 default, docker, kube-public, kube-system 네임스페이스 4개가 이미 만들어져 있다. kubectl get namespace 네임스페이스는 개발팀이 일정 규모 이상일때 유용하다. 개발자마다 자신만의 네임스페이스를 두면 메인 네임스페이스가 어질러지는 것을 방지할 수 있다. 네임스페이스마다 권한을 설정할 수 있으므로 견고하고 세세한 권한을 제어할 수 있다. 파드 컨테이너가 모인 집합체의 단위로, 적어도 하나 이상의 컨테이너로 이루어진다. 도커와 함께 사용한다면 파드는 컨테이너 하나 혹은 컨테이너의 집합체가 된다. ---Pod----------..
스프링 시큐리티 Basic 인증 재구성 기본구성 재정의 UserDetailsService @Configuration public class ProjectConfig { @Bean public UserDetailsService userDetailsService() { var userDetailsService = new InMemoryUserDetailsManager(); var user = User.withUsername("john") .password("12345") .authorities("read") .build(); userDetailsService.createUser(user); return userDetailsService; } @Bean public PasswordEncoder passwordEncoder() { return NoO..
스프링 시큐리티 Basic 인증 기본 HTTP Basic 인증 스프링 시큐리티가 적용된 기본 프로젝트 구성 $ curl http://localhost:8080/hello | jq { "timestamp": "2022-10-13T13:09:15.808+00:00", "status": 401, "error": "Unauthorized", "message": "", "path": "/hello" } 스프링 시큐리티가 적용되어 인증이 필요하다. 스프링 시큐리티를 기본으로 되어있는경우, 스프링 초기에 패스워드가 콘솔로그에 나타난다. $ curl -u user:a9f19c33-17d9-47e8-9993-94809545cff6 http://localhost:8080/hello Hello! username : user password : a9f19c..
검증과 데이터바인딩 스프링 웹 MVC를 활용한 검증과 데이터바인딩 @ModelAttribute 애너테이션 스프링의 Model 객체에 속성을 저장하고 싶을 때는 메서드에 @ModelAttribute를 설정 Model 객체에서 속성을 읽고 싶을 때는 메서드 인수에 @ModelAttribute 설정 모델 속성의 스코프가 request 스코프로, 요청 처리가 끝나거나 요청을 리다이렉션 하면 모델 속성이 사라진다. @SessionAttribute @RequestMapping 을 설정한 메서드를 호출하기전에 컨트롤러의 @ModelAttribute를 설정한 모든 메서드가 호출된다. 이런 동작 방식은 @ModelAttribute 메서드들이 데이터를 데이터베이스나 외부 웹 서비스에서 얻어 모델 속성을 채워 넣는 경우 적당하지 않다. 데이터..
AOP AOP AOP (Aspect Oriented Programing) 관점지향 프로그래밍은 여러 클래스에 나뉜 책임을 애스팩트(관점)라고 부르는 별도의 클래스에 캡슐화하는 접근방식을 말한다. 여러 클래스에 걸쳐있는 책임은 횡단 관심사(cross-cutting concern)라고 부른다. 횡단 관심사의 예로 로킹, 트랜잭션 처리, 캐싱, 보안 등을 들을 수 있다. 스프링은 내부에서 트랜잭션, 캐싱, 보안 등의 선언적인 서비스를 구현하기 위해 AOP 프레임워크를 제공한다. 스프링 AOP 프레임워크 대신 AspectJ를 애플리케이션에서 AOP 프레임워크로 사용할 수도 있다. 간단한 AOP 서비스 레이어에 정의된 클래스의 메서드에 전달되는 인수를 모두 획득하고 싶을 경우, 메서드 인수를 로그에 남기는 간단한 접근 ..
캐싱 캐싱 java.util.concurrent.ConcurrentMap, Ehcache, Guava, GemFire나 JSR 107(자바 임시 캐싱 API, JCACHE )을 구현한 캐시 솔루션에 대한 캐시 추상화를 즉시지원한다. 사용하는 캐시 솔루션이 스프링 캐시 추상화를 지원하지 않는다면, 직접 캐시 솔루션이 제공하는 API를 사용하거나, 스프링이 제공하는 캐시 추상화를 캐시 솔루션에 맞추는 어댑터를 만들어야 한다. CacheManager와 Cache 인터페이스는 스프링 캐시 추상화에서 중심적인 역할을 한다. CacheManager 인스턴스는 하부 캐시 솔루션이 제공하는 캐시 매니저를 감싸는 래퍼 역할을 하며, Cache 인스턴스의 컬렉션을 관리한다. EhCacheManager는 이캐시Ehcache의 n..
데이터베이스 연결 스프링을 이용해 데이터베이스와 상호 작용 스프링은 JDBC 위에 추상 계층을 추가해 데이터베이스와 상호작용을 편리하게 만든다. 스프링은 하이버네이트와 마이바티스 등 ORM 프레임워크로 데이터베이스 상호 작용도 단순화 시킨다. MyBank 고객이 자신의 잔액 세부 정보를 살펴보고 금융거래 명세서(bankstatement)를 생성하며, 정기예금을 개설하고 체크북을 요청할 수 있게 해주는 인터넷 뱅킹 애플리케이션이다. BANK_ACCOUNT_DETAILS와 FIXED_DEPOSIT_DETAILS 테이블 BANK_ACCOUNT_DETAILS 1
빈과 빈 정의 커스텀 빈과 빈 정의 커스텀 하기 빈에 커스텀 초기화와 정리 로직을 넣는 방법 스프링 BeanPostProcessor 인터페이스를 구현해 새로 생성된 빈 인스턴스와 상호작용하는 방법 스프링 BeanFactoryPostProcessor 인터페이스를 구현해 빈 정의를 변경하는 방법 1-1. 빈에 커스텀 초기화와 정리 로직 커스텀 하기 bean 엘리먼트에 init-method 속성값을 지정, destory-method 속성값을 지정 public class FixedDespositDaoImpl implements FixedDespositDao { private static Logger logger = LogManager.getLogger(FixedDespositDaoImpl.class); private Database..