여행 동행 참여에 대해 동시성 문제 해결하고 성능 비교 해보기
·
💻 Dev/Spring
개요현재 여행 동행 모집 프로젝트를 진행하는 중에, 동행 참여에 대한 동시성 이슈가 발생했다. 1. 동시성 문제 발생 원인여행 동행 모임 참여 로직은 다음과 같다.멤버가 우동(동행 모임)에 대해 참여 요청을 보낸다.참여할 수 있는지 유효성 검증을 한다. (인원 체크, 기존 참여 여부 확인 등)우동에 대기자로 등록한다.관리자가 승인하면 동행에 최종 참여된다.한 우동에 대해 대기자는 최대 5명만 가능하기 때문에, 처음에는 대기자 객체를 생성할 때 대기자 수를 체크했다.public class WaitingMember { public static WaitingMember of(Udong udong, Long memberId, int currentWaitingMembersCount) { ..
로또 코드 예제로 이해해 보는 객체 지향 설계 5원칙(SOLID)
·
💻 Dev/Java & OOP
스프링 입문을 위한 자바 객체 지향의 원리와 이해를 보고 5장은 꼭 정리해야겠다 싶어서 예시와 함께 이해해 보려고 노력했다! 이 원칙들은 주기적으로 봐야 할 것 같아서 포스팅한다...! 개요SOLID는 객체 지향 프로그래밍의 설계 원칙으로, 로버트 C. 마틴(Robert C. Martin)이 제시한 다섯 가지 원칙이다. 마이클 페더스(Michael Feathers)가 이를 두문자어로 정리하여 널리 알려졌다. SOLID의 5대 원칙SRP(Single Responsibility Principle): 단일 책임 원칙OCP(Open Closed Principle): 개방 폐쇄 원칙LSP(Liskov Substitution Principle): 리스코프 치환 원칙ISP(lnterface Segregation Pr..
싱글톤 패턴은 thread safe하지 않다?(개선 방식 4가지)
·
💻 Dev/Java & OOP
싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고, 어디서든 이를 접근할 수 있도록 하는 디자인 패턴이다.나도 기본적인 싱글톤 구현 방식으로만 알고 있었는데, 이 방식이 멀티 스레드 환경에서 안전하지 않다는 얘기를 듣고 알아보게 되었다!  기본 싱글톤 구현 (Lazy Initialization)class Singleton { // 싱글톤 클래스 객체를 담을 인스턴스 변수 private static Singleton instance = null; // 생성자를 private로 선언 (외부에서 new 사용 X) private Singleton() {} // 외부에서 정적 메서드를 호출하면 그제서야 초기화 진행 (lazy) public static Singleton getIns..
JSP 파일이 브라우저 화면에 출력되기까지의 과정은?
·
💻 Dev/JSP & Servlet
1. 클라이언트 요청브라우저가 JSP 파일에 대한 요청을 보낸다.예를 들어 사용자가 http://example.com/example.jsp를 입력하면, 이 요청이 서버로 전달된다. 2. 웹 서버가 요청 처리웹 서버(Apache, Nginx 등)는 요청을 수신한 뒤 이를 서블릿 컨테이너(Tomcat, Jetty 등)에 전달한다. 서블릿 컨테이너는 JSP 파일을 처리할 준비를 한다. 3. 필터(Filter) 동작필터는 클라이언트 요청과 서블릿 응답 사이에 끼어들어 추가 작업을 수행하는 역할을 한다.예를 들어 다음과 같은 작업을 처리할 수 있다 인증 및 권한 검사: 요청이 적절한 사용자로부터 온 것인지 확인로깅: 요청 및 응답 정보를 기록데이터 압축: 응답 데이터를 압축하여 클라이언트로 전송요청 데이터 전처리..
JDBC 드라이버 로딩으로 알아보는 Class.forName
·
💻 Dev/Java & OOP
Class.forName("com.mysql.cj.jdbc.Driver");// 데이터베이스 연결 Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydatabase", "root", "password" );JDBC 드라이버를 로딩할 때 Class.forName 이라는 메서드를 사용하는데 이 메서드는 어떤 역할을 하는 메서드일까?Java Reflection에서 제공하는 기능 중에 하나기도 하고, 클래스 로더랑도 관련이 있으니 알아보자. Class.forName()란?Class.forName 메서드는 Java에서 클래스 이름을 문자열로 제공하여 해당 클래스를 로드하고 초기화하는 역할을 한다. JDBC 드라이버..
스레드 로컬(Thread Local)이란?
·
💻 Dev/Java & OOP
스레드 로컬이란?ThreadLocal은 멀티스레드 환경에서 각 스레드가 독립적인 데이터를 저장하고 관리할 수 있도록 지원하는 메커니즘이다. 여러 스레드가 동시에 실행되는 애플리케이션에서는 공유 데이터로 인해 경쟁 상태(race condition)가 발생할 수 있다.이러한 문제를 방지하기 위해 데이터를 스레드 간에 독립적으로 관리해야 할 때 ThreadLocal을 사용할 수 있다.  스레드 로컬이 필요한 이유1. 스레드 간 데이터 충돌 방지멀티스레드 환경에서 동일한 데이터를 여러 스레드가 동시에 접근하면, 의도치 않은 결과가 발생할 수 있다.(ex. race condition) ThreadLocal은 각 스레드가 독립적인 데이터를 유지할 수 있도록 하여 이런 충돌을 방지한다. 2. 세션 및 사용자 정보 관..