Spring19 @ControllerAdvice 우선순위 설정하기 공백 기간 동안 어떤 플랫폼에서 블로그를 운영해야 하나 고민하였는데, 결국 다시 여기로 돌아오게 되었다. 2022년에도 많은 뻘짓을 하며 훌륭한 주니어 개발자, 시니어 개발자가 되어 보자. 오늘의 Trouble 여러개의 RestControllerAdvice를 사용하는 환경에서 우선순위를 설정해주지 않아 특정 예외를 Exception을 처리하는 공통 예외 처리용 RestControllerAdvice의 메서드가 처리하는 상황 해결 방법 공통 예외 처리 RestControllerAdvice를 제외한 RestControllerAdvice 클래스에 @Order 어노테이션을 추가해 해당 어노테이션이 적용된 컴포넌트의 정렬 순서를 설정. @Order @Retention(RetentionPolicy.RUNTIME) @.. 2022. 1. 9. Spring Boot 자동 설정 오랜만에 다시 돌아온 주인장이라고 할 수 있겠다. 즈아, 바로 전 시간에는 의존성에 대해서 알아보았다. 오늘은, 스프링 부트의 또 다른 특징 중 하나인 자동설정에 대해서 알아보도록 하겠다. • 자동설정이란? Spring MVC를 사용해 프로젝트를 개발한 경험이 있다면, 아무리 간단한 웹 어플리케이션이라 하더라도 기본적으로 여러 가지의 설정이 필요하다는 것을 알 것이다. 그러나, Spring Boot가 제공하는 자동설정은 웹 어플리케이션에 사용되는 수많은 Bean들을 등록해준다. 그 비밀은 바로, Spring Boot 프로젝트 생성 시 기본으로 제공되는 메인 클래스의 @SpringBootApplication 덕분이다. @SpringBootApplication 어노테이션 안에는 다양한 설정 관련 어노테이션이.. 2021. 8. 18. Spring Boot 프로젝트 구조 지난 게시글에서는 스프링 부트 프로젝트를 생성하는 방법에 대해 알아봤다. 오늘은 생성된 스프링 부트 프로젝트의 구조에 대해서 알아보는 시간을 가져보자! • 구조 1. src/main/java 일반적인 .java 소스들이 위치한다. 2. src/main/resources 자바 소스를 제외한 XML, properties 파일들이 등록된다. src/main/resources 하위에는 static, templates라는 폴더 2개와 application.properties라는 프로퍼티 파일이 하나 존재한다. 1. src/main/resources/static HTML과 같은 정적 웹 리소스가 등록되는 폴더이다. 2. src/main/resources/templates Thymeleaf와 같은 템플릿 기반 웹 리.. 2021. 8. 7. 데이터베이스 연동 시 유의 사항 개인 프로젝트를 진행하며 데이터베이스를 연동하던 중 겪은 문제를 바탕으로 짧게 글을 쓰고자 한다. 정말 짧으니 주의 1. pom.xml에 dependency를 추가했음에도 데이터베이스 연결이 되지 않는 경우 이 경우, dependencies에 추가한 DB dependency 버전과 로컬 및 서버에서 사용하고자 하는 DB의 버전을 맞춰줘야 한다. 2. java.sql.SQLSyntaxErrorException: Unknown database [DB명] 로그에서 볼 수 있듯이 데이터베이스명을 잘못 등록한 경우 발생하는 예외이다. 나의 경우, spring-master로 DB를 생성했으나 실제 DB명은 spring_master로 생성되어 있음을 알 수 있었다. DB명을 파악하는 방법은 다음과 같다. (MySQL.. 2021. 6. 21. 4-3. Entity 매핑 (3) 1. @Column 객체의 필드를 테이블 컬럼에 매핑한다. name, nullable 속성이 주로 사용된다. 이를 생략하면 기본값이 적용된다. 따라서 자바 기본 타입일 때 nullable 속성에 예외가 존재하게 된다. int와 같은 기본 타입에는 null을 입력할 수 없다. 반면, Integer와 같은 wrapper 클래스 타입에는 null을 입력할 수 있다. 따라서 자바 기본 타입을 DDL로 생성할 때는 not null 제약 조건을 추가하는 것이 안전하다. 다행히 JPA는 이런 상황을 대비해 DDL 생성 기능을 사용할 때 자바 기본 타입에는 not null 제약 조건을 추가한다. @Column의 nullable 속성 값의 default는 true이므로 not null 제약 조건을 기본적으로 추가하지는 .. 2021. 6. 16. 4-2. Entity 매핑 (2) 4. 기본 키 매핑 1. 직접 할당 기본 키를 어플리케이션에서 직접 할당하는 기본 키 매핑 방법이다. 기본 키를 직접 할당하기 위해선 @Id로 매핑한다. @Id @Column(name = "id") private String id; @Id를 적용할 수 있는 자바 타입은 다음과 같다. 1. 자바 기본형 2. 자바 wrapper 클래스 3. String 4. java.util.Date 5. java.sql.Date 6. java.math.BigDecimal 7. java.math.BigInteger 기본 키 직접 할당 전략은 em.persist()로 엔티티를 저장하기 전에 어플리케이션에서 기본 키를 직접 할당한다. Board board = new Board(); board.setId("board1"); em.. 2021. 6. 11. 4-1. Entity 매핑 (1) Entity와 테이블을 매핑하기 위해서 사용되는 어노테이션들에 대해서 알아보자. 1. @Entity JPA를 사용해서 테이블과 매핑하고자 하는 클래스에는 @Entity 어노테이션이 필수로 붙어야 한다. 속성 기능 기본값 name JPA에서 사용할 Entity 이름을 지정한다. 보통 기본값인 클래스 이름을 사용한다. 만약 다른 패키지에 동일한 이름의 Entity 클래스가 있다면 이름을 지정해 충돌을 방지한다. 클래스 이름을 그대로 사용. JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문에 기본 생성자는 필수적으로 가져야 한다. (전달인자 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 fi.. 2021. 6. 9. 3-3. Flush와 준영속 1. Flush 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것을 말한다. (영속성 컨텍스트에 보관된 엔티티를 지우는 것이 아님) * 플러시 실행 과정 1. 변경 감지가 동작, 영속성 컨텍스트에 있는 모든 Entity 스냅샷과 비교해 수정된 Entity를 찾는다. 수정된 Entity는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 2. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. * 플러시 방법 1. em.flush()를 직접 호출 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용하지 않음. 2. 트랜잭션 커밋 시 플러시 자동 호출 DB에 변경 내용을 SQL로 전달하지 않고 트랜잭션만 커밋하면 어떤 데이터도 DB에 반영되지 않는다. 그렇기에 트랜.. 2021. 6. 7. 3-1. 영속성 컨텍스트와 Entity 생명주기 1. 영속성 컨텍스트 (Persistence Context) Entity를 영구적으로 저장하는 공간 및 환경이라고 생각하면 된다. EM(Entity Manager)는 Entity를 저장하거나 조회하면 EM은 PC(Persistence Context)에 Entity를 보관하고 관리한다. PC는 EM을 생성할 때 하나 만들어진다. PC에 접근하고 관리하기 위해서는 EM을 통해야 한다. 2. Entity의 생명주기 1. 비영속 Entity 객체를 생성한 후 아직 저장하지 않은 상태이다. 따라서, PC와 DB와는 전혀 관련이 없다. Member member = new Member(); member.setId("sample1"); member.setUserName("test1"); 2. 영속 EM을 통해서 Ent.. 2021. 5. 26. 이전 1 2 3 다음