BE

CORS에 대한 설명 CORS(Cross-Origin Resource Sharing)은 동일한 출처에 대한 리소스를 공유할 수 있다는 제한 정책이다. 추가적인 Http 헤더를 사용하여서 실행 중인 웹 어플리케이션이 다른 출처의 리소스에 접근할 권한을 부여하도록 한 것이다. 웹 어플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 Http 요청을 실행한다. 교차 출처 리소스 공유 표준은 웹 브라우저에서 해당 정보를 읽는 것이 허용된 출처를 서버에서 설명할 수 있는 새로운 http헤더를 추가함으로써 동작한다. preflight한 request는 먼저 options 메서드를 통해서 다른 도메인의 리소스로 HTTP 요청을 보내 실제 요청이 전송하기에 안전한지 확인합니다. cross..

application.properties Springboot 프로젝트 생성 시에 기본적으로 존재하는 설정파일. 공백이 있을 경우 에러가 난다. 리스트로 작성해야 할 경우에 배열처럼 [0] , [1]을 붙여주어야 한다. ex) 아래처럼 써주면 이게 하나로 취급된다. application.servers[0].ip=127. 0. 0. 1 application.servers[0].path=/path1 #DB spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.datasource.url=jdbc:log4jdbc:mysq..

slf4j-log4j12 log4j를 slf4j로 처리할 때 필요하다. log4j-1.2 log4j를 사용하는 컴포넌트가 존재할 때 이 라이브러리로 log4j2로 넘겨줄 수 있다. log4j-slf4j-impl log4j2를 slf4j로 처리할 때 필요하다. log4j-over-slf4j log4j를 직접 사용하지만 log4j와 다른 slf4j 바인딩을 사용하려는 경우 log4j-to-slf4j jcl-over-slf4j jakarta common logger를 연동(spring에서 사용하는 기본 로깅) jul-to-slf4j java.util.logger를 연동

※ Maven 기준입니다. ※ 로그 라이브러리를 사용하기 전에 확인해야 할 것 기본 라이브러리를 어디에서 사용하는지 확인 해당 부분을 pom.xml에서 각각 exclude 해주어야 한다. 그래야 충돌이 나거나 의도와 다른 로그 바인딩이 되지 않는다. CASE1 지금은 잘 쓰지 않지만 Spring legacy 가 있다. Spring legacy는 JCL ( Jakarta Common Logging)을 기본 로깅 라이브러리로 사용한다. 그래서 Logback이나 Log4j 등의 라이브러리로 교체하려면 이 JCL을 반드시 exclude하고 추가해야 한다. CASE2 요즘은 대부분이 Springboot를 사용한다. Springboot는 spring-boot-stater-logging이라는 라이브러리가 있다. 의존..

※ 자바 ORM 표준 JPA 프로그래밍을 요약한 내용입니다. ※ 700페이지가 넘는 방대한 분량이므로 일부분만 발췌하여 기록합니다. 데이터베이스 지식을 공부하다 보면 기본적으로 배우게 되는 것이 연관관계다. JPA는 객체지향적으로 DB를 설계하는 관점에서 나온 것이므로 데이터 중심인 DB의 구조와는 차이가 있으나 일대일, 다대일, 일대다, 다대다 관계가 있는 것은 같다. 이처럼 연관관계를 설정해주는 이유 객체는 참조를 사용해서 다른 객체와 연관관계를 갖고, 참조에 접근해서 연관된 객체를 조회하기 때문이다. (이를 객체그래프 탐색이라고 한다.) 그러므로, 객체는 참조가 있는 방향으로만 조회할 수 있다. 테이블은 외래키를 사용해서 다른 테이블과 연관관계를 갖고, 조인을 사용해서 연관된 테이블을 조회한다. 그..

javax.persistence @Entity JPA에서 사용할 Entity 이름을 지정할 수 있다. 따로 적어주지 않으면 클래스명이 Entity의 이름이 된다. @Table Entity와 매핑할 테이블의 이름을 지정할 수 있다. 따로 적어주지 않으면 Entity의 이름을 테이블 이름으로 사용한다. @Id @GeneratedValue @Column 필드와 매핑할 테이블의 컬럼명을 지정할 수 있다. @JoinColumn @OneToOne @OneToMany @ManyToOne @Enumerated @Temporal Lombok @Getter @NoArgsConstructor @EqualandHashcode @ToString @Builder

스프링부트 2.7.0부터 WebSecurityConfigurerAdapter가 drepcated 된다. SpringSecurity 5.7에서는 WebSecurityConfigurerAdapter를 더 이상 지원하지 않기 때문인데, 대신에 SpringSecurity 5.4부터 SecurityFilterChain bean이 생겨서 빈으로 등록할 수 있게 되었다. 예전에는 WebSecurityConfigurerAdapter를 extends(확장)하여 작성했다면 현재는 이와 같이 작성한다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.*; import org.sp..

https://blog.naver.com/heops79/221499526705 Fatal error compiling: invalid target release 오류 아래 에러는 주로 vscode에서 maven-compiler-plugin의 컴파일 설정이 잘못되어 있어서 발생한 문제이다. ... blog.naver.com maven pom.xml 파일에 java와 maven의 버전이 명시되지 않았거나 설치된 버전과 다를 때 날 수 있는 오류이다.


Authentication Entry Point 인증되지 않은 유저일 경우 예외처리하는 인터페이스 기본적으로 login페이지 리디렉션(response.sendRedirect("/login");) Access Denied Handler 인가되지 않은 유저일 경우 예외처리하는 인터페이스 기본적으로 403에러페이지를 보여줌(response.sendError();) 그럼 로그인한 사용자만 이용할 수 있는 페이지에서 로그인이 풀렸다(세션만료)면 어떻게 될까? 페이징 이동 시에 authentication Entry Point 가 login페이지로 인도할 것이다... 그렇다면 LoginUrl Authentication Entry Point 이건 대체 뭘까? Authentication Entry Point을 상속받는 ..

web.xml 400 /error/error 401 /error/error 403 /error/error 404 /error/error 405 /error/error 500 /error/error 503 /error/error 의 바로 위에 이렇게 넣어주고 Controller를 만들어주면 된다. 에러페이지가 하나 뿐인 것 같다고? Controller @Controller @AllArgsConstructor @Log4j public class ErrorController { @RequestMapping(value = "/error/error", method = RequestMethod.GET) public String renderErrorPage(Model model, HttpServletRequest r..

Spring Security는 기본적으로 로그인에 성공하면 리디렉션을 한다. 비동기 요청은 어떤 요청에 대한 응답을 받도록 기다릴 수 있지만 페이지를 이동하면 응답을 받기 전에 이동하므로 응답을 받을 주체를 잃게 된다. REST api는 페이지를 반환하는 것이 아니라 요청에 대한 응답을 반환할 뿐이므로 REST api 구축에 리디렉션은 걸림돌이 된다. 그래서 로그인부터 비동기로 구현하게 된다. 로그인 실패 시에는 401 / 로그인 성공하면 200 / 로그아웃 시 200 을 반환하는 식이다. 페이지를 이동하지 않으니 응답을 받을 수 있게 될 것이다. Spring Security는 비 인증 상태(비로그인)의 유저는 Authentication Entry Point 를, 인증은 했으나 인가되지 않은(접근권한이 ..