Spring30 https 통신 방법 (SSL 인증서) 순서 1. SSL 인증서 생성 2. 프로젝트에 SSL 인증서 적용 인증서 생성 1. Keystore 생성 keytool -genkey -alias [keystore 별칭] -keyalg RSA -storetype PKCS12 -keystore [keystore 파일] 2. 생성한 Keystore로부터 인증서 추출 keytool -export -alias [keystore 별칭] -keystore [keystore 파일] -rfc -file [인증서 파일] 3. java 폴더의 lib/security/cacerts에 추출했던 인증서 등록 프로젝트에 인증서 적용 application.properties에 다음 정보 입력 server.ssl.key-store=키스토어 경로 server.ssl.key-store.. 2024. 2. 14. The import org.springframework cannot be resolved 에러 (Gradle) 문제 현상 외부에서 작업하던 Spring Boot(Gradle) 프로젝트를 IDE에서 별다른 import 없이 열었을 경우 해당 에러가 발생 해결 방법 - 수동으로 다시 import Eclipse 해당 프로젝트 폴더 우클릭 - import - Existing Gradle Project - 해당하는 Gradle 프로젝트 폴더 선택 후 완료 Intellij Import Project - 해당 프로젝트 폴더의 buiild.gradle 선택 후 완료 2024. 2. 12. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name~ 원인 - Controller에서 API를 정의할 때 서로 메소드 명은 다르지만 같은 HTTP 메소드와 URL을 가지고 있는 API들이 존재했던 것이 원인 해결 방법 - 서로 HTTP 메소드와 URL이 겹쳤던 메소드 중에 하나를 삭제하니 해결됨 Ex @RestController @RequestMapping("/api") public class ShopController { @GetMapping("/a") public void buy { .... } @GetMapping("/a") public void purchase { .... } } 2024. 1. 8. Bean 수동 주입 방법 (@Autowired로 빈 주입 실패 시) 사용 이유 (문제 상황) - JpaRepository 객체를 상위 패키지가 동일한 서로 다른 두 개의 클래스에 각각 @Autowired를 통해 Bean을 주입 받도록 설정 - 한 클래스에서는 정상적으로 주입되어 쿼리 메소드가 정상적으로 실행되었지만 다른 클래스에서는 Bean이 주입되지 않아 객체가 null로 조회되어 NullPointerException이 발생 해결 방법 - 다음과 같이 ApplicationContextProvider와 BeanUtils 정의 후 ApplicationContext의 getBean()을 통해 파라미터로 입력한 객체의 빈을 받아와 객체에 직접 Bean을 주입 private CarRepository carRepo; CarRepo = BeanUtils.getBean(CarRepo.. 2024. 1. 4. Spring https 설정 사설 인증서 application.properties에 다음 코드를 입력 # 필수 설정 server.ssl.key-store= SSL 키 저장소 경로 server.ssl.key-store-password= SSL 키 저장소 비밀번호 # 선택 설정 server.ssl.key-store-type= SSL 키 저장소 유형(기본-JKS) server.ssl.key-alias= SSL 키 저장소명 설정 server.ssl.key-store-provider= SSH 키 스토어 제공자 지정 - 키 저장소 타입은 개발 환경에서 자체 서명된 인증서 및 키를 사용하는 경우 PKCS12를 주로 사용 CA 인증서 application.properties에 다음 코드를 입력 # 필수 설정 server.ssl.trust-stor.. 2023. 12. 22. Multipart Multipart 정의 - HTTP Request Header Content-Type의 한 종류로 Client가 POST 요청을 보낼 때 HTTP Request의 하나의 Body를 여러 부분으로 나누어 여러 종류의 데이터를 동시에 전송하는 방식 - 주로 파일 업로드와 관련된 데이터 전송에 사용 - 멀티파트 요청은 Header Content-Type에 multipart/form-data 값을 가지며 여러 개의 파트로 구성됨 - 각 파트는 Header와 Body로 구성되며 Header에는 메타 데이터, Body에는 데이터가 포함 MultipartFile 정의 - org.springframework.web.multipart.MultipartFile - Client에서 서버로 전송된 파일 데이터를 다룰 수 있도.. 2023. 12. 20. log4jdbc 정의 - Java 애플리케이션에서 DB 쿼리를 로깅하기 위한 도구 중 하나 - 설정 시 SQL 문장과 DB 연결 관련 정보가 Spirng Boot의 로그로 출력 특징 SQL 추적: log4jdbc는 JDBC 드라이버를 래핑하여 모든 SQL 문장을 추적하고 로그로 기록합니다. 이를 통해 애플리케이션이 데이터베이스와 어떻게 상호작용하는지를 상세하게 파악할 수 있습니다. 파라미터 바인딩 추적: log4jdbc는 SQL 파라미터 바인딩도 추적하고 로그로 기록합니다. 따라서 SQL 문장에 전달된 파라미터 값도 확인할 수 있습니다. 다중 데이터베이스 지원: log4jdbc는 다양한 데이터베이스에 대한 JDBC 드라이버를 지원합니다. 따라서 여러 종류의 데이터베이스에서도 사용할 수 있습니다. 사용 방법 1. 의존성 .. 2023. 9. 14. logback-spring.xml 로그 파일 level별 설정 문제 문제 - logback-spring.xml를 통해 레벨 INFO 이상의 모든 로그를 저장하는 total.2023-09-13_0.log와 레벨 ERROR에 대한 로그만을 저장하는 error.2023-09-13_0.log를 생성하도록 의도하였지만 error.2023-09-13_0.log도 total.2023-09-13_0.log와 같이 INFO 이상의 모든 로그를 저장 logback-spring.xml 코드 ERROR UTF-8 ${LOG_PATTERN} ${LOG_PATH}/error.%d{yyyy-MM-dd}_%i.log 30 10MB 1GB INFO UTF-8 ${LOG_PATTERN} ${LOG_PATH}/total.%d{yyyy-MM-dd}_%i.log 30 10MB 1GB 원인 - File-Err.. 2023. 9. 13. Logback 정의 - Java 기반 오픈 소스 로깅 라이브러리 ⇒ Java 애플리케이션에서 로그 기록 및 관리를 위한 도구 - SLF4J의 구현체이자, Spring Boot의 기본 로깅 프레임워크 ※ SLF4J(Simple Logging Facade for Java) = Java 애플리케이션에서 로깅을 추상화하기 위한 인터페이스 ※ Spring Boot는 내장 Tomcat의 로그와 애플리케이션의 로그를 분리하여 관리하기 때문에 두 로깅 시스템 간의 중복 로그 출력은 발생하지 않아 Spring Boot의 로깅 설정을 변경하더라도 내장 Tomcat의 로깅에는 영향을 미치지 않고 그 반대의 경우에도 영향을 미치지 않음. 사용 예시 코드 import org.slf4j.Logger; // 실제 로그 메시지를 생성하고 출력하는.. 2023. 9. 12. 의존성 주입 방식 의존성 주입 (DI, Dependency Injection) - 객체를 내부(사용자)에서가 직접 생성하는 것이 아니라 외부(Spring IOC container)에서 런타임 시점에 생성해서 사용하려는 주체에 주입시켜주는 방식 - 의존성(Dependency) = 코드에서 두 모듈간의 연결 (의존대상 B가 변하면, 그것이 A에 영향을 미치는 것) 생성자 주입 - 가장 권장되는 의존성 주입 방식 - private final + 클래스 생성자로 의존성 주입 장점 - 순환 참조 방지 - 테스트 용이 - final 선언 가능으로 불변성 보장 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter{ private final.. 2023. 5. 25. JWT JWT(JSON Web Token)- JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 웹 토큰장점- 중앙의 인증서버, 데이터 스토어에 대한 의존성 X- 시스템 수평 확장에 유리- Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용이 가능하다.단점- Payload의 정보가 많아지면 네트워크 사용량이 증가함- 토큰이 클라이언트에 저장되기 때문에 서버에서 클라이언트의 토큰을 조작할 수 없음 Authentication(인증) - 'A'라고 주장하는 주체(user, subject, principal)가 'A'가 맞는지 확인하는 것- 인증 시 ID와 Password를 담고 인증 검증을 위해 전달되어 사용- 인증 후 최종 인증 결과(user 객체, 권한 정보)를.. 2023. 5. 25. Spring Security 기본 로그인 구현 중 실수 정리 1. UserDetails를 상속받아 User를 구현할 때 Lombok으로 @Data만 적용하였더니 생성자 실행에 에러가 발생하지는 않지만 authorities에 의해서 생성자 실행이 제대로 되지 않음 => @Data가 아닌 @Getter, @Setter, @ToString 적용하고 생성자 메소드는 authorities를 제외하여 따로 입력해줘야 함 2. SecurityConfig에서 hasRole이나 hasAnyRole을 통해 접근 권한(Role)을 지정해줄 때는 ADMIN, USER와 같은 형식으로 입력하지만 DB에 저장할 때는 ROLE_ADMIN, ROLE_USER와 같이 ROLE_을 붙여서 저장해야 함 => 그렇지 않으면 authorities에 SimpleGrantedAuthority 객체를 추가.. 2023. 5. 11. Spring Security 기본 세팅 Configuration - Spring Security의 가장 기본은 Configuration 클래스(SecurityConfig) 설정 - @configuration 및 @EnableWebSecurity 적용 및 WebSecurityConfigurerAdapter를 상속 (WebSecurityConfigurerAdapter의 경우 최신 버전에서는 미지원) ※ @EnableWebSecurity = Spring Security에 대한 설정을 할 클래스라 지정하는 어노테이션 - Spring Security는 HttpSecurity를 사용하여 각종 설정 수행 ※ BCryptPasswordEncoder = Spring Security에서 제공하는 비밀번호 암호화 객체 역할 - 리소스(URL) 접근 권한 설정 -.. 2023. 5. 9. Thymeleaf 기본 문법 Thymeleaf - Java 템플릿 엔진 => html 태그에 속성을 추가해 페이지에 동적으로 값을 추가하거나 처리하게 해줌 - Spring Boot에서 사용하도록 권장되는 템플릿 엔진 (Spring Security 사용 시에 필수!) ※ 템플릿 엔진(Template Engine) = HTML과 데이터를 결합한 결과물(페이지)를 생성해주는 소프트웨어 라이브러리 - Spring Boot는 Thymeleaf로 사용할 html 파일의 경로 기본값이 resources/templates로 지정되어 있음 // application.property 버전 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html // application... 2023. 5. 8. Spring Security 정의 및 동작 구조 Spring Security - 스프링 기반 애플리케이션의 보안(인증, 권한, 인가 등) 설정을 도와주는 하위 프레임워크 동작 구조 - 스프링 애플리케이션과의 의존성 분리를 위해 서블릿 필터를 기반으로 동작 - Spring Security는 서블릿 필터 중 한 개로 등록되어 보안 설정을 수행 - DelegatingFilterProxy 인터페이스에서 Spring Security 필터를 구현하며 이 필터는 여러 개의 체인으로 구성 => SecurityFileterChain - SecurityFileter = SecurityFileterChain으로 관리되는 필터체인으로 각 필터마다 보안과 관련된 고유한 기능을 담당 ex) 로그인 담당 / 세션 담당 / 로그아웃 담당 등 동작 순서 1. 사용자가 Form을 통.. 2023. 5. 4. 이전 1 2 다음