Backend/Java Spring (5) 썸네일형 리스트형 [Java] 제너릭(Generic) public class ClassName [Java] 직렬화와 역직렬화 직렬화 객체 -> 바이트 스트림 자바에서는 Serializable 인터페이스를 구현한 클래스의 인스턴스를 직렬화할 수 있다. 직렬화된 데이터는 파일로 저장하거나 네트워크를 통해 전송할 수 있다. 역직렬화 바이트 스트림 -> 객체 역직렬화는 직렬화된 바이트 스트림을 다시 자바 객체로 변환하는 과정이다. 이렇게 복원된 객체는 원래의 상태와 속성을 가지게 된다. 단점 수정 어려움: Serializable 인터페이스를 구현한 클래스를 릴리스한 후에는 해당 클래스의 구조를 수정하기 어렵다. 이로 인해 버전 관리와 호환성 문제가 발생할 수 있다. 보안 문제: 역직렬화는 보안 취약점을 가질 수 있다. 악의적인 사용자가 신뢰할 수 없는 직렬화 데이터를 역직렬화하면 애플리케이션의 보안에 위협을 가할 수 있다. 크로스 플.. [Java] 공유 중인 가변 데이터 public class SharedData { private int sharedValue = 0; public void incrementValue() { sharedValue++; } public int getSharedValue() { return sharedValue; } } 멀티 스레드 환경에서 공유 데이터 (sharedValue)에 동시 접근하면서 데이터 안정성 문제가 발생한다. 하나의 스레드에서의 연산이 원자적으로 반영되지 않을 수 있다. 아래의 방법은 스레드 간의 접근을 조정하는 방법들이다. 동기화 (Synchronization) synchronized 키워드를 사용하여 incrementValue() 메서드를 동기화하여 여러 스레드가 동시에 접근하지 못하게 한다. public synchroni.. [Spring] @Transactional 습관적으로 서비스 레이어에서 @Transactional 을 많이 사용하였다. @Transactional 에 대해 얕게 알아보면 좋을 것 같다. 원자성과 안정성 보장 트랜잭션은 원자성(Atomicity)을 보장한다. 즉, 트랜잭션 내에서 모든 작업은 성공하면 커밋하고, 실패하면 롤백된다. 이로써 데이터베이스의 안전성을 유지할 수 있다. 트랜잭션과 영속성 컨텍스트 스프링 JPA는 영속성 컨텍스트를 사용하여 엔티티 객체와 데이터베이스 간의 상호작용을 관리한다. @Transactional 이 있는 경우, db의 변경 사항을 곧바로 데이터 베이스에 업데이트 하지 않는다. 트랜잭션 종료 시, 영속성 컨텍스트는 엔티티의 상태를 확인하고 변경된 내용을 데이터베이스에 반영한다. Readonly 트랜잭션 readOnly .. [Spring] singleton scope 스프링 내부 컨테이너는 싱글톤 스코프 빈을 지원한다. public class SharedClass { private int x; public void setX(int x){ this.x = x; } public void getX(){ return this.x; } } SharedClass에 하나의 객체만 생성하였다고 생각해보자. 멀티 스레드 환경에서 sharedClass 에 동시에 접근할 때 예상되는 문제가 있었다. data consitency이다. 분명히 x값을 수정했는데 다시 보았을 때는 다른 값이 들어있을 수 있다. SharedClass sc = new ShareClass(); //A client sc.setX(3); //B client sc.setX(5); //A client System.out... 이전 1 다음