Spring

🤔 Inversion of Control? (제어의 역전) 사용은 하지만 만들진 않음 누군가 밖에서 만들어서 줄 수 있도록 생성자를 통해 받아옴 💻 IoC Template // Controller의 생성자는 repo를 주입해줘야 한다. // 생성자로 강제하기 때문에 repo 객체는 무조건 사용할 수 있다. class OwnerController { private OwnerRepository repo; public OwnerController(OwnerRepository repo) { this.repo = repo; } } class OwnerControllerTest { @Test public void create() { OwnerRepository repo = new OwnerRepository(); ..
🤔 AOP?(Aspect Oriented Programming) 관점 지향 프로그래밍 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것 주요 개념 Aspect 여러 곳에서 쓰이는 코드 (공통 부분)을 모듈화한 것 Target Aspect 가 적용되는 곳 Advice Aspect 에서 실질적인 기능에 대한 구현체 Joint point Advice가 Target에 적용되는 시점 메서드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등등 Point cut Joint point의 상세 스팩을 정의한 것 AOP 구현체 AspectJ 스플링 AOP AOP 적용 방법 컴파일 (AspectJ) 로드 타임 (AspectJ) 런타임 (스프링 AOP) ..
🤔 PSA? (Portable Service Abstraction) 호환성있는 서비스 추상화 잘 만든 인터페이스 Tomcat, Netty dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' } spring-boot-starter-web을 주입하면 tomcat으로 실행 dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' } spring-boot-starter-webflux을 주입하면 netty로 실행 이처럼 의존성만 변경하면 코드에 변경없이 기능을 수정할 수 있는 특성 ex) Spring Transaction, Sp..
🤔 빌드 관리 도구? 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램 초기의 java 빌드도구로 Ant를 많이 사용하였으나 최근 많은 빌드도구들이 생겨 Maven이 많이 쓰였고, 현재는 Gradle이 많이 쓰인다. Maven 장점 및 특징 자바 전용 프로젝트 라이프사이클 관리 목적 빌드 도구이며 Ant 불편함을 해결하고자 만들었다. pom.xml을 이용한 정형화된 빌드 시스템(필요한 라이브러리를 정의하면 알아서 다운받아줌) 간단한 설정을 통한 배포 관리가 가능 하다. Gradle 장점 및 특징 Maven 과 Ant 의 장점을 조합하여 만든 빌드 도구이다. build.gradle을 이용한 정형화된 빌드 시스템이다. 멀티 프로젝트에 용이하다. Gradle은 프로젝트의 어느 부분이 업데이트..
@Entity 테이블과 일대일로 매칭되는 객체 단위이며 Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미합니다. @Table 데이터베이스상의 테이블명을 정해줄 수 있다. Entity 클래스의 이름 그대로 테이블이 생성 되기 때문에 관례적으로 변경해 줄 때 사용한다. @Entity @Table(name = "SCHOOL") public class School { ... } @Column 데이터베이스의 테이블에 있는 컬럼과 동일하게 1:1로 매칭되기 때문에 Entity 클래스 안에 내부변수로 정의 테이블에 a,b,c 컬럼이 있다면 각각 3개의 @Column 어노테이션을 작성하게 됩니다. 다만 실제 a,b,c,d 총 4개의 칼럼이 있더라도 a,b,c 컬럼만 Entity 클래스에 작성해도 ..
🤔 빈 (Bean)? IoC에서 관리되는 일반적인 객체 다음 객체는 Bean이 아니다 OwnerController ownerController = new OwnerController(); 다음 객체는 applicationContext에서 관리하는 객체를 가져왔으므로 Bean이다. OwnerController bean = applicationContext.getBean(OwnerController.class); 🤔 Bean 만드는 방법? 2가지 방법 Component Scanning 직접 등록하기 Component Scanning @Controller라는 Annotation은 사실 @Component Annotation을 사용하도록 구현되어 있다. Annotation 프로세서 중 IoC가 사용하는 여러가지..
🤔 REST (Representational State Transfer) 자원의 상태 전달 네트워크 아키텍처 🤔 REST 조건 1. Client, Server 클라이언트와 서버가 서로 독립적으로분리 되어 있어야 한다. 2. Stateless 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다. 3. Cache 클라이언트는 서버의 응답을 Cache(임시저장) 할 수 있어야 한다. 클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춤 4. 계층화 (Layered System) 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy등 다양한 계층 형태로 구성 가능해야 하고 이를 확장 할 수 있어야 한다. 5. 인터페이스 일관성 인터페이스의 일관성을 지키고, ..
🤔 Validation? 일반적인 애플리케이션에서 데이터 유효성 검사 로직은 다음과 같은 문제를 가지고 있다. 애플리케이션 전체에 분산되어 있다. 코드 중복이 심하다. 비즈니스 로직에 섞여있어 검사 로직 추척이 어렵고 애플리케이션이 복잡해진다. 위 경우를 해결하기 위한 Bean Validation 이라는 데이터 유효성 검사 프레임워크를 제공하고 있다. Validation Anntation Validation 사용법 dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.5.1' } build.gradle 추가 @Data public class Input..
Reference 개발자를 위한 레디스 튜토리얼 01 : NHN Cloud Meetup 🤔 Redis ? Remote DIctionary Server 레디스는 In-Memory 데이터베이스 즉, 모든 데이터를 메모리에 저장하고 죄회 기존 관계형 데이터베이스 보다 훨씬 빠름 다양한 자료 구조를 지원 * DB CRUD작업 시 Redis cache에 저장하여 비교 작업후 DB에 접근하는 방식을 주로 사용한다. * Redis cache에 DB data가 있는지 확인 후 실제 DB에 접근하기 때문에 부하량이 적어진다. Redis 자료 구조 String 레디스의 String은 키와 연결할 수 있는 가장 간단한 유형의 값 키가 문자열이므로 이 구조는 문자열을 다른 문자열에 매핑하는 것 string 타입에는 '모든 종..
재호우96
'Spring' 카테고리의 글 목록