백앤드가 이정도는 해줘야 함

 

백엔드 개발자 공부를 하면서 실제 현업에서 필요한 사항이나 큰 규모의 자료를 관리할 때, 협업시 필요한 사항들에 대해 알아두는 것이 중요하다는 생각이 들었다. 작은 팀플 프로젝트에서도 버전 관리의 중요성이 절실할 때가 있었기 때문에 이런 문제를 해결하기 위한 것들이 필요했고, 검색을 통해 인용된 개발블로그를 알게 되었다.

 

백엔드 개발자가 알아야할 사항에 대해 설명하고 있는데 읽으면서, 모르는 용어나 기억해둘 내용을 적어두기로 했다. 개념들이 익숙하지 않은 것이 많아 여러 블로그나 검색자료를 중간중간 첨부했다.

 


 

Vert.x

Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.
JVM 에서 반응형 애플리케이션을 설계하기 위한 툴킷. 

 

 

Gradle 과 Maven

Spring boot 설계시 볼 수 있는 프로젝트 빌드 방식의 종류이다. Gradle 은 Maven 보다 빌드 속도가 빠르고 동적 프로그램 구축에 효율적이다. groovy 스크립트로 xml 사용보다 가독성 높은 멀티 프로젝트에 유용하다.

 

 

FTP 클라이언트

File Transfer Protocol, 호스팅과 웹서버의 파일을 내려받고 이동을 할 수 있도록 하는 프로그램을 설정해야 한다.

 

 

SSH 클라이언트

Secure Shell, 원격지 server 를 보호하기 위한 프로그램/프로토콜이다. 이전 원격제어 시스템(telnet)에 비해 보안상 우수하다. 복호화된 Private Key와 Public Key 가 한 쌍의 key 라는 것이 확인되면 데이터를 주고 받을 수 있게 한다.

리눅스와 Mac 은 별도의 SSH 클라이언트 설치가 필요하지 않지만, 윈도우 운영체제에는 없으므로 PuTTY,  Xshell 과 같은 프로그램의 설치가 필요하다. (생활코딩 SSH)

 

 

미들웨어 개념로그시스템

다양한 개발자들이 사용한 언어 및 개발환경을 지원하고, 상호연동을 통해 표준화된 인터페이스를 제공한다. 자료의 일관성을 가져올 수 있으며, 유지보수가 쉽다는 장점이 있다.

IT 환경에서 사용자가 어떤 경로로 접속하고 명령어들이 사용되었는지에 대한 일련의 과정을 '로그'라는 데이터에 쌓이게 된다. 로그 데이터를 잘 관리하는 것은 프로그램 설계 및 구축에 있어 그리고 추후 에러 데이터를 관리하고 파악하는데 용이하기 때문에, 이 데이터를 관리할 수 있도록 하는 것이 중요하다.

 

 

버전관리 시스템(소스코드 관리시스템)

흔히 쓰이는 Git 과 Github 을 떠올리면 된다. 

Git 에서는 fork 를 통해 타인이 만든 코드를 가져와 나의 저장소로 만들 수 있다. clone 작업으로 원본 소스에 영향을 미치지 않는다. 내가 작업한 파일을 원본 소스에 반영하길 바라는 경우에는 pull request 를 할 수 있고, 원본 소스 제작자가 검토 후 merge 를 하게 된다.

SVN 은 Git 과 달리 브랜치 개념이 없고 클라이언트-서버 시스템으로 느리고 버전관리에 적합하지 않다. git 의 경우 스냅샷으로 저장하고 각 시점의 델타 또한 저장한다. 즉, 매번 저장시에 그 파일 전체 또는 변경된 코드의 내용도 같이 저장하는데 변화 크기에 따라 git 이 알아서 설정한다. 

Git 이 참조할 원격 저장소 즉, 웹호스팅 서비스를 제공할 프로그램으로 대표적인 것이 바로 Github 이다. 편리한 사용을 위한 GUI 는 SourceTree 또는 GitKraken 등 이 있다.

 

 

이슈관리 도구

