
인가 API - 권한 설정과 표현식 권한 설정은 선언적 방식과 동적 방식으로 나눌 수 있다. 선언적 방식 URL - http.antMatchers("/users/**").hasRole("USER") Method - @PreAuthroize("hasRole(`USER`)") 동적 방식 - DB 연동 프로그래밍 @Override protected void configure(HttpSecurity http) throws Exception { //인가정책 http .antMatcher("/shop/**") .authorizeRequests() .antMatchers("/shop/login", "/shop/users/**").permitAll() .antMatchers("/shop/user").hasRole("U..

인증 API - SessionManagementFilter 1. 세션 관리 - 인증 시 사용자의 세션 정보르 등록, 조회, 삭제 등의 세션 이력을 관리 2. 동시적 세션 제어 - 동일 계정으로 접속이 허용되는 최대 세션수를 제한 3. 세션 고정 보호 - 인증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 4. 세션 생성 정책 - Always, If_Required, Never, Stateless 인증 API - ConcurrentSessionFilter - 매 요청 마다 현재 사용자의 세션 만료 여부 체크 - 세션이 만료되었을 경우 즉시 만료 처리 - session.isExpired() 값이 true이면 로그아웃 처리하고 즉시 오류페이지를 응답한다. 기존 세션 만료가 default로 설정..

개방/폐쇄 원칙 (Open/Closed Principle - OCP) 1. 특정 입출금 내역을 검색할 수 있는 기능. 예를 들어 주어진 날짜 범위 또는 특정 범주의 입출금 내역 얻기 2. 검색 결과의 요약 통계를 텍스트, HTML 등 다양한 형식으로 만들기 책을 중간에 읽으면서 어떤 내용이 나올지 예상이 돼서 기뻤다. 이거 이렇게 하면 될 거 같은데?라고 생각했는데 실제로 책에서 그렇게 하니까 진짜 기뻤다.. 기능이 추가될 때 항상 의문이 드는건 이 메서드를 어디에 정의해야 할까?인데 새 클래스를 만드는 것도 좋지만 새로운 클래스를 계속 만들수록 코드는 복잡해지고 여러 이름이 생기면서 다양한 동작 간의 관계를 이해하기가 어려우므로 처리 기능을 담당하는 이미 만들었던 BankTransactionProces..

결합도 코드를 구현할 때 고려해야 할 또 다른 중요한 특성으로 결합도가 있다. 응집도는 클래스, 패키지, 메서드 등의 동작이 얼마나 관련되어 있는가인 반면 결합도는 한 기능이 다른 클래스에 얼마나 의존하고 있는지를 가늠한다. 결합도는 클래스를 구현하는데 얼마나 다른 클래스를 참조했는가로 말할 수 있다. 많은 클래스를 참조하고 있다면 기능을 변경할 때 그만큼 유연성이 떨어진다. 결합도는 코드가 서로 어떻게 의존하는지와 관련이 있는 척도다. 예제에서 BankStatementAnalyzer는 BankStatementCSVParser 클래스에 의존한다. 그럼 어떻게 결합도를 낮출 수 있을까? 인터페이스를 이용하면된다. 인터페이스를 이용하면 요구사항이 바뀌더라도 유연성을 유지할 수 있다. 입출금 내역을 파싱하는 ..
응집도 응집도는 클래스나 메서드의 책임이 서로 얼마나 강하게 연결되어 있는지를 측정한다. 즉 어떤 것이 여기저기에 모두 속해있는지를 말한다. 이전 리팩터링 코드에서 BankStatementCSVParser의 응집도는 높다. 이 클래스에서 CSV 데이터 파싱 작업과 관련된 두 메서드를 한 그룹으로 만들었기 때문이다. 계산 연산을 하는 BankStatementProcessor라는 별도의 클래스를 추출해보자. public class BankStatementProcessor { private final List bankTransactions; public BankStatementProcessor(final List bankTransactions) { this.bankTransactions = bankTransa..
목표 단일 책임 원칙 (single responsibility principle) 줄여서 SRP KISS 원칙 CSV 파일을 읽어서 요구사항 구현하기 은행 입출금 내역의 총 수입과 총 지출 구하기 결과가 양수? 음수? 특정 달엔 몇 건의 입출금 내역 발생? 지출이 가장 높은 상위 10건? 돈을 가장 많이 소비하는 항목? 30-01-2017,-100,Deliveroo 30-01-2017,-50,Tesco 01-02-2017,6000,Salary 02-02-2017,2000,Royalties 02-02-2017,-4000,Rent 03-02-2017,3000,Tesco 05-02-2017,-30,Cinema KISS (Keep it short and simple!) 원칙을 이용해 일단 만들어보자. 응용프로그..

인증 API - 동시 세션 제어 동시 세션 제어란? 동일한 계정으로 인증을 받을 때 생성되는 세션의 허용 개수가 초과되는 경우에 어떻게 세션을 유지하는 것에 대한 제어를 말한다. 최대 세션 허용 개수가 1개라고 가정 (1) 이전 사용자 세션 만료 사용자 1이 로그인하고 서버에서 인증 성공 세션 생성 사용자 2가 로그인하면 이전 사용자였던 사용자1의 세션을 만료시킴 (2) 현재 사용자 인증 실패 사용자 1이 로그인하고 서버에서 인증 성공 세션 생성 사용자 2가 로그인 하려고하면 인증 예외가 발생 @Override protected void configure(HttpSecurity http) throws Exception { //동시 세션 제어 http .sessionManagement() .maximumS..
- Total
- Today
- Yesterday
- docker
- 베리 심플
- 오라클
- localtime
- Spring Security
- mybatis
- window
- svn
- input
- Java
- Spring
- LocalDateTime
- mybatis config
- Mac
- rocky
- jQuery
- JavaScript
- springboot
- oracle
- 북리뷰
- Bash tab
- claude
- intellij
- elasticsearch
- k8s
- maven
- Kotlin
- Linux
- config-location
- LocalDate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |