점층적 생성자 패턴? 개발을 하다 보면 특정 클래스의 상태, 선택적인 매개변수가 많아질수록 점층적인 모양의 생성자들이 만들어지게 되는 경우가 있습니다. 그렇기에 코드에서 필수적인 매개변수 생성자부터 선택적인 변수 1.... N개 생성자까지 5개 이상의 생성자를 보게 될 수도 있습니다. public Sample(Long id, String name) { //... } public Sample(Long id, String name, Int age) { //... } public Sample(Long id, String name, Int age, String profile) { //... } // ~~~ public Sample(Long id, String name, Int age, String profile..
일반적으로 Class의 Instance를 생성하는 방법은 public Constructor를 사용하지만, 그와 별도로 Static factory method를 사용할 수 있습니다. 이러한 메서드는 instance를 반환하는 단순한 형태나 별도 로직을 포함하는 형태를 지니게 됩니다. Effective Java에서는 이를 통해 여러 장점과 단점이 존재한다고 하는데. 하나하나 정리해보았습니다. 1. Class를 생성하는 행위, 특성에 대해 이름을 부여할 수 있다. 객체의 Constructor 그 자체와 넘기는 Parameter 만으로는 해당 객체의 특성이나 의미를 자세히 알아내기가 어렵고 이를 이해하기 위해 API 문서를 더 확인해야 할 수 있습니다. 이때 Static factory method의 Naming..
이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. 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 : 서적 ..
회사에서 발표한 개인 발표 자료를 옮긴 글입니다. GC 기본 개념 GC는 무엇일까? GC란 Garbage를 모으는 작업 방식 혹은 작업을 진행하는 모듈들을 의미하는 용어로 이때 Garbage란 애플리케이션에서 사용되지 않는 Object를 의미합니다. Garbage의 여부는 Root Set 즉 접근 가능한 메모리를 통한 참조 관계로 판단하게 됩니다. GC 수행 목적은 한정된 메모리 공간을 계속해서 정리함으로써 공간을 재활용하고 새로운 객체를 할당받기 위함입니다. GC가 있거나, 없거나..? 차이가 무엇일까? + 2023-12-21 : Un-managed language와 Managed language의 유무는 GC로 결정되는 것이 아닌, 중간 언어 (특정 런타임에게 해석되는 바이트 코드 등의 CIL을 의미..
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 자료 링크를 추가하였는데요. 적은 데이터를 처리하는 경우에는 별 차이가 없지만 처리량이 많아질수록 유의미한 차이가 발생함을 확인할 수 있습니다. 자바 코드로 매핑하기 어떠한 라이브러리를 사용하지 않고 직접 객체 상태 간의 매핑 로직을 구현하는 방식은 약간의 ..
글의 시작 프로그래밍 학습을 시작한 지는 6개월 정도 블로그를 시작한 지는 4개월이 되었다. 일반적인 국비 교육 기간과 비슷한 시간을 공부해왔는데 독학과 멘토링을 통해 학원 수료생들보다 더 많은 것을 학습하였는지 성찰하는 시간을 가져보았다. 개발은 (다른 직업도 그렇겠지만) 평생 학습하여야 하는 것인데, 회사를 다니며, 공부를 지속할 수 있는 다른 방법도 계속해서 고민해보아야겠다. 1만 시간의 법칙은 학원을 다니는 시간, 업무를 진행하는 시간을 제외하고 "본인이 노력, 투자한 시간을 이야기하는 것"이라고 생각한다. 이력서는 지속적으로 개선 중이며, 현재는 따로 관리하고 있다 2020년 회고록을 쓴 이후 있었던 일 2020년 12월 31일 이후에 생각보다 많은 일이 있었다. Somaeja Project (..
- Total
- Today
- Yesterday
- JDK Dynamic Proxy
- mybatis
- configuration
- WiredTiger
- 근황
- Switch
- JVM
- Thundering Herd
- 게으른개발자컨퍼런스
- rabbitmq
- URI
- cache stampede
- 한국 스프링 사용자 모임
- URN
- RESTful
- Url
- RPC
- 커뮤니티 오거나이저
- lambda
- Request Collapsing
- Optimistic Locking
- java
- spring
- spring AOP
- transaction
- HTTP
- JPA
- cglib
- AMQP
- Redis Key
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |