728x90

전체 글 266

[Spring] JWT 블랙리스트 전략

블랙리스트란?더 이상 유효하지 않다고 판단된 JWT 토큰을 별도의 저장소 (DB, Redis 등)에 저장해 놓고, 이 토큰이 사용되는 요청을 차단하는 방식입니다.JWT는 기본적으로 서버가 상태를 저장하지 않기 때문에 일반적으로는 발급된 토큰이 만료되기 전까지는 유효하다고 간주됩니다. 블랙리스트를 도입함으로써 만료되기 전 토큰을 강제로 무효화할 수 있게 됩니다.📌 Access Token 블랙리스트 전략Access Token은 보통 짧은 만료 시간을 갖고 있으며 요청마다 첨부되어 리소스에 접근하는 데 사용됩니다. 등록 방식로그아웃 시 또는 토큰 탈취가 감지되었을 때 해당 토큰을 블랙리스트에 저장클라이언트가 요청을 보낼 때마다 블랙리스트를 조회하여 해당 토큰이 유효한지 확인✅ 장점탈취된 토큰이라도 블랙리스트..

백엔드/Spring 2025.04.21

[Programmers] 완전범죄 JAVA

[Programmers] 완전범죄 - LV 2접근dfs (백트래킹)풀이A와 B도둑이 팀을 이루어 모든 물건을 훔칠 때 A 도둑이 남기는 흔적의 최소 개수를 구하는 문제이다. 2025 코드챌린지 2차 예선 문제로 2 레벨의 문제였는데 많이 어렵게 느껴졌던 2 레벨이었다. dfs를 쓰면 될 거 같은 문제였는데 방문체크가 생각처럼 잘 되지 않아 시간초과가 계속 발생했다. 물건을 A도둑이 훔칠지 B도둑이 훔칠지에 따라 분기가 나눠지는데 배열을 통해 방문체크를 하니 뭔가 잘 맞아떨어지지 않았다. private static int minATrail = Integer.MAX_VALUE; public static int solution(int[][] info, int n, int m) { Se..

[CS] 자바 예외 - Java Exception

자바에서는 크게 Checked Exception과 Unchecked Exception으로 나뉩니다. Error는 예외와 별개로 시스템의 비정상적인 상황을 나타내어 Error에 대한 처리는 개발자가 직접 다루지 않습니다.Checked Exception자바에서 컴파일 시점에 체크되는 예외로 프로그램의 안정성과 신뢰성을 높이기 위해 사용됩니다. 주로 외부 요인에 의해 발생하는 예외를 다루기 위해 설계되어 파일 입출력, 네트워크 연결, 데이터베이스 쿼리 실행 등에서 발생할 수 있는 예외가 해당됩니다.특징컴파일 시점 체크: 메서드 선언에서 throws 키워드를 사용하여 명시적으로 선언해야 함 → 컴파일러가 예외 처리 여부를 체크하고 처리하지 않는 경우 예외 발생명시적 처리: 체크드 예외는 반드시 try-catch..

스터디/CS 2025.04.07

[CS] 자바의 final, finally, finalize

final자바의 final 키워드는 변수, 메서드, 클래스에 사용될 수 있으며 변경 불가능성을 부여합니다. 이 키워드는 코드의 안정성과 예측 가능성을 높이는데 중요한 역할을 합니다.사용법final 변수특징: final 변수는 처음 초기화 된 후에는 값을 변경할 수 없음 → 상수처럼 작동public final int num = 10;num = 20; // 컴파일 에러 발생final 메서드특징: final 메서드는 하위 클래스에서 오버라이드 할 수 없음 → 메서드의 기본 동작을 보존하기 위해 사용class Parent { public final void print() { System.out.println("final method"); }}class Child extends Parent..

스터디/CS 2025.04.04

[백준] 요세푸스 한 번 더! JAVA

[백준] 요세푸스 한 번 더! - GOLD II 6523번접근map풀이오랜만의 백준 문제인데 팀원이 재밌다고 공유해 준 문제이다. N명의 사람이 원탁에 앉아 수식을 통해 다음 술 마실 사람을 정하고 똑같은 사람이 3번 걸렸을 때 술자리가 종료되는데 그때 술을 마시지 않았던 사람의 수를 구하는 문제이다.  문제 내용만 보면 정말 쉬워 보이는데 재밌을 거라는 뜻이 처음엔 뭔지 몰랐으나 알게 되었다. 로직은 정말 간단하게 map을 사용해 술 마신 사람과 횟수를 저장하고 3번이 되면 술 마신 사람들 수를 전체 인원에서 빼면 구할 수 있을 거 같았다. 다만 사람의 수가 최대 10의 9 제곱으로 10억 명까지 존재가 가능하기 때문에 다음 술 마실 사람의 번호를 구하는 ax^2+b mod N 이 수식에서 오버플로우가..

[CS] Java String, StringBuilder, StringBuffer 차이

String자바의 문자열을 다루는 클래스로 불변(immutable)입니다. 한 번 생성된 String 객체의 내용은 변경할 수 없고 새로운 String 객체를 생성하여 참조를 변경할 수 있습니다.주요 특징불변성(Immutability): String 객체는 생성 후 내용을 변경할 수 없는 불변성 객체String pool: 문자열 리터럴로 생성된 String 객체는 문자열 상수풀에 저장되어 메모리 효율을 높이고 동일한 문자열에 대해 여러 참조가 같은 메모리 주소를 가리킬 수 있게 함Thread-Safe: String은 불변성으로 객체의 내용이 변하지 않기 때문에 멀티스레드 환경에서 여러 스레드가 동시에 같은 String 객체를 읽어도 안전하게 동작final 클래스: String 클래스는 final로 선언되..

스터디/CS 2025.03.28

[CS] 자바 문자열 할당 방식

문자열을 리터럴로 할당하는 것과 객체로 할당하는 것의 차이는 new 키워드의 사용 여부로 구분할 수 있고 new 키워드의 사용 여부에 따라 메모리 할당과 객체 참조 방식이 달라짐리터럴 할당큰따옴표 안에 문자열을 직접 입력하는 방식메모리 저장 위치: 문자열 상수 풀(String Constant Pool) → 힙 영역의 일부객체 생성: 동일한 문자열 리터럴이 여러 번 사용되면 동일한 메모리 주소 참조비교: == 연산자를 사용한 비교 시 동일한 리터럴은 true 반환String str1 = "리터럴 할당";String str2 = "리터럴 할당";System.out.println(str1 == str2); //true문자열 상수 풀은 메모리에서 문자열을 중복 저장하지 않도록 하여 메모리 효율을 높임처음으로 특..

스터디/CS 2025.03.27

[CS] 객체 지향 프로그래밍 특징

객체 지향 프로그래밍(OOP)의 주요 특징 캡슐화, 상속, 다형성, 추상화가 존재1. 캡슐화 (Encapsulation)객체의 상태와 행동을 하나로 묶고, 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 제한하는 것을 의미목적외부에서 객체의 내부 데이터를 수정하지 못하게 하여 데이터 보호 → 무결성 유지캡슐화된 객체는 다른 프로그램에서 재사용 가능 → 재사용성 향상객체의 내부 구현을 숨겨 사용자는 사용 방법만 알고 구현에 대해 신경 쓸 필요 없음 → 복잡성 감소캡슐화 방법접근 제한자 사용:private: 객체 내부에서만 접근 가능protected: 객체 내부와 상속받은 자식 클래스에서 접근 가능public: 외부에서 접근 가능Getter & Setter 사용: 객체의 내부에 직접 접근하지 않고 메서드..

스터디/CS 2025.03.26

[CS] Garbage Collection

1. 가비지 컬렉션 (Garbage Collection) 이란?프로그램에서 더 이상 사용되지 않는 메모리를 자동으로 회수하여 메모리 관리를 효율적으로 수행하는 기술2. 왜 필요한가?메모리 누수 방지: 수동 메모리 관리 시 발생할 수 있는 메모리 누수를 자동으로 관리해 방지메모리 안전성: 개발자가 메모리 주소를 직접 관리할 필요가 없어 잘못된 메모리 접근이나 해제로 인한 오류가 줄어듬생산성 향상: 메모리 관리에 대한 부분을 개발자가 고려하지 않아도 됨3. 동작 방식주로 mark-and-sweep 알고리즘을 기반으로 수행 → Mark, Sweep 단계로 나뉨Mark Phase: 프로그램의 루트 객체에서 시작하여 이 객체들이 참조하는 모든 객체를 표시 → 모든 참조 가능한 객체 식별Sweep Phase: 표시..

스터디/CS 2025.03.25

[Programmers] 서버 증설 횟수 JAVA

[Programmers] 서버 증설 횟수 - LV 2 접근큐풀이2025 코드챌린지 2차 예선 문제로 게임 서버가 증설되는 횟수를 구하는 문제이다. 게임을 이용하는 사람이 m 명 늘어날 때마다 서버가 증설되고 k 시간 동안 유지된다. 각 시간대마다 게임을 이용하는 사람의 수가 주어지고 총 서버 증설 횟수를 구하는 문제인데 m 명 이상의 사람이 접속하는 경우 서버가 증설되어 m 명 미만의 경우 서버가 증설되지 않는 부분을 잘 체크하면 된다.  public int solution(int[] players, int m, int k) { int count = 0; Queue active = new LinkedList(); for (int i = 0; i 큐를 사용해 현재..

728x90