본문 바로가기
728x90

전체 글259

[Spring Security] 기본 설정 파일 생성 Spring Security 설치 스프링 시큐리티의 기본 동작 원리와 구조에 대해서 알아보았으니, 이를 사용하기 위해 Spring Security를 설치해보자. 설치하는 것은 어렵지 않다. 스프링 프로젝트의 build.gradle 파일에서 dependencies 부분에 다음을 추가하면 된다. implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:spring-security-test' 두번째 줄은 test 환경에서 스프링 시큐리티를 동작하도록 하기 위함이다. 해당 dependency를 추가하고 gradle 파일을 다시 reloading 한다. ( .. 2024. 1. 30.
[Spring Security] 동작 구조에 대한 이해 Authentication(인증) VS Authorization(인가) Spring Security 가 무엇인지에 대해서 알아보기 전에, 먼저 인증과 인가에 대해서 알아야 한다. 인증이란, 간단하게 자신을 증명하는 것이다. 특정 웹사이트에 접속을 해서 해당 웹사이트에게 자신을 증명하는 방법이 무엇일까? 바로 해당 사이트의 회원인지를 증명할 만한 자료를 제시하는 것이다. 즉, 웹 사이트는 사용자게 제시한 자료( 아이디, 패스워드, 이메일 등)를 통해, 해당 사용자가 웹 사이트에 등록된 사용자인지를 확인하는 과정( 로그인 )을 거치게 되는데 이러한 과정이 인증을 하는 과정인 것이다. 휴대폰을 사용할 때에도 지문, 얼굴 인식 등의 증명을 통해서 사용자임을 인증을 하는 것 또한 똑같은 과정인 것이다. 인증이 증.. 2024. 1. 30.
[Spring Boot] Cookie 웹에서의 네트워크 연결 쿠키에 대해서 알아보기 전에 쿠키가 등장한 배경에 대해서 먼저 알아야 한다. 웹과 서버과 통신을 할 때에는 클라이언트인 웹이 서버의 request를 보내고 서버가 그에 대해서 response를 보내는 형태이다. request를 보낼 때 서버와 연결을 하고 response를 받고 일정 시간이 지난 후 서버와의 연결이 끊어지게 된다. 이 때, 다시 request를 보낼 때 서버와 연결을 다시 하게 되는데, 해당 연결은 이전의 연결과는 독립적인 연결이기 때문에 서버는 request를 보낸 클라이언트가 이전과 같은 클라이어트인지를 모른다( Stateless => client에 대한 정보가 없음 ) 이런 경우에 생기는 문제점으로는 다음의 상황들을 가정해보면 이해하기 쉽다. 쇼핑 웹에서 장바.. 2024. 1. 19.
EntityListener 다루기 EntityListener를 만들어 사용하는 이유 EntityListener는 저번 글에서 봤듯이 기본적으로 Spring Data JPA 가 제공해주는 AuditingEntityListener 클래스를 사용할 수 도 있지만 직접 EntityListenr 클래스를 생성한 후 지정해 줄 수 도 있다. Spring Data JPA에서 제공하는 리스너도 충분히 편리한데 굳이 직접 만들어 사용해야 할까? 이 의문에 대한 답을 개인적으로 생각해보았을 때, 직접 만든 EntityListener를 사용하게 된다면 여러 중복된 코드도 줄일 수 있고 특정 엔티티에 따라 서로 다른 동작을 할 수 있게 하는 등 기본적으로 제공해주는 JPA 보다는 조금 더 사용자 맞춤 리스너를 작성할 수 있기 때문이 아닐까... 예제 코드를 .. 2024. 1. 18.
[Git] Push git push 로컬 브랜치에서 작업한 내용을 리모트 저장소(쓰기 권한이 있는)에 반영하기 위해서는 git push 명렁어를 사용한다. git push 명렁어를 사용하지 않으면 리모트 저장소에는 반영되지 않기 때문에 리모트에 전송하지 않고 로컬에만 두는 비공개 브랜치를 생성하여 운영하는 것도 가능하다. 또는 협업을 위해서 특정 브랜치만 전송하는 것도 가능하다. git push 명렁어를 사용하여 브랜치의 내용을 전송하기 위해서는 전송하고 싶은 리모트 저장소의 이름과 브랜치명을 추가로 입력해주면 된다. git push git push 명렁어는 입력받은 브랜치가 리모트에도 존재할 때는, 해당 브랜치로 내용을 전송하여 merge 하지만 입력한 브랜치가 존재하지 않으면 리모.. 2024. 1. 17.
JPA Auditing JPA Auditing JPA Auditing이란, Spring Data JPA가 CRUD 등 JPA를 이용한 작업을 할 때, Audit(감시) 기능을 위해 제공해주고 있다. 엔티티 객체가 영속성 컨텍스트에 저장, 수정, 삭제 등의 이벤트의 발생을 JPA Auditing에서 감시하고 있다가, 해당 이벤트가 발생하면 특정 로직을 처리할 수 있도록 해준다. 한마디로, javascript의 이벤트리스너의 기능을 JPA에서 사용할 수 있는 것이다. Entity에 대한 리스너는 따로 클래스 파일을 생성하여도 되지만 Spring Data JPA가 기본적으로 제공해주는 리스너를 사용하여도 된다. 이번 글에서는 Spring Data JPA가 제공해주는 JPA Auditing 을 사용하는 방법을 알아보겠다. @Enabl.. 2024. 1. 17.
[JSP] JSP란 JSP란? JSP는 Java Server Page 의 줄임말로, 동적 웹페이지를 개발하기 위한 웹 프로그래밍 기술이다. 이름에서 알 수 있듯이 JAVA를 사용하여 Server 측에서 Web Page를 동적으로 생성하여 웹 브라우저로 전송해준다. 또한, JSP 는 기업용 자바 기술의 집합체인 Java EE(Java Platform Enterprise Edition)의 핵심 요소로, 정부나 공기업 주도의 사업 등 대규모 기업용 시스템 구축에 주로 사용된다. 정적 VS 동적 웹 페이지 JSP는 동적 웹 페이지를 생성하기 위한 기술이다. 그렇기 때문에 JSP를 더 잘 이해하기 위해서는 정적 웹페이지와 동적 웹페이지의 차이를 알아야 한다. 정적 웹페이지 동적 웹페이지 웹 서버에 저장되어 있는 파일 그대로 웹 브라.. 2024. 1. 16.
기본 CRUD - Create & Update Create Create는 CRUD에서 데이터를 생성하는 것을 담당한다. 그렇다면 JPA에서 Create는 무엇을 의미할까? JPA에서 Create는 일반 자바 객체가 Entity Manage에 의해 관리되는 Entity 객체로 변환되어 관리되는, 즉 영속화되었음을 의미한다. Entity Manager에 의해 관리된다는 것은 일반 자바 객체가 영속성 컨텍스트에 포함, 저장되는 것이기 때문에 Create 관련된 메소드는 모두 save라는 이름으로 시작된다. save(Entity) 메소드를 테스트하기 전에, 이전에 작업해두었던 Test 클래스에서 @BeforeEach는 없애도록 하자. ( 메소드 테스트를 위한 기본 설정은 다음 글 참고 : 바로가기 ) save 메소드는 Entity 타입의 자바 객체를 매개변.. 2024. 1. 16.
기본 CRUD - DELETE 이전 글에서는 JpaRepository의 기본 CRUD 메소드에서 READ에 해당하는 메소드들을 알아보았다. 이번 글에서는 DELETE에 해당하는 JpaRepository의 기본 메소드에 대해서 알아보자. ( 사전 작업은 다음 링크를 참고 : 기본 CRUD - READ ) DELETE CRUD의 DELETE는 데이터베이스에서 데이터를 삭제하는 부분을 담당한다. JpaRepository의 delete를 담당하는 기본 메소드를 살펴보고 각각의 메소드가 어떤 쿼리문을 통해 작업을 진행하는지 살펴보자. delete(Entity) delete() 메소드는 넘겨받은 Entity 객체를 데이터베이스에서 삭제한다. 이 때, 주의할 점은 JPA가 어떤 객체를 Entity 객체, 즉 영속화된 객체라고 인식하는지를 알아야 .. 2024. 1. 16.
기본 CRUD - READ JPA를 사용할 때 주의할 점 JPA는 편리하게 Java 코드만으로 영속성 데이터를 다루게 해준다. 또한 Spring Data JPA는 JPA를 구현한 Hibernate 를 다시 한번 감싸서 사용자가 더 편리하게 여러 메소드를 통해 영속성 데이터를 다루게 해준다. 또한, 현재 사용하고 데이터베이스의 종류가 다르더라도 사용자가 사용하여야 할 메소드는 변하지 않는다!! ( 데이터베이스 종류에 독립적임!! ) 이러한 점은 JPA의 큰 장점이지만 반대로 JPA을 사용할 때 주의하여야 하는 이유이다. 데이터베이스에 독립적으로 동작하여야 하기 때문에 JPA는 모든 데이터베이스에서 사용할 수 있는 쿼리문을 생성하기 때문에 몇몇 메소드들은 성능을 크게 저하시킬 수 있는 쿼리문을 생성한다. 그렇기 때문에 JPA를 사용할.. 2024. 1. 16.
JPA Repository - 개념 JPA Repository JPA Repository는 기본적인 CRUD 부터 Spring Data JPA의 여러 메소드들을 사용할 수 있도록 정의된 인터페이스이다. 다음은 JPA Repository의 상속 계층도이다. 상속 계층도를 살펴보면 CRUD를 위한 Repositoy부터 Paingnation, Sorting 등 다양한 메소드를 제공하는 여러 Repository를 JPA Repository가 상속받고 있는 것을 볼 수 있다. 아래는 JpaRepository interface이다. @NoRepositoryBean public interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExample.. 2024. 1. 15.
[Git] remote tracking branch remote tracking branch 협업에 있어서 리모트 저장소는 중요한 부분을 차지하기 때문에 git은 remote 저장소와 관련된 정보를 저장하고 있다. 이 정보는 .git directory에 refs directory에 저장되어 있다. 여기에 저장되어 있는 정보를 토대로 리모트에 대한 정보를 조회할 수 있다. git ls-remote [ remote이름 ] 을 사용하면 모든 리모트의 refs를 조회할 수 있다. user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main) $ git ls-remote origin b68334cc810e16c0713ec8de1e03117c1409f29a HEAD b68334cc810e16c0713ec8de1e03117c140.. 2024. 1. 11.
728x90
반응형