본문 바로가기

내일배움캠프

27일차

🍎 How's the day going?

개인 과제 완료하고 하루 끝냈네. 과제 끝내고 금요일만 되면 뭔가 집중이 잘 안되는 느낌이넹 ㅠㅠ
뭔가 더 할 수 있는걸 좀 생각해 내고!!

좀 더 의욕을 가지자!

  

 

🍊코드카타 목록

  • 보호소에서 중성화한 동물
  • 조건에 맞는 도서와 저자 리스트 출력하기
  •  조건별로 분류하여 주문상태 출력하기
  • 햄버거 만들기
  • 성격 유형 검사하기
  • 바탕화면 정리

 

 

💡오늘 정리 목록

  • REST ful 한 API

 

🚩오늘의 회고

 

코드카타

 

 

  코트가타

1. 보호소에서 중성화한 동물

SELECT o.ANIMAL_ID, o.ANIMAL_TYPE,	o.NAME
FROM ANIMAL_INS i JOIN ANIMAL_OUTS o
ON i.ANIMAL_ID = o.ANIMAL_ID
WHERE i.SEX_UPON_INTAKE <> o.SEX_UPON_OUTCOME
ORDER BY ANIMAL_ID

 

2. 조건에 맞는 도서와 저자 리스트 출력하기

SELECT BOOK_ID,	AUTHOR_NAME, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK b JOIN AUTHOR a 
ON b.AUTHOR_ID = a.AUTHOR_ID
WHERE b.CATEGORY = '경제'
ORDER BY b.PUBLISHED_DATE

 

3. 조건별로 분류하여 주문상태 출력하기

SELECT ORDER_ID,	PRODUCT_ID, DATE_FORMAT(OUT_DATE,'%Y-%m-%d') AS OUT_DATE,
CASE WHEN OUT_DATE <= '2022-5-1' THEN '출고완료'
WHEN OUT_DATE IS NULL THEN '출고미정'
ELSE '출고대기' END AS 출고여부
FROM  FOOD_ORDER 
ORDER BY ORDER_ID

 

4. 햄버거 만들기

import java.util.ArrayList;
import java.util.List;


class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        List<Integer> list = new ArrayList<>();
        int i = 0;
        while(i<ingredient.length){
            list.add(ingredient[i]);
            if(list.size()>=4 && list.get(list.size()-1)==1 && list.get(list.size()-2)==3 && list.get(list.size()-3)==2 && list.get(list.size()-4)==1){
                list.remove(list.size()-4);
                list.remove(list.size()-3);
                list.remove(list.size()-2);
                list.remove(list.size()-1);
                answer++;
            }
            i++;
        }
        return answer;
    }
}

 

5. 성격 유형 검사하기

import java.util.HashMap;

class Solution {
    public String solution(String[] survey, int[] choices) {
        String[] answer = new String[]{"RT", "CF", "JM", "AN"};
        HashMap<Character, Integer> map = new HashMap<>();
        for(int i=0;i< survey.length;i++){

            if(choices[i]<4){
                map.put(survey[i].charAt(0),map.getOrDefault(survey[i].charAt(0),0)+4-choices[i]);
            }else if(choices[i]>4){
                map.put(survey[i].charAt(1), map.getOrDefault(survey[i].charAt(1), 0) + choices[i]-4);
            }
        }
        StringBuilder sb=new StringBuilder();
        for(String s:answer){
            if(map.getOrDefault(s.charAt(1),0)>map.getOrDefault(s.charAt(0),0)){
                sb.append(s.charAt(1));
            }else{
                sb.append(s.charAt(0));
            }
        }

        return sb.toString();
    }
}

 

6. 바탕화면 정리

class Solution {
    public int[] solution(String[] wallpaper) {
        int[] answer = {};
        int x_max = 0,x_min = 51,y_max = 0,y_min = 51;
        for(int i = 0; i < wallpaper.length; i++){
            for(int j = 0; j < wallpaper[i].length(); j++){
                if(wallpaper[i].charAt(j) == '#'){
                    x_max = Math.max(x_max, j);
                    x_min = Math.min(x_min, j);
                    y_max = Math.max(y_max, i);
                    y_min = Math.min(y_min, i);
                }
            }
        }
        answer = new int[]{y_min, x_min, y_max+1, x_max+1};
        return answer;
    }
}

 

 

코드카타는.. 뭔가 좀 배울 께 있다.. 이런 느낌 들기 전까지는.. 그냥 뭐했는지 체크만 하는걸로

 

 

1) REST ful한 API는 뭘까..?

