인프런145 8) 외부설정과 프로필 [2] 외부 설정 - 커맨드 라인 옵션 인수일반적인 커맨드 라인 인수 커맨드 라인에 전달하는 값은 형식이 없고, 단순히 띄어쓰기로 구분한다 커맨드 라인 옵션 인수(command line option arguments) 커맨드 라인 인수를 key=value 형식으로 구분하는 방법이 필요하다.그래서 스프링에서는 커맨드 라인 인수를 key=value 형식으로 편리하게 사용할 수 있도록스프링 만의 표준 방식을 정의했는데, 그것이 바로 커맨드 라인 옵션 인수이다 스프링은 커맨드 라인에 - (dash) 2개( -- )를 연결해서 시작하면 key=value 형식으로 정하고이것을 커맨드 라인 옵션 인수라 한다. --key=value 형식으로 사용한다.--username=userA --username=userB 하나의 키에.. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 12. 7) 외부설정과 프로필 외부 설정이란? 하나의 애플리케이션을 여러 다른 환경에서 사용해야 할 때가 있다. 대표적으로 개발이 잘 진행되고 있는지 내부에서 확인하는 용도의 개발 환경,그리고 실제 고객에게 서비스하는 운영 환경이 있다 개발 환경: 개발 서버, 개발 DB 사용 운영 환경: 운영 서버, 운영 DB 사용 문제는 각각의 환경에 따라서 서로 다른 설정값이 존재한다는 점이다. 예를 들어서 애플리케이션이 개발DB에 접근하려 면 dev.db.com 이라는 url 정보가 필요한데, 운영DB에 접근하려면 prod.db.com 이라는 서로 다른 url을 사용해 야 한다. 이 문제를 해결하는 가장 단순한 방법은 다음과 같이 각각의 환경에 맞게 애플리케이션을 빌드하는 것이다. 개발 환경에는 dev.db.com 이 필요하므로 이 .. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 11. 6) 자동 구성(Auto Configuration) 자동 구성(Auto Configuration) 예제 만들기 스프링 부트가 제공하는 자동 구성(Auto Configuration)을 이해하기 위해 간단한 예제를 만들어보자.JdbcTemplate을 사용해서 회원 데이터를 DB에 저장하고 조회하는 간단한 기능이다 Member@Datapublic class Member { private String memberId; private String name; public Member() { } public Member(String memberId, String name) { this.memberId = memberId; this.name = name; }} memberId , name 필드가 있는 .. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 8. 5) 스프링 부트 스타터와 라이브러리 관리 라이브러리 관리의 어려움 프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야 한다. 예를 들어서 스프링 WEB, 내장 톰캣, JSON 처리기, 로거 등등 수 많은 라이브러리를 선택해야 한다.여기에 추가로 각 라이브러리의 버전까지 고민해야 한다. 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도 있지만 잘 안되는 버전들도 있다. 과거에는 이런 문제들 때문에 처음 프로젝트를 세팅하는데 상당히 많은 시간을 소비했다. 스프링 부트는 개발자가 라이브러리들을 편리하게 사용할 수 있는 다양한 기능들을 제공한다. - 외부 라이브러리 버전 관리 - 스프링 부트 스타터 제공 라이브러리 직접 관리 스프링 부트가 제공하는 편리한 라이브러리 관리 기능을 사용해보기 전에,잠깐 과거로 .. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 7. 4) 스프링 부트와 내장 톰캣 (2) 편리한 부트 클래스 만들기 지금까지 진행한 내장 톰캣 실행, 스프링 컨테이너 생성, 디스패처 서블릿 등록의 모든 과정을 편리하게 처리해주는나만의 부트 클래스를 만들어보자.부트는 이름 그대로 시작을 편하게 처리해주는 것을 뜻한다.MySpringApplicationpublic class MySpringApplication { public static void run(Class configClass, String[] args){ System.out.println("MySpringApplication.run args = " + List.of(args)); // 톰캣 설정 Tomcat tomcat = new Tomcat(); Connector connect.. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 5. 3) 스프링 부트와 내장 톰캣 (1) 스프링 부트와 내장 톰캣 WAR 배포 방식의 단점 웹 애플리케이션을 개발하고 배포하려면 다음과 같은 과정을 거쳐야 한다. - 톰캣 같은 웹 애플리케이션 서버(WAS)를 별도로 설치해야 한다. - 애플리케이션 코드를 WAR로 빌드해야 한다. - 빌드한 WAR 파일을 WAS에 배포해야 한다. 웹 애플리케이션을 구동하고 싶으면 웹 애플리케이션 서버를 별도로 설치해야 하는 구조이다. 과거에는 이렇게 웹 애플리케이션 서버와 웹 애플리케이션 빌드 파일(WAR)이 분리되어 있는것이 당연한 구조였다. 그런데 이런 방식은 다음과 같은 단점이 있다. 단점 톰캣 같은 WAS를 별도로 설치해야 한다. 개발 환경 설정이 복잡하다. - 단순한 자바라면 별도의 설정을 고민하지 않고, main() 메서드만 실행하.. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 11. 4. 19) 인가 프로세스 - 요청 기반 권한 부여HttpSecurity.authorizeHttpRequests() 요청 기반 권한 부여 - HttpSecurity.authorizeHttpRequests() Spring Security는 요청 기반 권한 부여(Request Based Authorization)와메소드 기반 권한 부여(Method Based Authorization )를 통해 자원에 대한 심층적인 방어를 제공한다 요청 기반 권한 부여는 클라이언트의 요청 즉 HttpServletRequest에 대한 권한 부여를 모델링 하는 것이며이를 위해 HttpSecurity 인스턴스를 사용하여 권한 규칙을 선언 할 수 있다 @BeanSecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeH.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 11. 1. 2) 웹 서버와 서블릿 컨테이너 웹 서버와 서블릿 컨테이너 서블릿 컨테이너 초기화1 WAS를 실행하는 시점에 필요한 초기화 작업들이 있다. 서비스에 필요한 필터와 서블릿을 등록하고, 여기에 스프링을 사용한다면 스프링 컨테이너를 만들고,서블릿과 스프링을 연결하는 디스페처 서블릿도 등록해야 한다. WAS가 제공하는 초기화 기능을 사용하면, WAS 실행 시점에 이러한 초기화 과정을 진행할 수 있다. 과거에는 web.xml 을 사용해서 초기화했지만, 지금은 서블릿 스펙에서 자바 코드를 사용한 초기화도 지원한다. 디스패처 서블릿은 스프링 MVC의 핵심 요소로,클라이언트의 모든 요청을 받아서 적절한 컨트롤러로 위임하는 프론트 컨트롤러(Front Controller) 역할 import org.springframework.stereot.. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 10. 31. 1) 스프링부트 소개, 톰캣 설정 스프링 부트 부트? -> BOOT, 부팅 • 최소한의 인간 개입으로 시작하고 완전히 작동하는 것을 의미• 어떤 일을 시작하기 위해 필요한 모든 준비를 마친다는 의미 • 시작을 위한 복잡한 설정 과정은 스프링 부트가 해결 • 개발자는 새로운 스프링 애플리케이션을 쉽고 빠르게 시작 • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 • 관례에 의한 간결한 설정 핵심 기능 5가지 • WAS: Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 • 라이브러리 관리 손쉬운 빌드 구성을 위한 스타터 종속성 제공스프링과 외부 라이브러리의 버전을 자동으로 관리 • 자동 구성: 프로젝트 시작에 필요한 스프링과.. 인프런/스프링 부트 - 핵심 원리와 활용 2024. 10. 31. 18) 악용보호 - SameSite SameSite SameSite는 최신 방식의 CSRF 공격 방어 방법 중 하나로서 서버가 쿠키를 설정할 때 SameSite 속성을 지정하여 크로스 사이트 간 쿠키 전송에 대한 제어를 핸들링 할 수 있다 Spring Security는 세션 쿠키의 생성을 직접 제어하지 않기 때문에 SameSite 속성에 대한 지원을 제공하지 않지만 Spring Session 은 SameSite 속성을 지원한다 더보기크로스 사이트(Cross-site)란 웹 애플리케이션에서 서로 다른 출처(도메인) 간의 상호작용을 설명하는 개념입니다. 이 용어는 주로 웹 보안과 관련이 있으며, 가장 일반적으로 크로스 사이트 스크립팅(Cross-Site Scripting, XSS)과 크로스 사이트 요청 위조(Cross-Site Reques.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 29. 17) 악용보호 - CSRF(Cross Site Request Forgery, 사이트 간 요청 위조) CSRF(Cross Site Request Forgery, 사이트 간 요청 위조) • 웹 애플리케이션의 보안 취약점으로 공격자가 사용자로 하여금 이미 인증된 다른 사이트에 대해 원치 않는 작업을 수행하게 만드는 기법을 말한다 • 이 공격은 사용자의 브라우저가 자동으로 보낼 수 있는 인증 정보, 예를 들어 쿠키나 기본 인증 세션을 이용하여 사용자가 의도하지 않은 요청을 서버로 전송하게 만든다 • 이는 사용자가 로그인한 상태에서 악의적인 웹사이트를 방문하거나 이메일 등을 통해 악의적인 링크를 클릭할 때 발생할 수 있다 CSRF 진행 순서 CSRF 기능 활성화@BeanSecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws E.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 28. 16) 악용보호 - CORS CORS(Cross Origin Resource Sharing, 교차 출처 리소스 공유) • 웹에서는 보안을 위해 기본적으로 한 웹 페이지(출처 A)에서 다른 웹 페이지(출처 B)의 데이터를 직접 불러오는 것을 제한하는데 이를 '동일 출처 정책(Same-Origin Policy)' 이라고 한다 • 만약 다른 출처의 리소스를 안전하게 사용하고자 할 경우 CORS 가 등장하며 CORS는 특별한 HTTP 헤더를 통해 한 웹 페이지가 다른 출처의 리소스에 접근할 수 있도록 '허가'를 구하는 방법이라 할 수 있다. 즉, 웹 애플리케이션이 다른 출처의 데이터를 사용하고자 할 때, 브라우저가 그 요청을 대신해서 해당 데이터를 사용해도 되는지 다른 출처에게 물어보는 것이라 할 수 있다 • 출처를 비교하는 로직은 .. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 25. 이전 1 2 3 4 ··· 13 다음