목록내일배움캠프/TIL (18)
공부하는 블로그

스프링을 배우고 나서부터, System.out.println() 을 잘 쓰지 않는 듯 하다. 어짜피 콘솔에 기록을 남기는 건 똑같은데 왜 자바에서 기본적으로 제공해주는 sout을 쓰지 않고 slf4j를 사용하는 걸까? 1. Log 레벨 sout은 단순히 출력 그 이상도 이하도 아니기 때문에, 메세지를 구분하거나 중요한 정보라고 따로 분류를 하기 어렵다. 반면, 로그는 레벨을 사용해 메세지의 중요도와 성격을 명확히 구분할 수 있다. 1) TRACE : 가장 상세한 로그 레벨로, 매우 세부적인 정보나 애플리케이션의 흐름을 추적할 때 사용한다. 2) DEBUG : 디버깅 목적으로 사용되는 레벨로, 애플리케이션의 상태를 이해하기 위해 유용한 정보를 제공한다. 보통 개발 환경에서 주로 사용되며, 운영 환경에..

객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회(지연 로딩)할 수 있다. 하지만 자주 함께 사용되는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적(즉시 로딩)이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 지연 로딩어떤 엔티티를 데이터베이스에서 조회할 때 연관된 엔티티들을 함께 조회하지 않고, 만약 그 연관된 엔티티가 실제 사용되는 시점까지 조회를 지연하는 방법. 프록시 객체 지연 로딩을 사용..
개념을 제대로 안 익힌 것인지 새로운 걸 학습할 때마다 머릿속에 있던 개념들이 흐려져가서 다시 정리 엔티티엔티티는 데이터베이스 테이블에 매핑되는 클래스. 다른 엔티티와의 연관관계, 상태 전이를 관리할 수 있다. 즉, 데이터베이스 테이블과 일대일로 매핑되는 객체로서, 데이터베이스의 레코드를 자바 객체로 표현한 것. 선언할 때는 JPA 어노테이션 @Entity로 선언, 각 필드는 테이블의 각컬럼에 매핑됨. 영속성 컨텍스트엔티티 객체를 관리하는 일종의 '저장소'. 엔티티 객체의 생명 주기를 관리하며, 엔티티와 데이터베이스 사이의 상태를 동기화.영속성 컨텍스트는 데이터베이스 그 자체가 아니며 일종의 캐시와 같은 역할을 함. 주요 역할1) 엔티티 저장 : persist() 메서드를 통해 엔티티를 영속성 컨텍..

JPA가 제공하는 기능은 크게 (엔티티와 테이블)을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 볼 수 있다. 여기서 매핑한 엔티티를 실제 사용하는 부분이 엔티티 매니저이다. 엔티티 매니저 : 엔티티를 저장하는 가상의 데이터 베이스 엔티티 매니터 팩토리는 여러 쓰레드에서 동시에 접근해도 안전하지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로, 쓰레드간에 절대 공유하면 안 된다. 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경 em.persist(member) 엔티티 매니저를 통해 회원 엔티티를 영속성 컨텍스트에 저장한다. 엔티티 생명주기 : 비영속(new) : 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed) : 영속성 컨텍스트에 저장된 상..
스프링 관련 글들을 볼 때 많이 봤던 IoC와 DI를 공부하게 되었다. 1. 좋은 코드란?논리가 간단해야함. 중복되는 코드를 제거하고 표현이 명확해야 한다. 누구나 쉽게 수정할 수 있게 가독성이 좋아야 한다. 의존성을 최소화 한다.(느슨한 결합)기능을 추가하더라도 크게 구조의 변경이 없어야 한다. IoC와 DI를 활용하면 이러한 좋은 코드를 짤 수 있다고 한다. 2. 디자인 패턴과 설계 원칙 디자인 패턴 : 소프트웨어에서 자주 발생하는 문제들을 해결하기 위한 재사용 가능한 솔루션 설계 원칙 : 소프트웨어 시스템을 설계할 때 따라야 할 일반적인 규칙이나 가이드라인 여기서 IoC는 디자인 패턴이고 DI는 설계 원칙이고, DI 패턴을 사용해서 IoC 설계원칙을 구현하고 있다. 3. DI(Dependency..

간단한 메모장 CRUD를 구현하기 위해 사용자의 요청을 서버가 담아서(Post) 다시 반환하는 과정(Get)을 학습했다. 먼저 DTO라는 개념이 있는데, DTO (Data Transfer Object) 데이터 전송 및 이동을 위해 생성되는 객체를 의미한다, Client에서 보내오는 데이터를 객체로 처리할 때 사용된다, DB와의 소통을 담방하는 Java 클래스(Entity)를 그대로 Client에 반환하는 것이 아니라 DTO로 한 번 변환한 후 반환할 때도 사용된다. 예를 들어 메모장에 이름, 내용을 적고 등록 버튼을 누르면 RequestDto의 username, contents 필드에 해당 값들이 담아진다. 그리고 이를 서버에서 DB와 연결된 Entity에 넘겨줘서, DB에 저장을 하게된다. 그리..