DI : Dependency Injection (의존성 주입) 의존성 주입은 객체 간의 의존성을 줄이고 유지보수성을 높이기 위해 사용된다. Spring 컨테이너에 여러 컴포넌트를 Bean으로 등록하여 생명주기 관리를 위임하고, 이 Bean으로 등록한 객체를 주입받아서 사용할 수 있다. DI 덕분에 개발자가 객체 생성에 대한 부분을 신경 쓰지 않고 비즈니스 로직에만 집중할 수 있게 된다. 의존성 주입 방법 의존성 주입 방법은 4가지가 있다. 생성자 주입 Setter 주입 Field 주입 일반 메서드 주입 이 중, 생성자 주입을 가장 많이 사용하고 Spring에서 권장하는 방법이다. 생성자 주입 생성자를 통해 의존성을 주입하는 방법이다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다. 불변, 필수 ..
JWT을 이용한 인증, 인가 JWT 토큰은 특정 회원 정보를 담은 암호화된 문자열이다. 로그인 시에 이 JWT 토큰을 발행받고, 이 토큰을 클라이언트 측 (브라우저 등)에 보관하며 서버로의 모든 요청 Header에 이 토큰을 포함시켜서 요청한다. 서버에서는 모든 요청마다 Filter에서 이 토큰을 검증하고 사용 권한을 확인하고, 접근 거절 또는 허가를 하게 된다. 단순하다. 요약하자면 아래와 같다. 로그인 시 JWT 토큰 발행 클라이언트는 모든 요청 시 Header에 발급받은 토큰을 포함시킨다. 서버는 모든 요청을 받기 전, Filter를 통해 해당 토큰을 검증하여 권한 여부를 확인한다. 권한이 있으면 접근을 허가하고, 권한이 없으면 접근을 거부한다. JWT? 2023.11.26 - [Spring/Spr..
JWT이란? JWT는 Json Web Token의 약자로, 웹에서 사용되는 JSON 형식의 토큰에 대한 웹 표준 규격이다. 주로 사용자의 인증, 인가 정보를 서버와 클라이언트 간에 안전하게 주고받기 위해 사용된다. JWT의 특징 웹 표준을 따르고 있다. URL-safe 하다. (URL에서 사용할 수 있는 문자로만 이루어져 있다.) 필요한 모든 정보를 하나의 객체에 담아서 전달하기 때문에 JWT 하나로 인증을 마칠 수 있다 JWT 구조 JWT 토큰은 헤더(header)와 페이로드(payload), 서명(signature) 세 부분으로 나누어지고, 각 부분이 ' . '으로 구분된다. 헤더(header) 토큰의 유형과 서명 알고리즘이 명시된다. { "alg" : "HS256", "typ" : "JWT" } 페..
이전 글2023.11.07 - [Database] - [Redis] Redisson 분산 락을 간단하게 적용해 보기 분산 락 AOP 이용하기build.gradle아래 implementation을 추가한다.dependencies {//... implementation 'org.springframework.boot:spring-boot-starter-aop' implementation 'org.redisson:redisson-spring-boot-starter:3.17.0'}@DistributedLock@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface DistributedLock { /** * 락의..
문제 상황 어떤 데이터에 대해 매우 빠르게 수정이 일어날 때 동시성 문제가 발생할 수 있다. 예를 들어 A라는 데이터를 수정하는 로직이 0.1초 소요되는데, 0.001초 간격으로 A라는 데이터를 수정하는 요청이 여러 번 들어왔을 때 값이 제대로 수정되지 않을 수 있다. 이럴 때, DB 데이터 수정의 순차적 처리를 보장하기 위한 방법으로 Lock이 있다. Lock 트랜잭션 락과 비슷한 개념으로 어떤 데이터 수정, 접근 등에 Lock을 필요로 하게 설정하는 것이다. 데이터를 수정하려면 우선 Lock을 획득하고 수정 후에 Lock을 반납한다. 만약 Lock을 획득할 수 없는 상황에서는 Lock을 획득할 수 있을 때까지 대기하거나 수정을 취소할 수 있다. 분산 락(Distributed Lock) 하나의 공유 자..
REST API 방식에서의 Kakao Login과 SpringSecurity에 대한 글을 찾다가 들어오신 분을 위해 말씀드립니다.이 글은 Thymeleaf를 통해 뷰를 구성하고, Spring MVC @Controller 방식의 formLogin과 KakaoLogin을 혼용하기 위한 방법에 대해 설명하고 있습니다. REST API 방식과는 많이 다른것으로 알고있으니 참고하세요! 이전 글..Kakao Login API 사용하기2023.10.15 - [Spring/SpringBoot] - [Spring] 카카오 로그인 API 사용 방법 [Spring] 카카오 로그인 API 사용 방법Kakao Developers 이미지 설명에 각 이미지 내용에 대한 위치(경로) 적어뒀으니 참고해 주세요. 1. KakaoDeve..
Kakao Developers이미지 설명에 각 이미지 내용에 대한 위치(경로) 적어뒀으니 참고해 주세요. 1. KakaoDevelopers 접속https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com 2. 애플리케이션 추가하기 3. 애플리케이션 추가 4.Rest API 키 확인 5. Web 플랫폼 등록 6. 사이트 도메인 설정 7. 카카오 로그인 활성화, Redirect URI 등록 8. 동의 항목 설정사용하려는 개인 정보 동의 설정 ( email, nickname 정보 ) 9. (추가) 카카오 로그인 버..
JUnitJava용 유닛 테스트 프레임워크이다.소프트웨어 개발 시에 단위테스트(Unit Testing)는 중요한 절차이다.프로그램을 작은 unit 단위로 쪼개어 각각 잘 동작하는지 검사함으로써 프로그램의 안정성을 높인다.1) 테스트 주도 개발 (TDD)테스트 주도 개발(Test-Driven Development)란, 테스트 케이스를 작성하고 소스코드가 이를 통과하는지 반복하여 확인하며 개발하는 것을 말한다. TDD는 기능의 구현 목표에 집중하여 개발 생산성을 높이고, 이후 리팩토링과 유지보수에 이점을 가져다준다.테스트코드를 처음 접했을 때, 사소하고 틀일일이 없다고 생각하는 부분까지 테스트를 하는 것을 보고 놀랐다.2) 단위 테스트(Unit Testing)각 작은 단위가 구현 목표에 맞게 잘 동작하는지 ..