본문 바로가기

전체 글

(129)
[WebAPI] Rest Api 작성 가이드 URI 기본구조 /api/{version}/{module}/.../...?{query-string} API 버전을 URL에 포함시킨다. 명사만 사용한다. 행위는 Method로 표현한다. URI는 Spinal-case, 그 밖에는 CamelCase를 사용한다. Path에는 복수형 명사를 사용한다. 리소스 간에 관계가 있는 경우 하위 리소스로 표현한다. /api/v1/common/users /api/v1/common/codes/{code-id} /api/v1/person/person-classifications /api/v1/common/pages/{page-id}/page-services /api/v1/person/person-classifications/{person-classification-id}/s..
[Spring boot] Spring Security login 예제 (filter 없이 수동 Autentication) Spring Security 로 개발을 진행하다 보면 수많은 커스터마이징으로 진행하는 인증 시퀀스가 헷갈리는 경우가 많다. 간단한 설정으로 Spring Security 개념들을 파악해 보고자 한다. 소스 트리는 다음과 같다. 기본이 되는 Security config 모습이다. Username/password 인증 및 필터없이 login api에서 직접 authenticate를 함으로 써 최소한의 설정으로 인증 테스트를 해본다. src/main/java/com/kindlove/security/example/login/config/SecurityConfig.java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter ..
[Spring boot] Spring Security saml2.0 예제 분석 (spring-security-saml2-core) 필터 등록 /saml/config/WebSecurityConfig.java:87 @Bean public FilterChainProxy samlFilter() throws Exception { List chains = new ArrayList(); // IDP에 등록한 Recipient URL and Destination URL로 인증 프로세스를 위한 필터 chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SSO/**"), samlWebSSOProcessingFilter())); // 등록한 IDP discovery를 위한 url chains.add(new DefaultSecurityFilterChain(new AntPat..
[Spring boot] authenticationEntryPoint /auth 인증을 위한 Entry point는 보통 아래와 같이 security config이 configure 메소드에서 설정을 한다. @Override protected void configure(HttpSecurity http) throws Exception { http .csrf() .disable(); http .httpBasic() .authenticationEntryPoint(samlEntryPoint); .httpBasic() 은 아래와 같이 미리정의된 HttpBasicConfigurer 을 실행해준다. /** * Creates a new instance * @see HttpSecurity#httpBasic() */ public HttpBasicConfigurer() { realmName(DEFAUL..
[Spring boot] SAML2.0 SSO 간단 정리 SSO는 Single Sign-On의 약자로 한번의 로그인으로 여러개의 다른 도메인을 이용한다는 의미를 담고 있다. 예를들어, 로그인 검증은 A라는 곳에서 하고, B라는 곳에서는 A에서 검증된 로그인 정보라면 검증을 따로 하지 않게끔 하는 것이 SSO에 해당한다. 이런 SSO를 구현하기 위한 대표적인 방법으로 SAML, OAuth가 많이 사용된다. SAML (Security Asserting Markup Language) - (로그인) 인증/인가 정보를 담은 XML - cross domain 상황, 다양한 플랫폼에 관계없이 표준적인 방법으로 SSO 구현이 가능하게 함 - 아래와 같이 3가지의 구성원이 존재 1) Service Provideer (SP) : 서비스 제공 주체 2) User 3) Identi..
[Postgresql] RETURNING 활용 예제 Postgresql의 RETURNING 문을 사용하면 insert, delete, update 시 수행된 행을 return 받을 수 있고 이를 응용하여 여러 step을 하나의 쿼리로 수행해 볼 수 있다. 단일 Insert 예제 테스트 전 테이블 내용 CREATE TABLE users ( user_id serial PRIMARY KEY, NAME VARCHAR(20) ) CREATE TABLE users_backup ( user_id serial PRIMARY KEY, NAME VARCHAR(20) ) Insert returning 예제 WITH rows AS ( INSERT INTO users VALUES (10, '테스트') RETURNING user_id ) INSERT INTO users_backu..
[Postgresql] Upsert 구현 (insert ~ on conflict) DB 구현시 많이 쓰는 패턴중에 하나가 해당 row가 있으면 update, 없으면 insert를 하는 패턴일 것이다. Oracle의 경우는 merge ~ into 구문을 통해 한번의 명령으로 해당 로직을 구현할 수 있다. Postgres에서도 동일한 명령이 있지 않을까? 아래와 같이 insert ~ on conflict 구문을 활용하면 구현할 수 있다. 문법은 다음과 같다. INSERT INTO [TABLE] (COLUMN1, COLUMN2, ...) VALUES (VALUE1, VALUE2, ...) ON CONFLICT ([column_name / ON CONSTRAINT constraint_name/ WHERE predicate]) [DO NOTHING] [DO UPDATE SET column1 =..
[Postgresql] auto increment, sequence 처리방법 DB를 개발할때 초반에 고민하는 것중에 하나가 행 입력시 증가하는 일련번호, 시퀀스 번호를 어떻게 동작시킬것인가이다. Postgresql도 여러 방법으로 시퀀스 번호를 동작시키는 메커니즘을 가지고 있다. SEQUENCE 객체 활용 전통적인 방법으로 따로 SEQUENCE 객체를 생성하고 테이블에 붙여주는 방법이다. postgresql 기본적인 시퀀스 생성 CREATE SEQUENCE seq_user_id INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1; 시퀀스를 생성한 후에는 ALTER명령으로 속성을 변경할 수도 있다. 아래 링크에서 기능 설명이 되어 있다. ALTER SEQUENCE [ IF EXISTS ] 이름 [ AS 자료형 ]..