GitHub Issues & Projects 를 통해 이슈들을 그룹화하는 milestone 을 만들어 이슈관리자를 따로 지정해서 관리할 수 있다. 이슈 관리를 위해서 projects 를 생성 칸반보드를 활용할 수도 있는데, 이슈의 상태 진행중, 완료 등의 여부를 설정할 수 있다.

+

칸반에 대해 공부하면서 기억해둘 글귀가 있어서 가져왔다.

당신이 더 많은 작업을 하기 전에, 지금 하고 있는 작업부터 끝내라. 멀티 테스킹을 그만둬라. 이 일 저 일을 번갈아가면서 하지 마라.

요새 많은 것을 하려고 이것저것 하고 있는 내 모습이 생각나서... 반성해야겠다. 사실 글의 내용은 지금 하려는 업무에 중심을 두고 집중할 수 있는 팀플레이가 개선되는 것이 얼마나 중요한지를 알 수 있는 대목이었다.

 

 

API 설계 

불필요한 커뮤니케이션을 줄여줄 수 있는 API 의 설정.

HTTP API 는 HTTP 를 기반으로 통신하는 것을 의미하는REST API 여기에 추가적인 제약조건이 들어간다. 네트워크 아키텍처 원리로서의 REST 제약조건은 인터페이스의 일관성, 무상태(클라이언트의 콘텍스트 저장을 하지 않음), 캐시처리, 계층화(서버의 접속방식) 등이 있다.

클라이언트 사이드에게 익숙한 아키텍처를 설정하고, 러닝커브가 감당가능한 수준이어야 한다. 여기서 러닝커브란 무언가를 학습하는데 소요되는 시간으로 해당 API 를 배워서 적용할 수 있는 시간이 효율적이여야 한다는 것이다.

 

 

직렬화 포맷

JSON 이 일반적으로 많이 사용되며 Java Script Object Notation 의 약어이다. JSON 은 키-값의 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. Java 에서 설정한 변수 값, 즉 데이터가 다른 언어에서도 적용되기 위해서는 직렬화 포맷을 설정하는 것이 중요하다.

 

 

사용자 인증방식

사용자 인증은 보안상의 이유로 중요한 부분이다. HTTP Authorization 헤더를 사용해서 인증데이터를 보낼 수 있다.

사용자가 resource 에 접근하기 위해서는 인증과 인가라는 절차를 거쳐야 한다. HTTP 인증 절차에서는 HTTP 의 stateless 한 특성상 요청에 따른 결과를 응답받을 때에는 입력한 데이터가 보존되지 않고 끊어지는 특성이 있다.  

HTTP 헤더에 매번 정보를 입력받아 전송하는 것은 보안에 취약하기 때문에 다음의 방법들이 나타났다.

"쿠기"는 데이터를 사용자의 컴퓨터에 저장하며, 브라우저를 끄더라도 인증이 유지된다. "세션"은 쿠기와 달리 부라우저를 끄기 전까지 인증이 유지되며, 더 많은 메모리가 사용된다. 그리고 서버의 자원을 사용한다. 마지막으로 "토큰"은 JSON WEB TOKEN (JWT) HTTP 에 암호화된 토큰을 같이 보내어 Secret key 없이는 해석이 불가하게 만드는 것이다. 대신 서버의 낭비가 크다는 단점이 있다.

웹인증 관련 코드

 

 

HTTP API 설계와 문서화

API 설계를 어떻게 하는지 히루쿠 플랫폼 API 를 만들기 위해 쓰인 HTTP API 디자인 가이드 를 보며 확인해보자. 각각의 GET, POST, DELETE, PATCH 를 이용해서 어떤 기능에 활용할 것인지를 정리해두는 것이다.

정립된 API 설계를 팀원들과 공유하기 위해서 여러가지 방법이 있겠지만 GitBook 을 활용한다.

 

+

API 설계에 대해서는 좀 더 공부가 필요하다. 관련 수업을 듣고 다시 정리해야겠다.

 

 

WAS 개발 - 언어와 프레임워크 설정, Hello World 서버 작성

 

 

의존성 관리도구

외부 라이브러리를 관리하기 위한 도구이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글