ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [1주차] 새로배운 것들 정리 (1)
    스파르타 강의 정리 2023. 11. 1. 20:17

     

     

    강의가 리뉴얼 되어 저번 강의는 사실상 0주차가 되었고,  진짜 1주차가 들어왔다.

    현재까지 나간 진도에서 새로 배운 내용과  기록할만한 것들을 정리해보았다.

     

     

    Web Server

    클라이언트의 요청을 받아 HTML문서 등의 정적 콘텐츠*를 전달해준다.

    만약 동적 콘텐츠 요청(request)이 들어오면 웹서버는 이를 WAS로 넘긴다.

     

    *정적 콘텐츠 : 이미 완성된 상태의 콘텐츠.  ex. HTML문서 등

     

    웹서버의 종류 : 아파치, Nginx 등

     

    WAS (Web Application Server)

    웹서버와 같은 HTTP 기반.

    웹서버의 기능 대부분을 WAS에서도 사용 가능

    -> 사용자에게 동적서비스를 제공하기 위해 웹서버로부터 요청을 받아 데이터 가공 작업을 수행하거나,

      웹서버와 데이터베이스 서버,  웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행한다.

     

    WAS의 종류 : 톰캣, JBoss 등

     

     

    아파치 톰캣이란?

    아파치(웹서버) + 톰캣(WAS)

    정적데이터처리와 동적데이터처리를 효율적으로 해 줄 수 있다.

     

     

    스프링과 스프링부트의 차이

    스프링에는 AOP, IoC/DI 같은 핵심 기능이 있는데, 이를 사용하기 위해선 엄청나게 많은 xml설정이 필요했다.

    이러한 점을 개선하여 스프링부트가 탄생했다.

    스프링부트는 복잡한 xml설정 대신 자바 애너테이션 기반의 설정을 사용하기 때문에 훨씬 더 편리하게 사용할 수 있다.

    또한 외부라이브러리나, 하위 프레임워크의 의존성 관리가 매우 편해졌다.

     

     

    Payload (데이터.  실제 데이터)

    출처 위키백과

    서버가 응답을 보낼때는 항상 Payload를 보낼 수 있다.

    클라이언트(브라우저)가 요청을 할 때도 Payload를 보낼 수 있다.

    그리고 GET을 제외하곤 모두 Payload를 보낼 수 있다.  -> 이건 HTTP의 약속임.

     

    GET메소드는 구조상 http body가 존재하지 않기 때문에 불가능함.

     

     

     

    Lombok 이 뭐지?

    롬복은 자바 프로젝트를 진행하는데 필수적인 메소드/ 생성자를 자동으로 생성하여

    반복적인 메소드 작성 코드를 줄여주어 코드 작성의 편의성을 증대시키는 라이브러리.

     

    예를 들어 getter, setter 메소드는 필드가 많아질수록 코드가 복잡해지므로  중복되는 이 코드들을 롬복으로 관리가능

    @AllArgsConstructor           // 모든 필드를 가진 생성자 만들기
    
    @NoArgsConstructor            //  기본 생성자
    
    @RequiredArgsConstructor      // 특정 필드를 가진 생성자 만들기
                                     다만 @RequiredArgsConstructor을 사용하기 위해선 해당 필드가
                                     반드시 final이 붙어있어야한다.

     

     

     

    편리성 증대

    • 클래스에 애너테이션으로 @RequestMapping("/~~") 를 쓰면   /~~ 이  클래스 내부 메소드 패스에 다 적용된다.
    • @Controller 대신 @RestController을 쓰면  클래스 안의 모든 메소드에 @RequestBody를 붙인것과 같다
      전체 메소드가 Json만 반환하고 있다면  중복을 제거하기 위해 이 애너테이션을 사용하면 된다.

     

     

     

    정적 페이지

    static 디렉토리 안에 있는 html파일 이름을 url에 그대로 적으면 해당하는 파일을 반환한다.

    이미 완성된 파일이기에 굳이 Controller를 거쳐서 반환할 필요가 없다.

    그렇지만 컨트롤러에서 실행이 불가능한 건 아니다.

    굳이 할 필요는 없으나 할 수는 있다.

    build.gradle에서 thymeleaf를 주석처리한 후 다시 빌드한 다음 실행하면 동작한다.

    (타임리프는 컨트롤러에서 html을 찾을때 스태틱 디렉토리가 아닌 템플릿 디렉토리에서 찾기 때문이다.)

     

    다른 방법은 

    @GetMapping("/html/redirect")
        public  String htmlStatic(){
            return "redirect:/hello.html";
        }
        
     이렇게 직접접근하는 경로를 재호출하는 방법이 있다.
     
     html파일이름이 바뀐다면 return에 있는 부분만 바꾸면 되기 때문에 이럴 경우 사용하거나
     html파일이름을 보여주고 싶지 않은 경우에도 이렇게 사용하면 된다.

     

     

     

     

     

     

    잭슨

    serialize   
    객체를 Json형태의 문자열로 변환   
    String json = objectMapper.writeValueAsString(star);
    
    deserialize  
    Json형태의 문자열을 객체로 변환     
    Star star = objectMapper.readValue(json, Star.class);

     

     

     

Designed by Tistory.