TIL 14일차: REST API, 프로그래머스 스쿨 코딩테스트 입문, FE와 BE, DB와 RDB, 정규화, PK와 FK
오늘은 아침부터 REST API에 대한 특강이 있었다.
1. REST API
API는 응용프로그램 간에 데이터를 주고 받는 방법이다.
API가 어플과 어플 간의 관계라면
REST API는 서버와 클라이언트 관계, 즉 웹 개념에서 적용된다.
REST의 구성 요소에는 세 가지가 있다.
자원 Resource - URL
행위 Verb - Method
표현 Representation ex. JSON
REST는 http 프로토콜의 인프라를 그대로 사용하기 때문에 별도의 인프라를 구축할 필요가 없다는 장점이 있다.
RESTful API는 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것을 말한다.
그리고 짤막하게 살펴봤던 GraphQL.
정보를 요청하는 쪽에서 원하는 대로 정보를 가져오고 수정할 수 있는 쿼리 언어이다.
기타 자세한 사항은 이곳에서도 살펴볼 수 있다.
https://meetup.toast.com/posts/92
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
REST API 제대로 알고 사용하기
meetup.toast.com
2. 프로그래머스 스쿨 코딩테스트 입문
그리고는 프로그래머스 스쿨에서 파이썬으로 lv.0짜리 문제들을 반정도 풀었다.
기억나는 효율적인 코드로는 다음이 있다.
<내가 짠 코드>
repeated_string = ""
for i in my_string:
repeated_string += i * n
return repeated_string
<더 효율적인 코드>
return "".join(i*n for i in my_string)
"".join()으로 묶어주기,
for 반복문을 반복하려는 식 뒤에 써줄 수 있다는 점을 배웠다.
또 930211 이런 숫자들을 배열 안에 넣을 수 있는 쿨한 코드도 알게 되었다.
my_list = [int(x) for x in str(n)]
여기서 핵심은 n이라는 큰 숫자를 문자열 처리를 한다음, 하나하나 세어주고 int 정수로 변환해서 배열의 틀[]안에 넣어줬다는 점이다.
자바나 자바스크립트에서는 상상도 못할만한 간단한 코드다... [] 이 안에 넣어준다고 배열이 되다니 대단해.
3. DB와 RDB, FE와 BE, PK와 FK
저녁 먹고 html/css특강 못들은 걸 들으려고 기다리던 중에
A반 튜터님이 오셔서 질문을 받아주셨다. 엄청 친절하게 알려주셔서 2시간이 넘게 질문시간에 있었다.
전체적으로는 DB에 대한 말을 해주셨는데, 프론트엔드-백엔드와의 관계, 그곳에서 쓰는 언어,
그래서 우리가 배워야하는 언어는 뭐다?!, API, DB 정규화 등의 세부 주제들이 있었다.
통신이란 서버와 클라이언트 사이의 끊임없는 요청과 응답이다.
FE(Front End)와 BE(Back End)의 작성한 언어를 어디에서 해석하느냐의 차이다.
프론트엔드 개발자들은 브라우저가 해석하는 언어를 만드는 사람들이며,
iphone의 swift, android의 java나 kotlin이 클라이언트에서 해석된다는 점에서 프론트엔드이다.
반면 백엔드에는 내가 지금 최종적으로 배우고 써먹을 Node.js와 Phython (flask)가 있다.
그리고 Node.js에서 자바스크립트 문법이 그대로 쓰이기 때문에 자스와 파이썬을 둘다 잡고 가야하는 게 맞다.
파이썬은 DB를 연결하는 개념 ex.select등을 이해하고 가면 되고.
그렇다면 DB를 쓰는 이유는 무엇일까?
그건 바로 영속적인 데이터를 효율적으로 저장, 검색, 공유하기 위해서다.
우리는 mySQL, Oracle등의 프로그램을 통해 DB에서 데이터들을 관리한다.
그리고 요청하고 응답받기를 바로 이 SQL 문법을 써가면서 하는 거다.
예를 들면 select, insert, update, delete 같은 것들.
API에서 Interface는 프로그램을 요청하는 방법이다.
REST API는 프로그램 간에 요청하는 방식을 정해둔 것이다.
포트는 localhost:5000에서 5000부분을 말한다.
마치 은행의 창구처럼,
서로 통신하는 애들이 어떤 창구로 들어오는지를 적어놓은 것이 포트다.
DB의 정규화를 예를 들어 오랫동안 설명해주셨다.
여행사에서 여행도시, 손님, 여행일자, 평점, 비용등을 표로 만들어 정리할 때
하나의 표에 한꺼번에 저장되어있는 정보를 나누어
손님용 표, 도시별표, 여행기록용 표로 따로따로 만드는 것. 이것이 정규화 과정이다.
즉, 목적에 따른 분류로 나눠서 중복을 없애면서 정리하는 것이 바로 정규화이다.
같은 맥락에서 RDB에서 R은 관계 Relation, 즉 표 간의 관계를 말하는 것이다.
이 관계는 1:1, 1:다, 다:다로 나눠지는데,
1:다의 예로, 손님과 여행기록 간에는, 여행기록 표에 손님_id가 필요하다.
다:다의 예로, 따로 표를 만들어 손님_id와 여행_id를 넣어준다. 우리가 이미 만든 여행기록표가 바로 그것이다.
정규화를 계속 하다보면 join해줘야 하는 표가 많이 생기는데,
현장에서는 이런 이유로 비정규화를 거치고 프로그램 상에서 무결성을 지킨다고 한다.
무결성은 데이터가 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지하는 것을 말한다.
결론은, 테이블 간의 연관관계를 파악하는 것이 중요하다는 것과,
백엔드 개발자들도 데이터베이스에 데이터를 추가하고 삭제하기 때문에 데이터베이스에 대해 잘 알고 있어야 한다는 점.
추가로 PK primary key와 FK foreign key에서도 이야기가 나왔다.
예를 들면 DBeaver에서 select * from student
left join city on ... = ...
여기에서 외래키 Foriegn key를 굳이 잡아두지 않아도 연결은 된다.
왜냐하면 명시적으로 ...=...라고 엮으라고 써줬고, 무결성이 유지되기 때문이다.
다음주중으로 배울 index도 언급이 되었으나 이해할 수 없기에 이건 나중에 배우기로...
오늘은 파이썬 프로그래머스 스쿨 문제 풀고
db특강이랑 html/css 특강 들은 걸로 하루가 다 갔다.
뭔가 아쉽지만...
내일부터 또 다른 프로젝트가 시작되니, 부디 자바스크립트 문법이 다시 돌아오길 바라면서 하루를 마친다.