본문 바로가기

Spring

📝 절차지향 / 객체지향 / 관점지향 프로그래밍 정리 절차적 프로그래밍 (PP; Procedure Programming) procedure(main 함수, 메소드 등)를 이용하여 작성하는 프로그래밍 스타일이다. 순차적인 처리를 중요시 여기며, 프로그램 전체가 유기적으로 연결되도록 한다. 컴퓨터의 처리 구조와 비슷해 실행속도가 빠르지만 확장성이 떨어지며 유지보수가 어렵다. 객체지향 프로그래밍(OOP; Object Oriented Programming) 프로그래밍에 필요한 attribute와 method를 포함한 class를 정의하고, 정의된 class를 통해서 object를 생성하여 object들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방식 유지보수가 보다 수월하지만 설계에 필요한 시간이 크다. 관점지향 프로그래밍(AOP; Aspect Or.. 더보기
📝 ORM, JPA, Spring Data JPA 정리 ORM(Object Relational Mapping) 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 객체 모델과 관계형 모델 간에 불일치가 존재한다. 데이터베이스 데이터 - object 필드 / 객체를 통해 간접적으로 데이터베이스의 데이터를 다룬다. JPA(Java Persistence API) orm 기술 표준으로 사용되는 인터페이스의 모음 java 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스로 jpa를 구현한 것으로는 Hibernate, OpenJPA 등이 있다. 반복적인 CRUD sql을 처리해주고 객체 중심의 개발을 할 수 있기 때문에 사용하면 좋다. S.. 더보기
📝 테스트 코드 작성의 장/단점과 테스트 범위에 따른 분류 1. 테스트 코드 작성의 장단점 장점 예상 동작과 실제 동작을 비교하여 빠르고 정확한 테스트가 가능하기 때문에 초기 개발의 디버깅이 쉬워짐 어플리케이션이 확장, 리팩터링 등 변경되더라도 올바르게 작동하는지 확인 할 수 있음 단위 테스트 자체를 어플리케이션에 대한 문서로 사용할 수 있음 단점 테스트 코드까지 작성해야하기 때문에 개발시간이 오래걸림 테스트코드 유지보수 비용 발생 2. 테스트 코드 범위에 따른 분류 1)단위 테스트(Unit Test) - 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 강점 - 어디에서 문제가 발생했는지 빨리 파악할 수 있어 디버깅 시간을 단축시켜줌 - 일부 의존 대상은 스텁이나 모의객체 등을 이용해서 대역으로 테스트함 2) 통합 테스트(Intergarati.. 더보기
📝 스프링 시큐리티를 사용하여 회원관리하는 방법 순서도로 정리하기 스프링 시큐리티 사용하지 않는 회원 관리의 흐름 스프링 시큐리티 사용하지 않는 회원 관리의 흐름 Client 의 요청은 모두 Spring Security를 거친다. Spring Security의 역할 인증과 인가 성공 시: Controller로 Client 요청 전달 Client 요청+ 사용자 정보 인증과 인가 실패 시: Controller 로 Client 요청 전달되지 않음 Client 에게 Error Response 보냄 더보기
📝 스프링에서 DI (의존성 주입) 를 사용하는 이유 DI(의존성 주입)을 하지 않을 때 문제점: 강한 결합 Controller는 Service의 객체를 생성하여 사용하고, Service는 Repository객체를 생성하여 사용함 → Controller는 Service를 Service는 Repository를 의존하는 상황 // Controller1은 Service1 객체를 생성하여 사용 public class Controller1 { private final Service1 service1; public Controller1() { this.service1 = new Service1(); } } // Service1은 Repository1 객체를 생성하여 사용 public class Service1 { private final Repository1 repo.. 더보기
📝 스프링 프레임워크 특징 생명주기 관리: 스프링 프레임워크는 Java 객체의 생성, 소멸과 같은 라이프 사이클을 직접 관리하며 스프링으로부터 필요한 객체를 가져와 사용할 수 있다. 제어 역전(Inversion of Control, IoC): 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했다. 제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉, 제어권이 프레임워크에게 있어 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출한다. POJO(Plain Old Java Object) 방식: POJO는 Java EE의 EJB 를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하며 나타난 용어다. 별도의 프레임워크 없이 Java EE를.. 더보기
📝 스프링(Spring) 예외(Exception)처리 1 1. 에러(Error)와 예외(Exception) 1) 에러(Error) - java.lang.error 클래스 처리할 수 없는 심각한 오류를 나타내는 클래스로 throw가 되었지만 catch되지 않은 것으로 오류는 개발자가 처리 할 수 없는 경우로 메모리 에러, 스택 오버 플로우 같은 시스템 비정상의 상황으로 주로 JVM에서 발생 시스템 레벨에서 특별한 작업을 하는 것이 아닌 이상 에러 처리를 하지 않아도 됨 2) 예외(Exception) - java.lang.exception 클래스 프로그램이 복구할 수 있고 응용 프로그램에서 개발자가 처리해야 하는 문제 Unchecked Exception(RunTimeException:) Checked Exception 예외처리 - 컴파일 타임에 확인할 수 없는 예.. 더보기
📝 AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 개념 AOP(Aspect Oriented Programming)란? 1) 스프링의 3대 요소 제어 역전(IoC), 관점지향 프로그래밍(AOP), 추상화 서비스(PSA) 중 하나 2) OOP(객체지향 프로그래밍)를 보완하는 수단 👉🏻 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 모듈화 한 것을 필요한 곳에 정의하여 사용함 👉🏻 소스 코드 상에서 다른 부분에 계속 반복해서 쓰는 코드인 흩어진 관심사(Crosscutting Concerns)를 Aspect(관점)로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하는 것 주요 개념 1. Aspect(관점): 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 코드를 부분적으로 나누어서 모듈화 하는 것 2. Target: As.. 더보기