분류 전체보기 35

SLASH21 : 테스트 커버리지 100% 요약

SLASH21 : 테스트 커버리지 100% 요약 테스트 커버리지, 얼마면 될까? 얼마만큼의 코드를 자동화한 단위 텍스트로 계산해야 할까? 대답할 필요조차 없다. 모조디 다 해야한다. 모.조.리! 100% 테스트 커버리지를 권장하냐고? 권장이 아니라 강력히 요구한다. "작성한 코드는 한 줄도 빠짐없이 전부 테스트해야 한다." 군말은 필요 없다. 로버트 마틴 저. 정희종 역. "클린 코더(2016)"중에서테스트 환경 Spring Webflux, Kotlin 높은 테스트 커버리지의 이점 자신 있게 누를 수 있는 배포 버튼 모든 코드가 테스트되었다는 사실에서 오는 자신감 거침없는 리팩토링 리팩토링에 문제가 있다면 테스트가 알려줄 것이다! 불필요한 프로덕션 코드가 사라진다 남아 있따면 그것 또한 테스트해야 한다...

Semina 2021.11.04

2021.08.16.

2021.08.16. 1. 오늘 하루 누군가를 만나지도 않고, 한 마디도 하지 않았다. 아침 겸 점심을 챙겨먹고 쉬는 날에 늘 그렇듯 주섬주섬 노트북을 챙겨 집 앞 카페로 향했다. 카페 안의 다양한 사람들을 볼 여유도 없이 나는 노트북 화면에만 몇 시간동안 집중하였다. 배가 고파 시계를 보니 시간은 어느덧 저녁이 되었고 짐들을 챙겨 집으로 향하려는데 밖엔 많은 비가 내렸다. 우산을 챙겨오지 않았고, 비를 맞으며 걸으니 요즘 많았던 생각들이 꼬리의 꼬리를 물고 산발적으로 터져나왔고, 우울해졌다. 이러한 생각과 감정들을 글로 남기려한다. 2. 두 번째 다이어리를 쓰고 약 3개월 남짓 열심히 달려왔다. 물론 3개월 전과 비교하여 나는 지금 더 발전했고, 많은 것들을 알게 되었다. 하지만 내가 느끼기에 지금의 ..

Diary 2021.11.04

Spring Security with JWT #4. Refresh token 관리 방안과 로그아웃

Spring Security with JWT #4 1. 의사결정 저번 포스트에서까지 Access token 과 Refresh token 의 구현에 대해서 알아 보았다. 이번 포스트에서는 Refresh token 에 대한 보안성 강화 전략과 로그아웃 시 서버에서 처리해주어야 할 것들에 대해 알아보려고 한다. Refresh token 관리 방안 및 보안성 강화 전략 Refresh token 은 Access token 의 만료 기간을 짧게 두고, Access token 이 만료될 때 마다 초기 로그인 시 발급한 Refresh token 으로 Access token 을 재발급 받아, Access token 이 탈취당했을 때를 보완하며, 또한 로그인 유지의 목적을 가진다. 하지만 Refresh token 이 탈취..

Spring Security 2021.11.04

Spring Security with JWT #3. Access token, Refresh token 구현

Spring Security with JWT #3 0. 들어가기 앞서 본격적으로 Spring boot + Spring Security + JWT library 를 이용한 access token 과 refresh token 을 구현해보도록 한다. 1. 환경 세팅 및 유저 엔티티 생성 프로젝트 구조 build.gradle plugins { id 'org.springframework.boot' version '2.5.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.dohyun' version = '0.0.1..

Spring Security 2021.11.04

Spring Security with JWT #2. Spring Security Architecture

Spring Security with JWT #2 0. 들어가기 앞서 본격적으로 auth0.com 에서 제공해주는 jwt implementation libarary 를 사용하여 jwt 를 구현하기 전에, 인프런의 백기선님의 강의를 참고하여 Spring Security Architecture 에 대해 divide-and-conquer 방식으로 이해를 돕고자 한다. 1. SecurityContextHolder 와 Authentication SecurityContextHolder : SecurityContext 제공, 기본적으로 ThreadLocal 을 사용한다. ThreadLocal 이란? Java.lang 패키지에서 제공하는 쓰레드 범위 변수, 즉, 쓰레드 수즌의 데이터 저장소이다. 같은 쓰레드 내에서만 ..

Spring Security 2021.11.04

Spring Security with JWT #1. 배경지식 및 의사결정

Spring Security with JWT #1 0. 들어가기 앞서 평소 세션에 기반한 인증과 토큰에 기반한 인증 모두 사용해보고, 구현해 보았지만 Spring Security 의 아키텍처 및 인증과 권한의 구조에 대하여 깊이 이해하고 사용한다는 느낌을 갖지 못하였다. 그러던 중, 회사의 새로운 프로젝트와 8월에 출전하는 공개SW 개발자 대회에서 JWT 를 이용한 인증 및 권한 시나리오가 필요하게 되었고, 이에 따라 전체적인 배경지식부터 의사결정, 그리고 설계 및 구현에 대하여 정리하고 문서화하고자 한다. 또한 이번 포스트 시리즈에서는 Spring Security 및 JWT 구현, Redis 를 이용한 Refresh token 구현 및 저장에 초점을 둘 것이기에, 인증 및 권한, 세션 기반 인증 및 토..

Spring Security 2021.11.04

스프링 컴포넌트 스캔과 @Autowired

스프링 컴포넌트 스캔과 @Autowired 앞선 포스트에서 스프링 빈을 등록할 때는 자바 코드의 @Bean 을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 등록해야할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. @Configuration @ComponentScan public class AutoAppConfig { } 앞선 포스트들에서 수동으로 빈을 등록할 때에는 빈들간의 의존 관계를 수동으로 맺어주었다. 그런데 @ComponentScan 을 이용해 자동..

Spring framework 2021.11.04

스프링 싱글톤 컨테이너

스프링 싱글톤 컨테이너 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig 는 요청을 할 때 마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸된다! -> 메모리 낭비가 심하다. 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 ..

Spring framework 2021.11.04

스프링 컨테이너와 스프링 빈

스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 ApplicationContext 를 스프링 컨테이너라고 한다. ApplicationContext 는 인터페이스이다. 더 정확히는 스프링 컨테이너를 부를 때, BeanFactory, ApplicationContext 로 구분해서 이야기한다. BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라고 한다. 스프링 컨테이너 생성 스프링 빈 등록 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다. 주의 : 빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다. 스프링..

Spring framework 2021.11.04

스프링과 객체지향

스프링과 객체 지향 스프링의 핵심 개념 이 기술을 왜 만들었는가?, 이 기술의 핵심 컨셉은? 스프링은 자바 언어 기반의 프레임워크이다. 자바 언어의 가장 큰 특징은 객체 지향 언어 이다. 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 좋은 객체 지향 프로그래밍이란? 다형성 ( polymorphism ) 이 진짜 중요하다! 다형성의 예로, 운전자 - 자동차 관계를 보자. 위의 사진과 같이, 운전자는 K3 를 타다가 아반떼를 타도 운전을 할 수 있다. 왜냐면 자동차라는 역할에 대한 구현만 바뀌었기 때문이다. 따라서 자동차가 바뀌어도 운전자한테 전혀 영향을 주지 않는다. 운전자는 자동차 인터페이스에 대해서..

Spring framework 2021.11.04