주노 님의 블로그

20240809 본캠프 20일차 TIL 본문

TIL

20240809 본캠프 20일차 TIL

juno0432 2024. 8. 9. 22:42

본캠프 20일차 내용 간단요약

  • 09:00 ~ 10:00 : 코드카타
  • 10:00 ~ 11:30 : 발제 및 팀 미팅
  • 11:30 ~ 12:00 : 프로그램 설치
  • 12:00 ~ 13:00 : 점심시간
  • 13:00 ~ 14:00 : 회의
    ERD 및 API명세 작성
  • 14:00 ~ 16:00 : 강의
    1주차 1강 ~ 1주차 6강
  • 16:00 ~ 18:00 : 나무반 강의
  • 18:00 ~ 19:00 : 저녁시간
  • 19:00 ~ 20:00 : 강의
    1주차 6강 ~ 1주차 8강
  • 20:00 ~ 21:00 : TIL작성 

 

 

오늘 해야할 일✔️ 🔺 ❌

 

✔️요구분석

✔️ERD작성

✔️API명세 작성

🔺SPRING 1주차 강의


오늘의 요약

 

자주 바뀌니 오히려 새로운 사람들과 빠르게 친해질 기회가 생긴거잔앙?!


 

회의

더보기

ERD 명세서 작성

요구사항을 읽으면서 ERD 명세서를 작성했다

 

필수구현은 담당자의 기능이 없어서 합쳐놓았다

 

 

요구사항에 1번 할일

4번 할일 내용

9번 할일 제목이 있었다

 

todo list라고 한다면

내용까지만 있으면 되지만...

제목까지 있는경우도 있을수 있으니까.. 싶었는데

할일, 할일내용, 할일제목 이 세개는 너무 이해가 안되는것이다

할일 테이블 이라는 설명이 있었다면 납득이 가지만

 

그래서 튜터님한테 질문하러 가니

할일, 할일 제목이 사라졌다

 

그래서 최종으로 나온 결과는 위!

 

POSTMAN으로 API명세 설계할수있다던데

눈이 침침헌지... 잘 모르...

그래서 EXCEL로 작성했다.

 

api명세도 이렇게 생성했다. 조회가 필요한가? 생각되었지만

 

 

요 문구가 있더라.. 크흠.. 역시 혼자짰으면 몰랐을것...

 

그리고 수정과 삭제는 put이냐 patch냐 이게 문젠데.

검색해보니까 

put은 리소스의 모든 속성을 수정한다면

patch는 리소스의 일부분만 수정할때 쓰인다고 한다

put은 대체한다고 생각하면 된다

 

참고자료

https://velog.io/@53_eddy_jo/RESTful%ED%95%9C-%EC%84%B8%EA%B3%84%EC%97%90%EC%84%9C%EC%9D%98-POST%EC%99%80-PUT%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EA%B1%B0%EA%B8%B0%EC%97%90-FETCH%EA%B9%8C%EC%A7%80

 

RESTful한 세계에서의 POST와 PUT의 차이, 거기에 PATCH까지

