들어가며 Spring 프로젝트에서 로그인(인증)을 JWT 로 구현하는 것을 성공했다. 나는 데이터베이스를 전혀 사용하지 않는 Spring Security 스프링 기본 JWT 방식이 아닌, DB에 인증 테이블을 만들고 User의 Id 와 Refresh Token을 같이 저장했는데 그 이유는 아래에서 얘기해보자. 이제 로그아웃을 만들어보려는데 고민이 됐다. (처음엔 별 생각 없이 Refresh Token 을 인증 테이블에서 삭제하는 삽질을..) 기본 JWT 방식으로는 안전한 로그아웃을 구현이 어려울걸? 기본 JWT 방식에서는 서버가 토큰 상태를 제어할 수 없어 안전한 로그아웃 구현이 어렵다. 토큰 발급 후 서버는 토큰 관리 권한을 잃어버리는데, 이는 서버 어디에도 사용자 정보와 만료 시간이 포함된 JWT 가..
들어가며 스프링을 기반으로 한 팀 프로젝트를 개발하면서, 성능 최적화를 해보고싶었습니다. 그 와중에 떠오른게 바로 캐시입니다. 개념만 살짝 알고있었는데 이번 포스팅을 통해서 글로벌 캐시가 아닌 로컬 캐시를 선택한 이유 그리고 가장 중요한 캐시의 검증 을 로그를 통해 알아보겠습니다. 로컬 캐시를 선택한 이유 캐시 전략에는 크게 두 가지 유형이 있습니다 글로벌 캐시: 여러 대의 서버를 사용하는 환경에서 별도의 캐시 서버를 구축하여 사용합니다. 장점: 분산 서버 환경에서 효율적입니다. 단점: 외부 캐시 서버와의 네트워크 비용이 발생하며, 별도의 캐시 서버 구성이 필요합니다. 로컬 캐시: 각 서버 인스턴스의 자원을 사용하여 캐시를 구성합니다. 장점: 구현이 간단하고, 하나의 서버 인스턴스에서 운영될 때 글로벌 ..
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8#curriculum 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 객체 지향 설계와 스프링 스프링이란?
스프링과 객체 지향 이야기의 연관성 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection): 의존관계, 의존성 주입 DI 컨테이너 제공 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 스프링이 없던 시절 옛날 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면서 개발을 해보니, 너무 할일이 많았습니다. 그래서 프레임워크로 만들어버림 순수하게 자바로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 스프링 프레임워크를 만들게 됩니다. (더 정확히는 DI 컨테이너) 정리 모든 설계에 역할과 구현을 분리해야 합니다. 자동차, 공연의 예 애플리케이션 설계도 공연을 설계 하듯이 배역만 만들어두고, 배우는 언제든지..
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙(Single responsibility principle) OCP: 개방-폐쇄 원칙(Open/closed principle) LSP: 리스코프 치환 원칙(Liskov substitution principle) ISP: 인터페이스 분리 원칙(Interface segregation principle) DIP: 의존관계 역전 원칙(Dependency inversion principle) SRP 단일 책임 원칙 Single responsibility priciple 한 클래스는 하나의 책임만 가져야 합니다. 하나의 책임이라는 것은 모호합니다. 클 수 있고, 작을 수 있습니다. 문맥과 상황에 따라 다릅니..