[Security] Note2. FTP/SFTP Protocol
·
Security
FTP는 1971년 처음 제안된 프로토콜로 데이터 전송 시 암호화를 제공하지 않는 “평문 기반 프로토콜”로 명령어 포트 (21번)를 통해 전송되는 제어 정보는 모두 암호화되지 않은 텍스트 형태로 오고간다. Kaist FTP Server, 리눅스 ISO 이미지 파일 배포 등 누구에게나 공개된 오픈소스 소프트웨어 혹은 학술자료나, 암호화 연산 자체가 필요없는 초 경량형 임베디드, IoT장비와 같은 경우에는 FTP Protocol을 사용해도 상관없으나, 보안이 필요한 운영서버에서는 절대 사용해서는 안되는 프로토콜이다. Cmd에 ftp protocol을 사용해 kaist ftp에 접속한 뒤, id : anonymous, pw : 1234를 입력한뒤, 와이어샤크에서 ftp 패킷을 캡처해 보았다. 다음 실험 결과와..
[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..
[Spring] Note0. ResponseEntity
·
Spring Framework
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..
[Security] Note1. Nginx Version 숨기기
·
Security
Nginxcurl -I https://... 현재 운영중인 사이트로 요청을 보내보니 아래와 같이 http 응답 헤더에 버전 정보를 자동으로 노출한다. 기존에는 버전 노출이 일반적이었으나 최근에는 nginx 버전을 숨기는 것을 권장한다. HTTP/2 403 server: nginx/1.29.5 방법은 간단한데 nginx.conf 설정 파일에 server_tokens 값을 off로 설정해주면 된다. (default: on) HTTP/2 403 server: nginx