반응형 학습/Java43 AOP AOP(aspect-oritented programming) 이란? AOP는 관심사 횡단 교차점의 분리로 모듈화를 향상시키는 패러다임이다. 코드 자체를 변경하지 않고도 기존의 코드에 부가적인 행동을 추가시킬 수 있는데, 대신에 "pointcut" 설정을 통해 수정되는 코드를 별도로 지정해야 한다. 예를 들어, "함수의 이름이 set으로 시작하는 경우, 로그시간을 계산한다" 가 있다. aop를 통해 비지니스 로직에 중요하지 않은 행위들이 코드의 중요 부분을 복잡하게 만들지않고 프로그램에 추가가 가능하다. AOP는 프로그램 로직을 개별의 부분으로 분리시킨다.(관심사의 분리라고도 한다.) 사실 거의 모든 프로그래밍 패러다임은 구현, 추상화, 관심사의 통합으로 사용될 수 있는 추상화(함수, 절차, 모듈, 클래스.. 2021. 8. 11. Spring MVC * Sprinv MVC Model : 비지니스 로직을 처리하고 해당 내용을 담는 공간이다. View : 클라이언트가 요청에 따른 화면에 Model에 저장된 결과를 나타낸다. Controller : 클라이언트의 요청을 받는다. * Spring MVC의 처리과정 Client로부터 요청이 들어오면 DispatcherServlet이 호출된다. DispatcherServlet은 받은 요청을 HandlerMapping에 전달한다. 요청받은 URL을 분석하여 적합한 Controller를 찾는다. DispatcherServlet는 HandlerAdapter를 호출한다. HandlerApdater는 2번에서 찾은 Controller을 통해 비지니스 로직을 처리한다.(Service, DB 이용) 비지니스 로직을 처리하고 .. 2021. 8. 8. IoC, DI IoC(Inversion Of Control) 스프링에서 일반적인 Java 객체를 new로 생성하여 개발자가 관리하는 것이 아닌 Spring Container에게 맡긴다. 즉, 개발자에서 프레임워크로 제어의 객체관리 권한이 넘어갔으므로 "제어의 역전"이라고 한다. DI(Dependency Injection) 장점 - 의존성으로부터 격리시켜 테스트에 용이하다 - 코드를 확장하거나 변경할 때 영향을 최소화한다(추상화) - 순환참조를 막을 수 있다. 순수히 객체를 생성하는 자바의 경우를 확인하자 Base64 와 Url 인코더 2개를 만들고 상황에 따라 적용하도록 코드를 짜본다. 1. Base64Encoder public class Base64Encoder { public String encode(String .. 2021. 8. 8. ObjectMapper ObjectMapper란? JSON 형식을 사용할 때, 응답들을 직렬화하고 요청들을 역직렬화 할 때 사용하는 기술이다. (*여기서 다소 생소한 JSON 형식, 직렬화, 역직렬화를 잠깐 살펴본다.) JSON(Javascript Object Notation) "키 :값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에 독립적이므로 C, 자바, 파이썬 등에서 JSON 데이터 생성을 위한 코드를 각자 가지고 있다. JS를 제외한 언어는 라이브러리를 사용해야하는 경우가 많다 직렬화 (Serialize) 데이터를 전송하거나 저.. 2021. 8. 6. HTTP vs. WWW HTTP vs WWW HTTP는 웹 브라우저(Client)와 웹 서버(Server)가 소통하기 위한 표준 '언어'이다. HTTP는 데이터가 한곳에서 다른곳으로 전송하며 온라인에서 커뮤니케이션이 가능하도록 하는 프로토콜이다. WWW는 하이퍼텍스트 문서들의 모음이다. World Wide Web이고 접두사로 많이 쓰인다. 웹 브라우저(FireFox, Google Chrome 등등)에서 확인할 수 있는 링크가 있는 하이퍼텍스트 문서들의 모음이다. 아래 사진은 link로 연결된 하이퍼텍스트 문서들이며 이들의 묶음이 WWW이다. 공통점은 HTTP와 WWW모두 웹사이트의 URL에서 사용된다는 것이다. HTTP VS WWW in URLs URL에서 HTTP나 WWW를 제거해도 된다. 그러나, 하나라도 제거하는 상황에는.. 2021. 8. 5. 프록시 패턴 프록시란? 사전적 의미로는 대리인이다. 즉, 대신해서 처리한다. 프록시 클래스를 통해서 대신 전달 하는 형태로 설계된다. 실제 Client는 프록시로부터 결과를 얻는다. cache의 기능으로도 활용이 가능하다 SOLID 중에서 OCP, DIP를 따른다. Spring의 AOP는 프록시패턴으로 구현되어있다. Client : subject에 요청한다. 내부 처리로직은 알 필요가 없다. Proxy : Client 요청 중에 간단한 로직, 프록시에 저장된 요청들을 처리한다. realSubject : 무거운 로직, Proxy가 처리하지 못하는 내용들을 처리한다. //Html.java class Html { private String url; public Html(String url) { this.url = url;.. 2021. 8. 3. GET과 Query Parameter, POST와 Databody REST API를 만들 때, @GetMapping과 @PostMapping에 따라 어떻게 프런트 화면의 값을 입력받는지 알아보도록 한다. * Get 1. Map 2. @ReuqestParam 3. Dto 클래스 아래와 같은 URL 주소가 입력된다고 가정하자. user, email, age 등의 정보가 담겨있는 것을 알 수 있다. http://localhost:9090/api/get/query-param?user=seteve&email=steve@gmail.com&age=30 화면에서 입력된 특수한 값들을 백엔드에 넘기고 싶다면 ? 뒤로부터 그 내용을 전달해주면 된다. 각 내용은 &로 구분한다. 1. Map @GetMapping("/get") public String input(@RequestParam M.. 2021. 8. 3. REST, RESTful API REST(Representational State Transfer : 자원의 전달 상태) - 네트워크 아키텍쳐 REST는 2000년에 Roy Fielding에 의해 사용된 단어이다. HTTP를 느슨한 커플링 어플리케이션으로 개발하기 위한 아키텍쳐 스타일이다. 종종 웹 서비스 개발에 사용된다. REST는 저수준에서 어떻게 구현되어야하는지 어떠한 규칙도 강제하지 않으며, 고수준의 디자인 가이드를 제시하고 구현은 각 당사자들에게 맡긴다. (참로 Roy Fielding은 1996년부터 1999년까지 HTTP 1.0의 기존 디자인에 기반을 둔 HTTP 1.1와 병행하여 REST 구조의 스타일을 개발하였다.) * REST의 원칙 가이드 1. Client, Server - 클라이언트와 서버가 서로 독립적으로 분리되어.. 2021. 8. 1. SOLID 원칙 1. SRP(Single Responsibility Principle) 단일 책임 원칙어떠한 클래스를 변경해야 하는 이유는 한가지 뿐이어야 한다public class Unit {private String name;private int speed;public void move() { if(name.equals("저글링") { speed += 3; } else if(name.equals("탱크") { if("탱크모드") { speed = 0; } else { speed= 10; } }}} 현재 클래스에서는 저글링과 탱크라는 2가지 객체에 대해서 검사 후 변경을 하고 있다. 따라서 SRP 원칙에 위배되며 다음과 같이 각각 객체에 대한 메서드로 분리한다. class 저글링 extends Unit.. 2021. 8. 1. 이전 1 2 3 4 5 다음 반응형