목록Spring (8)
가자미의 파닥파닥 프로그래밍

Fitingle 프로젝트의 서버 개발이 거의 끝나갑니다.. 프론트에서도 그 동안 내부적으로 문제들을 해결 하느라 서버와의 연동및 API 테스트를 진행해보지 않아서, 이제야 테스트를 시작하게 되었습니다. 그러던중 CORS 에러가 발생하는 것을 확인 하였고, CORS에 대해서 알아보고 해결하는 방법을 알아 보겠습니다. 또한, 아직 해결하지 못한 문제점을 알아 보겠습니다. CORS란? Cross Origin Resource Sharing(교차 출처 리소스 공유 정책) 서로 다른 도메인간에 자원을 공유하는 것을 의미합니다. 기본적으로 서로 다른 도메인간의 자원을 공유하는 행위는 브라우저에서 차단이 됩니다. 그 이유는 보안상의 이유입니다. 만약, 악의적인 사용자가 자바스크립트를 이용하여 악의적으로 서버에 접근을 ..
이전에 Fitingle 인증과 인가 처리에서 userId가 필요한 API들에 userId가 필요한 요청들에 대해서 직접 userId를 포함해서 보내던 것을 인증 객체에서 userId를 빼내어서 사용하는 것으로 해결해 보았습니다. 이번에는 인증 처리 Filter에서 Filter 처리하던 코드가 가독성이 너무 떨어져 이를 해결해 보려고 합니다. 이슈 내용 기존에 토큰을 검증하는 부분의 가독성이 떨어지고 있습니다. 바로 Filter에서 토큰을 해석하고, 맞지 않으면 response를 Filter 자체에서 반환하고 있기 때문입니다. 가독성이 떨어지면 문제가 발생했을때, 체크하기도 어렵고 내용을 팀원들과 공유하기도 힘들어집니다. 해결 근본적인 문제는 검증이 실패하면, 응답을 해당 Filter에서 직접 반환하기 때..
서블릿과 JSP의 한계 JSP와 서블릿은 결과적으로 다음과 같은 문제점이 있습니다. 비즈니스 로직과 UI와의 의존성이 있다. 비즈니스 로직과 UI 코드가 같이 존재해서 어느 하나를 수정하더라도 둘다 수정해야된다. 즉, 유지 보수에 어려움이 있다. 변경의 라이프 사이클이 다르다. 변경의 라이프 사이클이라 함은 변경하는 시점이 다르다는 것이다. 즉, UI를 수정하는 일과 비즈니스 로직을 수정하는 일은 각각 다르게 발생한다. 이 역시, 유지 보수를 어렵게 만든다. 기능 특화 JSP와 같은 뷰 탬플릿은 사실 화면을 랜더링 하는데 최적화 되어 있다. 이런 기능이 특화 되어 있는것에 부가적인 기능이 추가되는 비즈니스로직이 들어가는 것은 효과적이지 못하다. 그럼 이런 문제를 어떻게 해결하면 될까? 정답은 역할을 나누..

1. RabbiMQ 설치 먼저, 현재 실행중인 EC2에 접근해 줍니다. 그리고, 다음의 명령어를 수행해 줍니다. 이명령어를 입력해주고 기다리면 실제 설치는 끝납니다...(많이 허무합니다...) sudo apt-get update // apt 최신화 sudo apt-get install rabbitmq-ser // rabbitmq server 설치 2. RabbitMQ 실행 // root 권한으로 이전 systemctl start rabbitmq-server //서비스에 등록 systemctl enable rabbitmq-server //rabbitmq 확인 netstat -nl | grep -E -i "proto|5672" 3. RabbitMQ 대쉬보드 //대쉬 보드 설정 rabbitmq-plugins ..
Fitingl 프로젝트에서는 인증과 인가로 JWT를 사용하고 있습니다. 그런데 백엔드 내에서 인가에 대해서 이슈가 발생하였고 해당 이슈 내용을 공유해 보고자 합니다. 이슈 내용 기존에 userId가 필요한 API들에 대해서 post, get 요청시에 userId를 body에 담거나, query parameter로 담아서 보내게 하고 있었습니다. 그런데 이렇게 하게되면, 악의 적인 사용자가 fitingle에 회원 가입 후, 로그인을 한 뒤, body와 query parameter에 직접 userId를 바꿔서 보내게 되면 다른 사용자의 정보를 바꿀 수 있게 되는 이슈가 발생하였습니다. 해결 userId를 JWT토큰에 담아서 보내게 되면 이를 해결 할 수 있습니다. 기존에 토큰 subject에 사용자의 이메일..
그 동안 면접준비와 코딩테스트등으로 인해서 오랜기간 포스팅이 늦어 졌습니다. 이제 어느정도 정리가 되어 다시 포스팅을 시작해보려고 합니다. 이전 포스팅에서는 스프링의 정의와 스프링이 가지는 특징(스프링 컨테이너, 제어의 역전, 의존성 주입, AOP)에 대해서 알아보았습니다. 이번 시간에는 스프링 MVC 구조의 이해를 위해 MVC 이전에 사용 되었던 서블릿과 JSP에 대해서 다뤄 보겠습니다. 서블릿 서블릿이란 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말합니다 (위키백과). 만약 우리가 WAS를 직접 구현한다고하면 여러가지 작업이 발생합니다. 서버 TCP/IP 연결 대기, 소켓 연결 HTTP 요청 메시지를 파싱 및 읽기 POST 방식, /save URL 인지 Conten..