Spring AOP(Aspect-Oriented Programming) Spring AOP에서 AOP는 Aspect-Oriented Programming으로 관점 지향 프로그래밍을 의미한다. 관점 지향 프로그래밍이란 관심사를 적절히 나누자는 것인데 AOP에서는 이를 공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)으로 분리한다. AOP라는 말에서 OOP와 대치될 것 같다는 느낌을 받을 수 있지만, 전혀 그렇지 않고 AOP는 오히려 더욱더 OOP의 관점으로 프로그래밍 할 수 있도록 도와준다. Spring AOP 예제 - 메소드의 호출 시간 측정 AOP에 대해 공부하면서 많은 자료를 찾아봤는데 거의 모든 자료에서 AOP의 예제로 메소드의 호출 시간을 측정하는..
Two Pointer Algorithm 투 포인터 알고리즘은 연속되는 1차원 배열 또는 리스트를 순차적으로 접근할때 사용하는 알고리즘이다. 이름 그대로 시작점과 끝점을 가리키는 두 개의 포인터를 이용하여 부분배열을 탐색한다. 투 포인터 알고리즘을 사용하는 이유는 당연히 배열 탐색시 시간복잡도에서의 효율을 위해서이다. 예를 들어, 길이가 100인 배열(0 포함)에서 합이 15가되는 부분배열 중 길이가 가장 짧은 배열을 찾아야한다고 해보자. 첫번째 원소부터 차례대로 탐색한다면 99번 원소에 15가 있다고 할때 최악의 경우로 약 O(n^2/2)의 시간복잡도를 가질 것이다. 투 포인터 알고리즘의 예제와 투 포인터 알고리즘을 사용한다면 시간복잡도가 어떻게 나오는지 살펴보자. 아래는 투 포인터 알고리즘을 적용할 ..
ORM(Object-Relational Mapping) ORM이란 말그대로 객체와 관계형 데이터베이스를 직접 매핑해 사용하는 전략을 말한다. Spring을 이용하면 @Entity를 이용해 객체와 실제 RDB의 테이블을 매핑해 개발하는데 이러한 방식이 ORM 전략을 따르는 것이다. 자바에서는 이러한 ORM의 표준 명세로 JPA(Java Persistance API)를 사용하고 있다. JPA(Java Persistance API) JPA는 위에서 설명한바와 같이 자바에서 제공하는 인터페이스로 어떤 기능을 제공하는 라이브러리가 아니다. JPA는 ORM 전략을 따르는 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지에 대해 정의한 기술 명세서이다. JPA와 같이 Hibernate에 대해서도 많이..
Java Collection Framework 자바에서는 효율적인 데이터의 추가 · 삭제 · 검색 등을 돕기 위한 자료구조 인터페이스들을 java.util 패키지에 포함시켜 놓았다. 이들을 Collection Framework라고 총칭하며 우리가 자주 사용하는 List , Set, Map이 대표적이다. 아래 그림을 보면 Collection Framework는 크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. List, Set의 경우 객체를 추가 · 삭제 · 검색하는 방법에 공통점이 있기 때문에 Collection 인터페이스를 정의해 이를 확장하는 방식으로 사용하고 있다. 기술블로그를 쓰면서 Inpa님의 글을 많이 참고하는데 ArrayList, HashMap 등 Collection의 실..
https://zzzzseong.tistory.com/58 [AWS] EC2 서버에 HTTPS 적용하기 (1) 개요 부트캠프 프로젝트를 하면서 HTTP를 HTTPS로 업그레이드하기 라는 추가 요구사항이 있었다. 맡은 파트를 일찍 끝내고 어떤걸 할까 고민하던 와중에 해당 주제에 흥미가 생겨 서버의 프로토콜 zzzzseong.tistory.com 해당 글은 위 포스트와 이어지는 글입니다. 개요 지난 글에서 HTTPS 통신을 위해 ACM에서 SSL인증서를 발급받고 CNAME 유형 레코드를 생성하는 부분까지 살펴보았다. 이번 글에서는 CNAME 값을 도메인에 매핑하고 로드밸런서와 A 유형 레코드를 생성해 최종적으로 도메인을 이용한 HTTPS 통신을 테스트 해보자. 가비아 내 도메인에 CNAME 등록 웹을 넘어 ..
개요 부트캠프 프로젝트를 하면서 HTTP를 HTTPS로 업그레이드하기 라는 추가 요구사항이 있었다. 맡은 파트를 일찍 끝내고 어떤걸 할까 고민하던 와중에 해당 주제에 흥미가 생겨 서버의 프로토콜을 HTTPS로 바꿔보기로 했다. 해야할게 좀 많아 어려워보일 수 있는데 좋은 참고자료를 찾아서 하루안에 EC2에 올라가있는 서버의 프로토콜을 HTTPS로 성공적으로 전환할 수 있었다. 가비아 도메인 구매 HTTPS로 통신하기 위해서는 SSL인증서를 발급받아야한다. SSL인증서는 소유하고 있는 도메인에 대한 보안 인증서이고 SSL인증서를 발급받기 위해서는 도메인이 필요하다. 무료 도메인을 찾아보고 있었는데 무료라 그런지 대부분 평이 좋지는 않았고 가비아에서 매우 싼 가격으로 도메인을 구입할 수 있다는 정보를 얻었..
개요 지금까지 사용자의 아이디, 비밀번호를 검증하는 코드를 Service 레이어에서 조건문을 이용해 작성했었다. 부트캠프 멘토님의 테스트 코드를 분석하면서 @Pattern과 @Valid를 이용해 입력값을 검증할 수 있다는 사실을 알게되었고 Service 레이어의 코드를 줄이고 예외처리의 가독성이 높아지는 것에 매력을 느껴 해당 방식을 사용하기로 결정하였다. 해당 방식의 사용 방법을 알아보자. DTO에서 @Pattern 사용 @Pattern은 DTO레벨에 정규표현식과 함께 선언해주면 되는데 이를 이용하기 위해서는 아래와 같이 dependency를 추가해야한다. implementation 'org.springframework.boot:spring-boot-starter-validation' 다양한 방면에서..
목표Spring기반의 익명 게시판 서버만들기 과제를 진행했다. 과제를 제출하고 멘토님께서 코드리뷰를 해주셨는데 그 중 DTO에 @AllArgsConstructor보다는 생성자 레벨의 @Builder를 이용하는것을 권장한다는 내용이었다. 이번 글을 통해 Builder가 무엇인지, 왜 @AllArgsConstructor가 아닌 @Builder의 사용을 권장하는지 그 이유에 대해 알아보고자 한다. Builder Pattern누구나 한 번쯤은 객체를 생성하기위해 생성자에 많은 매개변수를 입력하다가 데이터를 잘못 전달했다거나, 객체 필드의 수정이 이루어질때마다 생성자를 변경해 기존 코드를 수정했다거나, 객체 생성을 위해 필요하지 않은 데이터를 억지로 집어넣는 등 객체 생성자와 관련하여 겪은 다양한 경험이 있..