[Spring] Note3. @JsonProperty
·
🌱 Spring Framework/Spring Framework
@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
·
🌱 Spring Framework
Note1. @Configuration & @Value Annotation@Configuration해당 클래스가 스프링의 설정 정보를 담고 있음을 나타낸다. 스프링 컨테이너는 @Configuration 어노테이션이 붙은 클래스를 스프링빈 정의를 위한 소스로 사용하며, 내부적으로는 CGLIB 라이브러리 내부의 프록시 객체를 생성해 @Bean이 여러번 호출되더라도 언제든지 동일한 싱글톤 객체를 반환하도록 보장해준다. @Value 외부 설정 파일 application.propeties, application.yml 과 같이 시스템 환경 변수에 정의된 값을 필드나 파라미터에 주입할 때 사용한다. ${property.name} 형식으로 사용하며 스프링이 관리하는 객체 안에서만 동작한다는 점에 유의하자.(new,..
[AWS] Note0. S3
·
Cloud/AWS
Note1. S3 Architecture이미지파일 업로드 로직사용자가 EC2(인스터스/서버)에 이미지 업로드를 API로 요청한다. S3에 이미지를 업로드한다. 이미지가 저장된 URL을 리턴한다.DB에 이미지가 저장된 URL을 저장한다. 처음에 이미지파일 업로드 아키텍쳐를 구성할때 이미지 자체를 DB에 저장하는것이 아닌가 많이들 오해하는데물론 DB에 이미지파일 자체를 저장할 수도 있으나 대체로 DB에는 이미지 파일 주소만을 저장하고 실제 이미지 파일은 S3에 저장한다. 이미지파일 다운로드 로직 사용자가 EC2(인스턴스/서버)에 이미지 조회를 API로 요청한다. 서버는 DB로 조회 SQL문을 날린다. DB는 서버에 저장되어 있던 이미지 URL을 응답한다. 서버는 사용자에게 이미지 URL을 응답한다. 사용자..
Spring Security Note0. UserDetails
·
🌱 Spring Framework/SpringSecurity
Note1. UserDetailsSpring Security에서 사용자 정보를 담기 위해 정의하는 인터페이스이다. Domain Entity에 직접 구현하는 방식도 가능하지만 이는 엔터티가 Spring Security에 의존하게 된다는 단점이 있어 보통 CustomUserDetails, UserDetailsImpl과 같은 네이밍으로 커스텀 래퍼 클래스를 사용해 정의한다. Lombok @RequiredArgsConsructor 어노테이션을 사용하면 생성자를 생략해줘도 상관없고, 사용하지 않는다면 User 객체를 주입받기 위한 별도의 생성자를 정의해 주어야 한다. public class CustomUserDetails implements UserDetails { ... private final User ..
[Spring] Note1. Flyway Setting
·
🌱 Spring Framework
Note1. Flyway란?데이터베이스 마이그레이션 툴로 Git의 데이터베이스 버전이라고 이해하면 된다.기존에 Flyway를 도입하기 이전에는 데이터베이스 스키마 구조가 변경될 때마다 매번 FE측에 Sql 스크립트를 보내줘야만 했다. 무엇보다 실제 프로덕션 환경이라면 서버에 직접 들어가 데이터베이스의 구조를 변경하는것은 위험하다.그리고 이번 프로젝트에서는 빈번하게 데이터베이스가 변경되는 환경이라 매번 팀원들에게 데이터베이스를 수정하라고 공지하는 것도 번거로워서 Springboot 프로젝트에 Flyway를 도입을 결정했다. 비슷한 db 형상관리 툴로 Liquibase가 존재하는듯 한데, 롤백, 스냅샷등의 기능이 필요하거나 자세한 커스텀이 필요하다면 Liquibase를 사용하는 편이 좋을 듯싶다. Liqu..