본문 바로가기
728x90

Framework/Spring14

[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.
[Spring Boot] Lombok Lombok 사용 이유 Spring Project를 진행하다보면, 여러 DTO 등 데이터를 다루기 위한 여러 객체를 생성하고 사용을 하게 되는데, 그럴때마다 getter 와 setter, constructor 등을 타이핑하는 것은 상당히 지루하고 귀찮은 작업이다. 이러한 귀찮음을 줄이기 위해 Lombok annotation을 사용하는 것이다. Lombok을 사용하면 Getter, Setter 등 위에서 언급한 귀찮은 작업들을 대신해주기 때문에 매우 편리하고 코드의 작성 시간 또한 줄어드는 것이다. Lombok 설치 Intellij IDE에서 Spring Project를 생성할 때, dependency를 추가하는 단계에서 Lombok을 추가하여도 되지만 만약 실수로 추가하지 않았다면 build.gradle.. 2024. 1. 11.
[Spring Boot] Controller @Controller Controller는 MVC 구조에서 비즈니스 로직을 담당하는 Model과 클라이언트에 화면을 보여주는 View를 연결해주는 역할을 담당한다. 이 때, client의 요청에 따라 적절한 model을 호출하고 그 결과와 함께 view를 반환하여 준다. Spring MVC에선, 클래스에 @Controller annotation을 통해 controller를 생성할 수 있다. 해당 annotation을 붙이게 되면 Spring에선 해당 클래스를 Controller 역할을 하는 Bean 객체로 생성한다. @RequestMapping 이제 Controller 생성하였으니 해당 클래스 내에서 관련 요청(request)를 처리하는 메소드들을 정의해주어야 하는데 이러한 메소드를 handler라고 한.. 2024. 1. 8.
[Spring Boot] 게시판 목록 페이지 Spring MVC에 대해서 알아보았으니 이를 활용하여 게시판의 목록 페이지를 만들면서 직접 Spring Boot를 사용해보겠다. IDE로는 Intellij ultimate을 사용하였고 View를 생성하기 위한 Template Engine으로는 Thymeleaf를 사용하였다. DB 생성 간단한 게시판을 만들기 위해서 필요한 테이블은 하나만 있어도 된다. 후에 파일 첨부, 로그인 등 부가 기능이 추가된다면 테이블이 여러개 필요하지만 간단한 게시판을 만들기 위해서는 Board Table 하나만 생성하겠다. CREATE TABLE board ( id int PRIMARY KEY AUTO_INCREMENT, title varchar(100) NOT NULL, content text NOT NULL, viewCn.. 2024. 1. 8.
[Spring Boot] MVC pattern Spring Boot를 공부하기 위해서 가장 기초적인 게시판을 하나 만들어보면서 Spring Boot의 동작 방식과 구조, 사용방법 등을 자세히 알아보겠다. 먼저, 게시판을 만들기 전에, Spring의 MVC pattern 에 대해서 다루어보겠다. Model & View MVC pattern에서 Model은 데이터를 다루는 비즈니스 로직을 담당한다. 이 외에도 여러개의 데이터 변경 작업을 하나의 작업으로 묶는 transaction을 다루는 일도 한다. 주로 spring 프로젝트에서 DAO ( Data Access Object ) , Sevice 클래스에 해당한다. View 는 model이 처리한 데이터나 그 결과를 가지고 사용자에게 출력할 ( 서버가 응답할 ) 화면을 만드는 작업을 담당한다. view가 .. 2024. 1. 8.
[토비의 스프링] Singleton Registry에 대한 이해 이전 글에서 @Configuration annotation을 사용하여 application context를 사용해보았는데, 이번 글에서는 그 이전에 userDaoFactory를 직접 사용했던 방법과 application context를 사용했던 방식의 차이점을 알아보면서 이를 통해 무엇을 알 수 있는지에 대해 공부하여 보겠다. UserDaoFactory VS Application Context 두 가지 방식은 테스트 결과만 보면 동일하지만, 파고들어보면 중요한 차이점이 있다. 이를 알아보기 위해서, 먼저 UserDaoFactory를 직접 사용했던 방식으로 userDAO 객체를 두 개를 생성해보자. public static void main(String[] args) { UserDaoFactory fact.. 2024. 1. 2.
[토비의 스프링] Application Context에 대한 이해 이전까지 배웠던 것은 스프링이 추구하는 가치를 이해하고 스프링이 그러한 가치를 제공하기 위해 제공하는 기능을 보다 잘 사용하기 위한 사전 지식이다. 관심사를 분리하고 인터페이스를 통해 확장성을 가질 수 있도록 하고 객체의 생성과 관심 설정까지도 factory 클래스에게 맡겨서 코드가 점차 객체지향에 가까워지는 과정을 통해 여러 개념에 대해서 공부하였다. 이번에는 이전의 factory 클래스를 스프링을 사용하여 구현해봄으로써 스프링이 제공하는 강력한 IoC 컨테이너에 대해서 보다 깊게 알아보는 시간을 가지겠다. Application Context이란? Spring의 Application Context를 알기 위해서는 Bean 객체가 무엇인지 알아야 한다. Bean 객체란 단순하게 말하면 컨테이너에 의해 관.. 2023. 11. 27.
[토비의 스프링] IoC에 대한 이해 토비의 스프링을 공부하면서 이해한 내용을 요약하고 정리하기 위한 포스팅이다. 이번 글에서는 스프링의 핵심 개념 중 하나인 IoC(제어의 역전 : Inversion of Control)에 대해서 알아보겠다. 이 포스팅에서 사용되는 예제는 이전 포스팅이 "객체 지향에 대한 이해"와 이어지는 예제이다. 오브젝트 팩토리 이전 글에서 작성된 예제는 처음에는 객체 지향과는 거리과 먼 코드였지만, 객체지향의 개념을 하나 하나 적용해나가면서 객체지향적인 코드로 바뀔 수 있었다. 이번 글에서는 객체 지향 코드로 만들기 위해 이전 글에서 그냥 무심코 넘어갔던 부분을 되짚으면서 제어의 역전에 대한 이해의 실마리를 찾아보겠다. 이전 예제에서 Test를 위한 코드를 먼저 살펴보자. public class UserTest { p.. 2023. 11. 20.
[토비의 스프링] 객체 지향에 대한 이해 토비의 스프링을 통해 이해한 내용을 요약하고 정리하기 위한 포스팅이다. 이번 글에서는 객체지향에 대한 이해와 그를 바탕으로 객체 지향에서의 의존성 주입이 왜 중요한지에 대해서 간단하게 알아보겠다. 객체 지향적이지 않은 DAO 객체 지향적이지 않은 DAO(Data Access Object) 코드를 살펴보면서 어떠한 문제가 발생할 수 있는지를 알아보고 해당 문제들을 객체 지향적으로 해결해나가보자. 먼저, 사용자 정보를 저장하기 위한 간단한 User 클래스를 만들자. package com.chapter1.spring.domain; public class User{ int id; String name; String nickName; public int getId() { return id; } public voi.. 2023. 11. 20.
[Spring Boot] Container 스프링 컨테이너 스프링 컨테이너는 스프링 프레임워크, 스프링 부트의 핵심 컴포넌트이다. 스프링에서는 외부에서 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는데, 이 역할을 담당하는 '외부'가 바로 컨테이너인 것이다. 컨테이너가 담고 있는 자바 객체를 스프링에서는 빈(Bean) 객체라고 부르는데, 컨테이너는 빈의 생성,관리, 제거 등 생명주기를 관리하며, 생성된 빈에게 의존성 주입 등 추가적인 기능을 제공하는 것이다. 스프링 컨테이너의 종류 스프링 컨테이너는 내부에 있는 자바 객체를 이용하여 빈 객체를 생성하기도 하고, 관계를 설정하기도 하는 등 마치 Bean 객체를 하나의 부품으로 사용한다. 워낙 다양한 기능을 가지고 있다보니, 여러가지 이름으로 불리기도 하는데 그 중.. 2023. 11. 8.
728x90
반응형