본문 바로가기

728x90
반응형

공부 정리/Java

(43)
Validation 어노테이션 직접 만들어보기 build.gradle에 추가한 spring-boot-starter-validation 덕분에 많은 Validaiton 어노테이션들을 사용했고 이것이 전부라고 생각했습니다. 하지만, 알고보니 제가 직접 커스터마이징을 해서 사용할 수 있었습니다. 따라서, 해당 방법에 대해 정리해보고자 합니다. 1. 의존성 추가 // Gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 2. 어노테이션 생성 "yyyyMM" 형식으로 문자열을 입력했는지 알아보는 어노테이션을 만들고자 한다. 아래는 어노테이션을 만드는 가장 기초적인 방법으로 처음에는 굉장히 낯설겠지만 하나씩 이해하다보면 생각보다 직접 만드는게 어렵지 않다. @Constra..
@Qualifier & @Resource & @Autowired 문득, 인터페이스를 구현한 클래스들의 @Component등록을 보면서 @Qualfier와 @Resrouce를 살펴보게 되었다. @Autowired로 객체를 사용하고 싶을 때, Spring Container에 Type이 같은 객체들이 여러개 등록되어있다면, 어떤 것을 사용할지 명시해주어야 한다. public interface Party { } ==== package com.sourceallies.person; ... @Component public class Person implements Party { } === package com.sourceallies.organization; ... @Component public class Organization implements Party { } public ..
AOP AOP(aspect-oritented programming) 이란? AOP는 관심사 횡단 교차점의 분리로 모듈화를 향상시키는 패러다임이다. 코드 자체를 변경하지 않고도 기존의 코드에 부가적인 행동을 추가시킬 수 있는데, 대신에 "pointcut" 설정을 통해 수정되는 코드를 별도로 지정해야 한다. 예를 들어, "함수의 이름이 set으로 시작하는 경우, 로그시간을 계산한다" 가 있다. aop를 통해 비지니스 로직에 중요하지 않은 행위들이 코드의 중요 부분을 복잡하게 만들지않고 프로그램에 추가가 가능하다. AOP는 프로그램 로직을 개별의 부분으로 분리시킨다.(관심사의 분리라고도 한다.) 사실 거의 모든 프로그래밍 패러다임은 구현, 추상화, 관심사의 통합으로 사용될 수 있는 추상화(함수, 절차, 모듈, 클래스..
Spring MVC * Sprinv MVC Model : 비지니스 로직을 처리하고 해당 내용을 담는 공간이다. View : 클라이언트가 요청에 따른 화면에 Model에 저장된 결과를 나타낸다. Controller : 클라이언트의 요청을 받는다. * Spring MVC의 처리과정 Client로부터 요청이 들어오면 DispatcherServlet이 호출된다. DispatcherServlet은 받은 요청을 HandlerMapping에 전달한다. 요청받은 URL을 분석하여 적합한 Controller를 찾는다. DispatcherServlet는 HandlerAdapter를 호출한다. HandlerApdater는 2번에서 찾은 Controller을 통해 비지니스 로직을 처리한다.(Service, DB 이용) 비지니스 로직을 처리하고 ..
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 ..
ObjectMapper ObjectMapper란? JSON 형식을 사용할 때, 응답들을 직렬화하고 요청들을 역직렬화 할 때 사용하는 기술이다. (*여기서 다소 생소한 JSON 형식, 직렬화, 역직렬화를 잠깐 살펴본다.) JSON(Javascript Object Notation) "키 :값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에 독립적이므로 C, 자바, 파이썬 등에서 JSON 데이터 생성을 위한 코드를 각자 가지고 있다. JS를 제외한 언어는 라이브러리를 사용해야하는 경우가 많다 직렬화 (Serialize) 데이터를 전송하거나 저..
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를 제거해도 된다. 그러나, 하나라도 제거하는 상황에는..
프록시 패턴 프록시란? 사전적 의미로는 대리인이다. 즉, 대신해서 처리한다. 프록시 클래스를 통해서 대신 전달 하는 형태로 설계된다. 실제 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;..

728x90
반응형