-
ch05 : 인증 구현IT 서적/Spring Security In Action 2024. 1. 2. 18:19
# AuthenticationProvider 인증 논리를 담당하는 영역(요청을 허용할지, 거부할지를 여기서 담당한다.) Spring Security에서 대표적으로 인증 논리를 정의하는 영역이다. # Authentication 인터페이스 해당 인터페이스를 기준으로 구현하여 스프링 시큐리티 진영은 부가적인 기능들을 제공한다. public interface Authentication extends Principal, Serializable { Collection
-
ch04 : 암호화 방식IT 서적/Spring Security In Action 2023. 12. 30. 23:55
# PasswordEncoder 활용 스프링 시큐리티에서는 기본적으로 PasswordEncoder라는 인터페이스를 제공해준다. PasswordEncoder는 아래와 같다. public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPassword, String encodedPassword); default boolean upgradeEncoding(String encodedPassword) { return false; } } encode 메소드는 주어진 문자열을 변환해 반환하는 역할을 수행한다. 즉, 주어진 암호의 해시를 제공하거나 암호화를 수행하는 일을 한다. 인코딩된 ..
-
ch03 : 스프링 시큐리티 기본 인증 - 2IT 서적/Spring Security In Action 2023. 12. 28. 14:46
# AuthenticationProvider 활용 아래의 소스와 같이 AuthenticationProvider를 구현하여 커스터마이징하게 회원 인증을 수행할 수 있다. @Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName() ; String password = String.valueOf(authentication.getCredential..
-
ch02 : 스프링 시큐리티 기본 인증 - 1IT 서적/Spring Security In Action 2023. 12. 28. 12:49
# 스프링 시큐리티 실행 스프링 시큐리티를 import 한 후, 실행하면 아래와 같은 문구가 생긴다. Using generated security password: 6a624793-0bfe-4deb-8d24-d0a0ee97335a 단순히, curl http://localhost:8080/hello 라는 명령어를 사용하면 아래와 같은 응답값을 얻을 수 있다. HTTP 401 권한 없음이 반환됐는데, 이는 인증을 위한 올바른 자격 증명을 제공하지 않았기 때문이다. 위와 같은 상황에서 다시 명령어를 아래와 같이 주면 다음 결과를 얻을 수 있다. curl -u user:6a624793-0bfe-4deb-8d24-d0a0ee97335a http:localhost:8080/hello # 테스트용 사용자 임시 추가 ..
-
Enum 활용방안Java 2023. 12. 1. 17:32
# 1. 특정 값으로써 활용할 때 키, 코드, 명칭과 같은 값을 공통코드로 사용하는 경우 활용한다. 아래의 예시 참고 @Getter @AllArgsConstructor public enum MemberGrantType { M("M", "마스터 권한") ,C("C", "회사 권한") ,S("S", "매장 권한") ,U("U", "회원 권한") ; private String code ; private String name ; } # 2. 메소드로 활용할 때 추상 메소드를 만들고 이를 구체화하여 활용할 수 있다. 아래의 예시 참고 public enum LeaveRequestState { Submitted { @Override public String responsiblePerson() { return "Emp..
-
RestTemplate의 Response 결과 값 자동 매핑하기Spring Boot/MVC 2023. 11. 25. 20:54
# RestTemplate의 exchange 메소드 아래와 같이 여러 인자값들이 있다. public ResponseEntity exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType, Object... uriVariables) # 4번째 인자값인 responseType을 통해 결과값을 반환받는 방법 아래와 같은 구조를 가진 객체를 생성하면 된다. 내부적으로 MessageConverter를 동작시켜 같은 변수명을 가진 필드들을 매핑시켜준다. public class ResponseVO { private Integer status ; private String code ; private Strin..
-
API 란?네트워크 2023. 11. 10. 14:47
# API 정의 두 서비스가 서로 통신할 수 있는 방법이다. 예시) 휴대폰 날씨 앱에서 기상청 시스템과 통신하여 날씨 정보를 가져오는 것 # API 종류 SOAP API 클라이언트와 서버가 XML을 사용하여 통신하는 방식 과거에 많이 사용되었으며 유연성이 많이 떨어진다. RPC(Remote Procedure Call) API 원격 프로시저 호출방식 RPC API를 사용하면 개발자가 외부 서버의 원격 함수를 마치 해당 소프트웨어 로컬에 있는 것처럼 직접적으로 호출할 수 있다. 장점 직관적이고 단순한 상호작용 방식을 지원한다. RPC는 기능을 추가하기 쉽다. API 연동이 필요한 경우 단순히 end point만 설정해주면 된다. 다양한 언어를 가진 환경에서 쉽게 확장 가능 단점 RPC는 기반 시스템과의 결합..
-
Garbage CollectionJava 2023. 11. 9. 22:44
# Garbage Collection(GC) 란? JVM의 Runtime Data Area에는 Heap 영역이라는 곳이 있는데, 이 영역 내부에 참조되고 있지 않는(사용되고 있지 않는) 객체를 삭제해주는 것을 GC라고 한다. # GC를 왜 할까? 메모리의 자원은 한정돼 있는데, 사용하지 않는 데이터가 자리를 차지하고 있으면 당연히 비효율적이기 때문에. C와 C++은 개발자가 수동으로 메모리 할당과 해제를 일일이 해줘야한다. 하지만 Java는 JVM의 GC가 일괄적으로 관리해주기 때문에 개발자는 비즈니스 로직 구현에만 집중할 수 있다. # GC의 단점 메모리가 언제 해제되는지 정확하게 알 수 없어 제어하기 힘들다. 가비지 컬렉션(GC)이 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생되는 문제..
-
레이어드 아키텍처아키텍처 2023. 11. 9. 14:02
# 레이어드 아키텍처란? 여러 개의 개별 수평 계층으로 구성된 아키텍처 구조로 서로 독립적인 계층 구조를 가진 아키텍처를 레이어드 아키텍처라고 한다. 구조의 이미지는 아래 그림과 같다. # 특징 각 계층이 마치 Linking 구조처럼 다음 Layer에 대해서만 연결돼 있다.(Layer1 -> Layer2 -> Layer3 이런식으로) 각 레이어 마다 담당하는 역할이 다르기 때문에 기능이 분리돼 있다. 이 말은 즉, 커플링 관계가 낮으며 이는 유지보수에 좋다. (각 역할이 분리돼 있다는 말의 의미 -> '관심사 분리'라고 한다.) # 레이어드 아키텍처의 구성요소 Presentation Layer – 유저와의 상호작용을 책임지는 영역 Application/Business Layer – 비즈니스 로직을 책임지..
-
MyBatis - SelectKey 활용하기DB/MyBatis 2023. 11. 8. 14:13
# SelectKey 란? Insert, Update, Delete 전, 후 SELECT가 필요한 경우에 사용하는 MyBatis 문법 # 사용법 UPDATE TBM_EVENT_DTL SET PARTICIPATION_CNT = PARTICIPATION_CNT + 1 WHERE 1=1 AND CP_CD = #{cpCd} AND EVENT_CD = #{eventCd} AND USE_YN = 'Y' AND DEL_YN = 'N' SELECT A.PARTICIPATION_CNT ,A.TOTAL_PART_LIMIT_CNT FROM TBM_EVENT_DTL AS A WHERE 1=1 AND A.CP_CD = #{cpCd} AND A.EVENT_CD = #{eventCd} AND A.USE_YN = 'Y' AND A...