스프링 13

AOP

AOP (Aspect Oriented Programming) 관점지향 프로그래밍MVC 웹 어플리케이션에서는 Web Layer, Business Layer, Data Layer 로 정의Web Layer: REST API 제공, Client 중심의 로직 적용Business Layer: 내부 정책에 따른 logic 개발, 주로 해당 부분을 개발Data Layer: 데이터베이스 및 외부와의 연동 처리  주요 Annotation   횡단 관심AOP 는 메소드들 또는 특정 구역에 반복되는 로직들을 한 곳으로 몰아서 코딩을 할 수 있게 해줌 공통적인 기능들 로그통신메서드 실행 시간 확인인코딩, 암호화 기능  예제   - 메서드 실행 시 argument와 return 값에 대한 추적 log          - 메서드 ..

IoC / DI

IoC / DI IoC (Inversion of Control)Java 객체를 new 로 생성해 개발자가 관리하는 것이 아닌 Spring Container 에 모두 맡김 (싱글톤 형태로 관리됨)프레임워크로 제어의 객체 관리의 권한이 넘어감, '제어의 역전' 이라고 함 DI (Dependency Injection)장점의존성으로부터 격리시켜 테스트에 용이함DI 를 통해 불가능한 상황을 Mock 과 같은 기술을 통해 안정적인 테스트 가능코드를 확장하거나 변경 할 때 영향을 최소화함 (추상화)순환참조를 막을 수 있음  예제 - 자바       - 스프링   - IEncoder 는 같음                   feat. 패스트캠퍼스 - Java/Spring 웹 개발 마스터 초격차

스프링의 핵심

