항해99 7기 활동

항해99 5주차 WIL

달리는 꿈나무 2022. 6. 12. 16:13

1. 주특기 심화 과제

주특기 심화 과제는 배달의 민족과 같은 배달에 대한 비즈니스 로직을 구성하고 데이터베이스를 만들어 서비스를 실행하는 것이었다. 처음에 과제를 보니 막상 막막해서 뭘 할지 갈피가 안 잡혔다. 커피 한 잔 쭉 마시고 머리를 저으며 글자를 하나 하나 차근차근 보기 시작해서 대략적으로 이해가 간 나는 일단 데이터베이스 구성을 생각했다. ERD를 임의로 그려가며 어떻게 연관관계를 지어야 데이터들이 서로 엉키지 않고 가능할지 계속 고민했다. 일대다 관계를 계속 연관시켜주고 되도록 데이터들 간에 충돌이 일어나지 않는 설정을 찾았다. 레스토랑 엔티티, 음식 엔티티, 주문 엔티티, 주문 상세 엔티티를 구성해 필자에게 주어진 api 명세서에 있는 리스폰스 대로 데이터들을 정렬하고 보내주는 로직을 짰다. 이러한 과제를 하면서 현업에서 중요시 여기는 비즈니스 로직에 대한 구성 능력을 파악한 것 같다. 물론 이 로직 뿐만 아니라 로직 구성이 끝나면 스웨거든 익셉션 헨들러든 스프링 시큐리티등 마쳐야할 백엔드 기능들이 산더미다. 지금까지 했었던 과제들을 되짚어 보면서 총체적으로 스프링을 접근하는 관점 또한 필요한 것 같다.

 

2. CORS

SOP

보통 서버는 SOP라는 보안 매커니즘을 사용한다. 한 Origin으로 부터 로드된 문서나 스크립트가 다른 Origin의 리소스와 상호작용할 수 있는 방법을 제한하는 매커니즘이다. 오리진이란 출처로 프로토콜, 호스트, 패스, 쿼리 스트링, 프래그먼트, 포트 번호로 구성된 URL이 지정하는 서버를 뜻한다. 즉 SOP, same origin policy는 같은 출처에서만 리소스를 공유할 수 있다는 규칙을 가진 정책인 것이다. 기본적으로 대다수의 웹 어플리케이션들은 보수적인 보안 정책으로 SOP를 디폴트로 지향하고 있다.

 

CORS

CORS Cross Origin Resource Sharing은 말 그대로 다른 출처들 간에 리소스를 공유하는 것이다. 최근에야 프론트엔드, 백엔드 개발자의 구분이 명확하지만 불과 10년 전만 하더라도 자바스크립트가 아직까지 html에 포함된 형식을 지향하던 과거에서는 서버 개발자가 뷰까지 작업하는 경우가 상당했다. 즉 웹 어플리케이션을 개발하면 하나의 서버에서 리소스를 내부적으로 사용하는 것이 당연했다는 뜻이다. 하지만 요즘과 같이 리액트는 리액트대로 서버를 구축하고 스프링은 스프링 대로, 노드js는 노드js대로 서버를 구축하여 오리진이 두 개 이상이 생기고 그 둘 간의 데이터 공유가 필요해지는 환경에서는 SOP 대신 CORS를 사용하여 두 개 이상의 서버들에서 양방향 교류를 지향해야 원할한 작업이 이루어진다. 가령 리액트는 3000포트를 쓰고 노드js npm 명령어를 사용하여 리액트만의 서버를 띄운다. 스프링은 8080포트를 사용하여 스프링만의 서버를 띄운다. 이 때 프론트엔드인 리액트 서버에서는 클라이언트의 동작을 axios를 통해 백엔드에 보내주어야 되고 스프링, 노드 js 등의 백엔드 서버에서는 api를 통해 프론트의 동작을 받아 데이터를 다시 api를 통해 프론트로 보내주어야한다. 이 때 CORS 정책 설정을 통해 서로 다른 출처의 리소스 공유를 허락해주어야 리소스 공유가 가능하다.

 

출처: https://beomy.github.io/tech/browser/cors/

3. 미니 프로젝트

드디어 주특기 교육이 끝이 나고 실제로 프론트 분들과 같이 프로젝트를 진행하게 되었다. 프론트 분들의 주도 하에 와이어프레임을 하고 api명세서를 작성하여 어떻게 api를 구성하고 기능을 만들지 얘기하였다. 사실 이번 주차의 의미를 여러 방향으로 해석할 수 있다. 어떤 사람들은 자기가 배운 것들을 되짚어 보는 주로, 어떤 사람들은 포트폴리오를 위해 구현해보고픈 기능들을 구현하는 데 집중하는 주로, 또 어떤 사람들은 프론트와 백 간의 교류와 협업 방식을 익히는 주로 해석할 수 있다. 사실 필자는 아직까지 잘 하고 있는가 의문이 든다. 충분히 여러 기능을 구현하는 능력을 가지고 있다고 쉽사리 말하지 못하고 아직까지 기능에 대해 실력이 특출나신 분들에게 물어보는 수준이다. 필자는 팀장이 시키는 대로 받고 그것을 최대한 구현하는 작업 방식을 선호한다. 필자가 무언가를 주도하거나  이끌면 강압적인 면모가 나타날 수 있고 이로 인해  협업이 어긋날 수도 있기 때문이다. 필자는 이번 주간을 프론트 분들과의 협업을 익히고 CORS를 적용시켜 최대한 에러 없이 프로젝트가 작동하는 데에 의의를 둘 예정이다. 이 글을 읽어 주시는 분들께 심심한 응원을 부탁한다. 화이팅~~~~