RESTful API의 특징

  1. 클라이언트-서버 구조 (Client-Server Architecture): 클라이언트와 서버가 분리되어 독립적으로 동작합니다. 클라이언트는 사용자 인터페이스를 관리하고, 서버는 데이터를 저장하고 처리합니다.
  2. 무상태성 (Statelessness): 각 요청은 클라이언트의 상태를 서버에 저장하지 않으며, 모든 필요한 정보는 요청에 포함되어야 합니다. 즉, 서버는 클라이언트의 이전 요청을 기억하지 않습니다.
  3. 캐시 가능 (Cacheable): 응답은 캐시될 수 있어야 하며, 이를 통해 성능이 향상됩니다. 서버 응답에는 캐싱 가능 여부에 대한 정보가 포함됩니다.
  4. 일관된 인터페이스 (Uniform Interface): API는 일관된 인터페이스를 제공해야 합니다. 이는 리소스의 URI, HTTP 메서드 (GET, POST, PUT, DELETE), 헤더, 상태 코드 등을 일관되게 사용하는 것을 의미합니다.
  5. 계층화 시스템 (Layered System): 클라이언트는 중간 서버를 통해 서버와 통신할 수 있으며, 이를 통해 보안, 로드 밸런싱, 캐싱 등의 기능을 추가할 수 있습니다.
  6. Code on Demand (선택 사항): 필요 시 서버에서 클라이언트로 코드를 전송하여 실행할 수 있습니다. 예를 들어, JavaScript를 전송하여 클라이언트에서 실행할 수 있습니다.

RESTful API 설계 원칙

  1. 리소스 기반 (Resource-Based): 모든 것은 리소스이며, 리소스는 URI로 식별됩니다. 예를 들어, http://api.example.com/users/123는 ID가 123인 사용자 리소스를 나타냅니다.
  2. HTTP 메서드 사용:
    • GET: 리소스를 조회합니다.
    • POST: 리소스를 생성합니다.
    • PUT: 리소스를 수정합니다.
    • DELETE: 리소스를 삭제합니다.
  3. 표현 방식 (Representation): 리소스는 다양한 형식(JSON, XML 등)으로 표현될 수 있으며, 클라이언트는 서버가 제공하는 표현을 사용합니다.
  4. 상태 코드 (Status Codes): HTTP 상태 코드를 사용하여 요청의 결과를 나타냅니다. 예를 들어, 200(성공), 201(생성됨), 400(잘못된 요청), 404(찾을 수 없음), 500(서버 오류) 등이 있습니다.

RESTful API 예시

여기서는 가상의 도서 관리 시스템을 예로 들어 설명하겠습니다.

1. 리소스 URI 설계

  • 책 목록 조회: GET /books
  • 특정 책 조회: GET /books/{bookId}
  • 새 책 추가: POST /books
  • 책 정보 수정: PUT /books/{bookId}
  • 책 삭제: DELETE /books/{bookId}

2. HTTP 요청 및 응답 예시

  • 책 목록 조회:
GET /books HTTP/1.1
Host: api.example.com

 

HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "id": 1,
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    "published_date": "1925-04-10"
  },
  {
    "id": 2,
    "title": "To Kill a Mockingbird",
    "author": "Harper Lee",
    "published_date": "1960-07-11"
  }
]

 

  • 특정 책 조회:
GET /books/1 HTTP/1.1
Host: api.example.com
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "title": "The Great Gatsby",
  "author": "F. Scott Fitzgerald",
  "published_date": "1925-04-10"
  • 새 책 추가:
POST /books HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "title": "1984",
  "author": "George Orwell",
  "published_date": "1949-06-08"
}
HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 3,
  "title": "1984",
  "author": "George Orwell",
  "published_date": "1949-06-08"
}
  • 책 정보 수정:
PUT /books/3 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "title": "Nineteen Eighty-Four",
  "author": "George Orwell",
  "published_date": "1949-06-08"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 3,
  "title": "Nineteen Eighty-Four",
  "author": "George Orwell",
  "published_date": "1949-06-08"
}
  • 책 삭제:
DELETE /books/3 HTTP/1.1
Host: api.example.com
HTTP/1.1 204 No Content

 

이와 같이 RESTful API는 명확한 설계 원칙과 일관된 인터페이스를 통해 클라이언트와 서버 간의 통신을 효율적으로 관리할 수 있도록 도와줍니다.

 

'내일배움캠프' 카테고리의 다른 글

TIL30일차  (0) 2024.05.31
28일차  (0) 2024.05.29
TiL26일차  (0) 2024.05.22
TIL 24~24일차  (0) 2024.05.21
TIL23일차  (0) 2024.05.17