전체 글 33

[트러블 슈팅 / ~ 최종발표] 최종 프로젝트 : 9kcal. 오늘 뭐 먹지?

1. WebSocket, StompHandler 인증 방식 변경 - 메시지 단위 JWT 검증 적용1) 개요WebSocket 기반의 채팅 기능을 구현하면서, 기존에는 연결 시점(CONNECT)에만 토큰 검증이 이루어져 이후의 메시지 송신에는 보안 취약점이 존재따라서 메시지 단위에도 JWT를 직접 검증하는 로직을 추가해 보안 2) 문제상황기존 구조(StompHandler)는 StompCommand.CONNECT에서만 JWT 인증 수행이후 메시지(SEND)에서는 SecurityContext를 활용해 인증된 상태로 처리됨하지만, 사용자가 WebSocket 연결 이후 로그아웃하거나 탈퇴 또는 추방된 경우에도 여전히 메시지를 보낼 수 있음결론 : 따라서 메시지 전송 시점마다 JWT 재검증이 필요 3) 해결ChatM..

[TIL] 최종 프로젝트 : 9kcal. 오늘 뭐 먹지? (4~5 주차. 중간발표 이후 리팩토링 및 추가 개발 + 프론트)

설계 수정 & 개선4~5 주차는 프로젝트를 마무리하는 기간이라, 새로운 기능을 추가하기보다는 기존 코드를 다듬고 성능을 최적화하는 데 집중따라서 프로젝트를 더욱 안정적으로 마무리하기 위해 설계 보완, API 테스트, 성능 최적화, 프론트엔드 연동 및 구현, 코드 리팩토링 등의 작업을 진행 1. 설계 피드백 반영 및 수정 과정*ERD 수정 과정 및 변경 내용처음 설계보다 ERD를 직관적으로 표현하고, 데이터 구조를 개선ERD 도구 변경 : ERDCloud -> DBDiagram 사용1:N 관계를 더 명확하게 표현 가능취향 카테고리 및 연관 테이블 추가기존에는 취향 데이터를 한 테이블에서 관리중간 테이블을 하나로 할지, 각각 둘지 고민결론 : 중간 테이블을 개별적으로 두는 것이 관리하기 쉽고, Null 값 ..

[컬렉션 프레임워크] 순회, 정렬, 전체 정리

순회Iteration* Iterable1. Iterable이란?반복 가능한자바에서 Iterable은 반복 가능한 객체를 의미하는 인터페이스List, Set 같은 컬렉션들은 모두 Iterable 인터페이스를 구현하고 있어, 향상된 for문(for-each) 문법에서 사용 가능2. Iterable 인터페이스 구조public interface Iterable { Iterator iterator();}iterator() 메서드로 Iterator 객체를 반환iterator()를 통해 요소를 하나씩 꺼낼 수 있는 반복자(Iterator)를 생성3. 향상된 for 문(for-each)Iterable 인터페이스를 구현한 컬렉션이면 for-each문으로 순회 가능내부적으로 iterator()를 호출해 Iterato..

[컬렉션 프레임워크] Map, Stack, Queue, Deque

Map* Map이란?Key-Value 쌍(key-value pair)으로 데이터를 저장하는 자료구조로, 각 key는 고유해야 하며, 해당 key에 대응되는 value를 저장한다 * Map 특징중복Key : 중복 XValue : 중복 O순서HashMap : 순서 보장 XLinkedHashMap : 입력 순서 유지TreeMap : Key 기준 정렬검색 성능HashMap 기준 : 평균 O(1)접근 방식Key를 통해 Value에 직접 접근 * Map 인터페이스의 주요 메서드메서드설명put(K key, V value)지정된 키와 값을 맵에 저장한다. (같은 키가 있으면 값을 변경)putAll(Map m)지정된 맵의 모든 매핑을 현재 맵에 복사한다putIfAbsent(K key, V value)지정된 키가 없는 경..

[컬렉션 프레임워크] Set

