이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. AOP (Aspect-Oriented Programming) 란? AOP는 프로그래밍 개발 사상 중 하나이며, Spring Framework을 구현한 주요한 개념입니다. 저는 이 개념을 애플리케이션 내부의 컴포넌트들에 존재하는 비즈니스 로직이 아닌 보일러 템플릿 코드들을 (저는 개인적으로 인프라 로직이라고 명명하여 부릅니다.) 모아 응집시켜 각각의 컴포넌트로 분리하는 것으로 이해하고 있으며, 개발자들은 이를 활용하여 애플리케이션 서비스에는 비즈니스 로직들만을 남겨 개발 유지보수 경험을 향상시킵니다. 인프라 로직? Application 전 영역에서 나타날 수 있는, 중복될 수 있으며 비즈니스가 아닌 로직을 의미합니다. 성능 검사, F..
제가 학습했던, 추천받거나 추천드리고 싶은 자료들을 정리한 Github Repo입니다. 링크 github.com/Lob-dev/Junior-Back-end-Developer-Concepts 개정 이력 - 2021.04.29 14:01 : 공통, 자바, 객체 지향, 스프링 추가 (서적, 인강, 참고로 구분) - 2021.04.29 14:47 : 내용 보강 (기타) - 2021.04.30 16:07 : 내용 보강 (자바 서적 추가, 스프링 질문 5개 추가) - 2021.05.03 01:58 : 개인적으로 추천하는 학습 흐름 추가 - 2021.05.03 11:30 : 서적 관련 설명 추가, 문서 포맷 변경, Java 면접 질문 강화. SQL, 설계 항목 템플릿 추가 - 2021.05.03 11:30 : 서적 ..
1월 13일에 Notion에 정리했던 내용을 옮겨 적은 것입니다. 잘못된 내용은 댓글 부탁드립니다. 한동안 회사 일로 공부한 걸 게시할 시간이 없네요.. ㅠ CGI? (Common Gateway Interface) HTTP 프로토콜 기반의 웹 서버와 다양한 언어로 구현된 프로그램 간의 데이터를 교환하는 표준 스펙이자 Interface이다. 일종의 Interface, 스펙이기 때문에 여러 언어로 구현이 가능하다 장점 여러 작업에 대한 많은 템플릿 코드들이 많이 존재한다. 표준 스펙을 준수하는 한 모든 언어와 플랫폼에서 작성될 수 있다. 단점 매 요청이 들어올 때마다 프로세스가 생성되고 각각의 CGI 구현체를 통해 동작한다. 메모리를 공유하는 쓰레드에 비해서 프로세스는 각자의 공간을 지니기 때문에 상대적으로..
해당 글은 Notion에 정리되어 있던 Somaeja 프로젝트 관련 정리 글 중 하나입니다. 이번 프로젝트를 진행할 때 Post Service에 Transcation Read only 설정을 적용하게 되었었다. 단순히 read only를 사용하면 read-write 보다 성능이 더 좋다고 들었기 때문이다. 그러지 마... 하지만 해당 설정에 대하여서 DB마다 동작 방식이 다르다고 하여, 많이 사용되는 DB들을 기준으로 조사해보았다. Oracle Read Only 트랜잭션을 이용할 경우 이 트랜잭션이 시작되기 이전에 커밋된 데이터만 접근할 수 있으며, 트랜잭션 실행되는 동안 커밋되는 데이터는 결과에 반영되지 않는다. 해당 트랜잭션 시에 지원하는 DML은 SELECT(조회) 구문뿐이다. → 해당 트랜잭션 내..
해당 글은 02-RESTful-API-예제-Spring-Framework 에서 작성된 프로젝트를 좀 더 REST 하게 변경하는 과정을 간략하게 담은 글입니다. 이러한 과정을 통해 리처드슨 성숙도 모델의 3 level에 가까운 혹은 만족하는 API를 구현할 수 있습니다. ETag란 무엇인가요? (Entity Tag) HTTP Spec의 일부로써 웹 캐시 유효성 검사를 위해 제공하는 메커니즘 중 하나입니다. 이 방식의 특징으로는 클라이언트가 조건에 따른 요청을 할 수 있게끔 한다는 것입니다. 리소스에 대한 특정 버전 혹은 결과에 대해 ETag를 생성하여 요청을 검증하고, 서버 리소스에서 변경이 발생한다면 ETag를 변경하여 검증을 실패하게 합니다. 이는 새로운 리소스 결과를 클라이언트에 전달하며 ETag 값..
해당 글은 MapStruct Library를 실무에서 사용하기 이전에 학습했던 예제와 장, 단점을 옮겨온 글입니다. (2022-10-26 수정 Benchmark 게시물 링크 추가) 현재 저는 약간의 수고로움을 감수하며 Java Code 기반의 Mapping을 사용하고 있으며, 최대한 Model의 단위를 작게 유지하고 있습니다. 최근 어떤 분께서 ModelMapper가 MapStruct에 비해 그렇게 많이 느리냐는 질문을 보내주셔서, BenchMark 자료 링크를 추가하였는데요. 적은 데이터를 처리하는 경우에는 별 차이가 없지만 처리량이 많아질수록 유의미한 차이가 발생함을 확인할 수 있습니다. 자바 코드로 매핑하기 어떠한 라이브러리를 사용하지 않고 직접 객체 상태 간의 매핑 로직을 구현하는 방식은 약간의 ..
Spring DI? Spring DI는 스프링이 내부에 있는 Bean 간의 관계를 관리, 주입할 때 사용하는 기법이다. 스프링 컨테이너를 통해 관리되고 있는 POJO들을 비즈니스 코드에서 필요한 시점에 선택적으로 주입받을 수 있으며 이후 관리는 모두 컨테이너가 담당한다. Singleton Scope Bean DI를 통해 객체 외부에서 생성된 객체(Bean)를 Interface를 통하여 넘겨받게 되므로, 객체 간의 결합도를 낮출 수 있고, 런타임 시에 의존관계가 결정되기 때문에 유연한 구조를 가질 수 있다. 이를 통해 진정한 의미의 컴포넌트화를 가능케한다. DI Annotations @Autowired (AutowiredAnnotationBeanPostProcessor) 우선 빈의 타입을 기준으로 찾아서 ..
Oauth를 사용하는 이유? 사용자의 권한을 인증, 인가하기 위하여 ID와 비밀번호의 직접적인 전달을 하는 것은 탈취될 가능성이 존재한다. 이를 방지하고 안전하게 필요한 정보를 넘겨받기 위해 사용하게 된다. Oauth는 권한 위임을 위해 사용되는 프로토콜이며, 직접적으로 인가를 수행하기보단 요청할 수 있는 흐름과 수단을 제공한다. 웹 또는 모바일에서 개인 정보에 대한 액세스 권한을 요청받은 경우 해당 프로토콜을 사용하였을 것이다. Oauth의 장점 HTTP / HTTPS를 이용해 동작하는 프로토콜이기에 범용적으로 사용할 수 있다. 단순하게 구현할 수 있고, 많은 양의 레퍼런스를 가진다. 스펙이 강제하는 부분이 적고, 선택적으로 제공하거나 자유함으로 필요에 맞게 변경할 수 있는 부분이 많다. Oauth의 ..
제네릭이 나오게 된 이유? 제네릭이 도입되기 이전에는 상황에 따라 각기 다른 데이터를 다루기 위해 최상위 클래스인 Object를 사용하여 코드를 작성하곤 하였다. 그를 통해서 어떠한 데이터라도 받아 저장할 수 있었으나 몇가지 문제가 있었는데. 저장했던 값을 사용해야 할 때 명시적으로 캐스팅을 해서 사용해야 한다. 잘못된 캐스팅을 통한 오류가 발생할 수 있다. (String → Integer 등..) 들어온 타입에 대한 검증하는 로직이 추가로 들어가야한다. ( instanceof 결국 런타임에서 발견 ) 에러의 유무를 컴파일 단계에서 체크할 수 없다. (사전에 방지할 수 없다.) 즉 모호하고 찾기 어려운 잠재적인 오류를 가지게 된다. Reifiable type의 문제점! 이러한 문제를 방지하기 위해서는 컴..
자바 ORM 표준 JPA 프로그래밍 서적을 학습하면서, 정리하고 있는 내용입니다. EntityManagerFactory 사용자의 요청이 들어옴에 따라 EntityManager를 생성하는 책임을 가지고 있다. JPA를 동작시키기 위한 내부 객체들이 이 Factory를 통해 생성되고, 구현체에 따라선 커낵션 풀도 별도로 구성하므로 생성 비용이 크다고 한다. 여러 EntityManagerFactory를 생성하여 공유할 수 있으나. 하나의 객체만 생성해서 전 영역에 공유하는 것이 권장된다. (configuration lite mode를 사용하면 여러 개를 생성하고 공유할 수 있을 것 같다.) EntityManager (Persistence Context) 엔티티 정보를 저장하고 있는 환경. 요청 결과가 DB에 ..
- Total
- Today
- Yesterday
- JPA
- Distributed Cache
- Global Cache
- spring AOP
- 게으른개발자컨퍼런스
- URI
- JVM
- java
- URN
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- Cache Design
- Local Cache
- lambda
- mybatis
- RPC
- AMQP
- rabbitmq
- HTTP
- Switch
- 근황
- Data Locality
- RESTful
- hypermedia
- cglib
- JDK Dynamic Proxy
- spring
- configuration
- THP
- 게으른 개발자 컨퍼런스
- Url
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |