본문 바로가기

분류 전체보기62

[Spring] @Transactional에 private 접근 제한자가 불가능한 이유 개요 Socket 사이드 프로젝트를 진행하던 중 git에 push를 하기 전에 외부 패키지에서 사용할 일이 없는 메소드의 경우 private로 접근제한자를 설정하기 위해서 살펴보던 와중에, 아래와 같이 @Transaction이 붙은 메소드는 private 접근 제한자가 불가능한것을 발견했다. 그리고 아래와 같은 오류메시지를 알려줬다. Methods annotated with '@Transactional' must be overridable. @Transactional은 spring AOP를 사용하여 구현되는데 기본적으로 AOP는 proxy패턴 을 사용하여 구현이 된다. 결론부터 말하자면, 1. spring의 @Transactional은 proxy로 동작한다. 2. 그러므로 private 사용이 불가하다... 2024. 1. 25.
[Java] Collections.emptyList( ) vs List.of( ) 개요 Socket 사이드 프로젝트를 하는 중에 List 타입의 해시태그 값들을 받는데, 테스트 코드를 작성하면서 빈 리스트를 반환해야 할 일이 생겨서 두 방법의 차이점은 무엇인지 쓴다면 어떤것을 써야하는지 헷갈려서 정리하게 된 글이다. - Collections.emptyList( ) EmptyList라는 클래스가 별도로 존재했고, 이를 List타입으로 캐스팅해 반환해 주고 있었다. EmptyList의 경우 get() 호출 시, IndexOutOfBoundsException을 터트리고, size( )는 0을 반환하고, isEmpty( ) 메소드 또한 true인것을 확인할 수 있다. 즉 완전히 빈 리스트를 정의하는 특징들을 갖고 있다. 위의 초록 글씨에서 볼 수 있듯이, Returns an empty lis.. 2024. 1. 25.
Stack / Queue Stack ⭐️Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임 4. 그래프의 깊이 우선 탐색(DFS)에서 사용 5. 재귀적(Recursion) 함수를 호출 할 때 사용 ⭐️ Stack의 사용법 import java.util.Stack; //import Stack stack = new Stack(); //int형 스택 선언 Stack stack = new Stack(); //char형 스택 선언 ⭐️ Stack값 추가 Stack stack = new Stack(); //int형 스택 선언 .. 2024. 1. 22.
DFS / BFS DFS( 깊이 우선 탐색 , Depth-First Search) 루트 노드( 혹은 다른 임의의 노드)에서 다음 분기(branch)로 넘어가기 전에, 해당 분기(branch)를 모두 탐색하는 방법. 탐색 후에는 다시 원점으로 돌아가 다른 분기를 탐색합니다. 특징 자기 자신을 호출하는 순환 알고리즘의 형태를 지닙니다. (재귀 or 스택) 이 알고리즘을 구현할 때 가장 큰 차이점은 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사 해야 한다는 것입니다. (이를 검사하지 않을 경우 무한 루프에 빠질 수 있다. ) ex) visit[index] = true; 미로를 탐색할 때, 해당 분기에서 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로(새로운 분기)로 돌아와.. 2024. 1. 22.
Spring Security + JWT를 이용한 로그인/회원가입 구현 JWT (Json Web Token) 이란? JWT는 웹 애플리케이션에서 사용자 인증 및 정보 교환을 위한 토큰 기반 인증 방식입니다. JWT는 토큰 자체에 사용자의 클레임(claim)정보를 포함하고 있으며, 이를 통해 서버간의 신뢰성 있는 정보 교환을 가능하게 합니다. 서버의 상태를 유지하지 않고도(Stateless) 토큰을 사용하여 인증을 처리할 수 있습니다. 토큰을 사용하여 클라이언트와 서버간 인증을 할 수 있습니다. Claim 이란? 클레임이란 사용자 정보나 데이터속성등을 의미한다. 클레임 기반 토큰은 토큰안에 정보를 담을 수 있는 특징이 있다. 클레임 기반 토큰은 아래예시와 같이 정보를 담고 있다. jwt는 클레임토큰중 가장 대표적인 것이다. payload에서는 claim이라는 property를.. 2024. 1. 19.
기본형(Primitive) vs 참조형(Reference) vs 래퍼 클래스(Wrapper Class) 참조형 (Reference Type) VS 기본형 (Primitive Type) • 자료형은 크게 '기본형'과 '참조형'으로 나뉜다. • 기본형(Primitive Type) : 계산을 위한 실제값을 저장한다. → 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) • 참조형(reference type) : 객체의 주소를 저장한다. → 8개의 기본형을 제외한 나머지 타입들 래퍼 클래스(Wrapper Class)란? • 기본형 데이터 타입(primitive type)을 객체로 변환한 클래스 • wrapper 클래스를 시용하면 기본형(primitive) 값을 객체로 다룰 수 있다. 래퍼 클래스(Wrapper Class) 사용 이유?.. 2024. 1. 19.