diff --git a/Backend/SpringBoot/SpringbootWeb.md b/Backend/SpringBoot/SpringbootWeb.md new file mode 100644 index 0000000..61f7f72 --- /dev/null +++ b/Backend/SpringBoot/SpringbootWeb.md @@ -0,0 +1,2 @@ +# @ResponseEntity + - \ No newline at end of file diff --git "a/Backend/SpringBoot/Web\352\260\234\353\241\240\352\263\274RestAPI.md" "b/Backend/SpringBoot/Web\352\260\234\353\241\240\352\263\274RestAPI.md" new file mode 100644 index 0000000..31c691a --- /dev/null +++ "b/Backend/SpringBoot/Web\352\260\234\353\241\240\352\263\274RestAPI.md" @@ -0,0 +1,89 @@ +# Web개론 + +## Web이란 +- + + +## HTTP (Hypertext Transfer Protocol) +- 이름에는 하이퍼텍스트 전송용 프로토콜로 정의되어 있지만 실제로는 HTML, XML, JSON, 이미지, 음성, 비디오, javascript, PDF 등 다양한 컴퓨터에서 다룰 수 있는 것을 모두 전송할 수 있다 +- TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜이다 + +### TCP +- TCP가 데이터를 신뢰성 있게 전달하는 역할을 수행 + + +## HTTP 메소드 +| Method | 의미 | CRUD | 멱등성 | 안전성 | Path Variable | Query Parameter | DataBody | +|---------|---------------------|------|--------|--------|---------------|-----------------|----------| +| **GET** | 리소스 취득 | R | O | O | O | O | X | +| **POST** | 리소스 생성 | C | X | X | O | △ | O | +| **PUT** | 리소스 갱신, 생성 | C / U| O | X | O | △ | O | +| **DELETE** | 리소스 삭제 | D | O | X | O | X | X | +| **HEAD** | 헤더 데이터 취득 | - | O | O | - | - | - | +| **OPTIONS**| 지원하는 메소드 취득 | - | O | - | - | - | - | +| **TRACE** | 요청 메시지 반환 | - | O | - | - | - | - | +| **CONNECT**| 프록시 동작의 터널 접속 변경 | - | X | - | - | - | - | + +### 멱등성 +- 서버에 여러 번 요청해도 항상 결과가 같으면 멱등하다 +### Path Variable +- 주소 내에 정보를 전달하는 방법 +> Path variable에 Reference 타입을 쓸 수 없다 +> 주소 자체가 해방 값이기 떄문에 Pathvariable에 null이 들어오면 안된다. +### Query Parameter +- 특정 정보의 필터링을 걸때 사용한다 + - ?로 시작하고, 이어주는 형태는 &로 묶어준다 + +## HTTP Status code +| | 의미 |내용| +|----|----|---| +|1XX | 처리중 | 처리가 계속되고 있는 상태, 클라이언트는 요청을 계속 하거나 서버의 지시에 따라서 재요청| +|2XX| 성공 | 요청의 성공| +|3XX | 리다이렉트 | 다른 리소스로 리다이렉트 해당 코드를 받았을 때는 Response의 새로운 주소로 다시 요청| +|4XX | 클라이언트 에러 | 클라이언트의 요청에 에러가 있는 상태 재전송 하여도 에러가 해결되지 않는다 | +|5XX |서버에러 | 서버 처리중 에러가 발생한 상태 재전송시 에러 해결 되었을 수도 있다 + +## URI 주소 설계 원칙 +>**URI 설계원칙 (RFC-3986)** +> - 슬래시 구분자 ( / )는 계층관계를나타내는데사용한다. +>> +> - URI 마지막 문자로 ( / )는 포함하지않는다. +>> +> - 하이픈 ( - )은 URI 가독성을 높이는데 사용한다. +>> +> - 밑줄( \_ )은 사용하지 않는다. +>> +> - URI 경로에는 소문자가 적합하다 +>> +> - **파일 확장자는 URI에 포함하지 않는다.** +>> +> - **프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.** +>> +> - **구현에 의존적인 경로를 사용하지 않는다** +>> +> - 세션 ID를 포함하지 않는다. +>> +> - 프로그래밍 언어의 Method명을 이용하지 않는다. +>> +> - 명사에 단수형 보다는 복수형을 사용해야 한다. 컬렉션에 대한 표현은 복수로 사용 +>> +> - 컨트롤러 이름으로는 동사나 동사구를 사용한다. +>> +> - 경로 부분 중 변하는 부분은 유일한 값으로 대체한다. +>> +> - CRUD 기능을 나타내는 것은 URI에 사용하지 않는다. +>> +> - URI Query Parameter 디자인 +> - URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링 할 수 있다. +> - URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다. +>> +> - API에 있어서 서브 도메인은 일관성 있게 사용해야 한다. +>> +> - 클라이언트 개발자 포탈 서브 도메인은 일관성 있게 만든다. + + +## 어노테이션 +- 각 클래스나 메소드 등에 역할을 부여하는 것이다 +- JDK 1.5버전 이상에서 사용 가능하다 +- 자바 어노테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 동작한다 + diff --git "a/Backend/SpringBoot/\353\214\200\355\230\204/\355\236\210\355\236\210 \353\202\230\353\217\204 \353\260\224\353\263\264\353\213\271.md" "b/Backend/SpringBoot/\353\214\200\355\230\204/\355\236\210\355\236\210 \353\202\230\353\217\204 \353\260\224\353\263\264\353\213\271.md" deleted file mode 100644 index e69de29..0000000 diff --git "a/Backend/SpringBoot/\354\230\201\353\257\274/RestAPI.md" "b/Backend/SpringBoot/\354\230\201\353\257\274/RestAPI.md" deleted file mode 100644 index 5fd24ce..0000000 --- "a/Backend/SpringBoot/\354\230\201\353\257\274/RestAPI.md" +++ /dev/null @@ -1 +0,0 @@ -히히 아무것도 안적었지롱 diff --git "a/Backend/SpringBoot/\354\233\220\355\230\225/\355\236\210\355\236\210 \353\202\234 \353\260\224\353\263\264\353\213\271.md" "b/Backend/SpringBoot/\354\233\220\355\230\225/\355\236\210\355\236\210 \353\202\234 \353\260\224\353\263\264\353\213\271.md" deleted file mode 100644 index e69de29..0000000 diff --git "a/Backend/SpringBoot/\355\230\234\354\204\261/\355\230\234\354\204\261.md" "b/Backend/SpringBoot/\355\230\234\354\204\261/\355\230\234\354\204\261.md" deleted file mode 100644 index e69de29..0000000 diff --git a/Course 3.01.md b/Course 3.01.md deleted file mode 100644 index e0176d5..0000000 --- a/Course 3.01.md +++ /dev/null @@ -1,103 +0,0 @@ -#### WEB개론 -- Web이란 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말함 -- Web 종류 - - Web Site (google, naver, daum) - 사이트를 볼 수 있게 함 - - User Interface (Chrome, safari, Explorer) - 사용자와 컴퓨터와의 의사소통 - - API (Web Service, Kakao Open API) - 웹 서비스를 제공하기 위해 사용 -- Web - - HTTP - 어플리케이션 컨트롤 (통신을 하기로 한 약속한 형태) - - URL - 리소스 식별자 (한개의 리소스가 여러개 불가능) - - HTML - 하이퍼머디어 포맷 -- HTTP - - 데이터를 주고 받는 프로토콜 - - 하이퍼텍스트 전송용 프로토콜 -> 다양한 컴퓨테어서 다룰 수 있는 것을 모두 전송 가능 - - TCP기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜 - - Client - Sever에게 요청 -> Server -> Client에게 응답 - - - 리소스 취득 R - - 리소스 생성 C (요청을 할때마다 매번 다름) ( 안전하지 않음) - - 리소스 갱신, 생성 C/U (안전하지 않음) - - 리소스 삭제 D (안전하지 않음) -- 에러 코드 - - 100번대 -> 처리중 - - 200번대 -> 성공 (201번 데이터 생성) - - 300번대 -> 해당 코드를 받았을 때 REspnse의 새로운 주소로 다시 요청 - - 400번대 -> 클라이언트의 요청에 에러 - - 500번대 -> 서버 처리중 에러가 발생했을때 -> 재요청 하면 됨 - - - 200 성공 - - 201 리소스를 생성 성공 - - 301 리다이렉트, 리소스가 다른 장소로 변경되미을 알림 - - 303 리다이렉트, Client에서 자동으로 새로운 리소스로 요청 처리 - - 400 요청 오류 파라미터 에러 - - 401 권한 없음 - - 404 리소스 없음 (페이지 찾지 못함) - - 500 서버 내부 에러 (서버 동작 처리 에러) - - 503 서비스 정지 (점검 등등) - -#### REST API 개론 - - 계층화 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다계층 형태를 구성할 수 있어야 하며 확장 할 수 있어야 한다. - - 인터페이스 일관성: 아키텍처를 단순화 시키고 작은 단위로 분리하여서 클라이언트, 서버가 독립적으로 개선될 수 있어야 한다. -- Rest 네트워크 아키텍처 원리 - - Client, Server 클라이언트와 서버가 서로 독립적으로 분리되어져 있어야 함 - - stateless 요청에 대해서 클라이언트의 상태가 서버에 저장하지 않는다. - - 캐시 클라이언ㅌ는 서버의 응답을 캐시 할 수 있어야 한다. - - 클라이언트가 캐시를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해 서버의 부하를 낮춤 - - Code On Demand 자바 애플릿, 자바스크립트 플래시 등 특정 기능을 서버가 클라이언트에 코드를 전달하여 실행 할 수 있어야 한다. -- 인터페이스의 일관성 인터페이스 일관성이 잘 지켜졌는지에 따라 REST를 잘 사용했는지 판단을 할 수 있다. - - 자원 식별 - - 메시지를 통한 리소스 조작 - - 자기 서술적 메시지 - - 애플리케이션 상태에 대한 엔진으로서 하이퍼미디어 -- 자원 식별 - - 웹 기반의 REST에서는 리소스 접근을 URL을 사용합니다. -- 메시지를 통한 리소스 조작 - - Web에서는 다양한 방식으로 데이터를 전송 할 수 있습니다. - - HTML, XML,JSON,TEXT등등 다양한 방법이 있음 - - 리소스 타입을 알려주기 위해서 header부분에 content-type을 동해서 어떠한 타입인지를 지정할 수 있습니다. -- 자기 서술적 - - 요청 하는 데이터가 어떻게 처리 되어져야 하는지 충분한 데이터를 포함 할 수 있어야 합니다. - - HTTP 기반의 REST에서는 HTTP Method와 Header의 정로 이를 표현할 수 있습니다. -- 애플리케이션 상태에 대한 엔진으로서 하이퍼미디어 - - REST API를 개발할때에도 단순히 Client 요청에 대한 데이터만 내리는 것이 아닌 관련된 리소스에 대한 Link 정보까지 같이 포함 도어야 한다.보 - - 이러한 조건들을 잘 간춘 경우 REST Ful 하다고 말하고 이를 REST API라고 부른다. -- URI - - 인터넷에서 특정 자원을 나타내는 주소값. 해당 값은 유일 함 -- URL - - 인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별 하는 주소 - - URL은 URI의 하위 개념 -- URI 설계원칙 (RFC-3986) - - 슬래시 구분자(/)는 계층 관걔를 나타내는 데 사용한다. - - URI 마지막 문자로(/)는 포함하지 않는다. - - 하이픈(-)은 URI 가독성을 높이는데 사용한다. - - 밑줄(_)은 사용하지 않는다. - - URI 경로에는 소문자가 적합하다. - - 파일 확장자는 URI에 포함하지 않는다. - - 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다. - - 구현에 의존적인 경로를 사용하지 않는다. - - 세션 ID를 포함하지 않는다. - - 프로그래밍 언어의 Method명을 이용하지 않는다. - - 명사에 단수형 보다는 복수형을 사용해야 한다. 컬렉션에 대한 표현은 복수로 사용 - - 컨트롤러 이름으로는 동사나 동사구를 사용한다. - - 경로 부분 중 변하는 부분은 유일한 값으로 대체 한다. - - CRUD 기능을 나타내는것은 URI에 사용하지 않는다. - - URI Query Parameter 디자인 - - URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링 할 수 있다. - - URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다. - - API에 있어서 서브 도메인은 일관성 있게 사용해야 한다. - - 클라이언트 개발자 포탈 서브 도메인은 일관성 있게 만든다. -#### Spring Boot -- Spring Boot는 단순히 실행되며, 픅로덕션 제품 수준의 스프링 기반 어플리케이션을 쉽게 만들 수 있다. -- Spring Boot 어플리케이션에는 Spring 구성이 거의 필요 하지 않다. -- Spring Boot java -jar로 실행하는 Java 어플리케이션을 만들 수 있다. - -- 주요 목표 - - Spring 개발에 대해 빠르고, 광범위하게 적용 할 수 있는 환경 - - XML 구성 요규사항이 전혀 없음 -- Spring Boot 소개 - - 어플리케이션 개발에 필수 요소들만 모아두었다. - - 간단한 설정으로 개발 및 커스텀이 가능하다. - - 간단하고 빠르게 어플리케이션 실행 및 배포가 가능하다 - - 대규모프로젝트(운영환경)에 필요한 비 기능적 기능도 제공한다 - - 오랜 경험에서 나오는 안정적인 운영이 가능하다. - - Spring에서 불편한 설정이 없어졌다.(XML 설정 등등) diff --git a/Course 3.02.md b/Course 3.02.md deleted file mode 100644 index e60074a..0000000 --- a/Course 3.02.md +++ /dev/null @@ -1,190 +0,0 @@ -#### RestApiController -- 서버 -> 클라이언트가 요청을 함 (진입점이 어떠한 주소인지 작성을 해야함)->@RestController 작성 (RestApi를 처리하는 컨트롤러), @RequestMapping("/api") (어떠한 주소를 갖겠다)-> api로 시작하는 주소는 RestApiController로 요청을 받겠다 라고 설정 -- GetMapping (Get 메소드를 하기 위해) + (path = "hello") -> api중에서도 어떠한 주소를 처리하겠다. -- 서버가 있고 컨트롤러가 있음, 여기에 들어오는 주소중에 ooo/api/hello라는 주소는 hello메소드가 처리하겠다. -- local이면 http -- http://localhost:8080/자신이 요청한 주소/ 요청한 주소\ -- 마우스 우클릭 -> 검사 -> 네트워크 -> f5 -> 자신이 만든 것 클릭 -- Request URL - 자신이 요청한 URL -- Content-Type - 컨텐츠의 형태를 알 수 있음 -- html 태그를 사용하면 이쁘게 포장되어 브라우저에 보여줌 -- 서버의 일정 클라이언트는 요청을 하였고 -> 여기에 대한 응답을 해줌 (문자열) -> 해당 문자열을 가지고 이쁘게 꾸며준 것은 브라우저임 -> 문자열은 전달이 될 때 0 OR 1의 비트단위가 전달이 되는 것이다. - -#### REST API -- PATH Variable - - 주소 내에 정보를 전달 하는 방법 - - PathVariable를 받기 위해서는 중괄호를 넣어줘야 함 - - @PathVariable을 소괄호 제일 앞에 넣어줘야 함 - - String 뒤 나오는 말은 위에 중괄호 사이에 넣어준 것과 동일해야 함 - - api 하위에 echo라는 주소에 특정한 PathVariable가 들어가게 되면 문자열로 받기 위해 String 으로 받게 되며 PathVariable을 동일하게 맞춰주면 됨 - - PathVariable가 있는 곳에 자동으로 값이 매칭이 되고 시스템 매칭을 찍고 리턴을 시킴 - - 서버에 특정 값을 요청을 함 -> 해당 서버는 그 특정 값을 에코로 내려주는 형태로 작성 함 - - http://localhost:8080/api/echo/{message} -> message에 다른 것을 입력해주면 입력이 됨 - - 만약 String 다음에 PathVariable가 다른 값이 입력이 된다면 @PathVariable다음 - - (name = "PathVariable")를 입력한 후 String 후 다른 PathVariable를 입력하면 됨 - - 한글이 깨질때 해결 방법 - - UTF-8(3바이트)을 사용함 (한글을 표기하기 위한 인코딩 방식 = 윈도우를 쓰고 있기 때문에 - - 윈도우는 MS949를 사용함 (2바이트) - - MS949 = EUC-KR - - file -> settings -> encoding을 입력 -> file Encodings -> UTF-8로 통일 시킴 -> apply - - file -> settings -> encoding을 입력 Console -> Defaulte Encodings를 UTF-8로 변경 - - 만약 오류가 났을때 첫번째나 두번째 것을 들어가 제일 위로 올리면 왜 안되는지 알려줌 - - 포트를 사용하고 있을때에는 새로 만들지 못함 -> 없애거나, 서버를 다르게 띄우는 방법 두가지가 있음 - - 기존것을 X를 누르면 실행이 됨 - - Teminal에 들어가 netstat -ano | findstr8080을 입력 - - taskkill /f /pid 고유 번호 입력 - - - 저번 시간 복습 - - toUpperCase(); -> 대문자로 변환 - - Integer age => null 할당 가능 - - int age => 0이 기본값 - - 주소를 받을때는 int age - - PathVariable int age - - PathVariable boolean isMan - - 위 두개를 넣을때는 GetMapping 뒤에 /age/{age}/is-man/{isMan}을 넣어줘야 함 - - 주소는 소문자로만 하고 하이픈 사용 중괄호 뒤에는 대문자 사용 가능 - - System.out.println()을 각각 만들어 줘야 함 - - http://localhost:8080/api/echo/steve/age/20/is-man/true -> 주소 적는 법 -#### Get -- CRUD -> R -- 멱등성 -> O -- 안정성 -> O -- Path Variable -> O -- Qiery Parameter O -- DataBody -> X - -Query Parameter - - ?로 시작하고 이어주는 형태는 &로 묶어준다. - -- GetMapping 뒤에 (path = "/book") 작성 -> (api 뒤에 작성되는 부분) -- String을 받을 때에는 @RequestParam을 사용해준다. -- 위 변수명이 동일하면 동일한 값이 들어오게 됨 -- issued-month 같은 경우에는 String 앞에 (name ="issued-month)작성 후 String 뒤에 issuedMonth를 작성해준다. -- 언더바 ( _ )는 괜찮다 - -#### BookQueryParam -- Data -> 롬복을 사용할 때 쓰는 데이터 -- 앞쪽에서 사용한 변수 그대로 사용하고 private로 묶어줌 -- 왼쪽에 스트럭쳐 부분을 클릭하면 해당 클래스에 어떠한 메소드 들이 있는지 확인 가능 -- @AllArgsConstructor를 사용하면 전체 파라미터가 들어간 스트링 4개를 받는 파라미터가 생김 - - 기본 생성자가 사라짐 - - NoArgsConstructor는 어노테이션 중 하나로 파라미터가 없는 기본 생성자를 자동으로 생성해줌 -- 위 모델을 만들면 본 코드에서 쓰던 @PathVariable 이 부분을 다 지우고 자신이 적었던 모델 이름을 적으면 됨 ex) (BookQueryParm bookQueryParm)을 적어줌 -- 다음 호출 부분에 {system.out.println(bookQueryParm);}을 적어줌 -- 하지만 다음 같은 부분을 받기 위해서는 규칙이 있어야 함 (주소를 설계할 때 정상적인 주소가 편함) -- 객체로 받을 때에는 변수의 내용이 많을 때에는 간단하게 적어서 받을 수 있음 -- 2~4개 정도는 파라미터를 불러와도 - -#### POST -- CRUD -> C -- 멱등성 -> X (데이터가 계속 변화함) -- 안정성 -> X (데이터가 변화하기 때문에 안정적이지 않음) -- Path Variable -> O -- Quiery Parameter -> 세모 (가질순 있지만 적절하지 않을 수 있음) (특정 데이터에 필터링 하는 것) -- DataBody -> O - -HTTP Body -- HTTP Header () -- HTTP Body (특정한 메세지를 담을 수 있음 (문자로)-> TEXT, HTML, JSON가능) - - Post + 암호화(이번엔 사용하지 않음) -- api client를 사용 -> 크롬 오른쪽 위에 퍼즐 모양 누른 후 들어감 - - 메소드를 바꾸면서 쓰면 됨\ - - POST를 들어가서 언어를 바꾸면 Headers가 언어에 따라바뀌게 됨 -- Post는 객체 형식으로만 받을수 있음 - - 모델을 만든 후 소괄호에 @RequestBody를 적은 후 클래스 이름을 적고 매개변수 이름을 적어줌 -- JSON - - 기본적으로 key와 value로 이루어져 있음 - - 중괄호( { } )로 시작하게 되어있음 - - 다음에는 "key와" : "value"로 이루어져 있음 - - 가능한 것 - - String: 문자 - - Number: 숫자 (소숫점, int, double, float) - - Boolean :true false - - {중괄호}: object - - []대괄호: arrary - - "name" : "Spring Boot", - - "number" : "100", " - - category" : "JAVA" - - 위처럼 작성하면 됨 시작과 끝에는 중괄호 작성 - - return bookRequest;로 하고싶다면 - - public void post를 -> public BookRequest post로 변경하면 됨 - - Json에서 Body에 리턴값이 나옴 - - 만약 String으로 받고싶다면 - - return bookRequest.toString();로 바꿈 - - public String post로 바꿈 - - 실행을 하면 body에 BookRequest(name=Spring Boot, number=100, category=JAVA)가 뜸 - - Contetn-Type이 text/plain;charset-UTF-8로 바뀜 - - 파일 저장하는 방법 - - save as누른 후 - - My drive - - Create -> project - - add한 후 Name 바꿔주고 저장 - - 깨질 때는 add header에서 Content-Encoding을 UTF-8로 바꿈 - - 안될 시 help에 Edit VM option을 들어감 - - -Dfile.encoding= UTF-8 - - -Dconsole.encoding= UTF-8 - - 추가해 준 후 재부팅\ -- JSON 형태 - - "key" : "value" - - "array " : [ 10, 20, 30 ] (배열) (array의 타입은 동일 해야 함) - - "string_array" : [ "홍길동","이순신","유관순" ] - - "object_array" : [ { "name" : "홍길동" }, { "name" : "이순신" }, {"name" : "유관순"}] object안에 JSON 형태를 받을 수 있음 -- JSON을 표현하는 방식 - - snake case - - 언더바( _ )로 구분 함 - - user_name - - user_age - - camel case - - 지금 많이 사용하고 있는 JAVA의 case - - 소문자 대문자로 구분 - - userName - - userAge - -- 만약 보내는 쪽에서 snake case로 하면 - - userName는 null값이 나옴 (매칭이 되지 않음) - - userAge는 int 타입이기 때문에 0이 디폴틑`ㅌ` 값임 - - 위를 잘 나오게 하기 위해서는 Integer타입으로 바꿔줘야 함 - - 하지만 Integer을 사용해도null값이 나와서 @JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)를 추가해줘야 함 (gies가 들어가는 것을 설정해 줘야함.) - - 위를 설정 했다면 해당 클래스의 변수들은 SNAKE CASE들로 매핑하겠다 라고 설정하는 것임 - -#### PUT -- CRUD -> C/U -- 멱등성 -> O -- 안정성 -> X (데이터가 변화하기 때문에 안정적이지 않음) -- Path Variable -> O -- Quiery Parameter -> 세모 (가질순 있지만 적절하지 않을 수 있음) (특정 데이터에 필터링 하는 것) -- DataBody -> O - -- Slf4j - - log팩 관련 된 어노테이션 - - log.info()가 생김 - - 괄호 ( () ) 안에 "Request : {}"를 적어준 후 userRequest를 적어주면 됨 -- PUT메소드를 사용 함 - - boolean의 디폴트 값은 false이기 때문에 false가 나옴 - - 스트럭처를 보면 is라는 것이 boolean을 뜻하는 것이기 때문에 setKorean으로 처리가 되어 false가 나오게 되는 것임 - - 이를 해결하기 위한 방법 2가지가 있음 - - 요청을 할 때에 is_korean이 아닌 korean으로 요청을 함 - - 하지만 이렇게 할 시에는 JSON이 전달하고자 하는 의미를 잘 전달하지 못할 수 있음 - - boolean을 Boolean으로 적어주면 잘 나옴 -- system.out.println과 log.info의 차이점 - - 똑같은 콘솔을 출력하는 메소드는 맞음 - - system.out.println이 먼저 실행이 되고 해당 다음 메소드가 호출이 됨 - - 그러다 보면 서버의 진행 시간이 많이 걸리게 됨 - - log.info는 버퍼를 가지고 있기 때문에 해당 버퍼의 내용을 담고 바로 다음 메소드를 진행 할 수 있도록 리턴이 됨 그리고 버퍼의 내용이 콘솔에 찍히게 됨 - - 그렇기 때문에 해당 버퍼의 사이즈를 설정 할 수 있음 - - 이러한 부분 때문에 해당 서버의 진행 속도에 영향을 크게 주지 않음 - - 하지만 가득 차게 된다면 영향은 똑같이 받게 됨 - - 활용을 할 때 JSON으로 받게 되면 원하는 포멧을 바꿔줄 수 있음 - - 그러므로 로그의 형태를 마음대로 바꿀 수 있음 - - 언제 요청을 받았는지 어떤 쓰레드가 처리를 했는지도 볼 수도 있음 -#### DELETE -- CRUD -> D -- 멱등성 -> O -- 안정성 -> X (데이터가 변화하기 때문에 안정적이지 않음) -- Path Variable -> O -- Quiery Parameter -> O -- DataBody -> X (데이터를 별도로 전달하지 않기 때문에 필요 없음) - -- @DeleteMapping을 적은 후 {path = }을 적어준다면 여러가지 주소도 가능함 -- delete를 받을 때는 Path Variable와 Quiery Parameter 두 가지로 받을 수 있지만 Path Variable로 받는 것을 추천 함 - - 한가지 주소만 추천을 함 - - 원래 있던 주소가 오류가 났다면 하나를 더 추가해서 모든 클라이언트를 이동할 때까지 놔둔 후 다 옮겼다면 원래 있던 주소를 삭제해도 됨 \ No newline at end of file diff --git a/Course.3.03.md b/Course.3.03.md deleted file mode 100644 index 2cc9d90..0000000 --- a/Course.3.03.md +++ /dev/null @@ -1,63 +0,0 @@ -#### Spring Boot Web에서 응답 만들기 -응답 -- String: 일반 Text Type 응답 -- Object: 자동을 Json 변환되어 응답 - - 상태 값은 항상 200 OK -- ResponseEntity: Body의 내용을 Object로 설정 - - 상황에 따라서 HttpStatus Code 설정 -- @ResponseBody: RestController가 아닌 곳(Controller에서 Json 응답을 내릴 때 -- Object 클래스를 리턴하게 되면 해당 클래스의 내용을 Spring Boot가 알아서 Json으로 바꿔 내려주는데 그 Json의 형태는 클래스와 동일하게 생김 -- 그 클래스를 만드는 Camel case 와 Snake case 방식은 JsonNaming 어노테이션에 따라 달라지게 되어있음 - -- Object를 텍스트 형식으로 바꿀 때에는 Object를 String으로 바꿈 - - @Slf4j를 추가해주고 log.info("user : {}", user)을 적어준 후 - - log.info를 통해서 중괄호( { } )를 작성 해줌 - - 여기에 mapping할 객체를 작성해줌 (user) - - string 형태로 return하기 위해 tostring()을 추가해줌 - - 다음 결과는 toString에 찍히는 결과와 동일함 - - toString이 된 내용이 return이 되는 것과 동일함 - - 이런 식으로 retrun 할 일은 거의 없음 - -- UserRequest를 retrun하게 되는데 커스텀 할 수 있는 방법 - - 프로젝트를 진행하다 보면 응답에 대해서 status Code를 여러가지 내려줘야 할 수 있음 - - 지금 써져있는 코드를 응답하면 200 OK가 응답이 됨 - - 하지만 생성했을 때에는 201과 다른 status Code 혹은 400/ 500같은 기타 코드를 입력해 줘야 할 때 사용하는 방법이 있음 - - 리턴되는 형태는 ResponseEntity를 사용함 - - 이를 생성하는 방법은 - - var response = ResponseEntity.status(HttpStatus.OK).body(user); 를 적어줌 - - return에는 response를 적어줌 - - 바뀌는 변화는 크게 없음 - - 201로 바꿔본다면 - - ResponseEntity<> <- 안쪽에 적어줌UserRequest - - Ctrl을 누른 후 HttpStatus.OK부분에서 OK를 눌러서 들어감 - - 201이 무슨 코드인지 확인 한 후 OK부분에 적어줌 - - 저장후 send 해보면 201로 시작 됨 - - 400번으로 바꾸기 위해서는 - - Bad Request를 작성 - - 저장 후 실행 - - 다음과 같이 status를 조작하거나 다른 값을 넣어주기 위해서는 ResponseEntity를 사용함 - - header도 가능함 - - .header("x-custom","hi")을 적어주면 - - header 부분에 x-custom 부분에 hi가 뜨게 됨 - - 이를 사용할 때에도 ResponseEntity를 사용해야 함 - - RestController를 사용하는 이유 - - 반드시 해당 컨드롤러는 RestApi로 동작하겠다 -> 응답 값이 Json으로 선언 하겠다라는 선언임 - - Spring Boot에는 반듯이 Json 응답만 있는 것이 아님 - - html 응답도 가능 - - 다음 응답을 쓰기 위해서는 - - @Controller을 사용하면 됨 - - @Controller가 return을 해준다면 페이지 리소스도 리턴해 줄 수 있어서 @ResponseBody를 추가해줘야 함 - - 위를 적어줄 시 @Controller 어노테이션 일 때 Json 형식으로 응답이 된다는 것을 말함 - - @ResponseBody가 없다면 404 에러가 뜸 - - 이와 같은 이유로 @RestController를 사용함 - - 이와 비슷하게 - - @GetMapping만 있는것이 아님 - - @RequestMapping(path = " ", method - RequestMethod.Get) 도 있음 - - path(경로)와 method를 이용하여 어떤 RequestMethod와 매칭 시키겠다고 할 수 있음 위에는 Get 메소드만 받겠다고 했음 그렇다면 GetMapping과 같음 - - 만약 method를 굳이 지정해 주지 않는다면 모든 Mapping을 사용하게 됨 - - 하지만 이보다는 어떤 메소드로 가겠다를 지정해 주는 게 좋음 - - 이러한 이유로 @GetMapping를 이용함 - - Spring Boot내에서 응답을 내리는 주로 사용하는 방법 - - 객체를 리턴하는 것을 주로 사용함 - - ResponseEntity는 해당 로직을 처리하다가 예외가 발생했을 때 응답 코드를 내리는 방법 -- \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index e2b0fc9..0000000 --- a/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# What is `onezero_Knowledge_Storage`? - -`onezero_Knowledge_Storage`는 일영 개발 동아리 구성원들의 지식을 공유하고 저장하기 위한 저장소입니다. 이 저장소는 Obsidian과 Git 플러그인을 사용하여 지식을 체계적으로 관리하고, 버전 관리를 통해 변경 사항을 추적합니다. - - -# How to Use - -1. **Obsidian 설치** - - [Obsidian 다운로드](https://obsidian.md/download) 페이지에서 운영 체제에 맞는 버전을 다운로드하고 설치합니다. - -2. **저장소 클론** - - 터미널을 열고 저장소를 클론합니다. -```sh - git clone https://github.com/onezero-dju/onezero_Knowledge_Storage.git -``` - -3. **Obsidian에서 저장소 열기** - - Obsidian을 열고 `onezero_Knowledge_Storage` 폴더를 열어 작업을 시작합니다. - -4. **Git 플러그인 설치** - - Obsidian에서 `설정` > `커뮤니티 플러그인` > `탐색` > `Git 검색` > `설치` > `Git` 플러그인을 설치하고 활성화합니다. - -5. **작업 내용 커밋 및 푸시** - - 본인 이름의 디렉토리 이하에 노트 작성 후 `Ctrl` + `p`를 눌러 팔레트에 `Git: Create backup` 선택 - - 처음 사용하는 인원은 본인 이름의 새폴더를 만들고 진행 - - *( `Git: Create backup`대신 `back`만 입력해도 가장 먼저 떠서 편리하다. )* - - -# Additional Resources - -- [Obsidian Documentation](https://help.obsidian.md/) -- [Git Documentation](https://git-scm.com/doc) - - -# Contact - -궁금한 사항이나 문제가 발생하면 일영( `Lark` ) 질문방에 올려주세요. diff --git "a/\355\230\234\354\204\261.md" "b/\355\230\234\354\204\261.md" deleted file mode 100644 index e69de29..0000000