본문 바로가기

language, framework, library110

[Spring Security] Spring Security에서 UserDetailsService와 PasswordEncoder Interface 분석하기 안녕하세요. 이전시간에 Spring Security의 전체적인 아키텍쳐와 기본적인 샘플에 대해서 알아보았습니다. 아래가 Spring Security의 전체적인 이미지였습니다. 오늘은 이어서 UserDetailsService와 PasswordEncoder의 디테일한 부분에 대해서 알아보도록 하겠습니다.UserDetailsService와 UserDetailsManager interfaceUserDetailsService는 이전시간에 사용자에 대한 세부 정보를 가져오는 역할을 한다고 했습니다. 실제로 인터페이스를 확인해서 UserDetailsService는 어떻게 활용해야하는지 확인해보도록 합시다./** * 유저의 데이터를 가져오는데 사용하는 Core Interface * * 이 인터페이스는 read-only.. 2022. 12. 18.
[Spring Security] Spring Security 기본 아키텍처, 맛보기 샘플, 그리고 default 값 안녕하세요. 이전시간에 서비스의 일반적인 보안 취약성 이라는 주제로 개발하면서 지켜야할 기본적인 보안에 대해서 알아보는 시간을 가져보았습니다. 오늘은 Spring Security를 이용하여 실전으로 서비스의 보안을 강화해 보는 시간을 가져보도록 하겠습니다. 오늘은 그 첫 시간으로 Spring Security의 기본에 대해서 알아보는 시간을 가져보겠습니다.Spring Security 란Spring Security는 인증(authentication)과 인가(authorization) 그리고 일반적인 서비스 공격을 막아낼 수 있는 프레임워크입니다. 이 프레임워크는 servlet 서비스 뿐만 아니라 reactive 서비스 역시 사용 가능하며 Spring 기반 어플리케이션 보안의 사실상 표준입니다. 최고의 장점으.. 2022. 12. 4.
[Spring + Jackson] Spring Boot에서는 왜 FAIL_ON_UNKNOWN_PROPERTIES default 옵션을 false로 사용하는가 ? 안녕하세요. 이전 포스팅 [Spring + Jackson] Spring Boot에서 default ObjectMapper의 configuration을 알아보도록 하자에서 Spring Boot에서는 jackson을 사용할 때 default ObjectMapper를 기본적으로 사용하지 않고 커스텀하여 사용한다고 말씀드렸습니다. 관련하여 왜 이런 결정을 내렸는지에 대한 이야기를 전달받아서 이를 추가 포스팅으로 작성해 보았습니다. Spring Boot에서 FAIL_ON_UNKNOWN_PROPERTIES 설정값을 false로 기본 설정 해당 결정에 대한 Issue가 Spring-Framework의 github Issue로 2014년 6월 20일 등록 되어있었습니다. 해당 이슈에 대한 논의는 지금으로부터 8년전에 .. 2022. 10. 3.
[Spring + Jackson] Spring Boot에서 default ObjectMapper의 configuration을 알아보도록 하자 안녕하세요. ObjectMapper를 기본적으로 선언해서 사용하면 FAIL_ON_UNKNOWN_PROPERTIES 옵션이 켜져있기 때문에 잘못된 RequestBody이 Fields가 들어오면 에러를 냅니다. 그런데 Spring Boot 기본 ObjectMapper를 사용하면 에러를 내지 않고 정상 동작합니다. 어째서 일까요? Spring Boot AutoConfiguration에 의해서 자동으로 ObjectMapper를 커스터마이징해서 사용하기 때문입니다. 그렇다면 Spring Boot의 ObjectMapper에 대한 기본 세팅은 어떻게 될까요? 오늘은 코드를 따라가보며 그 세팅을 찾아보도록 하겠습니다. 시작점 찾기 intellij IDE를 이용하면 빠르게 어떤 objectMapper를 사용하는지 파악할.. 2022. 9. 20.
[kotlin] 코틀린 차곡차곡 - 17. require와 check 안녕하세요. 오늘은 오랫만에 코틀린 차곡차곡 시리즈로 찾아왔습니다. 오늘 여러분들께 공유 드릴 내용은 코틀린에서 validation에 대해서 이미 정해져 있는 코드들에 대한 내용입니다. 기존의 validation asis 메서드를 원하는 바로 정확하게 실행시키기 위해서는 실제 본연의 메서드 로직을 실행시키기전에 validation으로 input으로 들어오는 파라미터의 값이나 사용하는 상태 적절한지에 대한 판단이 필요합니다. 이러한 validation은 보통 아래의 2가지로 나눌 수 있습니다. 파라미터 값 자체에 대한 validation 파라미터 값에 의한 기존 Entity를 비롯한 도메인이 가지고 있는 상태에 대한 validation 이러한 valitaion을 구현한다고 하면 기존에는 아래의 코드처럼 일.. 2022. 6. 5.
[React] Backend 개발자가 admin을 만들기 위해 하는 react 정리 1편 - component와 props, 그리고 props.children 안녕하세요. 오늘은 React로 admin 개발을 하면서 공부했던 React를 사용하기 위해서 배웠던 내용을 정리하려고 합니다. 같은 방법에 대해서 고민하셨던 부분이 있으셨다면 이 포스팅으로 해결하셨으면 좋겠습니다. 아마 아주 기초적인 부분들이 주를 이룰것으로 보이기때문에.. 적절히 걸러서 보시는게 좋을 수 있습니다. :)오늘 정리할 내용은 react에서 component들 사이에 데이터 전달의 기본이 되는 props와 event에 대해서입니다.component(컴포넌트)와 데이터 전달React에서 Component는 UI를 이루는 HTML을 반환하는 작은 단위입니다. Component는 한번 만들면 원하는 곳에서 재사용하는 것이 가능합니다. Java에서의 class 또는 메서드라고 생각하시면됩니다. c.. 2022. 4. 22.
[JPA] Spring JPA 환경에서 bulk insert를 효율적으로 해보자 - JPA의 한계와 JDBC 활용 안녕하세요. 오늘은 Spring JPA 환경에서 bulk insert를 효율적으로 하는 방법에 대해서 알아보는 시간을 가져보도록 하겠습니다. JPA를 사용하고 ID를 전략을 사용했을 때 JPA의 성능 문제는 이전에 [JPA] JPA의 AUTO_INCREMENT 테이블에서 다건 insert 시간 비교 - save vs saveAll 포스팅에서 간단히 다룬적이 있습니다. 해당 포스팅의 주된 내용은 save와 saveAll의 성능 시간 비교였지만 연관이 있으므로 관심있으신 분들은 해당 포스팅을 일부 참고하셔도 좋을 것 같습니다.Spring Data JPA의 bulk insert와 그 한계점bulk insert는 한번의 쿼리로 여러건의 데이터 row를 insert할 수 있는 insert 방법입니다. batch .. 2022. 4. 12.
[CSS] react를 공부하며 나왔던 CSS 정리 회사에 Admin 만들일이 있어서 react로 개발하게 되었습니다. 그런데 저는 web 관련해서는 거의 전무한 지식을 가지고 있습니다. 그래서 요즘 조금씩 react 공부를하는데 기초가 너무 없으니 배워야할게 많다는걸 느끼고 있습니다. 가장 문제가 되었던게 css에 대해서 지금까지 피해왔던 부분이었습니다. 해당 포스팅에서는 이번에 react를 공부하면서 보았던 css에 대한 기본과 새롭게 배운점을 정리를 해보고자합니다.CSS란CSS는 Style sheet 언어로 실제 프로그래밍 언어는 아닙니다. HTML 문서에 있는 DOM과 같은 Element들에게 선택적으로 스타일을 적용할 수 있는 언어입니다. 단독으로 사용할수는 없고 HTML과 함께 사용해야합니다.CSS RuleSetbody { margin: 0;.. 2022. 3. 19.
[Spring] problem spring web을 이용해보자 - webFlux 적용편 안녕하세요. 이전 시간의 포스팅에서 problem spring web을 Spring MVC에 적용하는 시간을 가져보았습니다. 오늘은 이를 webflux에 적용해보는 시간을 가져보도록 하겠습니다. Spring WebFlux 의존성 problem spring web을 사용하기 위해서는 아래의 의존성이 필요합니다. Spring Web과 전체적인 이름은 유사하지만 동일하지는 않기 때문에 주의하시기 바랍니다. implements("org.zalando:problem-spring-webflux:0.26.2") 환경설정(Configuration) 의존성을 넣어주었으면 이제 환경설정을 해볼 차례입니다. 환경설정은 problemModule에 대한 설정과 json으로 응답값을 만들어 낼때의 mapper를 변경하는 설정이 .. 2022. 3. 6.
[Spring] problem spring web을 이용해 Exception Hadling을 단순화해보자 - MVC 편 안녕하세요. 오늘은 spring에서의 exception handling을 쉽게 사용할 수 있게하는 problem-spring-web 라이브러리를 사용해 보도록 하겠습니다. 오늘 포스팅에서는 Web MVC와 Webflux를 모두 알아보도록 하겠습니다. application/problem+json 알고 있으셨나요 ? 저는 몰랐습니다. http 에러 응답을 json으로 상세하게 반환하는 별도의 Http MediaType이 존재하는 사실을. 이 MediaType의 이름은 application/problem+json입니다. application/problem+json 스키마의 설명은 아래와 같습니다. 새로운 오류 응답 형식을 정의할 필요를 피하기 위해 RFC에서 정한 규약중 하나입니다. 무조건 이런 규약을 따라야.. 2022. 2. 26.
[Spring] @Async에서 사용하는 ThreadPoolTaskExecutor 최적화하기 오늘은 Spring MVC에서 쉽게 비동기 프로그래밍을 할 수 있는 @Async 을 튜닝하는 방법에 대해서 알아보도록 하겠습니다. 오늘 코드는 Java가 아닌 코틀린으로 작성되었습니다. Java 로도 충분히 작성하실 수 있으니 천천히 따라오시면 됩니다. :) @Async Spring MVC 에서 간단하게 병렬프로그래밍을 구현할 때 @Async 어노테이션을 많이 이용합니다. 이 어노테이션을 메서드에 붙이기만하면 간단하게 사용할 수 있기 때문에 많이 사용하곤 합니다. 아래 코드가 사용의 예시입니다. @Async fun sendCloudMessage(event: Event) { fireBaseSuspendApi.sendCloudMessage(id = event.id); } 하지만 이런 어노테이션으로 간단하게 .. 2022. 2. 19.
[kotlin] 코틀린 차곡차곡 - 16. kotlin JVM annotation 알아보기 2편 안녕하세요. 오늘은 이전 시간에 이어서 JVM annotation에 대해서 알아보는 시간을 가져보도록 하겠습니다. 오늘 알아볼 코틀린의 JVM annotation은 이전시간에 알아보지못한 @JvmOverloads, @JvmDefault, @Throws, @JvmWildcards 등입니다. @JvmOverloads 코틀린과 자바는 100% 호환 된다고 합니다. 하지만 몇몇 부분에 있어서는 상호 호환이 되지 않는 부분이 있습니다. 그 중 대표적인 하나가 코틀린의 default 값에 대해서 자바에서 호출하지 못한다는 것입니다. 아래 예제 코드를 한번 보면서 좀 더 들여다 보도록 하겠습니다. 코틀린의 함수를 아래처럼 선언하면 이는 아래의 3가지 방법으로 모두 접근이 가능합니다. 코틀린에서 default 파라미터.. 2022. 1. 26.