WEB/Spring
-
[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..
-
[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를 요청하고, 그 후 장보고의..
-
[Spring] 스프링 부트 동작 원리WEB/Spring 2020. 9. 15. 13:06
1. 내장 톰캣 톰켓을 따로 설치할 필요 없이 바로 실행가능하다. A와 B가 서로 메세지를 주고 받기 위해서는 OS에서 제공하는 소켓이 필요하다. 예를들어 A가 5000번 포트번호로 최초의 연결 용도로 소켓을 오픈한다. B가 A의 IP주소와 포트번호를 통해 5000번 포트에 연결을 성공하면, 무작위 포트 번호로 새로운 소켓을 만들고, 5000번 포트는 연결이 끊긴다. 이때 5000번 포트로 다른 사용자의 연결 요청을 계속 받기 위해서 새로운 포트와의 통신을 다중 스레드를 이용한다. 소켓 통신의 장점은 연결이 끊어지지 않는다는 점, 단점은 그 때문에 연결이 늘어날수록 부하가 크다는 점 HTTP 통신은 요청과 응답이 이루어지면 바로 연결을 끊어버리기 때문에 부하가 적다는 장점이 있지만, 연결을 끊어버리기 때..
-
[Spring] JPA 개념 잡기WEB/Spring 2020. 9. 14. 02:40
1. JPA는 Java Persistence API 이다. Persistence, 영속성은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는다. 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터 베이스 등을 활용하여 구현한다. JPA는 자바에 있는 데이터를 영구히 기록할 수 있는 환경(DBMS)에 저장하는 API 인터페이스를 통해 프로그래밍을 하고 이를 통해 프로그램을 만드는 것 즉 API란 프로그램을 만들기 위해서 제공하는 인터페이스를 의미한다. 홍길동이라는 사람이 장보고의 프로그램을 사용한다고 하면 장보고는 다음과 같이 약속을 정할 수 있다. 이때 약속은 상하관계가 존재하는 약속이다. 홍길동이 장보고의 프로그램을 사용하기 위해선 해당 인터페이스를 반드시 지켜야한다. 그러나 프로토..
-
[Spring] 스프링 개념 잡기WEB/Spring 2020. 9. 13. 23:02
1. 스프링은 프레임워크이다. 프레임워크란 틀 안에서 동작하는 것을 의미 "신입 개발자들아 요 틀 안에서만 작업하면 나처럼 고수가 될 수 있어!" 2. 스프링은 오픈소스다. 오픈소스란 소스코드가 공개 되어있다는 것을 의미 => 내부를 뜯어 고칠 수 있음! 3. 스프링은 IoC 컨테이너를 가진다. IoC(Inversion of Controller), '제어의 역전'이란 주도권이 스프링에 있음을 의미 위와 같이 make() 메소드와 use() 메소드의 의자는 다른 메모리 공간에서 실체화 된다. 의자를 공유하고 싶으면 make() 메소드에서 실체화 된 의자를 use() 메소드로 어떠한 로직을 통해 넘겨줘야한다. 그러나 이러한 로직을 짜기 굉장히 힘듬 그래서 스프링이 IoC를 통해 이러한 작업을 도와줌 스프링이..
-
[Spring] 스프링 MVC 프레임워크 설계 구조WEB/Spring 2020. 7. 19. 19:56
1. 웹 프로그래밍을 구축하기 위한 설계 모델 위의 그림과 같이 브라우저(클라이언트)에서 요청을 서버로 보내면 WAS(웹 어플리케이션 서버)에서 처리를 하게 됩니다. 이때 관련 정보를 DB(데이터베이스)에 접근해서 데이터를 찾고 그 데이터를 사용자의 응답에 맞게 가공하여 브라우저에게 응답해주는 모델입니다. 모든 것을 하나에 구현하기 때문에 개발속도가 빠르다는 장점이 있지만 유지보수의 측면에서 아주 큰 단점을 가지고 있습니다. Model2는 이러한 Model1의 단점을 보완한 설계 모델입니다. 철저하게 기능은 Service, DB와 연동되는 것은 DAO, 사용자에게 보여주기 위한 것은 View, 그리고 이러한 것들을 컨트롤 해주는 것을 Controller 모듈로 분리합니다. 이렇게 각각의 기능들을 모듈화 ..