기술공부(10)
-
트랜잭션(Transaction)
트랜잭션(Transaction) 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말합니다. 데이터베이스에 접근하는 방법은 쿼리이므로 여러개의 쿼리들을 하나로 묶는 단위를 말합니다. 이에 대한 특성은 원자성, 일관성, 독립성, 지속성이 있으며 이를 ACID특징이라고 합니다. 원자성 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징입니다. 예를 들어 모든 쿼리문의 수행이 끝나고 커밋하였는데, 문제가 발생했다?? 그러면 처음 상황으로 롤백해야 합니다. 이러한 경우에 쿼리문들은 적용이 되지 않아야 합니다. 이를 보장하는게 원자성 입니다. 커밋 : 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어(트랜잭션 단위로 실행되며 변경된 내용이 영구적으로 저장됨을 의미) 롤백 : ..
2024.04.21 -
Firebase Auth
오늘의 포스팅은 Firebase Authentication에 대한 것입니다. 제가 진행했던 프로젝트들에서 개인정보 관련 기능을 구현할 때 사용했던 API입니다. 사용법이 꽤 간편해서 애용해왔던 API입니다. Google의 포괄적인 앱 개발 플랫폼으로 개발의 다양한 측면을 간소화하여 시간과 노력을 절약할 수 있도록 도와줍니다. 실시간 데이터베이스, 인증, 스토리지, 호스팅 및 기타 기능을 제공하여 모두 단일 플랫폼에서 관리할 수 있습니다. Firebase Auth(파이어베이스 인증) 앱에서 사용자 인증 시 피룡한 백엔드 서비스와 사용하기 쉬운 SDK, 기성 UI 라이브러리를 제공합니다. 비밀번호, 전화번호, 인기 제휴 ID공급업체(Google, Facebook, Twitter 등)를 통해 인증이 지원됩니다..
2024.04.07 -
객체지향 프로그래밍(SOILD)
객체지향프로그래밍이란?(OOP. Object-Oriented Programming) 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언되누메서드를 활용하는 방식 -> 설계에 많은 시간이 소요되며 처리 속도가 다른 프로그래밍에 비해 느리다. 특징 1. 추상화 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추리는 것을 의미한다. 2. 캡슐화 객체의 속성과 메서드를 하나로 묶고 일부를 감추어 은닉하는 것을 말한다. 3. 상속성 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추사, 확장하는 것을 말한다 -> 코드 재사용, 계층간의 관계 생성, 유지 보수성 에서 중요 3. 다형성 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말한다. - 오버로딩 ..
2024.03.13 -
지수 백오프(Exponential Backoff)
개념 재시도는 '이기적'이다. 재시도를 시도하면 서버 시간을 더 많이 소비하기 때문이다. 재시도 요청 수 가 적을 때에는 문제가 되지 않지만 장애가 발생한 경우에는 재시도가 부하를 줄 수 있다. 이를 방지하기 위해 많이 사용하는 방식이 '지수 백오프'이다. 이 방식은 요청이 실패할 경우 문제를 해결하고, 과도한 리소스 사용을 방지하는데 유용하다. 방식 즉각적으로 재시도하는 대신 재시도 간에 일정한 수준의 대기시간을 부여한다. 이 시간을 부여하는 방식에서 일반적인 패턴이 '지수 백오프'로 매 시도 후에 대기 시간이 기하급수적으로 증가한다. 이는 매우 긴 백오프 시간으로 이어질 수 있기 때문에 최대값을 설정하여 이를 방지한다. 지터(Jitter) '지수 백오프' 를 사용하면 재시도 하는 요청이 분산되어 시스..
2024.03.05 -
@NoArgsConstructor(access=Level.PROTECTED)
@NoArgsConstructor = 아무런 매개변수가 없는 생선자를 생성한다. 왜 권한을 PROTECTED로 설정했을까?? 엔티티의 연관관계에서는 지연 로딩의 경우 실제 엔티티가 아닌 프록시 객체를 통해서 조회를 한다. -> 연관관계의 엔티티를 조회할때 @OneToMany나 @MantToMany와 같은 연관된 엔티티가 여러개일 경우 사용되는 디폴트 전략이다. -> 사용법 : @ManyToOne(fetch=FetchType.LAZY) 이어서 프록시 객체를 사용하기 위해서 JPA 구현체는, 실제 엔티티의 기본 생성자를 통해서 프록시 객체를 생성하는데, 이때 접근 권한이 private이면 프록시 객체를 생성할 수 없게 된다. -> 즉시 로딩으로 구현하면 프록시 객체가 아닌 실제 엔티티를 생성하므로 문제가 생..
2023.11.26 -
AOP(Aspect Oriented Programming)/Spring
AOP란? ◆ 관점 지향 프로그래밍이라고 불린다 ◆ 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미이다. 핵심 비즈니스 로직이든, 부가 기능의 로직이든 하나의 객체로 분리하는데 그치는 객체지향 프로그래밍을 보완하기 위해 쓰인다. 핵심적인 관점 ◆ 개발자가 적용하고자 하는 핵심 비즈니스 로직이다. 부가적인 관점 ◆ 애플리케이션을 관통하는 부가 기능 로직 -> 횡단 관심사(로깅, 트랜잭션, 보안) ◆ DB연결, 로깅, 파일 입출력 등이 있다. 다양한 AOP적용 방법 ◆ 컴파일 시점 적용 : AspectJ컴파일러가 일반 .java파일을 컴파일 할 때 부가기능을 넣어서 .class 파일로 컴파일해주는 것을 의미한다. 이 동작을 위빙이라고 부른다. ◆..
2023.11.20