본문 바로가기

SPRING

[스프링 시큐리티 완전 정복| 실전 프로젝트 | 회원 인증 시스템] 프로젝트 환경 설정 문제 상황 시큐리티 프로젝트를 따라 가면서 작동 원리를 이해 해보자  요구 사항  기본 보안 설정과 기본 사용자를 구성한다.    필요 개념  SecurityFilterChainSecurityFilterChain은 Spring Security에서 사용자가 정의한 보안 필터들이 순차적으로 적용되는 체인(chain)을 의미한다. 이 필터 체인은 클라이언트 요청을 처리하는 여러 보안 필터들의 묶음으로, 요청이 들어올 때 각 필터가 순서대로 실행되어 보안 처리를 담당한다. Spring Security에서 인증 및 인가(Authentication, Authorization)와 관련된 주요 작업들이 이 필터 체인을 통해 이루어진다.역할SecurityFilterChain은 각 HTTP 요청을 처리할 때 필터를 적용하.. 더보기
[Spring | SpringMVC 1편 - 백엔드 웹 개발 핵심 기술 | 웹 애플리케이션 이해] WAS, 서블릿, 멀티스레드 웹서버 웹서버는 주로 정적 컨텐츠를 처리하는 데 사용된다. 이는 HTML, CSS, JavaScript 파일과 같은 고정된 파일을 클라이언트, 즉 사용자의 웹 브라우저에 제공하는 역할을 한다. 사용자가 웹 브라우저를 통해 특정 웹 페이지에 접속 요청을 하면, 웹서버는 요청받은 파일을 찾아 사용자에게 전송한다. 대표적인 웹서버로는 Apache, Nginx, Microsoft IIS 등이 있다.웹 애플리케이션 서버(WAS) 웹 애플리케이션 서버는 동적 컨텐츠를 처리하기 위해 사용된다. 클라이언트의 요청에 따라 서버에서 실시간으로 처리를 해야 하는 경우에 쓰인다. 예를 들어, 데이터베이스 조회, 각종 로직 처리, 사용자 입력 처리 등 복잡한 동작을 수행하고 그 결과를 사용자에게 전송한다. 웹 애플리케이션 서버.. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프 ] 싱글톤 빈과 함께 사용시 문제점 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프] 프로토 타입 스코프 정리여기서 핵심은 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다는 것이다. 클라이 언트에 빈을 반환하고, 이후 스프링 컨테이너는 생성된 프로토타입 빈을 관리하지 않는다. 프로토타입 빈을 관리할 책임은 프로토타입 빈을 받은 클라이언트에 있다. 그래서 `@PreDestroy` 같은 종료 메서드가 호출되지 않는다. public class SingletonTest { @Test // JUnit 테스트 메소드임을 선언 void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); // 스프링.. 더보기
[스프링부트| 스프링부트와 JPA 활용 1 | 웹 애플리케이션 개발 | 상품 도메인 개발] 상품 리포지토리,서비스 개발 @Repository // 이 클래스를 스프링의 리포지토리 컴포넌트로 등록하여 데이터 액세스 역할을 명시@RequiredArgsConstructor // Lombok 라이브러리의 어노테이션으로 final 또는 @NonNull 필드에 대한 생성자를 자동으로 생성public class ItemRepository { private final EntityManager em; // JPA의 EntityManager를 주입받아 데이터베이스 연산을 관리 public void save(Item item) { // Item 객체를 저장하거나 업데이트하는 메소드 if (item.getId() == null) { // Item의 ID가 null일 경우, 즉 새로 생성된 객체일 경우 .. 더보기
[스프링부트| 스프링부트와 JPA 활용 1 | 웹 애플리케이션 개발 | 상품 도메인 개발] 상품 엔티티 개발(비즈니스 로직 추가) @Entity // 이 클래스를 데이터베이스 테이블과 매핑할 엔티티 클래스임을 지정@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 상속 전략을 사용하여 이 클래스와 상속받는 모든 클래스를 하나의 테이블에 저장@DiscriminatorColumn(name = "dtype") // 상속받는 클래스를 구분할 때 사용할 컬럼명을 'dtype'으로 지정@Getter // 클래스 필드의 getter 메소드를 자동으로 생성 (Lombok 라이브러리)public abstract class Item { // 이 클래스가 추상 클래스임을 명시, 직접 인스턴스화할 수 없고 상속을 통해서만 사용 @Id // 해당 필드를 테이블의 기본 키(primary k.. 더보기
[스프링부트| 스프링부트와 JPA 활용 1 | 웹 애플리케이션 개발 | 회원 도메인 개발] 회원 기능 테스트 @RunWith(SpringRunner.class) // 스프링 부트 테스트를 위한 JUnit 러너 설정@SpringBootTest // 스프링 부트 애플리케이션 컨텍스트를 로드하는 테스트를 위한 설정@Transactional // 테스트 클래스에 트랜잭션 적용, 테스트 완료 후 롤백public class MemberServiceTest { @Autowired MemberService memberService; // 멤버 서비스 의존성 자동 주입 @Autowired MemberRepository memberRepository; // 멤버 리포지토리 의존성 자동 주입 @Autowired EntityManager em; // 엔티티 매니저 의존성 자동 주입 @Test public .. 더보기
[스프링부트| 스프링부트와 JPA 활용 1 | 웹 애플리케이션 개발 | 회원 도메인 개발] 회원 서비스 개발 @Service // 스프링 컨테이너에 서비스 계층의 빈으로 등록@Transactional(readOnly = true) // 클래스 수준에서 읽기 전용 트랜잭션을 적용@RequiredArgsConstructor // final 필드나 @NonNull 필드에 대한 생성자를 자동으로 생성public class MemberService { private final MemberRepository memberRepository; // 의존성 주입을 통한 리포지토리 접근 /** * 회원 가입 */ @Transactional // 데이터 변경을 포함하므로 디폴트 readOnly = false 트랜잭션 적용 public Long join(Member member) { .. 더보기