HttpResponseHTTP/1.1 200 OK{ “id”: 1, “name”: “뽀로로”, “grade”: 1}HttpResponseHTTP/1.1 200 OK{ “id”: 1 “name”: “뽀로로”, “grade”: 2}HTTP/1.1 200 OK{ “id”

velog.io


스프링 강의

더보기

Gradle이란

빌드 자동화 시스템, 작성한 코드를 설정에 맞게 자동으로 빌드해준다.

gradle을 사용하면 java소스코드를 실행 가능한 jar파일로 만들어준다

 

빌드를 하면 위 파일이 생성된다

 

 

build.gradle은 gradle 기반의 필드 스크립트 이다.

라이브러리들의 의존성을 쉽게 관리한다

 

필요로하는 외부 라이브러리들을

 

 

dependencies에 넣어주면 자동으로 다운로드 해준다

 

 

build.gradle을 수정한다음 우측 상단 코끼리를 눌러줘야한다

 

서버

  • 네트워크
    여러개의 컴퓨터 또는 장비가 서로 연결되어서 정보를 서로 주고받을수 있게 도와주는 기술

  • 클라이언트와 서버
    사용자는 브라우저를 이용해 서버에 정보를 요청하고 응답을 받는다
    사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요함 >> IP

  • IP
    네트워크에서 사용자를 식별하기위한 위치 주소
    네트워크 상의 데이터 송수신은 IP주소를 기준으로 이루어지고있ㅇ므
    주소와 포트번호를 기준으로 전송함

  • 웹 서버의 동작
    HTTP Request로 웹서버에 요청한다
    웹서버는 요청을 승인하고 서버에서 데이터를 받아온다
    받아온 데이터로 웹사이트를 갱신한다
    기본적으로 브라우저가 웹서버에 무언가 요청을 할때는 get 메서드로 요청한다

  • API
    다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙
    애플리케이션이 약속한 방식으로 요청을 하면 정해진 방식으로 응답한다.
  • RESTFUL API
    API 작동 방식에 대한 조건을 부과하는 아키텍처이다
    REST 아키텍처를 따르는 API를 REST API라고 한다
    API가 적절하게 http를 준수하며 설계되어있으면 RESTful하다 라고할수있다.
    >> API리소스 식별자를 중복없이 고유하게 만들고, 적절하게 메서드를 사용했다면.. RESTful하다.

  • GET :  리소스 요청
    POST : 리소스 전송
    PUT : 리소스 업데이트

  • 웹서버
    브라우저에 URL을 입력하여 사용자에게 페이지를 요청했을때 정적인 콘텐츠를 전달해준다면 그것은 Web Server이다

    웹 서버의 역할은 정적인 콘텐츠(이미 완성된 html), 동적인 요청(사용자에 맞게 페이지 세팅)이 들어왔을때 요청을 WAS에 전달한다

  • 아파치 톰캣
    웹서버와 WAS를 합쳐놓은것이다.

  • 스프링과 스프링부트의 차이점
    스프링 프레임워크는 자바 기반의 프레임워크이며
    AOP, IoC/DI 등과 같은 핵심기능이 있다.
    다만 많은 XML설정이 필요했다

    그 불편한점을 개선하기 위해 spring boot가 등장했다.

    스프링 부트는 스프링의 xml설정 대신 어노테이션 기반의 설정을 사용하여, 간편하게 기능을 설정할 수 있었다
    스프링 부트는 내장 아파치 톰캣이 있어, 서버를 따로 설정하지않아도 테스트 및 실행이 가능하다

  • 포스트맨
    api개발을 빠르고 쉽게 구현할 수 있도록 도와주는 소프트웨어이다.
    api를 보내고 응답을 확인해야지 서버가 제대로 동작하는지 확인 할 수 있는데
    서버에서 받은 응답을 확인하는 방법중 하나가 postman이다
  • 포스트맨으로 api를 실습해보자
    간단한 HelloController를 만들어본다
    @RestController
    public class HelloController
    {
        @GetMapping("/api/hello")
        public String hello() {
            return "Hello World";
        }
    }
     클래스 위에 RestController 어노테이션을 부착해주고

    api를 던져볼 메서드에 getMapping을 하며, api링크를 보여준다.

    프로젝트를 실행하고
    workspace의 new
    http를 눌러준다


    위의 창 같이 나오면 되는데

    프로젝트를 실행하게되면 localhost:8080포트로 연결이 되게 되며
    아까 우리가 작성한 부분에서 getMapping 어노테이션을 보면된다.
    getMapping이라는것은 get으로 매핑한다는 뜻이고 괄호한에있는건 주소이다

    그래서 우리가 localhost:8080주소에서 /api/hello경로를 요청하게되면, 우리가 작성한 hello world가 뜨게되는것이다.

  • http란?
    데이터를 주고 받는 양식을 정의한 통신규약이다.

    어떻게 주고받을까?
    request와 response의 개념이 존재함
    사용자는 서버에게 자신이 원하는 페이지를 request(요구)함
    서버는 원하는 페이지를 확인한후 해당 페이지의 데이터를 실어 응답(response)해준다

  • http의 요청 방식
    메서드
    get : 어떤 리소스를 얻을때 사용한다
    post : 데이터를 게시할때 사용한다 (회원가입, 게시글 작성, 댓글 작성)

    헤더
    브라우저가 어떤 페이지를 원하는지
    요청 받은 페이지를 찾았는지
    요청 받은 데이터를 성공적으로 찾았는지
    어떤 형식으로 데이터를 보낼지

    payload
    http body라고도 한다.
    get메서드를 제외하고 payload를 보낼 수 있다


  • 서버 응답 방식
    100 : 클라이언트가 요청을 계속 해도된다는뜻
    200 : 성공
    300 : 리다이렉션
    400 : 클라이언트의 요청이나 권한이 없을때
    500 : 서버의 오류나 과부하가 걸렸을때

    헤더
    서버가 추가적으로 보낸 응답


  • 테스트
    내가 작성한 프로그램이 원하는대로 흘러가는지 테스트 해봐야함

    블랙박스 테스트
    소프트웨어 구조나 동작원리를 모르는 상태에서 사용자의 입장에서 검사하는 방법

    개발자 테스트
    개발자가 테스트 코드를 작성하여 테스트 할 수 있다.
    자동화 도 가능하다

    스프링은 junit 프레임워크를 사용하여 단위 테스트를 진행할 수 있다.
    보시다시피 dependencies에 적용되어있다.

  • Junit으로 테스트 해보기
    아래 간단한 계산기 예제를 가져와보자.
    public class Calculator {
        public Double operate(double num1, String op, double num2) {
            switch (op) {
                case "*":
                    return num1 * num2;
                case "/":
                    if (num2 != 0) {
                        return num1 / num2;
                    } else {
                        return null;
                    }
                case "+":
                    return num1 + num2;
                case "-":
                    return num1 - num2;
                default:
                    throw new IllegalArgumentException("잘못된 연산자입니다.");
            }
        }
    }

    실행은 main
    테스트는 test패키지에서 실행된다.
    생성은 위와같이 오른쪽 클릭이나 alt insert
    요기서 사실 게터와 세터, 생성자도 만들수있슴
    ㄹㅇ루 편함

    근데 지금은 테스트를 해보는 단계니까 test를..
    자동으로 똑같은 경로에 만들어주는것을 알 수 있다.

    package com.sparta.springprepare.calculator;
    
    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.Test;
    
    class CalculatorTest {
        @Test
        @DisplayName("더하기 테스트")
        void test1() {
            Calculator calculator = new Calculator();
            Double result = calculator.operate(8, "+", 2);
            System.out.println("result = " + result);
    
            Assertions.assertEquals(10, result);
        }
    
        @Test
        @DisplayName("나누기 테스트")
        void test2() {
            Calculator calculator = new Calculator();
            Double result = calculator.operate(8, "/", 2);
            System.out.println("result = " + result);
    
            Assertions.assertEquals(4, result);
        }
    }

    테스트코드는 main메서드가 없이도 실행이 가능하다

    junit이 스스로 해주기 때문 ㅇㅇ..
    @test 어노테이션으로 이것이 테스트이다... 라고 설정해주는것이며
    @displayName은 테스트 환경에서 출력해주는 화면이다

    그다음 메서드 내부는 테스트 할 환경을 설정해준다.

    Assertions.assertEquals는 (기대값, 결과값)이다.
    위 연산한 결과가 기대값에 맞는가? 라는 것.

    틀리면 이렇게 displayName과함께
    나는 2를 예상했는데 실제값은 4여. 라고 말해준다

  • lombok이란
    자바 프로젝트를 진행하는데 필수적으로 필요한 메서드, 생성자 등을 자동으로 생성해주는 라이브러리이다
    넘나편함

    롬복으로 getter 어노테이션을 부착하면



    이렇게 게터와 세터를 작성하지 않아도 컴파일된 파일을 보면 게터와 세터가 있는것을 알 수 있다.

  • 롬복이 적용이 안된다면?
    혹시 모르니 버전을 명시해준다
    이러니까 되는듯..

  • 롬복의 자주 사용하는 어노테이션
    @getter
    >> 필드의 게터를 만들어준다
    @setter
    >> 필드의 세터를 만들어준다
    @AllArgsConstructor
    >> 모든 필드를 매개변수로 받는 생성자를 만들어준다
    public class Memo {
        private String username;
        private String contents;
    
        public Memo(String username, String contents) {
            this.username = username;
            this.contents = contents;
        }
    }


    @NoArgsConstructor
    >>기본생성자(아무 매개변수도 갖지 않는 생성자를 만들어준다)
    >>생성자가 하나 이상이라도 있으면 자동으로 기본 생성자가 만들어지지 않는다.
    public class Memo {
        private String username;
        private String contents;
    
        public Memo() {
        }
    }


    @RequiredArgsConstructor
    >> final 제어자가 붙은 필드를 파라미터로 가진 생성자를 만들어준다.

  • application.properties
    스프링과 관련된 설정을 할때 사용된다.
    이 파일을 사용하면 자동으로 설종되고 있는 설정값을 수정할 수있다.

    예를들어 자동으로 8080으로 연결된 것을 8001로 바꿔본다
    8001로 연결된것을 볼 수 있다.

 


오늘의 회고 & 12시간 몰입했는가? 
스프링 강의 1강 어느정도 들었으니까 주말에는 2강까지 다듣고 천천히 과제를 시작하면 될듯!


찾아볼 내용

'TIL' 카테고리의 다른 글

20240813 본캠프 22일차 TIL  (0) 2024.08.14
20240812 본캠프 21일차 TIL  (0) 2024.08.12
20240808 본캠프 19일차 TIL  (0) 2024.08.08
20240807 본캠프 18일차 TIL  (0) 2024.08.07
20240806 본캠프 17일차 TIL (추가추가추가해야함)  (0) 2024.08.07