자바 서버구동
class, extends
매개변수, this
static
생성자, super()
자바 오버로딩 이란?
인터페이스
자바 8이상부터는 default method 와 static method 를 정의할수있다. 인터페이스 안에서 default 메서드와 staic 메서드를 사용한 예제를 보여주면 예시) Main 인터페이스 구현 클래스 출력 값)
enum
예외처리, try-catch-finally , throws
String, StringBuilder
스태틱, 인스턴스
제네릭
동일성, 동등성
test 를 하거나 검색을 하는등 다양하게 사용할 수 있는 find가 있다. 기본적으론 findAll, findById와 같은 메서드드를 제공하지만 인터페이스 레포지토리를 통해 간단하게 만들 수 있다. 이제 하나의 객체를 생성해서 해당 메서드를 사용해서 조회할 수 있다. DI에 의해 스프링이 자동으로 QuestionRepository 객체를 생성한다....
타임리프의 문법들
1. entity 에는 가급적 Setter 사용 하지 않기. Setter가 모두 열려있으면 어디서 변경 되었는지 추적하기 힘들기때문에 유지보수가 어렵다. 2. 모든 연관관계는 지연로딩으로 설정하기. 먼저 지연로딩, 즉시로딩 을 알아보기전에 프록시에 대해 알아보자. 프록시(Proxy)란? 쉽게 말하면 가짜 엔티티이다. 엔티티를 실제 사용하는 시점까지 DB...
Spring Security 점프투 스프링부트에서도 사용하는 것과같이 다른 대부분의 시스템에서도 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 합니다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능을 제공하고 있는데, 이번에는 Sprin...
spring boot ) open api 활용하기
QueryDsl
config server, config client
Spring Batch
setting 크롬 드라이버 설치 이곳에서크롬 드라이버를 설치 를 한다. 내 크롬버전은 114 이므로 114 로 설치 local 환경 에서는 m1 을사용하기 때문에 mac, 같이작업하는사람들을 위해 window, 배포환경에서의 linux를 설치했다. 그 후에 루트 디렉토리에서 drivers 디렉토리를 만들고 관리 디펜던시 추가 build.gradl...
Record란? jdk 14에 등장하여 16부터 정식스펙으로 포함되었다. 사실상 많이쓰는 8, 11, 17 과 같은 lts 에선 17에서 처음 사용 되기때문에 깊이있는 자료는 찾기 힘들었습니다. 대략적인 설명으론 생성자, get, tostring, equals 와 같은 것들을 기본으로 제공해줍니다. 따라서 불변객체, DTO 와 에서 사용하면 좋을것 같아 ...
2번의 프로젝트에서 둘다 Spring batch 를 사용했습니다. 첫번째 프로젝트에선 Tasklet 으로만 진행했지만 과연 성능의 차이가 있을까? 라는 생각을 갖게 되었고 두번째에선 Tasklet으로 먼저 구현하는데 시간이 얼마 걸리지 않아서 chunk processing 과 비교해보기로 했습니다. 절대 절대적인 지표가아니고 제가 만든 로직 차이일 수...
이어서... Spring Cloud Gateway 로 연결 후에 RestTemplate 를 사용하여 받아와도 되지만 하나하나 파싱해줘야 하는 번거로움을 개선 시켜줄 Feign 을 사용해 보기로했다. 원래 Spring cloud 환경을 위해 만들어진 라이브러리인만큼 한번쯤은 사용해 봐야겠다고 생각했는데 막상 써보니 엄청 편했다. build.gradle F...
멀티 스테이지 빌드란 여러번 빌드를 거쳐 도커 이미지의 용량을 최소화 하는 것이라 생각하면 편할 것같다. 만약 여러가지가 필요할때 그때그때 전부 넣으면 docker image 용량이 계속 커지게 된다. java 기준 최소 500mb 부터 기가 단위가 넘 을 수도 있다. 직접 infra 를 구축하고 개발을 진행하는 입장에선 이러한 용량 하나하나 최적화 시켜...
CircuitBreaker 란? 먼저 Circuit Breaker 란 회로차단을 뜻하는데 회로 차단기의 개념은 호출이 실패하거나 시간 초과될 수 있다고 알려진 경우 마이크로 서비스에 대한 호출을 방지하는 것입니다. 이는 클라이언트가 실패할 가능성이 있는 요청을 처리하는 데 소중한 리소스를 낭비하지 않도록 하기 위한 것입니다. 이 개념을 사용하면 서버에 복구...
개요 MSA를 하다보니 Resource server, Authorization Server, API Gateway에서의 보안설정, OAUTH2, JWT 등 알아야 할 것이 많다고 느꼈습니다. 물론 모놀리식에서 설정도 해봤고 jwt, 소셜로그인 기능 또한 구현을 했지만 MSA 에서 구현을 할때는 이러한 설정들이 나누어지게 되고 인증을 어느 서버에서 할지 ...
개요 프로젝트 중 Query dsl 을 사용하는데 오히려 Native query 보다 가독성이 떨어지고 코드길이가 길어진다는 생각이 들었습니다. 그래서 어떻게 하면 Query Dsl 의 가독성을 향상시키게 리팩토링을 할 수있을까 하며 QueryDsl 기존의 가독성이 떨어지는 코드를 글 처럼 읽을 수 있도록 리팩토링 하는 과정입니다. 조회를 어떻게하면 더 ...
개요 GoodJob 프로젝트에서도 사용해봤지만 사용법이 어렵지않고 프롬프트만 작성한다면 높은 퍼포먼스를 보여주고 유연하게 사용가능 한 api 입니다. 사용자 정보(신장, 체중, 나이, 성별,활동량 등..)에 따른 유연한 정보가 필요했습니다. 물론 bmi 로 계산하는 방법 등 여러가지가 있지만 이러한 단순 계산 정보는 gpt를 활용한다면 다른 서비스에도 적용...
들어가기 앞서 저는 실제로 배포를 해보며 사용자 입장에서 기능을 생각해보고, 피드백을 받아보면서 기능을 추가하는 것 뿐만아니라 성능적인 부분도 향상시키고 싶다는 생각이 들었고 성능의 지표를 확인하기 위해 jmeter, k6 와 같은 성능 테스트 도구를 활용하기로 하였습니다. 측정 하기위한 지표는 다음과 같습니다. 응답시간 속도 성공률 TPS 코드를 짤때 ...
왜 코틀린인가? 저는 Python (알고리즘) -> Java 를 거치며 학습했습니다. 파이썬은 간단한 알고리즘을 풀정도로 학습을 하였고 프로젝트나 개발을 Java로 시작하며 Java에 대해서 공부를하는데 Webflux같은 Reactive 프로그래밍을 하면서 주위에서 Kotlin이 좋다.. 코루틴을 써야한다 이런말을 정말 많이 들었습니다. 물론 저는 Java...
개요 회사에서 코드를 보며 든 생각이 Hexagonal 아키텍처에 Adapter와 Service중 Transaction 의 위치를 어디에 하는게 더 좋을까 라는 생각이 들었는데 물론 어느게 맞고 틀리다가 아닌 해당 비즈니스 로직에 맞춰 작성하는것이 맞다고 생각하지만 흔히 말하는 best practice가 궁금했고 Transaction을 어떻게 관리해야 내...
➢Overview JDK21 의 등장으로 인해 Java 에서도 경량 thread 인 virtual thread 가 등장하였습니다. 기존의 Kotlin 의 coroutine 과 어떤 차이가 있는지 확인해보며 JVM 기반의 프로젝트의 방향성에 대한 저의 생각을 공유하고자 합니다. 먼저 virtual thread 와 비교하기전 코루틴과 비동기 처리에 대해 알아...
Test Description 양방향 connection 이 open 된 이후 spring boot(mvc) application 에서 sticky session 을 3가지 방법으로 벤치마크 테스트를 진행하고자 합니다. 테스트 환경 Kotlin (JDK 17) 1.8.21 spring boot 3.1.4, mvc 서버 2대 A → B client 는...