Spring Framework [Spring Framework] 11강 - static file 처리와 File Upload Static web resource 처리 서버의 처리가 필요 없는 static web resources는 요청 시 서버를 거치지 않고 곧바로 응답이 필요 특정 URL로 요청이 오면 static resource로 인식하고 바로 응답 수행 Spring에서도 static resource와 Dynamic resource를 분리하여, static resources 응답을 빠르게 해줄 수 있도록 지원합... 백엔드JavaSpring FrameworkJava [Spring Framework] 10강 - RESTful API 그런데 RESTful API를 쓴 경우는 URL에 행위가 안써져 있고 단순히 특정 데이터 명시가 필요할 경우만 데이터를 명시하고 끝이 납니다. 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링 할 수 있는 라이브러리를 제공 Java에서 Jackson 라이브러리 의존성을 추가하면, 별다른 작업 없이 JSON 데이터를 Java 객체로 자동으로 변환시켜줍니... 백엔드JavaSpring FrameworkJava [Spring Framework] 9강 - HTTP 파라미터 처리 HTTP 요청 파라미터 처리 HTTP 요청 파라미터를 자바 객체로 변환하는 기능인 Command 객체를 사용할 수 있다. @RequestParam 어노테이션을 이용한 요청 파라미터 구하기 하지만 @RequestParam(value="id", required=false, defaultValue="") 이런식으로 작성하면 null값으로 바꿔줍니다. "required=false" ---> 파라미터... 백엔드JavaSpring FrameworkJava Spring 프레임워크란❔ Spring Framework는 Java 애플리케이션 개발을 위한 포괄적인 인프라 지원을 제공하는 Java 플랫폼이다. Spring은 인프라를 처리하므로 애플리케이션에 집중할 수 있다. 복잡한 Enterprise 서비스를 개발하는데 복잡한 비즈니스 로직과 Low-level의 처리를 분리시켜 개발자로 하여금 비즈니스 로직에만 집중할 수 있게 만들어 주었다. EJB에서의 문제점은 비즈니스 obj... web frameworkSpring웹 프레임워크java app웹 개발Java FrameworkSpring FrameworkJava Framework [Spring] @Transactional 어노테이션 상속 Spring Framework 프로젝트에서 적용되던 @Transactional 어노테이션이 Spring Boot 프로젝트에서 적용되지 않는 문제 발견 Spring Framework 의 경우 JDK Dynamic Proxy(인터페이스 기반) 로 Proxy 를 생성하고 Spring Boot 의 경우 CGLib(클래스 기반) 로 Proxy 를 생성한다. CGLib 으로 처리 시, 인터페이스에 선언... Spring bootSpringaopSpring FrameworkSpring Spring been lifecycle Spring Bean 라이프 사이클에 대해 알아본다. Spring에서는 Spring Container, IoC Container라는 개념을 사용한다. Spring Container는 Spring Framework의 핵심부에 위치하며, 객체 주입을 이용하여 Application을 구성하는 Component들을 관리한다. 이때 Spring Container에서 생성되는 객체를 Bean이라고 한다... Spring FrameworkSpring Framework Simple BBS 애플리케이션 배포 #4 지난번 SimpleTodoList 애플리케이션을 진행하면서 적용했던 스프링 시큐리티를 이번에는 MVC 기반 애플리케이션인 SimpleBBS에도 적용하는 것이 주 목적이었는데 확실히 까다로운 부분이 많았지만 결과적으로 잘 적용할 수 있었다. 그리고 인증, 인가도 JWT와 이에 저장된 사용자 정보를 이용했기 때문에 스프링 시큐리티의 로그인, 로그아웃 기능을 별로 활용할 수 없었는데 이번 Simp... Spring Frameworkspring securitySpring Framework [Spring 입문] 03. AOP(Aspect Oriented Programming) 이번 글에서는 관점 지향 프로그래밍을 의미하는 AOP에 대해 알아보겠습니다. AOP(Aspect Oriented Programming)이란? : AOP, 관점 지향 프로그램이란, 횡단 관심사(흩어진 관심사, cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임입니다. 두 개의 메서드는 hello, bye 출력이라는 동일한 코드를 가... Spring FrameworkaopSpring Framework Spring Framework-20 👦🏻이번엔 유저의 객체를 인증 객체로 받아보자! 원래 userSession에 저장된 email과 post의 유저의 email을 비교하던 부분을 Spring Security의 인증 객체의 email과 비교하도록 변경합니다. <sec:authentication> 태그를 사용하면 인증 객체를 받아올 수 있습니다. UserArgumentResolver를 등록하는 부분을 주석처리합니니다. @Authe... Spring Frameworkspring securitySpring Framework Spring Framework-11 🔗이제 글과 유저를 연결해보자! 다음 SQL을 수행하여서 외래키를 추가해 user 테이블과 post 테이블을 연결해줍니다. name 필드를 지우고 다음과 같이 수정합니다. user는 작성한 사람의 정보가 담길 필드입니다. 원래 name 필드를 출력하는 부분을 다음과 같이 수정합니다. 마찬가지로 name 필드를 출력하는 부분을 다음과 같이 수정합니다. 또한 모델 post가 없을 때, 글을 등록... Spring FrameworkSpring Framework Spring Framework-10 🔓이번엔 로그아웃을 해보자! 찾기를 사용하여(윈도우, intellij 기준 CTRL+F) logout modal안에 있는 logout을 찾아 다음과 같이 수정합니다. 그리고 스크립트를 추가합니다. logout 버튼이 클릭되면 POST로 /logout에 요청을 보내고, 요청이 성공하면 로그인 페이지로 이동합니다. 로그아웃 요청이 오면 session을 해제하여 로그아웃을 수행합니다. 로그아웃 후... Spring FrameworkSpring Framework Spring Framework-15 ✂️이번엔 글을 삭제할 때 파일도 삭제하도록 수정해보자! 외래키로 연관된 데이터를 삭제하는 방법은 테이블에 ON DELETE CASCADE를 주면 됩니다. 하지만 여기서는 @Transactional을 사용하기 위해 다른 방법으로 합니다. post_id로 조회와 수정을 할 수 있도록 수정합니다. post_id로 삭제할 수 있도록 수정합니다. 업로드된 파일과 DB에 저장된 파일의 정보를 삭제합니... Spring FrameworkSpring Framework Spring Framework-5 📕 불러온 글을 읽어보자! 글 제목을 누르면 해당 글을 조회할 수 있도록 아래와 같이 수정합니다. 이전에 글 작성할 때 사용했던 뷰를 수정하여 글을 읽도록 하겠습니다. 모델 post가 있을 시에는 post의 내용을 보여주고 없다면 이전처럼 새 글을 입력하는 것으로 수정합니다. form을 아래와 같이 수정하면 됩니다. <c:choose> 태그는 jstl문법으로 switch case문과 비슷하다... Spring FrameworkSpring Framework [노트필기] Spring Framework 설치 Framework : 개발방식이 구조화 된 것 수업시 Spring Framework 개발환경 JDK Tomcat Database Spring Framework 개발툴 (eclipse 사용예정) Spring Tool Suit 3 : 기본적인 프로젝트가 들어가있지만 무거움 Spring Tools 4 for Eclipse : 아무것도 없어서 사용자가 필요한 부분을 추가설치해야 함 (이걸로 학습예정... 노트필기Spring FrameworkSpring Framework Spring Framework-7 ✂이젠 작성된 글을 삭제해보자 삭제 버튼과 삭제 버튼을 처리하는 스크립트를 추가합니다. 삭제를 처리하는 SQL과 메소드를 만들어줍니다. 삭제를 처리하는 메소드를 만들어줍니다.... Spring FrameworkSpring Framework Spring Framework-12 🚧이제 작성자가 아니면 수정, 삭제를 못하도록 막아보자! 아래와 같이 JSTL c:if 태그를 사용해서 userSession에 저장되있는 email과 글의 작성자의 email이 다르다면 수정, 삭제 버튼이 보이지 않도록 수정합니다. 버튼만 막는다고 요청을 보낼 수 없는 것은 아닙니다. postman과 같은 도구로 부적절한 경로로 요청을 보낼 수도 있습니다. 따라서 이를 막아야합니다. 이를 막... Spring FrameworkSpring Framework Spring Framework-17 🗄 이번엔 인메모리 방식이 아닌 DB에서 유저를 가져와 인증해봅시다! Spring Security에서는 UserDetailService를 이용하여 유저를 조회합니다. 우리는 이를 구현하는 클래스를 만듭니다. 우리의 username은 email이므로 userMapper가 파라미터로 들어온 email로 유저를 조회하여 반환할 수 있도록 만듭니다. UserDetailService가 반환하는 클래스... spring securitySpring FrameworkSpring Framework Spring Framework-14 📥 이번에는 글과 연결된 파일을 다운로드해보자! 버튼을 추가해서 글에 연결된 파일이 있을 시 버튼을 만들어 다운로드 할 수 있도록 수정합니다. 글과 연결된 파일들을 저장할 fileList 필드를 추가해줍니다. 전과 마찬가지로 로그인한 유저만 다운로드를 할 수 있도록 수정합니다. resultMap 태그안 collection 태그가 SQL을 수행하여 연관된 파일들을 조회하여 PostVO의 fil... Spring FrameworkSpring Framework Spring Framework-19 🚧권한으로 접근을 제한시켜보자! 시작하기 전에 이전에 했던 JWT방식에서 다시 form로그인 방식으로 변경하고 시작합니다. /board로 접근하는 것을 ADMIN 권한을 가진 유저만 접근할 수 있도록 변경했습니다. 다음과 같이 거부되는 것을 확인할 수 있습니다. hasRole("USER")로 변경하면 성공적으로 접근이 됩니다. 그 이유는 UserVO에서 getAuthorities 메소드가 R... Spring Frameworkspring securitySpring Framework Spring Framework-9 🔐이번엔 로그인을 만들어보자!! login.jsp의 form을 다음과 같이 수정하고 스크립트를 추가합니다. 이 스크립트는 login버튼이 눌리면 userVO에 정보를 담아 POST요청을 /에 보내는 스크립트입니다. 요청이 성공하고 반환받은 data의 success가 true라면 /board로 이동하고 아니라면 email 혹은 비밀번호를 확인해주세요라는 메시지를 띄웁니다. email로 유저의 ... Spring FrameworkSpring Framework Spring Framework-13 💾이번엔 파일을 업로드해보자! 파일을 업로드나 다운로드하는 기능은 보안에 취약하기 때문에 조심해야합니다. 아래 SQL을 수행해서 file을 저장할 테이블을 생성해줍니다. 글을 작성할 때 form을 아래와 같이 수정해서 파일을 전송할 수 있도록 만듭니다. 그리고 스크립트를 수정합니다. 글을 DB에 저장하고 나서 글의 id를 반환받습니다. 그리고 만약 form에 파일이 입력되어 있다면 file을... Spring FrameworkSpring Framework [인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 정리(1) Spring Boot : 2.3.4 Language : Java Java : 11 Dependencies : Spring Web, Thymeleaf 사용하여 스프링 프로젝트 생성 Spring Boot 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat: 톰캣 (웹서버) spring-webmvc: 스프링 웹 MVC spring-boot-star... 강의정리인프런Spring FrameworkSpring Framework Spring Framework-16 🔑Spring Security를 추가해보자! Spring Framework에는 보안을 강화하는 Spring Security가 있습니다. 우리가 전에는 직접 로그인을 구현했지만 이번엔 Spring Security를 사용해 구현할 것 입니다. 다음 라이브러리를 추가하고 Spring의 버전을 5.2.13.RELEASE로 낮춥니다. Spring Security이 5.4.5버전 기준 Spring Fr... spring securitySpring FrameworkSpring Framework ARCUS Spring의 Front Cache를 소개합니다 Option 2 동작은 네트워크 이슈로 ARCUS 캐시에 일시적으로 접근이 불가한 경우에 프론트 캐시 기능을 유지할 수 있습니다. 개발자가 아래의 인터페이스를 직접 구현하여 다른 리모트 캐시 혹은 로컬 캐시를 ARCUS의 프론트 캐시로서 사용될 수 있도록 유연성을 제공합니다. 예를 들어 아래와 같이 상품과 이벤트 서비스가 존재하고, Prefix 설정을 위해 서비스 타입마다 다른 ARCUS 캐... front cachearcus cacheJavajam2inSpring Frameworklocal cachearcus cache clusterAPIarcusDatabaseSpringremote cachearcus springAPI Spring Framework-6 JSON 형식을 사용해 전송해야 하므로 다음 라이브러리를 추가합니다. 우선 요청을 보낼 때 id를 함께 보내기 위해 아래 태그를 <c:when test="${post!=null}"> 태그에 있는 form안에 추가합니다. 수정 역시 이전에 사용했던 post.jsp를 수정해서 사용하도록 하겠습니다.아래 태그를 <c:when test="${post!=null}"> 태그에 있는 form안에 추가합니... Spring FrameworkSpring Framework Springboot 동작원리 웹서버는 자바 코드가 추가된 파일 요청이 오면 응답하지 못하기 때문에 톰켓이 필요하다. 그러므로 요청하지 않았을 때 응답할 수 없다. 💡 동시에 수백,수만명의 요청이 발생할때마다 스레드와 서블릿 객체 생성 (동시 접근허용), 정해놓은 스레드 만큼 만들어지고 만들어진 스레드는 재사용된다. 🔸 web.xml에 다 정의하기 힘들기 때문에 최초 앞단에서 request 요청을 받아서 필요한 클래스에 ... SpringbootSpring FrameworkSpring Framework MultipartProperties의 max-file-size, max-request-size 를 살펴보면 위처럼 전자는 전송되는 개별 파일의 크기를, 후자는 서버측으로 전송된 요청(request) 자체의 크기를 제한한다는 것을 알 수 있다. Spring Boot를 이용하고 있기 때문에 application properties 파일을 이용하여 다음처럼 간단하게 변경할 수 있다. 지금은 크기 제한을 20MB로 올렸기 때문에 확인삼아 약 4MB 정도의 파일을 전송해본 결과 다음처럼 잘 업... webSpring FrameworkSpring Framework Spring Security 기반 JWT 인증 구현 그리고 실제로 요청을 처리하는 컨트롤러에서는 @RequestHeader 어노테이션으로 JWT 를 읽어서 다시 위의 JwtTokenUtil 을 이용하여 사용자 정보를 가져와서 인가를 수행한다. JwtAuthenticationToken: 스프링 시큐리티의 인증 과정에서 사용할 JWT 용 인증 토큰. 특히 아이디, 비밀번호만 갖고 있는 UsernamePasswordAuthenticationToke... Spring FrameworkJWTJWT JUnit 5, JPA 기반 스프링 애플리케이션 테스트 시 @Transactional 의 문제 OEmbedResource 엔티티 생성 시 ResourcePattern 엔티티도 생성해서 같이 데이터베이스에 저장 후 그 식별자를 받아오기 위해 다음과 같은 서비스 로직을 구현했었다. 각 ResourcePattern 클래스의 식별자도 필요하기 때문에 직접 repository 에 저장 후 flush 하여 식별자를 받아올 수 있었다. 바로 스프링의 @Transactional 어노테이션이었는데 스... Spring FrameworkSpring Framework 이전 기사 보기
[Spring Framework] 11강 - static file 처리와 File Upload Static web resource 처리 서버의 처리가 필요 없는 static web resources는 요청 시 서버를 거치지 않고 곧바로 응답이 필요 특정 URL로 요청이 오면 static resource로 인식하고 바로 응답 수행 Spring에서도 static resource와 Dynamic resource를 분리하여, static resources 응답을 빠르게 해줄 수 있도록 지원합... 백엔드JavaSpring FrameworkJava [Spring Framework] 10강 - RESTful API 그런데 RESTful API를 쓴 경우는 URL에 행위가 안써져 있고 단순히 특정 데이터 명시가 필요할 경우만 데이터를 명시하고 끝이 납니다. 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링 할 수 있는 라이브러리를 제공 Java에서 Jackson 라이브러리 의존성을 추가하면, 별다른 작업 없이 JSON 데이터를 Java 객체로 자동으로 변환시켜줍니... 백엔드JavaSpring FrameworkJava [Spring Framework] 9강 - HTTP 파라미터 처리 HTTP 요청 파라미터 처리 HTTP 요청 파라미터를 자바 객체로 변환하는 기능인 Command 객체를 사용할 수 있다. @RequestParam 어노테이션을 이용한 요청 파라미터 구하기 하지만 @RequestParam(value="id", required=false, defaultValue="") 이런식으로 작성하면 null값으로 바꿔줍니다. "required=false" ---> 파라미터... 백엔드JavaSpring FrameworkJava Spring 프레임워크란❔ Spring Framework는 Java 애플리케이션 개발을 위한 포괄적인 인프라 지원을 제공하는 Java 플랫폼이다. Spring은 인프라를 처리하므로 애플리케이션에 집중할 수 있다. 복잡한 Enterprise 서비스를 개발하는데 복잡한 비즈니스 로직과 Low-level의 처리를 분리시켜 개발자로 하여금 비즈니스 로직에만 집중할 수 있게 만들어 주었다. EJB에서의 문제점은 비즈니스 obj... web frameworkSpring웹 프레임워크java app웹 개발Java FrameworkSpring FrameworkJava Framework [Spring] @Transactional 어노테이션 상속 Spring Framework 프로젝트에서 적용되던 @Transactional 어노테이션이 Spring Boot 프로젝트에서 적용되지 않는 문제 발견 Spring Framework 의 경우 JDK Dynamic Proxy(인터페이스 기반) 로 Proxy 를 생성하고 Spring Boot 의 경우 CGLib(클래스 기반) 로 Proxy 를 생성한다. CGLib 으로 처리 시, 인터페이스에 선언... Spring bootSpringaopSpring FrameworkSpring Spring been lifecycle Spring Bean 라이프 사이클에 대해 알아본다. Spring에서는 Spring Container, IoC Container라는 개념을 사용한다. Spring Container는 Spring Framework의 핵심부에 위치하며, 객체 주입을 이용하여 Application을 구성하는 Component들을 관리한다. 이때 Spring Container에서 생성되는 객체를 Bean이라고 한다... Spring FrameworkSpring Framework Simple BBS 애플리케이션 배포 #4 지난번 SimpleTodoList 애플리케이션을 진행하면서 적용했던 스프링 시큐리티를 이번에는 MVC 기반 애플리케이션인 SimpleBBS에도 적용하는 것이 주 목적이었는데 확실히 까다로운 부분이 많았지만 결과적으로 잘 적용할 수 있었다. 그리고 인증, 인가도 JWT와 이에 저장된 사용자 정보를 이용했기 때문에 스프링 시큐리티의 로그인, 로그아웃 기능을 별로 활용할 수 없었는데 이번 Simp... Spring Frameworkspring securitySpring Framework [Spring 입문] 03. AOP(Aspect Oriented Programming) 이번 글에서는 관점 지향 프로그래밍을 의미하는 AOP에 대해 알아보겠습니다. AOP(Aspect Oriented Programming)이란? : AOP, 관점 지향 프로그램이란, 횡단 관심사(흩어진 관심사, cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임입니다. 두 개의 메서드는 hello, bye 출력이라는 동일한 코드를 가... Spring FrameworkaopSpring Framework Spring Framework-20 👦🏻이번엔 유저의 객체를 인증 객체로 받아보자! 원래 userSession에 저장된 email과 post의 유저의 email을 비교하던 부분을 Spring Security의 인증 객체의 email과 비교하도록 변경합니다. <sec:authentication> 태그를 사용하면 인증 객체를 받아올 수 있습니다. UserArgumentResolver를 등록하는 부분을 주석처리합니니다. @Authe... Spring Frameworkspring securitySpring Framework Spring Framework-11 🔗이제 글과 유저를 연결해보자! 다음 SQL을 수행하여서 외래키를 추가해 user 테이블과 post 테이블을 연결해줍니다. name 필드를 지우고 다음과 같이 수정합니다. user는 작성한 사람의 정보가 담길 필드입니다. 원래 name 필드를 출력하는 부분을 다음과 같이 수정합니다. 마찬가지로 name 필드를 출력하는 부분을 다음과 같이 수정합니다. 또한 모델 post가 없을 때, 글을 등록... Spring FrameworkSpring Framework Spring Framework-10 🔓이번엔 로그아웃을 해보자! 찾기를 사용하여(윈도우, intellij 기준 CTRL+F) logout modal안에 있는 logout을 찾아 다음과 같이 수정합니다. 그리고 스크립트를 추가합니다. logout 버튼이 클릭되면 POST로 /logout에 요청을 보내고, 요청이 성공하면 로그인 페이지로 이동합니다. 로그아웃 요청이 오면 session을 해제하여 로그아웃을 수행합니다. 로그아웃 후... Spring FrameworkSpring Framework Spring Framework-15 ✂️이번엔 글을 삭제할 때 파일도 삭제하도록 수정해보자! 외래키로 연관된 데이터를 삭제하는 방법은 테이블에 ON DELETE CASCADE를 주면 됩니다. 하지만 여기서는 @Transactional을 사용하기 위해 다른 방법으로 합니다. post_id로 조회와 수정을 할 수 있도록 수정합니다. post_id로 삭제할 수 있도록 수정합니다. 업로드된 파일과 DB에 저장된 파일의 정보를 삭제합니... Spring FrameworkSpring Framework Spring Framework-5 📕 불러온 글을 읽어보자! 글 제목을 누르면 해당 글을 조회할 수 있도록 아래와 같이 수정합니다. 이전에 글 작성할 때 사용했던 뷰를 수정하여 글을 읽도록 하겠습니다. 모델 post가 있을 시에는 post의 내용을 보여주고 없다면 이전처럼 새 글을 입력하는 것으로 수정합니다. form을 아래와 같이 수정하면 됩니다. <c:choose> 태그는 jstl문법으로 switch case문과 비슷하다... Spring FrameworkSpring Framework [노트필기] Spring Framework 설치 Framework : 개발방식이 구조화 된 것 수업시 Spring Framework 개발환경 JDK Tomcat Database Spring Framework 개발툴 (eclipse 사용예정) Spring Tool Suit 3 : 기본적인 프로젝트가 들어가있지만 무거움 Spring Tools 4 for Eclipse : 아무것도 없어서 사용자가 필요한 부분을 추가설치해야 함 (이걸로 학습예정... 노트필기Spring FrameworkSpring Framework Spring Framework-7 ✂이젠 작성된 글을 삭제해보자 삭제 버튼과 삭제 버튼을 처리하는 스크립트를 추가합니다. 삭제를 처리하는 SQL과 메소드를 만들어줍니다. 삭제를 처리하는 메소드를 만들어줍니다.... Spring FrameworkSpring Framework Spring Framework-12 🚧이제 작성자가 아니면 수정, 삭제를 못하도록 막아보자! 아래와 같이 JSTL c:if 태그를 사용해서 userSession에 저장되있는 email과 글의 작성자의 email이 다르다면 수정, 삭제 버튼이 보이지 않도록 수정합니다. 버튼만 막는다고 요청을 보낼 수 없는 것은 아닙니다. postman과 같은 도구로 부적절한 경로로 요청을 보낼 수도 있습니다. 따라서 이를 막아야합니다. 이를 막... Spring FrameworkSpring Framework Spring Framework-17 🗄 이번엔 인메모리 방식이 아닌 DB에서 유저를 가져와 인증해봅시다! Spring Security에서는 UserDetailService를 이용하여 유저를 조회합니다. 우리는 이를 구현하는 클래스를 만듭니다. 우리의 username은 email이므로 userMapper가 파라미터로 들어온 email로 유저를 조회하여 반환할 수 있도록 만듭니다. UserDetailService가 반환하는 클래스... spring securitySpring FrameworkSpring Framework Spring Framework-14 📥 이번에는 글과 연결된 파일을 다운로드해보자! 버튼을 추가해서 글에 연결된 파일이 있을 시 버튼을 만들어 다운로드 할 수 있도록 수정합니다. 글과 연결된 파일들을 저장할 fileList 필드를 추가해줍니다. 전과 마찬가지로 로그인한 유저만 다운로드를 할 수 있도록 수정합니다. resultMap 태그안 collection 태그가 SQL을 수행하여 연관된 파일들을 조회하여 PostVO의 fil... Spring FrameworkSpring Framework Spring Framework-19 🚧권한으로 접근을 제한시켜보자! 시작하기 전에 이전에 했던 JWT방식에서 다시 form로그인 방식으로 변경하고 시작합니다. /board로 접근하는 것을 ADMIN 권한을 가진 유저만 접근할 수 있도록 변경했습니다. 다음과 같이 거부되는 것을 확인할 수 있습니다. hasRole("USER")로 변경하면 성공적으로 접근이 됩니다. 그 이유는 UserVO에서 getAuthorities 메소드가 R... Spring Frameworkspring securitySpring Framework Spring Framework-9 🔐이번엔 로그인을 만들어보자!! login.jsp의 form을 다음과 같이 수정하고 스크립트를 추가합니다. 이 스크립트는 login버튼이 눌리면 userVO에 정보를 담아 POST요청을 /에 보내는 스크립트입니다. 요청이 성공하고 반환받은 data의 success가 true라면 /board로 이동하고 아니라면 email 혹은 비밀번호를 확인해주세요라는 메시지를 띄웁니다. email로 유저의 ... Spring FrameworkSpring Framework Spring Framework-13 💾이번엔 파일을 업로드해보자! 파일을 업로드나 다운로드하는 기능은 보안에 취약하기 때문에 조심해야합니다. 아래 SQL을 수행해서 file을 저장할 테이블을 생성해줍니다. 글을 작성할 때 form을 아래와 같이 수정해서 파일을 전송할 수 있도록 만듭니다. 그리고 스크립트를 수정합니다. 글을 DB에 저장하고 나서 글의 id를 반환받습니다. 그리고 만약 form에 파일이 입력되어 있다면 file을... Spring FrameworkSpring Framework [인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 정리(1) Spring Boot : 2.3.4 Language : Java Java : 11 Dependencies : Spring Web, Thymeleaf 사용하여 스프링 프로젝트 생성 Spring Boot 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat: 톰캣 (웹서버) spring-webmvc: 스프링 웹 MVC spring-boot-star... 강의정리인프런Spring FrameworkSpring Framework Spring Framework-16 🔑Spring Security를 추가해보자! Spring Framework에는 보안을 강화하는 Spring Security가 있습니다. 우리가 전에는 직접 로그인을 구현했지만 이번엔 Spring Security를 사용해 구현할 것 입니다. 다음 라이브러리를 추가하고 Spring의 버전을 5.2.13.RELEASE로 낮춥니다. Spring Security이 5.4.5버전 기준 Spring Fr... spring securitySpring FrameworkSpring Framework ARCUS Spring의 Front Cache를 소개합니다 Option 2 동작은 네트워크 이슈로 ARCUS 캐시에 일시적으로 접근이 불가한 경우에 프론트 캐시 기능을 유지할 수 있습니다. 개발자가 아래의 인터페이스를 직접 구현하여 다른 리모트 캐시 혹은 로컬 캐시를 ARCUS의 프론트 캐시로서 사용될 수 있도록 유연성을 제공합니다. 예를 들어 아래와 같이 상품과 이벤트 서비스가 존재하고, Prefix 설정을 위해 서비스 타입마다 다른 ARCUS 캐... front cachearcus cacheJavajam2inSpring Frameworklocal cachearcus cache clusterAPIarcusDatabaseSpringremote cachearcus springAPI Spring Framework-6 JSON 형식을 사용해 전송해야 하므로 다음 라이브러리를 추가합니다. 우선 요청을 보낼 때 id를 함께 보내기 위해 아래 태그를 <c:when test="${post!=null}"> 태그에 있는 form안에 추가합니다. 수정 역시 이전에 사용했던 post.jsp를 수정해서 사용하도록 하겠습니다.아래 태그를 <c:when test="${post!=null}"> 태그에 있는 form안에 추가합니... Spring FrameworkSpring Framework Springboot 동작원리 웹서버는 자바 코드가 추가된 파일 요청이 오면 응답하지 못하기 때문에 톰켓이 필요하다. 그러므로 요청하지 않았을 때 응답할 수 없다. 💡 동시에 수백,수만명의 요청이 발생할때마다 스레드와 서블릿 객체 생성 (동시 접근허용), 정해놓은 스레드 만큼 만들어지고 만들어진 스레드는 재사용된다. 🔸 web.xml에 다 정의하기 힘들기 때문에 최초 앞단에서 request 요청을 받아서 필요한 클래스에 ... SpringbootSpring FrameworkSpring Framework MultipartProperties의 max-file-size, max-request-size 를 살펴보면 위처럼 전자는 전송되는 개별 파일의 크기를, 후자는 서버측으로 전송된 요청(request) 자체의 크기를 제한한다는 것을 알 수 있다. Spring Boot를 이용하고 있기 때문에 application properties 파일을 이용하여 다음처럼 간단하게 변경할 수 있다. 지금은 크기 제한을 20MB로 올렸기 때문에 확인삼아 약 4MB 정도의 파일을 전송해본 결과 다음처럼 잘 업... webSpring FrameworkSpring Framework Spring Security 기반 JWT 인증 구현 그리고 실제로 요청을 처리하는 컨트롤러에서는 @RequestHeader 어노테이션으로 JWT 를 읽어서 다시 위의 JwtTokenUtil 을 이용하여 사용자 정보를 가져와서 인가를 수행한다. JwtAuthenticationToken: 스프링 시큐리티의 인증 과정에서 사용할 JWT 용 인증 토큰. 특히 아이디, 비밀번호만 갖고 있는 UsernamePasswordAuthenticationToke... Spring FrameworkJWTJWT JUnit 5, JPA 기반 스프링 애플리케이션 테스트 시 @Transactional 의 문제 OEmbedResource 엔티티 생성 시 ResourcePattern 엔티티도 생성해서 같이 데이터베이스에 저장 후 그 식별자를 받아오기 위해 다음과 같은 서비스 로직을 구현했었다. 각 ResourcePattern 클래스의 식별자도 필요하기 때문에 직접 repository 에 저장 후 flush 하여 식별자를 받아올 수 있었다. 바로 스프링의 @Transactional 어노테이션이었는데 스... Spring FrameworkSpring Framework 이전 기사 보기