스프링
[Spring 핵심 원리 - 기본편] @Configuration과 바이트코드 조작의 마법
@Configuration과 바이트코드 조작의 마법 스프링 컨테이너는 싱글톤 레지스트리다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 한다. 그런데 스프링이 자바 코드까지 어떻게 하기는 어렵다. 저 자바 코드를 보면 분명 3번 호출되어야 하는 것이 맞다. 그래서 스프링은 클래스의 바이트코드를 조작하는 라이브러리를 사용한다. 모든 비밀은 @Configuration을 적용한 AppConfig에 있다. @Test void configurationDeep() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); //AppConfig도 스프링 빈으로 등록된다. AppConfig bean = ac.getBean(Ap..
[Spring 핵심 원리 - 기본편] 싱글톤 방식의 주의점
싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. ThreadLocal이란? 일반 변수의 수명은 특정 코드 블록(예, 메서드 범위, for 블록 범위 등) 범위 내에서만 유효하다. { int a = 10; ...
[Spring] Spring Security란?
대부분의 시스템에서는 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 한다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능을 제공하고 있는데, 이번에는 Spring Security에 대해서 알아보도록 하겠다. 1. Spring Security란? [Spring Security란?] Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 ‘인증’과 ‘권한’에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servelet으로 가기 전에 적용되므..
[Spring] 좋은 객체 지향 프로그래밍이란?
객체 지향 객체 지향의 특징 추상화 캡슐화 상속 다형성 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 유연하고 변경이 용이? 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴푸타 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 다형성 (Polymorphism) 다형성의 실세계 비유 실세계와 객체 지향을 1:1로 매칭X 그래도 실세계의 비유로 이해하기에는 좋음 역할과..
[Tip] 패키지 구조는 어떻게 짜는 게 맞을까?
문제 프로젝트를 진행하던 와중에 IDE의 왼쪽을 쳐다보면 수많은 Service 클래스들을 보고 기겁을 하곤 한다. 프로젝트에서는 Service 클래스에게는 SRP를 엄격하게 적용시켜 Service를 기능별로 작게 나누는 것이 목표 중 하나이다. 그래서 Service 클래스가 굉장히 많은 것을 확인할 수 있다. 요즘은 도메인형 패키지 구조를 사용하라는 것이 추세인듯 하다. 아직 계층형과 도메인형간의 대립이 있지만 거의 도메인형 패키지 구조가 좋다는 추세로 가는 것 같다. 해결 다음은 도메인형 패키지 구조로 변경하기 전의 어떤 프로젝트의 패키지 구조이다. com ㄴ dsm ㄴ kkoribyeol ㄴ configuration ㄴ controller | ㄴ request | ㄴ response | ㄴ filte..