전체 글 200

[Spring Security] 스프링 시큐리티란?

🍃 Spring Security란? 스프링에서 제공하는 모듈 중 하나로, 스프링을 기반으로 하는 보안 프레임워크이다. Spring Security 를 통해 자체적으로 세션 체크, 리다이렉션 등을 추상화하여, 보다 편하게 구현하도록 돕는다. Spring Security는 스프링 의존성을 없애기 위해 Filter 인터페이스를 기반으로 동작한다. 즉, 기존의 Spring MVC, 비즈니스 로직과 완벽하게 분리하여 관리 및 동작할 수 있다. 또, 개발자가 직접 만들어야할 필터들을 기본으로 제공해준다. 이렇게 제공하는 필터들을 SecurityFilterChain 이라 한다. SecurityFilterChain 들의 종류와 특징들은 아래에서 다루겠다. 🔐 인증과 인가 인증(Authentication)은 누구인지 식..

Spring/공부 2023.01.16

[Spring Core] 스프링 빈 생명주기와 스코프

♻ 스프링 빈 생명주기(Life-Cycle) I/O 작업들처럼 연결을 해주고, 필요없거나 종료된 경우 해당 연결을 끊어주기 위해서는 반드시 해당 작업의 초기화와 종료 작업이 필요하다. 스프링 빈 역시 이러한 점을 가지고 있다. 객체를 생성하고, 의존관계를 주입해준다. 객체 생성 → 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계를 주입이 완료가 된 후에야 비로소 필요한 데이터를 사용할 수 있는 준비를 마치게 된다. 스프링 빈은 의존관계가 모두 주입된 이후, 호출해야한다. 그렇다면, 해당 빈의 초기화 작업이 모두 이루어졌는 지를 개발자가 알아야 한다. 당연하지만, 기화 작업이 끝난 후에 해당 데이터를 사용해야 예기치 못한 오류들을 피할 수 있기 때문이다. 이를 개발자가 알기 위해서는 우선, 스프링 빈..

Spring/공부 2023.01.14

[Spring Core] 컴포넌트 스캔과 의존성 주입

🔍 컴포넌트 스캔이 필요한 이유 스프링은 무수히 많은 컴포넌트와 빈들을 가지게 되며, 프로젝트의 규모가 커져갈수록 더 많은 컴포넌트들과 빈들을 정의해주어야 하는 번거로움과 함께 실수를 하게 될 수 있다. 그래서 스프링 빈은 설정 정보가 없더라도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공함으로써 이러한 문제를 해결하고자 마련되어 있다. 🎯 컴포넌트 스캔 작동 원리 @ComponentScan 은 @Component 어노테이션이 있는 클래스들을 스프링 빈으로 등록하는 과정을 거치게 된다. 이때, 스프링 빈은 기본적으로 맨 앞글자만 소문자를 사용한 이름으로 지정된다. @Component("nothing") public class Something { ... } 위처럼 하는 경우 스프링 빈 이..

Spring/공부 2023.01.14

[Spring Core] 스프링 컨테이너와 스프링 빈

🛒 스프링 컨테이너란? 스프링에서 사용할 객체들을 담아두고 있는 것 등록된 스프링 빈을 생성하고 의존 관계를 주입하고 생명주기를 관리해 주는 장치이다. @Configuration 어노테이션을 설정 클래스에 붙여 설정 파일을 구성할 수 있으며, 해당 설정 파일에 있는 메소드들에 @Bean 어노테이션을 붙여 스프링 컨테이너에 빈을 등록시킬 수 있다. @Configuration public class AppConfig { @Bean public void DiscountPolicy discountPolicy() { return new MemberShipDiscountPolicy(); } } 위와 같은 예시처럼 사용할 수 있다. 스프링은 애플리케이션 컨텍스트로 시작하며, 이를 편하게 "스프링 컨테이너"라고 칭한다..

Spring/공부 2023.01.11

[일상] 10월 초 스프링 배치 공부

📝 [일상]을 쓰기 앞서.. 10월 초에 갑작스럽게 휴일이 생겨서 배치 애플리케이션에 대해 공부해보고자 스프링 배치로 간단하게 공부를 하였다. 간단하게 직원 월급 정산 일괄 처리를 예제로 만들어보면 괜찮다고 생각이 들어 간단하게 설계하고 구현을 하였다. 사실 스프링 배치를 언제 사용해야하는 기술인지를 알았을 지 몰라도, 직접 사용해본 적은 거의 없었다. (있다 하더라도 야매로 대충 만든 게 전부이다.) 데이터베이스 테이블은 대충 다음과 같은 칼럼으로 이루어져있다. 직원 테이블 (아이디, 이름, 직급) 월급 지급 이력 테이블 (직원, 월급, 날짜) 통장 테이블 (아이디, 이름, 잔고) 일단 공부하는 것이 취지인만큼 너무 복잡한 내용보다는 기초적인 내용들을 위주로 공부를 하였다. 그렇기에 Scheduler를..

