본문 바로가기

Java

(10)
MSA MSA하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 개발서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐를 통해 이루어진다.모놀리틱 아키텍처하나의 큰 코드베이스로 구성된 애플리케이션모든 기능이 하나의 애플리케이션 내에 포함Spring CloudMSA 개발을 위한 도구와 서비스를 제공하는 스프링 프레임워크의 확장주요 기능서비스 등록 및 디스커버리 : Eureka로드 밸런싱 : Ribbon서킷 브레이커 : Hystrix, Reslilence4jAPI 게이트웨이 : Zuul, Spring Cloud Gateway구성 관리 : Spring Cloud Config분산 추적 : Zipkin메시징 : Spring Cloud StreamEureka*..
오류 정리 Cannot find a Java installation on your machineGradle 툴체인 설정 오류그레들이 내 컴퓨터에서 프로젝트에 설정된 자바 17버전을 찾지 못했다.원인JDK 21을 설치하고 17로 생성build.gradle 파일에는 자바 17로 생성한다고 명시Gradle은 설정을 보고 프로젝트 빌드를 위한 컴퓨터에 설치된 Java 17 JDK를 찾는다그러나 컴퓨터는 JDK 21만 찾고 JDK 17을 찾지 못해서 발생한 에러해결방법Gradle이 JDK자동으로 다운로드하게 설정java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}Cannot resolve property 'withUserEntityGr..
AOP AOP관점 지향 프로그래밍횡단 관심사를 관점(Aspect) 이라는 기준으로 바라보고 이를 별도의 모듈로 분리하여 프로그래밍하는 패러다임공통 기능(관심사)을 효과적으로 분리하여 관리하는 기술왜 AOP를 사용해야 하는가?복잡하게 얽혀있는 코드 속에서 공통된 기능을 깔끔하게 분리하여 가독성과 유지보수성을 높이는 기술흩어지고 얽혀 있는 코드애플리케이션을 개발하다보면, 여러 비즈니스 로직에서 반복적으로 나타나는 부가요소들이 있다.로깅, 트랜잭션 관리, 보안 검증 = 횡단 관심사AOP가 없다면@Servicepublic class UserService { public User findUser(Long id) { // --- 횡단 관심사 (로깅) --- log.info("findUser ..
N + 1 N + 1연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터 개수(N)개 만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상findAll 메서드글로벌 패치 전략을 즉시로딩으로 설정 후 findAll메서드 실행 시N + 1 문제 발생findAll은 select u from User u라는 JPQL 구문을 생성해서 실행하기 때문JPQL은 글로벌 패치 전략을 고려하지 않고 쿼리 실행모든 User를 조회하는 쿼리 실행 후 즉시 로딩 설정을 보고 연관관계 엔티티를 모두 조회N + 1 해결법fetch join연관관계 있는 엔티티를 한번에 즉시로딩하는 구문@Query("select distinct p from Post p join fetch p.comments")List findWithPagination(Pagea..
Interceptor Spring boot에서 Interceptor는 요청을 처리하기 전과 후에 실행되는 코드컨트롤러에 도달하기 전과 후에 사용자 지정 작업을 수행할 수 있다.Interceptor은 로깅, 인증, 인가, 데이터 변환 등의 공통 작업을 수행하는데 사용Interceptor 구현org.springframework.web.servlet.HandlerInterceptor이 인터페이스에는 세 가지 메서드가 존재preHandle() : 컨트롤러가 실행되기 전에 호출되는 메서드postHandle() : 컨트롤러가 실행 후 호출되지만, View가 렌더링되기 전에 호출되는 메서드afterCompletion() : 뷰 렌더링이 완료된 후 호출되는 메서드Filter과 차이점Filter은 DispatchServlet 처리 전과 후에..
Spring 정리 기본 지식 정리서버란 무엇인가?Client와 serverClient : 브라우저에서 서버에 정보를 요청하는 과정사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요하다(IP, Port)웹 서버란?웹 서버의 소프트웨어, website 컴포넌트 파일을 저장하는 컴퓨터웹 사용자가 어떻게 호스트 파일에 접근하는지 관리RESTURL을 사용하여 리소스 식별 수행HTTP 메서드 (GET, POST, PUT 등) 을 적절하게 사용하는가? (restful)HTTP데이터를 주고받는 양식을 정의한 통신 규약Method : GET, POST, DELETE 등Header : GET naver.com HTTP/1.1Payload : 실제 데이터 html, json GET은 Payload가 없다DTO데이터 전송 및 이..
자바 계산기 구현 학습목표자바 문법 공부git 활용법요구사항 분석입력받는 문자열에 따라 (사칙연산), (원의 넓이)를 계산한다사칙 연산 계산기는 실수를 포함하여 계산 가능 해야한다.(remove) 입력을 받을 시 가장 먼저 계산된 결과값을 삭제하는 기능이 필요하다.(inquiry) 입력을 받을 시 저장된 결과값을 보여주는 기능이 필요하다.(exit) 입력을 받을 시 프로그램 종료 다른 입력을 받는다면 처음으로 돌아가서 기능 수행프로그래밍 요구사항Scanner 사용JCF 사용forEach 사용접근제어자 설정(캡슐화) getter, setter 구현static, final 사용 (상수)추상클래스, 인터페이스 사용메서드 책임 분리(SRP)enum 사용 - 사칙연산에 추가제네릭 사용람다&스트림 사용오류&해결오류intellij 터..
추상화와 상속 추상화중요한 것이나 특징점을 잡아 설명한 것불필요한 것들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것OOP의 추상화객체의 관련 속성만 표시 : 데이터 추상화불필요한 정보를 숨긴다 : 제어 추상화제어 추상화메소드의 작동 방식과 같은 내부 로직을 숨긴다. 내부 동작을 몰라도 사용하고 싶은 메소드를 쓰면 된다. 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축데이터 추상화대상을 간단한 개념으로 일반화 객체들의 공통점을 묶어 이름을 붙이는 것상속추상화된 개념들을 서로 연관 관계로 만드는 것상위 클래스의 속성과 기능을 재사용하여 하위 클래스가 물려받는 것중복 속성 제거코드 재사용성 증대추상 클래스구체적이지 않은 추상적인 데이터를 담고 있는 클래스추상클래스 안의 메서드를 ..