HTTP란 무엇인가요?

http는 웹브라우저와 서버간의 웹페이지 같은 자원을 주고 받을 때 쓰는 통신 규약입니다. 이렇듯 규약이 있기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발하고 서로 정도를 교환할 수 있습니다. HTTP는 연결상태를 유지하지 않는 비연결성 프로토콜입니다. 이것을 개선하기 위해서 COOKIESESSION이 등장하였습니다.

 

HTTPS란 무엇인가요?

HTTP프로토콜의 보안 버전입니다. 인증서를 통해 암호화 및 인증으로 보안이 더욱 강화됩니다.

 

HTTPS를 적용한 이유는 무엇인가요?

HTTP는 단순 텍스트교환이기 때문에 내용이 노출될 수가 있습니다. 하지만, HTTPS는 HTTP의 SSL(TLS)라는 인증서 이용하여 텍스트를 암호화 하기 때문에 내용이 노출되는 것을 막아줍니다. 이러한 이유 때문에, HTTP에서 HTTPS로 바꾸는 작업을 했습니다.

 

SSL/TLS이란 무엇인가요?

SSL보다 TLS가 업그레이드된 버젼입니다. 제공하는 서비스는 무경설, 기밀성, 인증서를 통한 상호인증(서버,클라이언트)입니다.

특정 사이트는 사이트 정보와 사이트 공개키를 기관에게 제출합니다. 기관은 사이트 정보와 공개키를 암호화한 사이트 인증서를 특정사이트에게, 인증기관 공개키는 웹브라우저(구글, 사파리, 익스플로어 등)에게 제공합니다. 사용자가 웹브라우저를 통해 특정사이트에 접속하면 특정사이트는 자신의 인증서를 웹브라우저에게 보냅니다. 인증서를 받은 웹브라우저는 인증기관의 공개키로 서버 인증을 하고 대칭키를 특정사이트에게 보내줍니다. 

 

 

<HTTPS에서 Nginx를 적용한 이유>

https를 적용하기위해서 자료를 찾다가 nginx을 알게 되었고 이는 사용이 매우 심플하고 규모가 작은 서비스이면서 정적 데이터 처리가 많은 서비스에 적합하다는 것을 알게 되었습니다. 이 이점을 살려 nginx를 적용하게 되었습니다.

Let's Encrypt(렛츠 인쿠루프트)의 방법은 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는 CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 사용할 수 있습니다.
이러한 방법은 사용자에게 Certbot(서트봇)라는 소프트웨어를 제공함으로써 구현할 수 있게 합니다.

 

 

웹서버란 무엇인가요? 

웹서버는 클라이언트의 요청을 받아서 정적 컨텐츠를 제공하는 서버입니다. 예를 들어 단순HTML, CSS, 이미지 등 즉시 응답이 가능한 컨텐츠입니다.(웹서버의 대표적인 Apache, Nginx)

하지만, 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 클라이언트에게 전달해줍니다

 

WAS란 무엇인가요?

WAS는 웹서버가 처리 할 수 없는 것들을 처리해 준다. 특히 DB의 조회나 다양한 로직처리가 필요한 동적 컨텐츠를 처리하여 서비스를 클라이언트에게 제공한다. (WAS의 대표적인 Tomcat, Jeus 등이 존재)

 

그렇다면, WAS만 사용하면 되지 않을까라는 생각을 할 수 있습니다.

하지만, WAS는 DB조회 및 다양한 로직을 처리하는 데 집중해야 합니다. 만약 WAS로만 설계하게 되면, 효율성이 크게 떨어지기 때문입니다. 단순한 정적 컨텐츠는 웹서버에게 맡기는 기능을 분리시키고 동적인 것을 WAS에게 맡긴다면, 서버 부하를 방지할 수 있습니다.

 

클라이언트 → Web서버 →DB

클라이언트 → WAS → DB

클라이언트 → Web서버 → WAS →DB (효율적인 분산 처리로 인해 서버 부하를 방지가능)

'Back-end > Web' 카테고리의 다른 글

쓰레드(thread)  (0) 2022.04.14

이 3가지는 생성자를 자동으로 생성해주는 어노테이션이다.

 

@NoArgsConstructor : 파라미터가 없는 생성자를 생성한다.

주의 : 

1. 필드들이 final로 생성되어 있는 경우에는 필드를 초기화 할 수 없기 떄문에, 생성자를 만들 수 없다.

@NoArgsConstructor(force = true)옵션을 이용해서 final필드를 0,false,null등으로 초기화를 강제로 시켜 만들 수 있다.

2. @NonNull같이 필드에 제약조건이 설정되어 있는 경우, 생성자내 null-check로직이 생성되지 않는다.

 

