본문 바로가기

분류 전체보기

(62)
StringBuilder 살짝 까보기 (생성자, append) StringBuilder (Buffer도 마찬가지)를 몇번 사용했지만, 어떻게 생긴지에 대해서 생각해본적이 없어서 살짝 까보려고한다. 참고로 jdk는 1.8 StringBuilder는 추상클래스인 AbstractStringBuilder을 상속받고있다. 이름부터만 봐도 StringBuilder에 대해서 정의한 클래스라는게 느껴진다. StringBuilder 생성자 일부분 public StringBuilder() { super(16); } /** * Constructs a string builder with no characters in it and an * initial capacity specified by the {@code capacity} argument. * * @param capacity the..
Spring AOP 주의할 점 (프록시의 주의할 점) Spring에서 aop를 동작할 땐 프록시 방식으로 동작한다. 하지만 이 프록시를 사용할 때 주의할 점이 무엇인가 질문을 받았던 적이 있는데, 대답을 못했다. 그러고보니 나는 업무를 하면서 aop를 사실 잘 안쓰기도 했고, 개인적으로 사용할 때 그런걸 고려해본적이 없는데 그동안 aop를 제대로 활용하지 않아서 그런것이라고 생각된다. 그러면 질문의 답이 무엇일까? 사실 모른다. 하지만 구글링을 조금 해본 결과 스프링에서 aop를 타지 않는 케이스가 생길 수 있는데 아래와 같은 상황이다. 콘솔에 print만 하는 간단한 Service와 aop를 구현했다. PrintTestService @Service public class PrintTestService { @AopTester public void logic..
Spring AOP의 동작 원리 (1) - JDK Dynamic Proxy 이전에 AOP 사용에 대해 정리한 글이 있는데, 생각해보니 정확한 원리에 대해서 알아보지 못한거 같아 정리하려고 한다. Spring에서 AOP는 프록시 방식으로 동작한다. 크게 두가지 프록시 방식이 있는데 1. JDK Dynamic Proxy 2. CGLib 이 중 1번 jdk의 동적 프록시에 대해서 개인적으로 찾아보고 생각한 내용을 정리해본다. 프록시가 뭐시여 프록시는 대리 수행하는 놈이라고 생각한다. 사실 프록시는 다양한 곳에서 널리 쓰이는 개념인데, 그렇다면 Spring에서 프록시는 어떤 것으로 생각해야할까. 이렇다는건 아니지만 느낌을 쉽게 받기위해 프록시 유무에 따라 동작을 비교해 본다. 프록시X 프록시 O Service Proxy는 실제 Service가 아니지만 Service인척 Controll..
Spring Webflux (2) - Insert 이전 글에서 간단하게 Webflux 사용을 위한 R2DBC, Router, Handler에 대해 설정해봤다. 이번엔 CRUD중 Create인 Insert 기능을 먼저 구현하려고 한다. Insert의 목표는 게시글인 Board 추가와 첨부파일을 의미하는 BoardFile도 Insert하는 기능을 구현할 예정이다. Board와 BoardFile은 릴레이션(1:N)으로 테이블을 구성했다. 테스트 - Postman Board Class import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.co..
Mysql 인덱스에 대해서 저장 프로시저 하나를 돌리면서 인덱스의 중요성을 알게된 적이 있다. 그때 인덱스에 대해서 많이 찾아보고 알게된 것들이 많았는데 시간이 지날수록 금방 잊어버려서 다시 공부하는겸 인덱스에 대해서 정리해보려한다. 인덱스란 인덱스에 대해서 검색하면 항상 색인이라는 단어가 나온다. 실제로 색인은 영어로 index로 쓰이고 책에서 내용의 단어나 구절등의 위치가 몇페이지에 있는지 알려주는 정보의 목록인데, 개인적으로 책을 많이 읽지 않아서 그런지 색인이라는 단어가 굉장히 낯설게 느껴진다. 때문에 나처럼 책알못이라 색인이 와닿지 않는다면, 호텔의 x호 ~ x호는 왼쪽 x호 ~ x호 는 오른쪽으로 표시되어있는 화살표를 생각한다면 좀 더 와닿지 않을까 추측해본다. 방 호수를 의미하는 room_num이라는 컬럼에 인덱스를 ..
Spring Webflux (1) - 간단한 시작 논블로킹으로 동작하는 Webflux로 간단한 API 앱을 구현하고싶어서 시작했다. webflux 기초 지식이 많이 부족한 내가 쌓아가는 과정을 기록하려고 한다. IDE : eclipse JDK : 1.8 프로젝트 생성 Spring boot에 Gradle로 설정한 후 Next 간단하게 Reactive Web만 체크하고 생성 자바 라이브러리가 안되어있다면 Build Path에서 add library 해주자 gradle plugins { id 'org.springframework.boot' version '2.6.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } group = 'com.zero' versio..
HTTPS 동작 과정 이 글은 HTTPS 원리에 대해서 여러 글을 보고 이슈에 대해 추측해서 정리한 주관적인 글이다. 때문에 잘못된 정보가 있을 수 있다. HTTPS란 HTTPS는 Hyper Text Transfer Protocol을 의미하는 HTTP에 Over Secure Socket Layer가 추가된 프로토콜을 말한다. 즉, 통신할때 보안이 적용된 계층(Layer)위에 HTTP가 동작하는 프로토콜을 의미한다. 보안 계층은 SSL(Secure Socket Layer)과 TLS(Transport Layer Security)를 의미하는데 SSL은 넷스케이프에 의해 개발되어 넓게 사용되다가 관리 기구가 바뀐이후로 TLS로 이름이 바뀌었기 때문에 원리를 이해하는데 있어서는 SSL과 TLS를 같은 개념으로 인지해도 무방하다. SS..
Spring 캐시 추상화 (Cache Abstraction) 간단하게 적용해보기 개인 프로젝트를 진행하면서 페이지의 공통 부분에 필요한 데이터를 aop로 적용한 부분이 있다. 때문에 자주 바뀌지 않는 데이터지만 지속적으로 실행되는 메서드가 존재했는데 결과 데이터를 캐시에 저장하면 좋을 것 같아서 찾다보니 캐시 추상화(Cache Abstraction)를 지원하는것을 알게 되었다. 그리고 기존에 redis를 세션 클러스터링으로만 사용하고 있었는데 아깝다고 생각하던 찰나였기 때문에 마침 잘된 것같다. Spring Framework에서는 3.1버전부터 투명하게 캐싱기능을 적용하는 캐싱 추상화를 제공했다고 한다. 이는 트랜잭션 처리 처럼 쉽게 적용이 가능하고 4.1 버전에서 크게 확장되었다고 한다. @transactional로 편리하게 트랜잭션 처리를 하는 것 처럼, 캐싱 관련 어노테이션으로..