본문 바로가기

전체 글

(198)
[동시성] 동시성 문제 해소하기(JPA)_개념 동시성은 모든 소프트웨어 시스템의 핵심적인 요구 사항이다. 이러한 동시성을 만족시킬 수 있는 소프트웨어 개발 시 겪을 수 있는 난관이 있는데, 시스템의 상태를 최신으로 유지하고 데이터베이스의 race contions(경쟁상태)나 stale state(부실 상태)를 피해야 하는 것이다. 동시성 문제란 두 개 이상의 세션이 공통된 자원에 대해서, 모두 읽고 쓰는 작업(Read -> Write)을 하려고 하는 경우 발생할 수 있는 문제를 가리킨다. 동시성 문제는 "완전한 해결"이 아닌 "적절한 해결(제어)"이다. "정확성"과 "활동성"을 어떻게 하면 모두 최대로 할 수 있을까"에 대한 고민 "활동성(빠르기)"를 포기하면 정확성을 높일 수 있고, 반대로 "정확성"을 포기하면 "활동성"을 높일 수 있다. 동시성 ..
[PostgreSql] PK, Index 추가 및 삭제 PK / INDEX PK 삭제 ALTER TABLE [테이블명] DROP CONSTRAINT [테이블명_PK]; Index 생성 CREATE UNIQUE INDEX [테이블명_PK] ON [테이블명]( 칼럼1, 칼럼2 ); 제약조건 추가 ALTER TABLE [테이블명] ADD CONSTRAINT [테이블명_PK] PRIMARY KEY USING INDEX [테이블명_PK]; Index Index 삭제 DROP INDEX [인덱스명]; Index 생성 CREATE INDEX [인덱스명] ON [테이블명] ( [컬럼명] ); Index 확인 - 테이블명 대소문자 구분 SELECT * FROM pg_indexes WHERE tablename = '[테이블명]';
[Postgresql] 제약조건 설정 및 제거 제약조건 추가 ALTER TABLE cities ADD CONSTRAINT name PRIMARY KEY(name); ALTER TABLE weather ADD CONSTRAINT city FOREIGN KEY(city) REFERENCES cities(name); // ALTER TABLE 테이블 이름 ADD CONSTRAINT 제약조건이름 PRIMARY KEY(컬럼명) 제약조건 삭제 ALTER TABLE weather DROP CONSTRAINT city; ALTER TABLE cities DROP CONSTRAINT name;
시계열 데이터 분석_TadGAN https://smilegate.ai/2021/06/01/tadgan/ 시계열 데이터 분석_TadGAN | Smilegate.AI MIT 연구팀이 개발한 TadGAN 알고리즘은 시계열 데이터를 분석하여 이상탐지를 하는데에 있어 기존에 알려진 모델들에 비해 좋은 성능을 내는 것으로 알려져 있습니다. smilegate.ai
ManyToOne 관계와 연관관계 맵핑을 효율적으로 사용하기[기본] ManyToOne 관계를 가지고 있는 자식 엔티티를 등록할 때, 단순히 외래키만을 사용하지만 엔티티 자체를 조회해서 사용하는 모습이 더러보였다. 불필요한 리소스 낭비이기 때문에 좀 더 효율적으로 연관관계를 사용하는 게 필요해 보여 정리하게 됐다. @ManyToOne 관게는 가장 흔한 관계이기 때문에, 어떻게 적절하게 맵핑하는 지를 아는 것은 App의 성능에 큰 영향을 준다. 테이블 관계 post_comment 테이블은 post테이블의 id를 외래키로 가지는 ManyToOne 관계 @Entity @Table public class PostComment { @Id @GeneratedValue private Long id; private String review; @ManyToOne(fetch = FetchT..
자바에서 스레드와 스레드풀 활용 서비스를 구현하다면 성능 측면에서의 효과를 극대화하기 위해 메서드 레벨에서 명시적인 방식으로 멀티스레드를 구현할 필요가 있다. 대용량 데이터의 처리 시간을 줄이기 위해 데이터를 분할 후 병렬로 처리 UI를 가지고 있는 애플리케이션에서 네트워크 통신을 위해 사용 다수 클라이언트의 요청을 처리하는 서버를 개발할 때 사용 특히, 외부 서비스를 반복적으로 호출해야하는 경우, 실행 순서에는 상관없이 여러 번 동일한 메서드를 호출해서 결과값을 Aggregation을 해야할 필요가 있다면 Single Thread 방식과 Multi Thread에 따라 효과 차이가 더 극명하게 드러난다. 배경 지식 프로세스와 스레드 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스(process) 라고 부른다. 사용자가 애플리케이..
[SPRING] 생성자 의존성 주입을 권장하는 이유?(Constructor Injection Vs Field Injection) 1. 단일 책임의 원칙 [객체 지향 원칙 설계의 S O L I D] 생성자의 인자가 많을 경우 코드량도 많아지고, 의존관계도 많아져 단일 책임의 원칙에 위배된다. 그래서 Constructor Injection을 사용함으로써 의존관계, 복잡성을 쉽게 알수 있어 리팩토링의 단초를 제공하게 된다. 2. 테스트 용이성 DI 컨테이너에서 관리되는 클래스는 특정 DI 컨테이너에 의존하지 않고 POJO여야 한다. DI 컨테이너를 사용하지 않고도 인스턴스화 할 수 있고, 단위 테스트도 가능하며, 다른 DI 프레임 워크로 전환할 수도 있게 된다. 3. Immutability [불변 객체] Constructor Injection에서는 필드는 final로 선언할 수 있다. 불변 객체가 가능한데 비해 Field Injecti..
[ERROR ] No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No se..