[이펙티브 자바] 1. 생성자 대신 정적 팩터리 메서드를 고려하라

생성자 대신 정적 팩토리 메서드를 고려하라 클라이언트가 클래스 인스턴스를 얻는 방법에는 전통적인 방법 중 하나는 public이다. 하지만 정적 팩터리 메서드(static factory method)도 꼭 알아두어야한다. 1. 정적 팩터리 메서드란? 그렇다면 정적 팩터리 메서드는 무엇일까? 간단히 말해 객체 생성의 역할을 하는 클래스 메서드로, static 메서드를 통해 인스턴스를 생성하는 것이다. 다음은 java의 기본 Boolean 클래스 내 정적 팩토리 메서드의 간단한 예시이다. 이팩티브 자바에서는 정적 팩토리 메서드를 사용할 시의 5가지 장점과 2가지 단점에 대해 서술하고 있어 자세한 비교를 통해 하나하나 알아보려 한다. ...

2024-01-18 · 6 분 · Jun Kang

[Spring] Java 21 외장 톰캣 버전 설정

1. 문제 상황 Java21 버전 업 중, 인텔리제이 내장 톰캣으로는 정상적으로 실행되지만, 커스텀 옵션을 사용 중인 외장톰캣을 그대로 사용 시 정상적으로 구동되지 않는 현상이 발견되었다. 2. 해결 먼저, 빌드 및 path 등 기존 설정들은 문제가 없는 것을 확인하였고, 로컬 톰캣에서 정상적으로 구동됨을 확인하였기에 다른 부분을 추가로 확인해 보았다. 버전업 영향도 파악기간 중 기존에 톰캣 8.5 버전과 호환되는 것을 확인하였으나, 공식 홈페이지에서 재확인해보았다. 톰캣 8.5 버전의 자바 지원버전을 보면 "7 and later"로 되어있어 7 이후 버전을 다 사용 가능한 것으로 이해했었으나, 다른 버전을 시도. ...

2023-12-18 · 2 분 · Jun Kang

[Spring] Spring Security6 filterchain 사용시 jsp 뷰 렌더링 설정

1. 현상 스프링부트 3.*.* 버전 업을 하며 Spring Security6으로 업데이트 중이다. 더 이상 지원하지 않는 WebSecurityConfigurerAdapter를 SecurityFilterChain으로 변경 시 포워딩되는 jsp 파일 경로가 필터에 걸려 노출되지 않는 현상이 발생하였다. 1-1. 기존 샘플 소스 @Configuration public class SecurityConfig { @Bean public SecurityFilterChain config(HttpSecurity http) throws Exception { http.authorizeHttpRequests((auth) -> auth .requestMatchers("/").permitAll() .anyRequest().authenticated() ); } 기존과 같이 “/” 경로에 대한 권한을 부여하였지만, jsp 경로에 대한 권한부족으로 페이지 접근에 실패하였다. 2. 원인 Spring Security 5.8 and earlier only perform authorization once per request. This means that dispatcher types like FORWARD and INCLUDE that run after REQUEST are not secured by default. Spring Security6 에서 페이지 전환 시 forwards, includes의 타입의 요청이 security filter에 기본적으로 포함되게 변경되었다. ...

2023-12-18 · 1 분 · Jun Kang

[Elastic Search] Elastic Search란? Elastic Search의 개념 및 장단점

1. Elastic Search란? Apache Lucene에 구축되어 배포된 검색 및 분석 엔진이다. 현재 검색엔진을 넘어 보안, 로그분석, Full-text 분석 등 다양한 영역에서 사용되며, Kibana, Logstash, Beats들과 함께 사용된다. 오픈 소스 프로젝트로 활발히 개발되고 있으며, 유닉스, 자바의 기초지식 필요하다. Apache Lucene의 한계를 보완하기 위한 새로운 검색엔진 프로젝트로 시작되었고 Logstash, Kibana와 함께 사용되어 ELK Stack (ES, Logstash, Kibana)라고 불렸으나 2013년 Logstash, Kibana 프로젝트 정식 흡수되었다. 2. Elastic Stack이란? ES, Logstash, Kibana를 묶은 ELK 서비스이다. 5.0.0 버전부터 Beats를 포함하며 Elastic Stack 이란 이름으로 서비스가 제공되고 있다. 서버로부터 모든 유형의 데이터를 가져와 실시간 검색, 분석, 시각화를 도와주는 Elastic 오픈 소스 서비스 제품이다. ...

2023-12-08 · 3 분 · Jun Kang

[WEB] SSR(Server Side Rendering) 과 CSR(Client Side Rendering)의 개념 및 차이

1. SSR (Server Side Rendering) 서버에서 렌더링 준비를 마친 상태로 클라이언트에 자원을 전달한다. 1-1. SSR 작동 방식 유저가 웹사이트 자원을 요청 서버에서 “렌더링 가능한” HTML 파일 생성 (리소스 체크, 컴파일 후 완성된 HTML 콘텐츠 생성) 브라우저는 즉시 HTML 렌더링, 사이트 조작 불가 상태 클라이언트가 자바스크립트를 다운받는다. 다운로드하여지고 있는 사이 콘텐츠는 볼 수 있지만 조작은 불가, 이 기간 동안 유저의 액션을 기억 브라우저가 자바스크립트 프레임워크를 실행 자바스크립트가 컴파일된 후 기억하고 있던 유저 액션을 실행시킨다. 서버에서 렌더링 가능한 상태로 이미 전달되기에 자바스크립트를 받는 동안 특정 자원을 볼 수 있다. 1-2. SSR 장점 초기 페이지의 로딩속도가 빠르다. 서버에서 컴파일되어 클라이언트로 넘어오기에 클롤러 대응에 용이하여 SEO 친화적이다. 클라이언트 하드웨어 및 소프트웨어 성능에 영향을 덜 받는다. 1-3. SSR 선택 기준 네트워크가 느릴 때 (페이지마다 나눠서 불러오기 때문) 검색엔진 최적화가 필요할 때 최초 로딩이 빨라야 할 때 메인 스크립트가 크고 로딩이 느릴 때 웹사이트 상호작용이 별로 없을 때 2. CSR (Client Side Rendering) 렌더링이 클라이언트에서 일어난다. 서버에선 HTML과 JS를 보내고, 클라이언트에서 렌더링을 시작한다. 모든 로직, 데이터, 템플릿, 라우팅은 클라이언트에서 실행된다. 자바스크립트 번들 크기의 영향을 많이 받기에 코드 분할을 고려해야 하며, 적시 적소에 필요한 기능만을 제공해야 한다. ...

2023-11-28 · 2 분 · Jun Kang