본문 바로가기
반응형

Spring44

[Spring] 의존관계 높은 프로그램의 특징 의존성 주입 (DI) 은 객체가 필요로 하는 의존 객체를 외부에서 주입 하는 방식으로 객체 간의 결합도를 낮추는데 도움을 준다.의존성 주입을 통해 객체는 자신이 사용할 의존 객체를 직접 생성하지 않고 외부에서 생성된 객체를 주입받기 때문에 객체간의 결합도를 낮추는데 도움을 준다.이로 인해 객체는 자신의 구현에만 집중할 수 있으며, 변경에 유연하게 대응할 수 있다.생성자주입 (주로사용)객체 생성 시점세터주입인터페이스 주입생성자 주입이 주로 사용되는 이유필드 주입의 단점외부에서 수정 불가능수정자 주입의 단점변경의 가능성을 열어두기 때문에, 다른 곳에서 임의로 객체를 변경할 수 있어 에러가 발생할 위험이 높다.객체의 불변성 확보테스트 코드 작성의 편리함순환 참조 방지개발자의 의존성 주입 실수 방지 (final.. 2024. 8. 22.
[Spring/JPA] SpringContext, ApplicationContext, BeanFactory 관계 그리고 SpringSecuritycontext 와 SpringContext 의 관계 최근 제 주변 코딩 잘하는 사람이 면접을 보고 왔는데 질문이  SpringSecuritycontext 와 spring context 라이프사이클을 섞어서 설명하고 포크되는 순간과 어떻게 동작하는가였습니다.  질문을 듣는 순간 머리가 멍 해졌고 생각해보지도 못한 질문이였습니다.오늘은 그 라이프사이클을 파악하면서, Spring Context, Application Context, SpringSecurityContext 에 대해 알아보도록 하겠습니다. 일단 저 문제에 대한 정답을 먼저 알려드리자면  Spring Application 이 시작될때 ApplicationContext가 초기화 되고 Application의 설정 정보와 빈 정보를 로드하고, 모든 빈을 생성 및 초기화 하는 단계입니다. 이 때 Spri.. 2024. 7. 10.
[Spring/JPA] Entity 에서 UUID vs AutoIncrement Entity를 작성하면  보통 95%의 사람들은 Auto Increment를 쓴다. 이로인해 많지는 않지만 문제가 생기는데외부에서 해당 시스템 PK를 예측하기 쉬워져서 SQL Injection 문제Sequence, auto_increment는 중앙 집중식으로 값을 생성하는 방식이므로 DB에 의존적이게 되어 확장성이 제한되는 문제서비스 폭풍성장 시, ID 고갈되는 문제 (BIGINT 최댓값은 4,294,967,295 이고, unsigned BIGINT라면 18,446,744,073,709,551,615)데이터베이스 변경의 어려움DB가 2대 이상일 때 중복 문제 이런 문제를 해결하고자 나온게 UUID 값을 PK로 설정하는것이다. UUID는 범용 고유 식별자라는 뜻으로 128bit의 긴 고유값을 PK로 사용한.. 2024. 7. 1.
[Spring/JPA] 로그 관리 로그 : sout(”Hello world”); ⇒ 중요도 분리가 안된다. ⇒ 중요도에 따라 로그레벨 관리 해야한다.debug 모드 (모든 로그가 다 나온다.)log.debug(”debug 모드입니다.”)info 모드log.info(”일반로그”)error모드 (가장 엄격 , error 로그만 나온다.)log.error(”일반로그”)로그 라이브러리 (log4j, logback)로그관리 (debug, info, error)로그파일관리.ymllogging: level: root: info # info로 설정 # trace  사용방법 1.@RestController@Slf4j // log 어노테이션 (롬복)public class LogTestController { @GetMapping("log/.. 2024. 6. 25.
[Spring/JPA] Persist() , flush() 가 뭐야 ? JPA는 요청이 들어오면 EntityManagerFactory 에서 EntityManager 를 생성한다. EntityManager: 엔티티를 관리하는 역할을 수행하는 클래스EntityManager 는 내부적으로 DB 커넥션 풀을 사용해서 DB에 붙는다. 그러면 어떤 방식으로 EntityManager 는 Entity들을 관리를 할까 ?? EntityManager 내부에 영속성 컨텍스트(Persistence Context)라는 걸 두어서 Entity들을 관리한다. 영속성 컨텍스트 : Entity를 영구 저장하는 환경애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. EntityManager 를 통해 엔티티를 저장하거나 조회하면 EntityManager는 영속성 컨텍스.. 2024. 5. 24.
Redis 부숴버리기(5) 레디스를 사용한 동시성 문제 해결 - 분산 락 트랜잭션이 동시에 실행됐을 때 발생할 수 있는 문제 관련한 상황을 DB동시성 문제 라고 한다.1. Dirty Read한 트랜잭션이 다른 트랜잭션이 수정 중인 데이터를 읽을 수 있는 문제아직 commit되지 않은 데이터가 읽힘으로서, 추후 rollback 될 가능성이 있는 데이터 read (실제로는 커밋을 했는데, 반영이 안됐다 라는 뜻해결방법 : Read Committed 격리성 : 즉 커밋된 내용만 읽겠다는 뜻 2. Non-Repeatable Read .(UPDATE 문제)mariaDB의 기본 설정은 Repeatable Read 이다. 한 트랜잭션에서 동일한 조회 쿼리를 두 번 이상 실행할때에, 그 중간에 다른 트랜잭션에서 데이터를 수정하여 한 트랜잭션의 결과가 다르게 나타나는 문제 예시) 재고 업데이.. 2024. 5. 16.
반응형