WEB
-
[Spring] 정적 파일 로드시 URL에 jsessionid가 붙는 경우 해결WEB/Spring 2022. 9. 10. 12:13
개요 보안팀으로부터 back office 프로그램에 대한 동적 테스트를 진행해달라는 요청사항을 받아 테스트를 진행하던중, 정적 파일 로드시 URL에 jsessionid가 붙어 XSS 공격으로부터 취약하다는 검진 결과가 나왔다. 해결 방법 톰캣, 즉 서버 입장에서는 웹 브라우저의 쿠키 지원 유무를 모르기 때문에 쿠키값도 전달하고 URL에 jsessionid도 함께 전달하는 것이 원인이었다. 따라서 서버쪽에서 URL 전달 방식은 비활성화하고 쿠키를 통해서만 세션을 유지하도록 설정을 해주면 더이상 URL에 jsessionid가 노출되지 않는다. 스프링 MVC를 사용할 경우 # web.xml COOKIE 스프링 부트를 사용할 경우 # application.properties server.servlet.sessi..
-
[WEB] 쿠키(Cookie)와 세션(Session)의 개념 및 차이점WEB 2022. 8. 23. 18:11
개요 웹을 공부하는 사람이라면 쿠키(Cookie)와 세션(Session)에 대해 들어봤을 것이라고 확신한다. 이는 웹에서 굉장히 중요한 개념 중 하나이므로, 각각의 개념이 무엇인지, 차이점은 무엇인지 이해해보자. HTTP 통신의 탄생 쿠키와 세션에 대해 알아보기전에 간단하게 HTTP 통신이 왜 나오게 됐는지, 이러한 HTTP의 어떠한 특성에 의해 쿠키와 세션이라는 개념이 나오게 됐는지 알아볼 필요가 있다. 소켓(Socket)이란 네트워크상에서 서버와 클라이언트 두개의 프로그램이 특정 포트를 통해 양방향 통신이 가능하도록 만들어주는 소프트웨어 장치를 의미한다. 위의 그림에서 A와 C, B와 C가 서로 통신하기 위해서는 OS에서 제공하는 소켓이 필요하다. 예를들어 A가 5000번 포트로 연결 용도로 열린 C..
-
[WEB] JWT(JSON Web Token)이란?WEB 2021. 2. 12. 03:00
JWT를 사용하는 이유 (세션의 단점) 클라이언트가 무수히 많을 경우 하나의 서버로 모든 요청을 처리하기 버거움 대부분의 대용량 트래픽을 다루는 회사들은 여러 개의 가용서버를 운영 클라이언트의 요청은 가용 상태에 따라 적절히 서버로 이동(로드 밸런싱) 이때 문제는 각각의 서버마다 다른 세션 저장소를 가진다는 것 따라서 최초에 접속한 서버에 세션 아이디가 저장되고, 클라이언트는 쿠키를 부여받음 그런데 만약 다른 서버로 다음에 연결되면, 해당 클라이언트는 쿠키를 부여받았지만 처음 접속한 걸로 취급받음 이를 해결하는 방법은 다음과 같다. 1. 최초에 들어간 서버로 계속 들어가게 만든다. 2. 세션 저장소의 내용을 복제한다. 3. DB에 세션 내용을 저장한 후, 공유해서 사용한다. => but 속도가 느림 결국..
-
[Spring] lombok constructor 생성 에러WEB/Spring 2021. 1. 31. 16:00
REST API 실습을 하다가 아래와 같은 오류를 만나게 되었음 error: variable userRepository not initialized in the default constructor private final UserRepository userRepository; 해당 오류는 gradle 5 이상을 사용할 때 종종 나오는 에러로 gradle의 lombok dependency를 추가해줄 때 다음과 같이 바꿔줘야 합니다. compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' // 추가
-
[Spring] 스프링 부트 + 리액트 환경 구축 및 연동WEB/Spring 2021. 1. 24. 15:50
오늘 진행할 실습 스프링 부트 환경 구축 리액트 환경 구축 스프링부트와 리액트 연동하기 스프링 부트 환경 구축 먼저 스프링 부트 환경을 구축하도록 하겠습니다. 스프링 부트 환경을 구축하기 위해 필요한 준비물은 다음과 같습니다. JDK 1.8 이상 STS or IntelliJ (스프링 부트를 돌릴 수 있는 IDE 아무거나) 해당 글에서는 이미 준비물이 설치되어 있으므로, 실습에 앞서 두 가지를 먼저 준비하셔야합니다. 이전 블로그 글에 JDK 설치법을 올려두었으니 참고하시면 좋을 것 같습니다. (IDE는 사람마다 다른 것을 사용하므로 본인이 사용하는 IDE 설치법을 찾아보시길 바랍니다.) 필요한 것들을 모두 준비하셨다면, 이제 실습에 진행할 스프링 부트 프로젝트를 만들어보도록 하겠습니다. 저는 아래와 같이 ..
-
[Spring] 스프링의 전통적인 트랜잭션, JPA의 OSIV 전략WEB/Spring 2020. 9. 29. 16:37
프로그램이 시작이 되면 처음으로 톰캣이 시작이 된다. 서버 작동을 위해서 web.xml이 읽어지고, 내부의 context.xml이 읽어져 DB에 연결이 되는지 확인한다. 연결이 잘된다면, 위와 같은 세팅이 완료된다. 이때 '홍길동이 장보고에게 10000원을 송금한다.' 라는 요청이 왔다고 가정한다. web.xml, 필터를 거쳐 스프링 컨테이너의 컨트롤러단에 요청이 도착한다. web.xml과 필터를 거치는 과정에서 DB 연결 세션이 만들어지고, (JDBC 커넥션 완료) 트랜잭션이 시작된다. (+ 영속성 컨텍스트가 만들어진다.) 컨트롤러단에서 어떤 요청이 들어왔는지 확인하고, 그 요청에 맞는 서비스로 요청을 전달한다. 서비스단에서 레포지토리단으로 먼저 홍길동의 계좌에 select를 요청하고, 그 후 장보고의..
-
[JavaScript] Ajax를 사용하는 이유WEB/JavaScript 2020. 9. 22. 17:41
1. 요청에 대한 응답을 Html이 아닌 Data(JSON)으로 받기 위해서 고객이 사용하는 클라이언트는 크게 2가지로 웹과 앱이 있으며, 일반적으로 서버로부터 응답받을 때 웹은 HTML 파일을 받고 앱은 데이터(JSON)를 받는다. 이것은 서버를 이원화하여 구축한 것을 의미하며 이때 '서버를 통합하여 각각의 클라이언트에게 응답해줄 순 없을까?'라는 의문점에서 고안된 방법이 Ajax 통신이다. Ajax 통신을 사용하면 웹은 서버로부터 데이터(JSON)를 리턴 받을 수 있으며 그렇게 되면 서버의 분리 필요 없이 하나의 서버로 각각의 클라이언트 요청을 받아 응답해줄 수 있게 된다. 대신 웹 클라이언트는 추가적인 요청을 통해 HTML 파일을 받아야 한다. 2. 비동기 통신을 하기 위해서 비동기란 순서에 상관없..