지난 포스팅때 예고했던 것처럼 오늘은 Handler를 구현해볼 예정이다. Decorator Handler 우선 부터 만들고 시작한다. 앞선 포스팅에서 했던 것과 같이, 를 만들어주고, 서버 세팅부터 한다. 그리고, Logger라는 이름의 log를 찍어주는 역할의 Decorator를 만들어준다. 를 뜯어보면, log를 찍어주는데, 가 실행되기 전의 시간과, 그때의 시간부터 걸린 시간을 로 찍어주는 decorator이다. 당연히 test code도 한번 작성해보자. log가 찍히는 것을 확인하는 테스트이다. 은 log가 화면에 찍히는 것의 위치를 인자로 받는 곳으로 바꿔주는 함수인데 여기에 buffer를 하나 넣어서 buffer를 확인하는 방식으로 확인한다. buffer에서 log가 어떤방식으로 되어있나? 를 보면 한줄씩 log를 작성한다. 지금 저 buffer는 binary buffer이기 때문에, bufio 패키지의 를 사용해서 읽을 수 있도록 바꿔준다. 이
Decorator란? 프로그래밍의 한 패턴인데, Original한 기능이 있는것에 부가적으로 붙이는 것을 말한다. 좀더 자세히 설명해보자면, 어떤 데이터를 보낸다고 가정해보자. Data를 보낼때, 압축하고/다른사람이 못보게 암호화를 하고/추척가능하도록 log를 달고/ 등등의 다른 것들을 추가해서야 전송이 된다. 이렇게 추가되는 것들이 Decorator다. > Decorator는 왜 쓰는가? 왜냐면, 여러가지 기능이 추가될 수 있는데, 변할 수 있기 때문이다. Original 기능은 그대로 사용하고, Decorator만 변경하면 편하게 변경할 수 있다. Decorator 디자인 코딩을 할 때는 어떤식으로 설계를 할 것인가? 머리 박으면서 하면 할 수는 있지만, 어렵다. Design Pattern을 미리 정해놓고 만들기 시작하면, 편하고 누가 만들어도 패턴화해서 만들 수 있다. 하는 기능만 구현하면 끝난다. 지난번에 작성하던 myapp.go에서 추가된 func이다. 함수는 그 이름처럼, 유저 정보를 Map에서 삭제하는 기능을 하는 함수이다. 삭제기능 테스트라서 테스트 코드가 매우 길지만, 실질적으로 추가된 기능은 딱히 없다. golang에서 제공하는 에서는 요청이 없기 때문에 새로 만들어줘야 한다. 로 요청을 만들어주면된다. method를 테스트 할때는 새로운 데이터 업데이트를 위해서 함수의 세번째 인자로 Body를 직접 작성해서 넣어줘야 한다. 그리고 로 method를 생성해준 뒤에는, 실행을 위해서 http패키지의 함수로 실행해줄 수 있으며, 함수로 return된 requst를 인자로 넣으면 된다. 그리고 새로 업데이트 된 데이터를 확인해보면 문제가 있음을 확인
Go로 만드는 웹 3번째 - RESTful API 구성하기 RESTful API가 무엇인지부터 명확하게 알고 넘어가야 한다. 포스팅의 가장 아래에 참조한 링크를 남겨두었다. REST란 "Representational State Transfer"의 약자이다. 어떤 자원에 대한 CRUD(create, read, update, delete) 조작을 하는데, 이를 URL에 정확히는 URI에 표기하는 것이다. 어떤 Method로 어떤 URI로 보내면 어떤 요청이 되는건지 표시해주는 것. 하나의 명제로 정리하면, > REST 란? HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. 자원이란, 해당 소프트웨어가 관리하는 거의 모든 것을 말한다. HTTP Method를
Go로 File upload 가능한 서버 구성하기 지난 번 포스팅에서는 기초 web server를 구성했고, Json 방식으로 데이터를 주고받는 것까지 구현했다. 이번에는 file을 웹을 통해서 실제로 서버에 업로드 할 수 있는 웹 페이지와 서버를 구성해보고자 한다. 기초적인 기능이 들어간 코드는 아래와 같다. 이 코드를 보면, file을 서버로 전송했을 때, 서버가 어떤 메커니즘으로 처리하는지 알 수 있다. 파일을 저장하고자 하는 directory를 생성하고(기존에 없다면), 이 경로에 새로운 파일인 을 생성한다. 이후에 서버에서 받은 파일을 request의 FormFile()로 연 뒤에 함수로 데이터를 복사한다. 이때, 당연히 defer를 이용해 새롭게 생성한 과 을 Close() 해줘야 한다. server에 file_upload 테스트하기 test를 위한 코드가 더 길다... 그래도, 원리 자체는 전에 server에서 json을 테스트한거랑 크게 다
web 서버를 만들기에 앞서서 간단하게 어떻게 통신이 일어나는지 정리하면, client가 웹을 방문하고자 하면 통신을 하게 된다. HTTP(Hyper Text Transfer Protocol)의 약자이다. 우리가 만일 never 페이지를 방문하려고 하면, DNS를 통해서 IP를 받고, 해당 IP를 향해서 Request를 날리게 된다. Request를 어떻게 날릴 것인지에 대한 Protocol이 다 정해져 있다. Request에 따라서 문서를 보내면 이를 렌더링을 통해서 페이지를 띄워준다. 에전에는 단순하게 한번만 통신만 했지만, 이제는 여러번 반응형으로 페이지가 여러번 Request를 보내기도 하면서 요구사항이 많아지고 있다. 서버에서 Render를 할 수도 있으며, Client Render 두 가지 전부 가능한데, Client Render가 일어나기 위해서는 여러 데이터를 요청한다. 이를 Backend에서 데이터 Request에 맞춰서 데이터를 보내주는데 Go로 구성해