Spring Framework (27) 썸네일형 리스트형 [Spring] Note3. @JsonProperty @JsonProperty는 Entity를 Json형태로 직렬화하는 경우 속성의 이름을 설정할 수 있도록 도와주는 어노테이션이다. 이를 통해 백엔드와 프론트엔드간 엔터티 필드명 불일치를 해결할 수 있다. 예시로 아래와 같은 Board Entity 파일이 백엔드에 정의되어 있다고 가정해 보자. public class Board extends BaseTimeEntity { ... @Column(name = "post_view", nullable = false) private Integer postView = 0; @Column(name = "pinned", nullable = false) private Boolean pinned = false; @Column(length = 2.. [Spring] Note2. @Configuration @Value Note1. @Configuration & @Value Annotation@Configuration해당 클래스가 스프링의 설정 정보를 담고 있음을 나타낸다. 스프링 컨테이너는 @Configuration 어노테이션이 붙은 클래스를 스프링빈 정의를 위한 소스로 사용하며, 내부적으로는 CGLIB 라이브러리 내부의 프록시 객체를 생성해 @Bean이 여러번 호출되더라도 언제든지 동일한 싱글톤 객체를 반환하도록 보장해준다. @Value 외부 설정 파일 application.propeties, application.yml 과 같이 시스템 환경 변수에 정의된 값을 필드나 파라미터에 주입할 때 사용한다. ${property.name} 형식으로 사용하며 스프링이 관리하는 객체 안에서만 동작한다는 점에 유의하자.(new,.. Spring Security Note0. UserDetails Note1. UserDetailsSpring Security에서 사용자 정보를 담기 위해 정의하는 인터페이스이다. Domain Entity에 직접 구현하는 방식도 가능하지만 이는 엔터티가 Spring Security에 의존하게 된다는 단점이 있어 보통 CustomUserDetails, UserDetailsImpl과 같은 네이밍으로 커스텀 래퍼 클래스를 사용해 정의한다. Lombok @RequiredArgsConsructor 어노테이션을 사용하면 생성자를 생략해줘도 상관없고, 사용하지 않는다면 User 객체를 주입받기 위한 별도의 생성자를 정의해 주어야 한다. public class CustomUserDetails implements UserDetails { ... private final User .. [Spring] Note1. Flyway Setting Note1. Flyway란?데이터베이스 마이그레이션 툴로 Git의 데이터베이스 버전이라고 이해하면 된다.기존에 Flyway를 도입하기 이전에는 데이터베이스 스키마 구조가 변경될 때마다 매번 FE측에 Sql 스크립트를 보내줘야만 했다. 무엇보다 실제 프로덕션 환경이라면 서버에 직접 들어가 데이터베이스의 구조를 변경하는것은 위험하다.그리고 이번 프로젝트에서는 빈번하게 데이터베이스가 변경되는 환경이라 매번 팀원들에게 데이터베이스를 수정하라고 공지하는 것도 번거로워서 Springboot 프로젝트에 Flyway를 도입을 결정했다. 비슷한 db 형상관리 툴로 Liquibase가 존재하는듯 한데, 롤백, 스냅샷등의 기능이 필요하거나 자세한 커스텀이 필요하다면 Liquibase를 사용하는 편이 좋을 듯싶다. Liqu.. [Spring] Note0. ResponseEntity Note1. ResponseEntity ResponseEntity란 Spring Framework에서 Http 요청에 대한 응답을 제어하기 위해 제공하는 클래스이다. ReponseEntity에는 Http Protocol 표준에 따라 Reponse Body, Header, Status Code 등 다양한 응답 정보를 포함할 수 있다. public class ResponseEntity extends HttpEntity {} Note2. ResponseEntity 동작 & @RestControllerSpring MVC는 기본적으로 Controller의 Return Type을 처리할 때, ResponseEntity 객체가 반환되면 아래와 같이 동작한다.1. ViewResolver 생략 - @Controller.. [JPA] Note2. @BaseTimeEntity Refactoring Note1. @BaseTimeEntity 대부분의 Entity에는 created_at, updated_at column이 포함되어 있다. 이러한 생성/수정일자를 관리하는 방식은 여러가지로 개인 프로젝트에서도 아래와 같이 User Entity는 JPA Auditing 기능을 사용하고 Problem Entity에는 생성자에서 생성/수정 일자를 초기화하는 등 여러 방식이 혼합되어 있었다. 하지만 이는 코드 일관성과 유지보수 측면에서 좋지 않은 코드이고 이러한 생성/수정 일자를 한 곳에서 일괄적으로 관리하기 위해 JPA는 BaseTimeEntity라는 어노테이션을 제공한다. User Entity @CreatedDate @Column(name = "created_at", updatable = fal.. [JPA] Note1 @EnableJpaAduting @EntityListeners Note1. JPA Auditing JPA (Java Persistence API)에서 제공하는 Auditing 기술로 엔터티의 생성/수정 시점을 자동으로 추적 및 기록해 준다. JPA Auditing 기능을 사용하면 getter/setter로 매번 직접 시간을 설정하지 않아도 되고 반복되지 않은 간결한 코드를 작성 가능하다는 장점이 있다. Note2. @EnableJpaAduiting- 애플리케이션 전체에서 JPA Auditing 기능을 활성화한다. - 주로 메인 클래스에 선언하며, 한 번 선언하면 Spring Framework가 자동으로 관련 빈을 등록한다. Note3. @EntityListeners(AuditingEntityListener.class)- 엔터티 레벨에서 JPA Auditing 기.. [JPA] @Transactional 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변경시키는 더 이상 쪼개질 수 없는 최소한의 작업 단위이다. 회원가입을 예시로 들어보자. 다음 예제는 총 4가지 작업으로 구성된다. 1. validateUserUniqueness - 사용자 이름과 이메일이 디비에서 중복되지 않는지 검사한다. 2. encodePassword - 패스워드를 암호화한다. 3. 유저 객체를 생성한다. 4. 유저 레포지토리에 저장한다. public User createUser(String username, String password, String email) { validateUserUniqueness(username, email); String encodedPassword = passwordEnco.. 이전 1 2 3 4 다음