실무에서는 우리가 흔히 사용하는 System.out.println()과 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하거나 디버깅하지 않고, 별도의 logging 라이브러리를 사용하여 디버깅이나 타임스탬프 등 정해진 양식에 맞추어 화면 상이나 파일 로그를 남길 목적으로 사용합니다.그럼, 본격적으로 logging에 대해 알아보겠습니다.logging의 종류logging 관련 프레임워크는 대표적으로 log4j, logback, log4j2 그리고 그것을 통합하여 인터페이스로 제공하는 SLF4J 라이브러리가 있습니다. log4j → logback → log4j2 순으로 등장하였으며, logback과 log4j2는 둘다 log4j를 기반으로 하고 있기 때문에 설정이나 사용 방법이 유사합니다. log4j는 20..
RequstBody, RequestParam, ModelAttribute란?@RequestParam@RequestParam은 1개의 HTTP 요청을 받기 위해 사용합니다. @RequestParam은 필수 여부가 true이기 때문에 반드시 파라미터가 전송되어야 합니다. 파라미터가 전송되지 않을 시 400 Error가 발생합니다. 반드시 필요한 값이 아니라면 required 옵션을 false로 지정하면 되고 defaultValue 옵션을 사용하면 기본 값을 지정할 수 있습니다. @RequestBody@RequestBody는 클라이언트가 전송하는 JSON 형태의 HTTP Body를 Java 객체로 변환시켜 주는 역할을 합니다. @RequestBody로 받는 데이터는 Spring에서 관리하는 Message C..
DAO(Data Access Object)DAO는 실제로 DB의 Data에 접근하기 위한 객체입니다.실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행합니다.Service와 DB를 연결하는 고리 역할을 합니다.Repository package가 바로 DAO입니다.@Repository@RequiredArgsConstructorpublic class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(..
Spring의 Lombok 라이브러리는 불필요한 코드와 작업을 줄여주는 좋은 라이브러리이지만, 무턱대고 사용할 경우 코드를 이해하는데 어려울 수 있습니다. Lombok 라이브러리에는 생성자를 자동으로 생성해주는 어노테이션이 3가지 있습니다.@NoArgsConstructor: Default 생성자를 생성합니다.@AllArgsConstructor: 모든 필드 값을 파라미터로 받는 생성자를 생성합니다.@RequiredArgsConstructor: final이나 @NonNull로 선언된 필드만을 파라미터로 받는 생성자를 생성합니다. @NoArgsConstructor@NoArgsConstructor 어노테이션을 사용하면 클래스에 명시적으로 선언된 생성자가 없더라도 인스턴스를 생성할 수 있습니다.public cla..
JPA란?JPA는 Java Persistence API의 약자로, 자바 객체를 관계형 데이터베이스에 영속적으로 저장하고 조회할 수 있는 ORM 기술에 대한 표준 명세를 의미합니다. JPA를 통해 개발자는 SQL 쿼리를 작성하지 않고도 객체를 통해 데이터베이스를 조작할 수 있으며, 객체 지향적인 코드 작성과 유지 보수성이 향상됩니다.Spring Data JPA인터페이스인 JPA를 사용하기 위해선 구현체가 필요합니다. 대표적으로 Hibernate, Eclipse Link 등이 있습니다. 하지만, Spring에서는 JPA를 사용할 때 이 구현체들을 직접 다루지 않고, 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA 기술을 다룹니다.JPA → Hiberna..
Spring JPA의 엔티티 대부분은 @Id 어노테이션을 1개 씩만 갖는 단일 키 구조를 띄고 있습니다.하지만, 필요에 따라 단일키가 아닌 복합키로 기본 키를 설정해야 할 때가 있습니다. 이번에는 JPA를 통해 복합키를 지정하는 방법을 알아보겠습니다.Spring JPA에서 복합키를 지정하는 방법에는 2가지가 있습니다.@EmbeddedId을 사용하는 방식 (→ 객체 지향 방식에 가깝습니다.)@IdClass을 사용하는 방식 (→ DB방식에 가깝습니다.?) @EmbeddedId다음과 같이 기본키가 (emp_name, emp_no)의 복합키로 이루어진 emp 테이블이 있습니다.create table emp ( emp_name varchar(255) not null, emp_no integer not ..
IoC(=Inversion of Control) ContainerIoC란 직역 하자면 "제어의 반전"이라는 뜻이며, 프로그램의 제어를 다른 대상이 맡는 것을 의미합니다. IoC Container는 스프링 컨테이너 또는 DI 컨테이너라고 불립니다.이 스프링 컨테이너는 스프링 프레임워크의 핵심 컴포넌트입니다.스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공합니다.스프링에서는 자바 객체를 빈(Bean)이라고 합니다. 즉, 스프링 컨테이너(=IoC Container)는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거)하며, 생성된 빈에게 추가적인 기능을 제공하는 것입니다. 스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있..
DI(=Dependency Injection)DI란 의존 관계 주입 또는 의존성 주입이라 불립니다. Spring의 3가지 핵심 프로그래밍 모델(AOP, DI, IoC) 중 하나 입니다. DI는 외부에서 객체 간의 관계(의존성)을 결정해 주는데 즉, 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입시켜 주는 방식이라고 할 수 있습니다. 이를 통해서 객체 간의 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있습니다. Spring에서의 DI 방법Spring에서 의존 관계를 주입(DI)하는 방법에는 3가지가 있습니다.Spring DI 3가지 방법Construct Injection (생성자 주입)Field Injection (필드 주입)Setter Injection (Setter 주입)Spr..
- Total
- Today
- Yesterday