스프링의 핵심 SpringSpring 1.0버전은 2004년 3월 출시20여가지로 구성 (https://spring.io/projects/spring-framework)스프링의 핵심기능 (DI, AOP, etc) 제공, 필요한 모듈만 선택해 사용 가능현재 대부분 서버들이 단일 아키텍처 (모놀리스)에서 마이크로서비스 아키텍처로 변환 중 -> 스프링도 진화하고 있는 상태스프링부트, 스프링 클라우드, 스프링 데이터, 스프링 배치, 스프링 시큐리티에 중점을 둠 Spring 의 과제'테스트의 용이성', '느슨한 결합' 에 중점을 두고 개발2000년 초반, 자바 EE 애플리케이션은 작성/테스트가 매우 어려웠음, 느슨한 결합이 된 애플리케이션 개발이 힘든 상태였고, 데이터베이스와 같이 외부에 의존성을 두는 경우 단위..

자바, 객체지향, 스프링

⁉️ 자바의 특징은? 자바는 객체지향 프로그래밍 언어로, 컴파일 언어인 동시에 인터프리터 언어이기도 합니다. JVM (자바 가상 머신) 위에서 실행되기 때문에 운영체제에 독립적입니다. 또한, 객체 생성시 자동으로 메모리 영역을 찾아 할당하고, GC (Gabage Collector)를 통해 사용하지 않는 객체를 삭제해 메모리를 자동으로 관리합니다. 하지만, 자바 실행시 JVM 을 거쳐야하므로, 다른 언어에 비해 실행 속도가 느립니다. 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편입니다. ⁉️ JVM 이란? 어떤 기능? JVM 은 스택기반으로 동작합니다. 자바와 운영체제 사이에서 중개자 역할을 수행하여 운영체제에 구애받지 않고 재사용을 가능하게 해줍니다. 메모리관리, GC (Gabage Collect..

서비스의 인증과 권한 부여

보안 용어 이해 인증 (Authentication) 사용자가 누구인지 확인하는 단계 ex) 로그인 로그인에 성공하면 애플리케이션 서버는 응답으로 사용자에게 토큰 (token)을 전달 실패한 사용자는 토큰을 전달받지 못해 원하는 리소스에 접근 불가 인가 (Authorization) 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때, 해당 리소스에 접근할 권리가 있는지 확인 ex) 특정 게시판 게시판 접근 등급을 확인해 접근을 허가하거나 거부 접근 주체 (Principal) 애플리케이션 기능을 사용하는 주체 ex) 사용자 또는 디바이스, 시스템 스프링 시큐리티 동작 구조 서블릿 필터 (Servlet Filter) 기반 동작, DispatcherServlet 앞에 필터 배치 필터체인 (FilterChai..

액추에이터 & 서버 간 통신

액추에이터 HTTP 엔드포인트나 JMX를 활용해 애플리케이션을 모니터링 하고 관리할 수 있는 기능 제공 * JMX (Java Management Extensions) 실행 중인 애플리케이션으 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API JMX를 통해 리소스 관리를 하려면 MBeans(Manage Bean)를 생성해야함 액추에이터 종속성 추가 액추에이터 기능을 사용하려면 애플리케이션에 spring-boot-starter-actuaor 모듈의 종속성을 추가해야함 엔드포인트 애플리케이션의 모니터링을 사용하는 경로 스프링부트는 여러 내장 엔드포인트가 포함돼 있으며, 커스텀 엔드포인트를 추가 할 수 있음 액추에이터를 추가하면 기본적으로 엔드포인트 URI로 /actuator 가 추가되며, 뒤에 경로를 ..

유효성 검사와 예외처리

유효성 검사 데이터를 사전 검증하는 작업 일반적인 애플리케이션 유효성 검사 문제점 계층별로 진행하는 유효성 검사 관리하기 어려움 중복코드 존재 길어지는 검증코드 Hibernate Validator Bean Validation 명세의 구현체로 도메인 모델에서 어노테이션을 통한 필드값 검증을 가능하게 도와줌 스프링 부트에서의 유효성 검사 유효성 검사 라이브러리를 의존성으로 추가하면 사용할 수 있음 spring-boot-starter-validation 유효성 검사는 각 계층으로 데이터가 넘어오는 시점에 해당 데이터에 대한 검사를 실시함 계층간 데이터 전송에 대체로 DTO 객체를 활용하고 있기 때문에 DTO 객체를 대상으로 수행하는 것이 일반적 이외 @Validated 어노테이션과 커스텀 Validation을..

연관관계 매핑

연관관계 매핑 RDBMS를 사용할 때는 각 도메인에 맞는테이블을 설계하고 연관관계를 설정해서 조인(Join) 등 기능을 활용함 JPA를 사용하는 어플리케이션에서도 테이블의 연관관계를 엔티티 간의 연관관계로 표현할 수 있음 다만, 정확한 연관관계를 표현할 수는 없음 연관관계 매핑 종류와 방향 One To One : 일대일 (1 : 1) One To Many : 일대다 (1 : N) Many To One : 다대일 (N : 1) Many To Many : 다대다 (N : M) 어떤 엔티티를 중심으로 연관 엔티티를 보느냐에 따라 연관관계의 상태가 달라짐 JPA를 사용하는 객체지향 모델링에서는 엔티티 간 참조 방향을 설정할 수 있음 비즈니스 로직의 관점에서 봤을 경우 단방향 관계만 설정해도 해결되는 경우가 있음..

Spring Data JPA

JPQL JPA Query Language 의 줄임말로 JPA에서 사용할 수 있는 쿼리 엔티티 객체를 대상으로 수행하는 쿼리 매핑된 엔티티의 이름과 필드의 이름을 사용 쿼리 메서드의 생성 쿼리 메서드는 주제(Subject)와 서술어(Predicate)로 구분 ' find...By ', ' exists...By ' 와 같은 키워드로 쿼리의 주제를 정하며, ' By '는 서술어의 시작을 나타내는 구분자 역할을 함. 서술어 부분은 검색 및 정렬 조건을 지정하는 영역 / 엔티티의 속성으로 정의할 수 있고, AND 나 OR 를 사용해서 조건을 확장하는 것도 가능. // (리턴타입) + {주제 + 서술어(속성)} List findByEmailAndName(String email, String name); 쿼리 메서..

데이터베이스 연동 - 2

ORM ORM은 Object Relational Mapping의 줄임으로 '객체 관계 매핑'을 의미함. 객체와 RDB (Relational DataBase)의 테이블을 자동으로 매핑하는 방법 자바 클래스는 RDB 테이블과 불일치가 존재할 수 밖에 없음. ORM이 불일치와 제약사항을 해결하는 역할을 함 ORM을 사용하면 코드로 데이터를 조작할 수 있음. ORM 장점 데이터베이스 쿼리를 객체지향적으로 조작 할 수 있음 개발 비용 ↓ 가독성 ↑ 재사용 및 유지보수가 편리함 데이터베이스에 대한 종속성이 줄어듦 데이터베이스를 교체하는 상황에서도 비교적 적은 리스크를 부담 ORM 단점 온전한 서비스 구현의 한계 복잡한 쿼리를 정확한 설계 없이 ORM만으로 구성하게 되면 속도 저하 등의 성능 문제가 발생할 수 있음 ..