자바 컬렉션 프레임워크자바의 컬렉션 프레임워크(Collection Framework)는 데이터를 효율적으로 저장,조회,관리하기 위한 자료구조 라이브러리 집합분류(핵심 인터페이스)중복 허용순서 보장주요 구현체ListOO(인덱스 기반)ArrayList, LinkedListSetX-(구현체에 따라 다름)HashSet, TreeSetQueueOO(입출력 순서)LinkedList, ArrayDequeMapX(Key 기준)-(Key 순서 없음, 일부 정렬)HashMap, TreeMap Set * Set이란?자바 컬렉션 프레임워크에서 중복을 허용하지 않고, 순서를 보장하지 않는 집합형 자료구조(컬렉션)요소 간 순서보다 유일성(unique)이 중요* Set의 주요 특징특징설명중복 불가동일한 객체는 한 번만 저장된 (e..

[컬렉션 프레임워크] HashSet

HashSet * HashSet이란?자바에서 제공하는 Set 인터페이스의 구현체 중 하나로 중복 없는 데이터 저장, 빠른 탐색이 필요한 상황에서 사용내부적으로 배열 + 해시 기반 구조를 가지며, 순서를 보장하지 않고 null 값은 하나만 저장 가능 * HashSet 특징중복 불가 : equals()와 hashCode()로 동일한 객체 판별순서 보장 X : 저장 순서와 출력 순서가 다를 수 있음null 허용 : null 값 1개만 저장 가능빠른 검색/삽입/삭제 : 평균 시간복잡도 O(1)* HashSet 내부 작동 원리객체를 저장할 때 hashCode() 메서드를 호출해 해시값 생성정수가 아닌 값들을 정수로 바꿔서 배열의 인덱스로 활용할 수 있게 변환해시값을 기준으로 배열 인덱스를 구함(hash % cap..

[컬렉션 프레임워크] Hash

List vs Set * List순서 보장(인덱스 기반 접근 가능)중복 요소 허용요소를 순차적으로 저장하며, 원하는 위치에 삽입/삭제 가능인덱스를 기준으로 get(index)로 접근할 수 있음대표 구현체ArrayList : 배열 기반, 조회 빠름LinkedList : 노드 기반, 삽입/삭제 빠름* Set순서를 보장하지 않거나, 구현체에 따라 부분적으로 보장할 수 있음중복된 요소를 허용하지 않음 -> 유일한 값 저장 시 사용get(index) 같은 인덱스 기반 접근 불가능내부적으로 해시 구조, 정렬 트리, 링크드 해시 등을 사용해 동작대표 구현체HashSet : 순서x, 해시 기반LinkedHashSet : 삽입 순서 유지TreeSet : 정렬된 상태 유지 * List vs Set항목ListSet순서 유지..

[컬렉션 프레임워크] List

List * List란?List는 자바 컬렉션 프레임워크에서 가장 많이 사용되는 자료구조 중 하나로, 데이터를 순차적으로 저장하며 중복을 허용하고 순서를 유지한다는 특징을 가짐순서 보장 : 데이터를 삽입한 순서대로 저장하며, 인덱스를 통해 요소에 접근 가능중복 허용 : 동일한 값을 여러 번 저장할 수 있음ArrayList, LinkedList 등이 있음List 추상화 컬렉션을 다룰때, 구체적인 구현체(ArrayList, LinkedList 등)에 의존하면 유연성과 확장성이 떨어져 추상화(인터페이스)를 통해 코드를 더 유연하게 만들 수 있다. * 자바 컬렉션 주요 인터페이스인터페이스특징대표 구현체List순서 유지, 인덱스로 접근 가능, 중복 허용ArrayList, LinkedList, VectorSet순서..

[컬렉션 프레임워크] LinkedList

ArrayList의 한계 ArrayList는 내부적으로 배열(Array)을 기반으로 작동하며, 이 구조는 조회에는 빠르지만 삽입/삭제가 빈번한 경우에 비효율적이다. * ArrayList의 한계크기 고정 문제 : 배열 기반이므로 요소가 많아지면 배열을 새로 생성하고 복사해야 함 -> 성능 저하중간 삽입/삭제 비효율 : 배열의 요소를 하나씩 이동해야 하므로 시간 복잡도 O(n)삽입/삭제 성능 저하 : 대량의 데이터를 다루거나 빈번하게 요소를 조작할 때 비효율적 => 이러한 문제를 해결하기 위해 LinkedList 사용LinkedList 1. LinkedList란?자바에서 제공하는 List 인터페이스의 구현체 중 하나로, 노드(Node)를 기반으로 데이터를 연결해서 관리하는 연결 리스트 구조이다.ArrayLi..

[컬렉션 프레임워크] ArrayList

컬렉션 프레임워크& 시간 복잡도(Big-O) 1. 컬렉션 프레임워크란?자바에서는 데이터를 효율적으로 관리하기 위해 컬렉션(Collection) 프레임워크라는 도구를 제공한다.이는 데이터를 저장하고 처리하는 자료구조와 알고리즘을 표준화해 놓은 자바의 라이브러리 집합이다. * 주요 컬렉션 프레임워크List : 순서 O, 중복 OArrayList, LinkedListSet : 순서 X, 중복 XHashSet, TreeSetMap : Key-ValueHashMap, TreeMap각 자료구조는 특정 상황에서 성능, 메모리, 기능의 차이를 가지기 때문에 선택의 기준이 중요한데, 이때 고려하는 것이 시간 복잡도(Big-O)이다. 2. 시간 복잡도(Big-O)* 시간 복잡도 : 프로그래밍에서 알고리즘의 성능을 판단하는..