전체 글 235

9/21

👣 개요 오늘은 서버의 추가 기능들을 구현하고 코드 통합을 하는 날이었다. 나의 경우, 회사 검색 기능, profile마다의 설정 분리, EC2 배포를 위한 Test API 서버 설정, 페이지네이션 기능 구현을 수행했다. 회사 검색 기능을 위해 QueryDSL을 적용했고 테스트 서버를 위한 설정을 분리하기 위해 local, test, prod 프로파일을 사용했다. 페이지네이션은 단순히 Page, Pageable를 이용해서 구현했다. 같이 백엔드를 수행하는 팀원 분께서는 '카카오 소셜 로그인' 기능을 구현해주셨다. 소셜 로그인을 수행하면 OAuth2 인증 과정을 거쳐 카카로 인증 서버로부터 Access Token을 받고 해당 토큰으로 유저 정보를 조회하고 해당 정보로 회원 가입을 시도한다. 이렇게 함으로서..

TIL 2023.09.21

배열 회전 스니펫

👣 개요 코딩 테스트에 자주 나오는 보일러플레이트 기록. [특정 행렬 회전시키기] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👣 코드 기본 아이디어 자리를 한 칸씩 옮기기 위해 swap처럼 임시 공간[tmp]을 하나 마련하고 1회전 하면서 tmp과 table[x][y]을 swap한다. 그리고 최종 마지막으로 최초 시작점과 tmp을 맞바꾸며 종료. int rotate(T[][] table, int x1, int x2, int y1, int y2) { T swap=0; // 순수 swap을 위한 공간 T tmp=0; // 회전을 위한 임시 공간 int x..

9/20

👣 개요 오늘은 필수 기능 구현의 마지막 날로 백엔드 API 서버와 프론트엔드 웹 서버를 서로 맞춰보는 날이었다. 하지만 이것은 생각보다 잘 이뤄지지 못했다. 예를 들어, 로컬 서버에서는 자유롭게 주고받던 쿠키값이 배포 서버에서는 넘어가지 못한다는지 댓글 관련 API 명세서에 유저 ID를 요구하는 바가 없어서 그대로 진행했다가 차후에 프론트엔트에서 ID를 사용해야 해서 급하게 추가해야 한다던가 등등의 문제가 발생했다. 다행이도 3-Layer 구조를 가진 spring은 이런 문제를 해결하기 매우 쉬웠다. 단순히 API에서 추가 데이터를 요구하는 것은 단순히 DTO에서 추가 칼럼을 제출하도록 하면 그만이고 Cookie로 전달하던 JWT도 Header의 Authorizaiton로 전달하도록 바꾸는 작업도 단순..

TIL 2023.09.20

9/19

👣 개요 오늘은 백엔드 API 서버와 프론트엔드 웹 서버를 합쳐서 테스트해보는 날이었다. cors에 대해 이해하긴 했지만 테스트 방법이 따로 없어서 우선 CORS 설정을 하지 않은 채로 프론트엔드로 전달했다. 하지만 당연하게도 CORS 문제가 터졌고 이를 해결하기 위해 처음엔 Postman으로 직접 테스트를 하면서 디버깅했다. 같은 기기 내에서 postman을 사용하면 Origin이 같기 때문에 문제가 발생하지 않는다는 이야기를 듣고 API 서버를 배포한 후에 로컬에서 postman으로 테스트하기로 했었다. postman으로는 문제가 없었고 때문에 해결되었다고 생각한 API 서버를 다시 React 팀에게 전달했다. 하지만 또 문제가 발생했고 다시 문제를 해결해야 했었다. 아예 테스트 환경을 프론트엔드 팀..

TIL 2023.09.19

9/18

👣 개요 오늘은 주특기 프로젝트의 모든 기초적인 API 기능 구현을 마치고 테스트까지 수행한 뒤, React 개발팀을 위한 간단한 배포까지 수행했다. 그동안 하지 못한 코드 병합을 끝마치고 코드 병합 중 문제가 발생한 부분에 대해 디버깅을 수행했다. 이미 테스트 코드를 작성하면서 오류 가능성을 모두 제거한 보람이 해당 과정에서 빛을 바랬던 것 같다. 코드 병합 후 postman으로 수행한 테스트들이 모두 아구가 맞아 떨어지면서 빠른 코드 병합을 수행했다. 다만 다소 아쉬웠던 부분은 profile 별로 설정과 코드를 분리하지 못한 것이 아쉬웠다. React 팀에서는 mock 서버를 이용해서 개발을 수행했기에 실제 API 서버를 이용해서 테스트할 필요성이 생겼다. 때문에 나는 이것을 배포하기로 결정했다. 이..

TIL 2023.09.18

WIL - 9/11 ~ 9/17

👣 개요 이번주는 Lv 5 과제 수행을 하고 금요일부터 주특기 프로젝트를 진행했다. Lv 5 과제는 단순히 좋아요 기능을 구현하는 것이었고 추가적으로 카테고리 기능, 전역 예외 처리 기능 등등을 구현하는 것이었다. 좋아요 기능은 쿼리 최적화를 위해 queryDSL을 이용할 수도 있었지만 그냥 기존의 소스 코드를 최대한 건드리지 않기 위해 엔티티 리스너를 이용했다. 카테고리 기능은 단순한 CRUD 였고 전역 예외 처리도 AOP를 사용했다기 보다 미리 구현된 ControllerAdvice를 이용해서 처리했다. 그리고 금요일부터는 주특기 프로젝트를 시작했는데 주특기 프로젝트는 React 개발자 2명, Sprign 개발자 2명으로 이뤄져 하나의 웹 사이트를 개발하는 과정이다. 아직 2일 밖에 진행하지 않아 진행..

TIL 2023.09.17

CORS, SOP

👣 개요 예를 들어, 피싱 사이트가 보통의 네이버 사이트(www.fake:80)를 모사해 피해자를 속였다고 가정해보자. 해당 사이트의 HTML에 포함된 JS 코드에 의해 현재 LocalStorage의 정보들을 모두 긁어서 금융 사이트의 토큰을 찾고 은행 웹사이트 서버(www.bank:8080/account/1532)로 인출을 요구하는 요청이 전송된다고 가정해보자. 만약 피해자가 아무것도 모르고 공격자가 만든 웹 사이트를 클릭하면 그 순간 피해자는 의도하지 않은 은행 계좌의 인출이 요청될 수 있다. 이러한 경우를 대비해 은행 웹사이트에서 사이트의 출처를 표기한 Referer 헤더를 비교할 수도 있지만 웹 브라우저 차원에서 이 공격을 막는 대책을 이미 세워뒀다. 그것이 바로 SOP 다. 👣 SOP Same-..

네트워크 2023.09.17

9/16

👣 개요 오늘은 주특기 프로젝트 2일차로서 나에게 주어진 프로젝트의 기초 기능 구현을 모두 마쳤다. 내게 주어진 것은 다음과 같았다. Company Entity 관련 API 구현 Comment Entity 관련 API 구현 전역 예외 처리 Spring Security 도입 인가 필터 구현 @CreatedBy 기능 활성 이번 과제는 이전의 주특기 훈련 주차의 코드와 다르게 테스트 코드 관련으로 신경을 썼다. 왜냐 하면, 현재 Member 로그인 기능을 다른 팀원 분이 맡아주셨기에 통합 테스트를 진행하기 어려운 상황이었다. 그래서 단위 테스트를 진행하였고 덕분에 단단한 코드를 작성할 수 있게 되었다. https://github.com/Specialty-Project-Team-2/miniproject-back..

TIL 2023.09.16

9/15

👣 개요 오늘은 주특기 프로젝트를 시작하는 날이었다. 팀원들과 만나 프로젝트 주제를 정하고 API 명세서를 작성하고 WireFrame, ERD 설계도도 작성했다. 아래는 그 결과들이다. 미니프로젝트 S.A 0. 항해99 미니프로젝트 2조 lavender-ski-896.notion.site 우선 프로젝트를 진행함에 있어서 기본 스탠스는 최소한의 Scope로 진행을 하고 완성이 된다면 그 위에 추가 기능들을 얹는 형식으로 진행하고자 했다. 이전 프로젝트 당시 욕심을 부려 너무 많은 양의 기능을 구현하려다가 끝내 완성하지 못한 경험이 있어서 이런 팀원들의 합의는 매우 마음에 들었다. 하지만 팀원들은 WAS와 Web Server의 차이를 잘 이해하지 못해 API 명세서가 완벽하지 못한 채로 작성이 끝나버렸다. ..

TIL 2023.09.15

github KanBan Board 사용

👣 To List 시각화의 중요성 협업하기 위해선 작업들을 규정하고 어떤 작업들이 서로 의존적인지 확인해야 한다. 그렇기 위해서는 팀원들과 어떤 업무가 있는지 어떤 업무끼리 연관성이 있는지 해당 업무의 진행 상황은 어떤 정도에 있는지를 파악해야 한다. 당연히 간단한 프로젝트에 대해서는 단순히 무엇무엇을 누구누구가 맡아주세요 수준에서 해결이 되고 또 그것이 더 간단하게 끝날 수 있다. 처음에는 To Do List에 대한 당위성에 의심을 하여 사용하지 않는 경우도 발생한다. 성과 평가의 합리성 하지만 프로젝트 도중 추가적으로 작업들이 생겨나고 각자의 처리속도가 다르다면 작업 할당에 합리성이 떨어지고 Team 관계는 극악으로 치닫게 된다. 차후 성과에 대한 평가도 어려워지고 일 잘하는 사람은 일을 더하는데 그..