본문 바로가기

전체 글117

[백준] 주유소 - 13305 Java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { /** * 주유소 * 주유소 마다 리터강 가격이 주어지며 주유소 사이에 거리가 주어진다. * 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. * 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수로 주어진다. * 다음 줄에는 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수로 주어진다. * 제일 왼쪽 도시부터 제일 오른쪽 도시까지의 거리는 1이상 1.. 2024. 4. 8.
요즘 블로그 포스팅이 뜸한 이유 학교에서 캡스톤 프로젝트를 진행하며 코드 구현을 하다보니 블로그 포스팅이 늦어지고 있다. 프로젝트를 진행하며 트러블 슈팅/적용해본 서비스 구조/새롭게 얻는 정보가 여러가지 있지만 포스팅을 못하고 있다. 간단하게 나열하자면 OpenFeign과 Spring Cloud Gateway간의 순환 참조 오류 OpenFeign과 Spring Cloud Gateway간의 순환 참조 오류 🐞 버그 설명 OpenFeign과 Spring Cloud Gateway를 함께 사용했을 때 Bean 순환 참조가 오류가 발생했습니다. 로그를 보니 FeignClient와 Gateway Router 부분에서 해당 문제가 발생한 것 같습니다.(로그 참고) 처 hdbstn3055.tistory.com 서비스가 여러 레포지터리에 의존 방법과 .. 2024. 4. 8.
[Design Pattern] 팩토리 패턴 이번 포스팅으로 알아볼 디자인 패턴은 팩토리 패턴이다. 설명하기에 앞서 팩토리 패턴에 관하여 간단하게 설명하자면 공통된 종류를 갖는 객체들의 구현을 몰라도 팩토리 패턴을 통해 쉽게 생성하는 것을 말한다. 그렇다면 본격적으로 코드와 함께 알아보자. DB 클래스들과 함께 팩토리 패턴에 접근하려 한다. DIP(의존성 역전 원칙)에 의거하여 DB 인터페이스와 MariaDB, OracleDB를 생성해보자. DB public interface DB { public int execute(String sql); public void setUrl(String url); } MariaDB public class MariaDB implements DB { private String url; // 쿼리 실행 메서드 publi.. 2024. 4. 4.
OpenFeign과 Spring Cloud Gateway간의 순환 참조 오류 🐞 버그 설명 OpenFeign과 Spring Cloud Gateway를 함께 사용했을 때 Bean 순환 참조가 오류가 발생했습니다. 로그를 보니 FeignClient와 Gateway Router 부분에서 해당 문제가 발생한 것 같습니다.(로그 참고) 처음엔 그냥 의존성 주입 코드에 문제가 있는 줄 알았으나 코드상의 문제는 없었습니다. Gateway가 아닌 일반 서비스에서는 OpenFeign 사용에 문제가 없었으며 관련 설정에도 문제가 없었습니다. 또한, OpenFeign과 설정에서 같은 user-service 키워드를 사용하기에 해당 부분을 수정하였음에도 해결되지 않았습니다. AuthFeignClient 인터페이스 @FeignClient(name = "auth-service") @Qualifier("A.. 2024. 4. 3.
[Design Pattern] 데코레이터 패턴 이번 포스팅 할 디자인 패턴은 데코레이터 패턴이다. 데코레이터는 말 그대로 장식하는 것이다. A, B, C 클래스가 있을 때 A -> B(A) -> C(B(A)) 이런식으로 장식해나갈 수 있는 패턴 또는 구조를 만드는 것을 데코레이터 패턴이라고 한다. 데코레이터 패턴을 사용하면 상속으로 복잡하고 중복된 코드를 만드는 것이 아니라 전략 패턴과 연계되어 좀 더 활용도 높은 구조를 만들 수 있다. 코드로 한 번 알아보자. 코드 구성 의존성 역전 원칙을 위한 Notifier 인터페이스 Notifier public interface Notifier { void send(); } BasicNotifier // 래퍼가 없는 데코레이터 // 이 클래스가 있어야 마무리 됨 public class BasicNotifier.. 2024. 4. 1.
[Java] 자바 구성 자바 구성 운영체제는 자바 프로그램을 바로 실행할 수 없다. 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문이다. 따라서, 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이것이 자바 가상 기계(JVM: Java Virtual Machine)이다. JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 한다. 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제별로 자바 프로그램을 별도로 개발하는 것보다는 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것이다. 따라서, 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다. 바이트 코드.. 2024. 3. 31.
[QueryDSL] QueryDSL이란? QueryDSL이란? 우선, DSL은 Domain Specific Language의 줄임말이다. 뜻은 특정 영역에 특화된 언어이다. 그렇기 때문에 QueryDSL은 쿼리 생성에 특화된 프레임워크이다. 우리가 QueryDSL를 사용하면 좋은 점이 무엇이 있을까? 그것에 관한 설명을 하기 전에 JPA와 JPQL에 관한 문제점에 대해 잠깐 알아보자. JPA JPA는 객체지향 어플리케이션과 RDBMS 사이의 패러다임 불일치를 해결해주는 역할을 하는 프레임워크이다. JPA 덕분에 우리는 객체지향 관점으로 개발할 수 있게 되고 JPA 프레임워크는 자동으로 SQL 쿼리문을 생성해준다. SQL문이 JPA에 의해 자동으로 생성되기에 개발자는 SQL 관점에서 프로그래밍을 하지 않아도 된다. 하지만, 그렇다하더라도 완전한 .. 2024. 3. 30.
2024-03-29 교내 프로젝트를 진행중에 있다. OpenFeign, S3 등 다양한 환경설정을 구현했고 서비스의 CRUD를 구현함에 있어서 단방향, 양방향 설계를 고민중에 있다. 양방향은 데이터 뻥튀기 등 다양한 문제가 있어 단방향 설계가 좋긴 하지만, 여러 조회 쿼리에 있어서 양방향으로 구현했을 때 조회하는것이 간편하기에 고민중이다. 2024. 3. 29.