@RequiredArgsConstructor : 추가 작업을 필요로 하는 필드에 대한 생성장를 생성하는 어노테이션이다.

초기화 되지 않은 모든final필드, @NonNull이 적용되어 있는 모든 필드에 자동적으로 생성자를 생성해 준다.

@NonNull로 마크돼있는 필드들은 null-check가 추가적으로 생성되며, @NonNull이 마크되어 있지만, 파라미터에서 null값이 들어온다면 생성자에서 NullPointerException이 발생한다.

파라미터의 순서는 클래스에 있는 필드 순서에 맞춰서 생성해야 된다.

 

@AllArgsConstructor : 클래스에 존내하는 모든 필드에 대한 생성자를 자동으로 생성해준다.

만약 필드중에서 @NonNull 애노테이션이 마크되어 있다면 생성자 내에서 null-check 로직을 자동적으로 생성한다.

 

 

생성자 관련 애노테이션을 사용할 때 주의사항

 

1. static 필드들은 스킵

 

2. 파라미터의 순서는 클래스에 있는 필드 순서에 맞춰서 생성하기 때문에 매우 주의.

 

→ 만약 클래스 필드의 순서를 바꾸었을 때 롬복이 자동적으로 생성자 파라미터 순서를 바꾸어 주기 때문에 주의하지 않으면 버그가 발생할 수 있다.

 

3. AccessLevel을 꼭 설정.

 

→ 세 애노테이션 모두 접근 제한자를 AccessLevel로 설정할 수 있다.

 

기본값은 public이지만 필요로 따라서 접근제한자를 설정해줘야 한다.

'Back-end > Spring' 카테고리의 다른 글

Entity Mapping(엔티티 매핑)  (0) 2022.04.22
@Builder  (0) 2021.09.08
@Getter, @Setter  (0) 2021.09.07

생성자(constructor)란 new연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.

생성자 선언방법은 public 클래스(매개변수){

           ......

클래스라는 부분은 생성자를 정의하는 클래스의 이름과 동일하게 적어줘야한다.

 

public class Item {

    private Long id;
    private String itemName;
    private Integer price;
    private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }

Item 클래스의 생성자를 만들어 준것이 밑에 public Itme()이다. 

첫번째 아이템은 기본 생성자로써, 위의 private의 필드들을 초기화를 시켜준다.

두번째 아이템은 값을 받고  itemName, price, quantity의 필드들의 값을 넣어주어주게 된다.

이 때, itemName, price, quantity(맥북, 1,000,000, 1)이라는 값들이 넘어 오게 되면, 

만약에 class가 entity로 지정한다면 우리의 데이터베이스에는

id = 1  itemName = 맥북 prcie = 1,000,000 quantity = 1이 저장되게 될 것이다.

'Back-end > JAVA' 카테고리의 다른 글

JAVA  (0) 2021.09.14

JAVA에는 객체를 생성할 때 사용하는 패턴이 여러가지가 있다. 그 중에서 Builder pattern는 어느 필드에 어떤 값을 채워야 할지 명확하게 지정할 수 있어, 코드가 명시적이다.

[Builder Pattern 의 장점]

1. 필요한 데이터만 설정 가능

2. 가독성을 높일 수 있음

3. 유연성을 확보 가능

4. 불변성을 확보 가능

 

객체를 생성하는 대부분의 경우에는 빌더 패턴을 적용하는 것이 좋다. 물론 예외적인 케이스로 엔티티(Entity) 객체 또는 도메인(Domain) 객체로부터 DTO를 생성하는 경우라면 직접 빌더를 만들고 하는 작업이 번거로우므로 Model Mapper와 같은 라이브러리를 통해 생성을 위임할 수 있다.

 

'Back-end > Spring' 카테고리의 다른 글

Entity Mapping(엔티티 매핑)  (0) 2022.04.22
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor  (0) 2021.09.11
@Getter, @Setter  (0) 2021.09.07

객체 지향 프로그래밍인 JAVA에서 객체의 데이터는 개체 외부에서 직접적으로 접근하는 것을 막는다.

외부에서 데이터를 읽고 변경할 수 있으면 객체의 무결성이 없어지기 때문이다.

 

@Getter

어노테이션 Getter는, 객체 외부에서 객체의 데이터를 읽을 때 사용되는 어노테이션이다.

@Setter

어노테이션 Setter는, 객체 외부에서 객체의 데이터를 변경시 사용되는 어노테이션이다. 

 

 

'Back-end > Spring' 카테고리의 다른 글

Entity Mapping(엔티티 매핑)  (0) 2022.04.22
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor  (0) 2021.09.11
@Builder  (0) 2021.09.08

+ Recent posts