728x90

Java 176

[Spring] Lua Script (Redis)

지난 포스팅에서 Spring의 Redis 구현체인 Lettuce와 Jedis에 대해서 정리를 하고 Redisson 구현체에 대한 정리를 할 차례였지만 Lua Script의 필요성을 느끼게 된 계기가 생겨 작성하게 되었다. 무엇이 문제인가?티켓 예매 서비스를 클론 코딩하며 예매에 대한 동시성 제어를 Redis를 통해 선점 방식으로 구현한 적이 있었다. Redis는 단일 스레드 방식으로 여러 요청이 들어와도 순차적으로 처리될 수 있고 원자적 연산을 제공해 예매 시 좌석 선점 (좌석 값 감소)을 통해 간단하고 가볍게 동시성 제어를 할 수 있었다. public void safeDecrement(Long scheduleId, int quantity) { Long result = redisTemplate.o..

백엔드/Spring 2025.10.22

[TOY] 여행지 추천 서비스 - API

여행지 추천 웹 서비스API를 뽑아보자ERD까지 설계를 하고 나서 API 설계를 한 뒤 개발에 들어가려고 했다. API를 뽑으려면 대략적으로 어떻게 화면을 구성할 건지가 있어야 하는데 프론트와 관련된 부분은 AI에게 모두 일임할 예정이었기에 간단한 와이어 프레임만 만들었다. 디자인도 AI가 알아서 잘 뽑아주니 어떤 화면이 있어야 한다만 있으면 되는데 그것도 요새 AI가 잘해주기 때문에 클로드에게 만들어달라고 했다.메인화면이 될 와이어 프레임이다. 시즌별 추천 필터링도 추가할 예정이기에 그 부분이 더 추가되지 싶다. 추천을 받으면 나오는 화면이다. 일수와 시즌을 체크하면 해당하는 여행지를 나라별로 모아서 보여줄 것 같다.추천받은 나라 중 아무거나 클릭하면 이렇게 해당 나라의 세부 여행지를 보여주고 여행지를..

[Effective Java] 2주차 - Item 6~9

Effective Java 2주 차아이템 6. 불필요한 객체 생성을 피하라아이템 7. 다 쓴 객체 참조를 해제하라아이템 8. finalizer와 cleaner 사용을 피하라아이템 9. try-finally보다는 try-with-resources를 사용하라Item 6: 불필요한 객체 생성을 피하라객체를 새로 생성하는 것은 비용이 따르는 작업이다. 특히 같은 기능을 여러 번 수행하거나 동일한 값을 반복적으로 사용하는 경우 매번 새로운 객체를 만드는 것은 메모리와 CPU 낭비로 이어진다.따라서 재사용 가능한 객체는 가능한 재사용하는 것이 성능과 가독성 측면에서 효율적이다.정규식 Pattern 문제public static boolean isValidEmailBad(String email) { return ..

카테고리 없음 2025.09.08

[Effective Java] 1주차 - Item 1~5

Effective Java 1주 차 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라아이템 5. 자원을 직접 명시하지 않고 의존 객체 주입을 사용하라Item1: 생성자 대신 정적 팩토리 메서드를 고려하라생정자를 사용하는 대신 정적 팩토리 메서드를 만들어 사용함으로써 얻을 수 있는 장점과 단점이 존재한다. 기본적으로 코드 예시에 사용될 User 클래스이다.아래에 나올 예시 코드들은 User 클래스 내부에 선언된 코드들이다. public class User { private String name; priva..

[Programmers] 아이템 줍기 JAVA

[Programmers] 아이템 줍기 - LV 3접근bfs풀이좌표 평면에 여러 개의 사각형이 주어지고 겹쳐진 사각형의 외부 테두리만 따라 이동하며 아이템을 주우러 갈 때 최단 경로를 구하는 문제이다. 간단하게 생각하자면 모든 사각형의 테두리만 2차원 배열에 매핑한 뒤 매핑된 경로만 bfs를 사용해 따라가면 된다. 문제는 좌표를 그대로 가져 쓰면 (4, 5) (4, 6)처럼 움푹 들어간 부분을 제대로 표시할 수 없다. 각 좌표마다 점을 찍어 매핑하기 때문에 (3, 5)와 (3, 6) 은 좌표상에서 붙어있는 것처럼 보이기 때문에 정확하게 구현을 하기 위해선 좌표를 두 배로 확장해주어야 한다. private static final int[] dx = {0, 0, 1, -1}; private sta..

[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
728x90