일상 2022.10.11

[Spring/JPA] JPA(Hibernate 구현체) DDL 전략

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ 구현체의 ddl auto 속성을 사용하여 JPA의 데이터베이스 별로 DDL를 생성하는 데, 이는 데이터베이스 방언에 따라 변한다 Hibernate ddl auto 속성은 다음과 같다. Hibernate DDL auto 속성 create: 기존 테이블을 삭제하고 새로 생성한다. Drop → Create create-drop: create 속성에 추가로 애플리케이션을 종료할 때 Drop(DDL 제거)한다. update: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경사항만 수정한다. (ALTER) validate: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있다면 경고를 남기고 애플리케이션..

Spring/JPA 2022.06.17

[Spring/JPA] EntityManager, EntityManagerFactory

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ 엔티티 매니저는 영속성 컨텍스트라는 곳에서 엔티티들을 관리하는 클래스이며, 엔티티 매니저 팩토리는 위 엔티티 매니저들을 생성하는 엔티티 매니저 공장이라고 생각하면 된다. 데이터베이스를 하나만 사용하는 경우, 보통 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 생성할 때마다 같은 persistence-unit name으로 지정해서 생성하더라도 계속 새로운 엔티티를 생성하므로 싱글톤, 의존성 주입과 같은 방식으로 개발을 해야한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); MET..

Spring/JPA 2022.06.03

[Spring/JPA] JPA 객체 매핑

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ 기존 테이블을 생성하기 위해서는 DDL을 사용하여 다음과 같은 방식으로 테이블을 생성했어야 했으며, 예외란 존재하지 않았다. 개발자가 직접 DDL를 작성했어야 했다. CREATE TABLE MEMBER ( ID VARCHAR(255) NOT NULL, NAME VARCHAR(255), AGE INTEGER, PRIMARY KEY (ID) ); 하지만 JPA(=자바 진영 ORM)의 등장으로 위 테이블을 매핑하여 객체지향적인 방식으로 구현이 가능하다. 매핑을 하기에 앞서 우선 자바 코드로 객체화시켜보면 다음과 같다. public class Member { private String id; private St..

Spring/JPA 2022.05.27

[Spring/JPA] JPA 소개

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ 과거 엔터프라이즈 자바 빈즈(이하 EJB)라는 기술 표준이 있었는 데, 그 안에도 엔티티 빈이라는 ORM 기술이 있었다. 하지만, 너무 복잡하고 J2EE 애플리케이션 서버에서만 동작하였기에 오픈소스 ORM 프레임워크, Hibernate(하이버네이트)가 등장하였다. 하이버네이트는 EJB의 ORM에 비해 가볍고, 기술 성숙도가 높으며, J2EE 애플리케이션 서버없이도 동작하였기에 결국, EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준을 만들었는 데, 바로 JPA이다. JPA를 사용하는 이유는 다음과 같으며, 이유의 9할은 JPA의 등장배경과 관련이 깊다. 생산성: JCP(자바 컬렉션 ..

Spring/JPA 2022.05.25

백엔드 로드맵 공부

백엔드 로드맵 공부 백엔드 로드맵과 관련된 이미지인데 해당 링크를 통해 다운로드 받으실 수 있습니다. 일단 현재 대소고에서 1년간 보내며 몇 가지 시도를 해보면서 백엔드 개발을 해보기로 결정했습니다.. (물 workshop-6349.tistory.com 위 글 내용을 보안하고자 글을 하나 더 작성합니다. 위 로드맵이 있더라도 백엔드 취업과 관련하여 갈피를 못 잡고 있는 제 자신을 보며, 글도 보안할 겸 앞으로 다시 공부해야할 것들을 조금 탄탄하게 작성하기 위해 작성하였습니다. 저와 같이 갈피를 못 잡거나 정확히 분야를 정하지 못한 분들께 조금이나 도움이 되시길 바랍니다. (※필자는 자바와 스프링으로 주력으로 공부하고 있기때문에 그 위주로 작성하였습니다. 또, 신입을 기준으로 작성하였습니다. 참고해주세요...

공부/서버 2022.05.24