오늘은 Spring Boot를 공부하기 앞서 IntelliJ에서 Spring프로젝트 생성을 하는 방법에 대해 알아보고자 합니다. 1. IntelliJ 실행 2. New Project생성 우리는 Spring을 사용할 project를 생성할 것이기에 Spring Initializr 항목을 선택하여 생성해준다. Build type의 경우는 Maven과 Gra...
프로그래밍을 하다보면 기본 port인 8080이 현재 사용중이던가 특정 port번호로 변경을 해야하는 일이 생길 수 있을 것이다. 이 게시글에서는 이러한 문제가 발생하였을 때 IntelliJ에서 연결 port번호를 변경하는 변경하는 법을 설명한다. 1. 현재 Port번호 확인 프로젝트를 실행하여 현재 Port번호를 확인한다. 아래 예시 사진에서는 현재 8...
일반적으로 우리가 웹을 사용할때는 GET방식으로 정보를 요청하고 받아오며 Client PC에 웹 브라우저를 출력한다. 이러한 통신들은 F12를 클릭하여 나오는 개발자 도구를 통해 Request URL, Request Method, Status Code등을 확인할 수 있다. 웹을 클라이언트의 입장으로 사용할 때는 GET method를 통해 요청을 하지만 우...
REST API디자인을 하기 위해서 자원에 대한 행위들은 HTTP Method로 표현을 해야한다. HTTP Method에는 GET, POST, PUT, DELETE 등이 존재한다. 오늘은 Spring Boot에서 GET API를 사용하는 방법에 대해 알아볼 것이다. GET API의 특징 리소스를 취득하는 작업을 하는 API이다. CRUD에서 R에 해당한...
지난 GET API에 대해 공부한 것에 이어 오늘은 POST API에 대해 공부해보고자 한다. 먼저 POST API의 특징에 대해 알아보자 POST API의 특징 리소스의 생성 및 추가하는 작업을 해주는 API이다. CRUD에서 C에 해당한다. POST Request를 반복한다면 데이터들은 계속 추가될 것이고 서버는 매번 다른 응답을 나타낼 것이다. 이...
PUT API 특징 리소스를 갱신하고 생성하는 작업을 한다. CRUD에서 C,U작업을 한다. POST와 다르게 같은 명령을 내렸을 때 해당 데이터가 없다면 새로 생성하고 해당 데이터가 있으면 업데이트를 하기에 PUT요청이 여러번 실행되어도 해당 데이터는 같은 상태이기에 멱등하다. POST와 동일하게 데이터 조작을 하기에 안정성은 없다. Path Variab...
DELETE API의 특징 리소스를 삭제하는 작업을 한다. CRUD에서 D에 해당한다. 하나의 리소스에 대해 같은 작업을 반복하여도 리소스의 결과는 삭제되었다는 상태로 동일하기에 멱등하다. 리소스를 삭제하는 작업을 하기에 안정성은 없다. Path Variable을 사용가능하다. Query Parameter도 사용가능하다. 사용되는 Annotation의 종...
HTTP Method들을 사용하여 Client가 Server에게 요청을 보내는 작업을 하게 되면 Server는 clint에게 받은 응답에 대해 작업을 하고 그에 맞는 데이터나 메시지를 보내며 서로 소통을 할 것이다. 오늘은 HTTP Method들을 사용하며 client의 요청에 서버가 응답을 보내는 여러 방법들에 대해 알아볼 것이다. Response 보...
AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미한다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 관점을 기준으로 모듈화를 한다는 것을 의미한다. 객체지향 프로그래밍은 클래스가 단일 책임을 갖도록 분리하여 모듈들의 결합도는 낮고 응집도는 높아지게 설계를 한다. ...
Request Validation이란? HTTP request를 통해 Post Request와 같이 데이터를 받는 request를 받을 경우 데이터가 옳바른 형식인지, 옳바른 값인지 확인을 하고 만약 옳지 않은 값이 들어온다면 Bad request를 보내야 할 것이다. 예를 들어 위의 Json형식의 데이터가 POST request의 Body로 넘어왔다고 ...
Rest Template이란? Spring은 REST 서비스의 endpoint를 호출하는 2가지 방법을 제공한다. 방법은 동기, 비동기 방식이 존재하며 이번 Post에서는 동기 방식인 REST template에 대해 알아보고자 한다. REST Template은 Spring 3.0부터 지원이 되었으며 REST API호출 이후 응답을 받을 때까지 기다리는 방식...
📌Lombok이란? Java로 개발을 하다보면 getter, setter, constructor작성 등의 많은 코드를 작성해야한다. Lombok은 이러한 기계적인 코드들을 어노테이션을 기반으로 코드를 자동화하여 작성해주는 Java의 라이브러리이다. Lombok을 사용하면 코드의 길이를 줄여 코드를 단순화하고 코드의 가독성을 키울 수 있다. 코드 자동 생성...
ORM JPA의 개념을 알고자 한다면 먼저 ORM의 개넘을 알고 넘어가야한다. ORM은 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다. 객체지향 프로그래밍은 클래스를 사용하며 관계형 데이터
Query Method 📌 쿼리메서드는 메서드의 이름을 분석해서 JPQL쿼리를 실행한다! 📌 쿼리 메서드를 활용하면 쉽게 쿼리문을 만들어 사용할 수 있다.
Entity란? Entity는 실체, 객체라는 의미를 가지며 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것이다. 파일시스템이나 데이터베이스에서의 레코드가 개체에 해당한다. ex) User엔티티의 경우 id, 이름, 이메일 등의 정보를 갖는다. Sp
Entity Listener는 엔티티의 변화를 감지하고 데이블의 데이터를 조작하는 일을 한다.
Relation Mapping 연관관계 매핑(Relation mapping)이란 객체의 참조 column과 참조 테이블의 외래키를 매핑하는 것을 의미한다.
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경이라는 뜻으로 어플리케이션과 DB사이에서 객체를 보관하는 가상의 DB같은 역할을 한다.
Spring Boot에서 트랜젝션 적용 - Spring Boot에서 하나의 method를 트렌젝션으로 적용하는 방법은 method위에 @Transactional어노테이션을 붙여주면 된다.
Cascade를 사용해야하는 이유 & Cascade설정하는 법 & CascadeType예제 & OrphanRemoval
@Query는 무엇인가? @Query는 더 구체적인 쿼리 메서드를 작성하기 위해 사용하는 쿼리 메서드의 custom버전이다.
임베디드 타입 - 임베디드 타입은 복합 값 타입으로 불리며 새로운 값 타입을 직접 정의해서 사용하는 JPA의 방법을 의미한다.
Spring Security는 Spring기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이다.
인증/인가의 설정을 바꾸고자 한다면 WebSecurityConfigurerAdapter클래스를 상속한 SecurityConfig클래스를 생성하여 configure(HttpSecurity http)메서드를 override하며 설정해야합니다.
Spring Security의 Filter에 관한 전반적인 설명입니다.
Authentication의 구조 - Spring에서 로그인을 한다는 것은 SecurityContext가 authenticated가 true인 Authentication 객체를 갖고 있는 상태를 말한다.
Authentication에는 인증된 결과 뿐만 아니라 인증을 하기 위한 정보, 인증을 받기 위한 정보가 하나의 객체에 들어가 있다.
Form login이란? Form Login은 Spring Security에서 제공하는 인증방식입니다.
로그아웃을 하기 위해서는 logout request를 받았을 때, server의 세션을 무효화하고 쿠키 정보, 인증토큰과 인증토큰이 저장된 Security Context의 객체를 삭제해줘야 합니다.
Remember Me 기능은 사용자 세션이 만료되고 웹 브라우저가 종료된 후에도 애플리케이션이 사용자의 정보를 기억하는 기능입니다.
이번 Post에서는 세션에 관해 설정하는 방법에 대하여 알아보고자 합니다.
Spring Security에서 인증/인가에 대한 예외처리는 FilterSecurityFilter와 ExceptionTranslationFilter가 처리를 하게 됩니다.
CSRF는 사이트 간 요청 위조인 Cross-Site Request Forgery의 약자로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하며 특정 웹페이지를 보안에 취약하게 한다거나 데이터의 수정, 삭제 등의 동작을 하게 만드는 공격방법입니다.